`du -s .` và` du -hs .` cho kết quả khác nhau (trên OS X)


12

Sự khác biệt có và không -hnên chỉ là các đơn vị con người có thể đọc được, phải không?

Rõ ràng là không ...

$ du -s .
74216696    .
$ du -hs .
 35G    .

Hoặc có thể tôi đã nhầm và kết quả du -s .là không có trong KB?


3
Hãy thử sử dụng du --block-size=1024 -s .. Có lẽ bạn BLOCK_SIZEđược đặt thành512
Echoes_86

6
Từ trang hướng dẫn (OSX): "Nếu BLOCKSIZE không được đặt và tùy chọn -k không được chỉ định, số khối sẽ được hiển thị trong các khối 512 byte"
user4556274

Điều này không hữu ích lắm nếu hệ thống tập tin thực sự ở dạng khối 4096 byte.
DopeGhoti

Vì vậy, không có cách nào để có kích thước tính bằng byte? Tôi nghĩ rằng -hchỉ cần chia cho 1024 và thêm một số đơn vị
Creak

2
echo "74216696*512" | bcđầu ra, 37998948352. Và vâng, -hchuyển đổi thành dạng có thể đọc được bằng cách chia nhiều lần cho 1024. Cái tôi nhận được là 35.3887, rất gần với dubáo cáo. Đối với kích thước tính bằng byte, chỉ cần sử dụng --block-size=1. Trên Linux, có -btùy chọn cho điều đó, nhưng tôi không quen với OS Xdu
Sergiy Kolodyazhnyy

Câu trả lời:


23

dukhông có bộ xác định định dạng đầu ra sẽ cho phép sử dụng đĩa theo khối 512 byte, không phải kilobyte . Bạn có thể sử dụng tùy chọn -kđể hiển thị theo kilobyte thay thế. Trên OS X (hoặc macOS, hoặc MacOS hoặc Macos; tùy theo bạn muốn), bạn có thể tùy chỉnh đơn vị mặc định bằng cách đặt biến môi trường BLOCKSIZE(điều này cũng ảnh hưởng đến các lệnh khác).


1
Bạn không biết rằng ... Điều gì thú vị khi có số lượng khối? Tôi chưa bao giờ thấy một người sử dụng các khối khi nói về kích thước trên đĩa ...
Creak

2
Các khối là đơn vị nguyên tử của các hệ thống tập tin. Bất kỳ tập tin sẽ tiêu thụ toàn bộ số khối trên đĩa. Một khối chỉ có thể được lấp đầy một phần với dữ liệu thực tế, nhưng toàn bộ khối được phân bổ cho tệp. Việc sử dụng hàng ngày của hầu hết mọi người không quan tâm đến các khối khác hơn là theo tỷ lệ phần trăm được sử dụng so với miễn phí. Nhưng các tiện ích cấp thấp (ví dụ fdisk, dfdu) hoạt động theo khối trừ khi được chỉ dẫn khác bởi vì đó là đơn vị mà chúng được tính bên trong.
DopeGhoti

1
@Creak Thật ra, phần đó của câu trả lời là sai. Đơn vị không phải là kích thước khối của hệ thống tập tin. Đối với các mục đích của các lệnh Unix cổ điển, chẳng hạn như du, khối block có nghĩa là 512 byte. Xem kích thước khối tệp - sự khác biệt giữa stat và ls , Sự khác biệt giữa kích thước khối và kích thước cụm
Gilles 'SO- ngừng trở nên xấu xa'

3
"Bất kỳ tệp nào cũng sẽ tiêu thụ toàn bộ số khối trên đĩa." Chà, nói chung là có, trừ khi hệ thống tập tin của bạn sử dụng đóng gói đuôi . Nhưng vâng, các khối là đơn vị cơ bản của hệ thống tệp (mặc dù kích thước khối thực tế không nhất thiết phải phù hợp với kích thước khối được sử dụng bởi du.) :)
Wildcard

3

Vấn đề là dutrả về kích thước theo số khối 512 byte.

Để có kích thước tính bằng KB, bạn có thể sử dụng -ktùy chọn sử dụng các khối 1024 byte thay thế:

$ du -ks .                            
43351596    .
$ du -khs .
 41G    .
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.