Sự khác biệt giữa du -h và ls -lh là gì?


31

Tôi đang gặp khó khăn trong việc nắm bắt cách chính xác để đọc kích thước của các tệp vì mỗi lệnh cung cấp cho bạn các kết quả khác nhau. Tôi cũng bắt gặp một bài đăng tại http://forums.devshed.com/linux-help-33/du-and-ls-generating-inconsistent-file-sizes-42169.html trong đó nêu rõ như sau;

du cung cấp cho bạn kích thước của tệp khi nó nằm trên hệ thống tệp. (IE sẽ luôn cung cấp cho bạn kết quả chia hết cho 1024).

ls sẽ cung cấp cho bạn kích thước thực tế của tập tin.

Những gì bạn đang xem là sự khác biệt giữa kích thước thực tế của tệp và dung lượng trên đĩa. (còn gọi là hiệu quả hệ thống tập tin).

Sự khác biệt giữa khi nó nằm trên hệ thống tệp và kích thước thực của phim

Câu trả lời:


48

Điều này được gọi là không gian chùng :

Mỗi lớp trừu tượng trên đầu các bit và byte riêng lẻ dẫn đến không gian bị lãng phí khi một tệp dữ liệu nhỏ hơn đơn vị dữ liệu nhỏ nhất mà hệ thống tệp có khả năng theo dõi. Không gian lãng phí này trong một khu vực, cụm hoặc khối thường được gọi là không gian chùng và thường không thể được sử dụng để lưu trữ dữ liệu bổ sung. Đối với các cung 256 byte riêng lẻ, không gian bị lãng phí tối đa là 255 byte. Đối với cụm 64 kilobyte, không gian bị lãng phí tối đa là 65.535 byte.

Vì vậy, nếu hệ thống tệp của bạn phân bổ không gian theo đơn vị 64 KB và bạn lưu trữ tệp 3 KB, thì:

  • kích thước thực tế của tập tin là 3 KB.
  • kích thước lưu trú của tệp là 64 KB, vì 61 KB còn lại trong đơn vị đó không thể được phân bổ cho tệp khác và do đó bị mất.

Lưu ý : Một số hệ thống tệp hỗ trợ phân vùng khối , giúp giảm thiểu vấn đề này bằng cách gán nhiều tệp nhỏ (hoặc phần đuôi của tệp lớn) vào cùng một khối.


1
Đó là một lời giải thích tốt chết tiệt.
SpacemanSpiff

1
@ Handyman5 - Cảm ơn Handyman5. Vì vậy, khi tôi đang xem kích thước của một tập tin hoặc thư mục bằng cách sử dụng ls, nó sẽ trả về kích thước thực tế trong khi du trả về kích thước lưu trú? Đúng không? Vì vậy, khi nhìn vào kích thước của tệp, đó là chính xác nhất tức là kích thước cư trú hoặc kích thước tệp hoặc đó là một câu hỏi tùy ý?
PeanutsMonkey

8
@PeanutsMonkey, độ chính xác là trong mắt của kẻ si tình. ;-) Về cơ bản, nếu bạn lo lắng về việc tệp sẽ chiếm bao nhiêu dung lượng ở một nơi khác (như sao chép qua mạng, thêm vào tệp zip, sao lưu vào ổ đĩa ngoài, v.v.), thì kích thước thực tế là gì bạn quan tâm Nếu bạn quan tâm đến dung lượng còn lại trên ổ đĩa hiện có tệp, thì bạn quan tâm đến kích thước lưu trú. Vì duđang hiển thị cho bạn sage disk u, nó nhìn vào không gian chiếm trên ổ đĩa hiện tại, và do đó nó cho bạn thấy kích thước cư trú.
Handyman5

1
@ Handyman5 - Đã gần một năm sau bài đăng nhưng tôi tò mò câu trả lời ở trên khác nhau như thế nào khi sử dụng df -h?
PeanutsMonkey

1
dfbáo cáo số lượng khối còn lại * kích thước khối hệ thống tập tin. Trong trường hợp này, nó sẽ giống như vậy hơn du, vì ngay cả các khối được sử dụng một phần cũng được coi là phân bổ đầy đủ. dfvề cơ bản dịch statvfs , vì vậy bạn có thể nhìn vào cuộc gọi hệ thống đó để hiểu rõ hơn về những gì đang diễn ra.
Handyman5

19

Có một lựa chọn khác ở đây, đó là không được đề cập - các tệp thưa thớt . Trong trường hợp này, dusẽ hiển thị kích thước nhỏ hơn đơn giản ls -l, bởi vì lsbáo cáo "kích thước" của tệp là kích thước rõ ràng (số byte bạn có thể đọc, nếu bạn muốn có rất nhiều số không), trong khi dusẽ tiếp tục sử dụng số lượng khối đĩa thực tế đang sử dụng.

Thủ thuật thú vị: Tạo rất nhiều tệp lớn thưa thớt, sau đó gây ấn tượng với bạn bè của bạn về dung lượng đĩa bạn có ("nhìn này, tôi đang lưu trữ các tệp 1TB trị giá 1 triệu đô la trên ổ cứng của tôi!"). OK, có lẽ không vui lắm.


6

Hệ thống tập tin được tạo thành từ các khối. Các tập tin không phải nằm gọn trong các khối. Nếu một tệp là 1024 byte thì kích thước của nó là ls và du sẽ là 1024. Nếu kích thước tệp là 1025 thì kích thước sẽ là 1025 in ls và 2048 in du.

Lưu ý ví dụ trên giả định kích thước khối là 1024. Kích thước khối lớn hơn là tiêu chuẩn trong những ngày này e, g,

ls -l fred
-rw-r--r-- 1 iain users 1024 Jul 13 22:06 fred

du -h fred
8.0K    fred

0

Vẫn còn một lý do nữa họ có thể khác. du -h biết khi nào nó nhìn thấy cùng một tệp dưới tên khác (liên kết cứng, trái ngược với liên kết tượng trưng) và sẽ báo cáo từng tệp cho kích thước của nó, nhưng chỉ thêm kích thước một lần vào thư mục gốc chung.

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.