Làm cách nào để có được kích thước vật lý của một tệp trong Linux?


12

Tôi có thể sử dụng ls -lđể có được kích thước logic của tệp, nhưng có cách nào để lấy kích thước vật lý của tệp không?


Xin vui lòng, xác định những gì bạn có nghĩa là kích thước "vật lý".
Jörg W Mittag

Câu trả lời:


28

ls -lsẽ cung cấp cho bạn kích thước rõ ràng của tệp, đó là số byte mà chương trình sẽ đọc nếu nó đọc tệp từ đầu đến cuối. dusẽ cung cấp cho bạn kích thước của tập tin "trên đĩa".

Theo mặc định, ducung cấp cho bạn kích thước của tệp theo số khối đĩa, nhưng bạn có thể sử dụng -hđể có được một đơn vị có thể đọc được thay thế. Xem thêm hướng dẫn cho duhệ thống của bạn.

Lưu ý rằng với GNU coreutil du(có lẽ là những gì bạn có trên Linux), -bđể có được các byte ngụ ý --apparent-sizetùy chọn. Đây không phải là những gì bạn muốn sử dụng để có được số byte thực sự được sử dụng trên đĩa. Thay vào đó, sử dụng --block-size=1hoặc -B 1.

Với GNU ls, bạn cũng có thể thực hiện ls -s --block-size=1trên tệp. Điều này sẽ cho cùng một số như du -B 1cho tập tin.


Thí dụ:

$ ls -l file
-rw-r--r--  1 myself wheel  536870912 Apr  8 11:44 file

$ ls -lh file
-rw-r--r--  1 myself wheel   512M Apr  8 11:44 file

$ du -h file
24K    file

$ du -B 1 file
24576   file

$ ls -s --block-size=1 file
24576 file

Điều này có nghĩa đây là tệp 512 MB mất khoảng 24 KB trên đĩa. Đó là một tệp thưa thớt (chủ yếu là các số 0 không thực sự được ghi vào đĩa nhưng được biểu thị dưới dạng các "lỗ" logic trong tệp). Các tệp thưa thớt thường gặp khi làm việc với các tệp lớn được phân bổ trước, ví dụ như hình ảnh đĩa cho máy ảo hoặc tệp hoán đổi, v.v ... Tạo tệp thưa là nhanh chóng, trong khi việc điền nó bằng số không thì chậm (và không cần thiết).

Xem thêm hướng dẫn sử dụng fallocatetrên hệ thống Linux của bạn.


trong trường hợp nào sự khác biệt này là quan trọng? bạn có thể làm một ví dụ thực tế? cảm ơn bạn trước
D'Arcy Nader

1
@ D'ArcyNader Xem câu trả lời cập nhật.
Kusalananda

Sửa lỗi cho tôi nếu tôi hiểu nhầm điều gì đó, nhưng nó xuất hiện câu đầu tiên là cách khác: stackoverflow.com/a/31437673/3701431 du sẽ hiển thị bao nhiêu dữ liệu thực sự có thể được đọc, trong khi lscho thấy mức độ mà các lĩnh vực đĩa được phân bổ.
Sergiy Kolodyazhnyy

2
@SergiyKolodyazhnyy (xin lỗi vì trả lời trễ) Không, duhiển thị số lượng đĩa thực sự được sử dụng bởi tệp, trong khi kích thước rõ ràng (kích thước logic) được hiển thị bởi lssố lượng chương trình có thể đọc được từ nó. Nếu tệp thưa thớt, một số byte đọc sẽ là số 0, nhưng chúng vẫn sẽ được gửi đến chương trình đọc chúng (không phải từ đĩa).
Kusalananda

Đây là một câu trả lời thực sự tốt.
Lizardx

3

Tôi nhận được kích thước tệp theo byte như thế này:

actualsize=$(du -b "${file}" | cut -f 1)
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.