Cách lấy kích thước của tệp hoặc thư mục trong Linux

Khi bạn sử dụng Linux du , bạn có được cả việc sử dụng đĩa thực tế và kích thước thực của một tệp hoặc thư mục. Chúng tôi sẽ giải thích lý do tại sao các giá trị này không giống nhau.

Sử dụng đĩa thực tế và kích thước thực

Kích thước của một tệp và dung lượng nó chiếm trên ổ cứng của bạn hiếm khi giống nhau. Không gian đĩa được phân bổ theo khối. Nếu một tệp nhỏ hơn một khối, thì toàn bộ khối vẫn được phân bổ cho nó vì hệ thống tệp không có đơn vị bất động sản nhỏ hơn để sử dụng.

Trừ khi kích thước của tệp là nhiều khối chính xác, dung lượng mà tệp sử dụng trên ổ cứng phải luôn được làm tròn thành toàn bộ khối tiếp theo. Ví dụ: nếu một tệp lớn hơn hai khối nhưng nhỏ hơn ba, nó vẫn cần ba khối dung lượng để lưu trữ nó.

Hai phép đo được sử dụng liên quan đến kích thước tệp. Đầu tiên là kích thước thực của tệp, là số byte nội dung tạo nên tệp. Thứ hai là kích thước hiệu quả của tệp trên đĩa cứng. Đây là số khối hệ thống tệp cần thiết để lưu trữ tệp đó.

Một ví dụ

Hãy xem một ví dụ đơn giản. Chúng tôi sẽ chuyển hướng một ký tự vào một tệp để tạo một tệp nhỏ:

echo "1"> geek.txt

Bây giờ, chúng tôi sẽ sử dụng danh sách định dạng dài,ls, để xem độ dài tệp:

ls -l geek.txt

Độ dài là giá trị số theo sau dave dave mục nhập, là hai byte. Tại sao nó là hai byte khi chúng tôi chỉ gửi một ký tự vào tệp? Hãy xem những gì đang xảy ra bên trong tệp.

Chúng tôi sẽ sử dụng hexdump lệnh này sẽ cung cấp cho chúng tôi số lượng byte chính xác và cho phép chúng tôi “xem” các ký tự không in dưới dạng giá trị thập lục phân. Chúng tôi cũng sẽ sử dụng -C (canonical) để buộc đầu ra hiển thị các giá trị thập lục phân trong phần nội dung của đầu ra, cũng như các ký tự chữ và số tương đương của chúng:

hexdump -C geek.txt

Kết quả đầu ra cho chúng ta thấy rằng, bắt đầu từ độ lệch 00000000 trong tệp, có một byte chứa giá trị thập lục phân là 31 và một byte chứa giá trị thập lục phân là 0A. Phần bên phải của đầu ra mô tả các giá trị này dưới dạng ký tự chữ và số, bất cứ khi nào có thể.

Giá trị thập lục phân của 31 được sử dụng để biểu thị chữ số một. Giá trị thập lục phân của 0A được sử dụng để đại diện cho ký tự Nguồn cấp dữ liệu dòng, không thể được hiển thị dưới dạng ký tự chữ và số, vì vậy thay vào đó nó được hiển thị dưới dạng dấu chấm (.). Ký tự Nguồn cấp dòng được thêm bởi tiếng vọng lại . Theo mặc định,tiếng vọng lạibắt đầu một dòng mới sau khi hiển thị văn bản cần ghi vào cửa sổ dòng lệnh.

Điều đó phù hợp với kết quả đầu ra từls và đồng ý với độ dài tệp là hai byte.

LIÊN QUAN:Cách sử dụng lệnh ls để liệt kê tệp và thư mục trên Linux

Bây giờ, chúng tôi sẽ sử dụng du lệnh để xem kích thước tệp:

du geek.txt

Nó nói kích thước là bốn, nhưng bốn của cái gì?

Có khối, và sau đó có khối

Khi nào du báo cáo kích thước tệp theo khối, kích thước nó sử dụng phụ thuộc vào một số yếu tố. Bạn có thể chỉ định kích thước khối mà nó sẽ sử dụng trên dòng lệnh. Nếu bạn không ép buộc du để sử dụng một kích thước khối cụ thể, nó tuân theo một bộ quy tắc để quyết định sử dụng cái nào.

Đầu tiên, nó kiểm tra các biến môi trường sau:

  • DU_BLOCK_SIZE
  • KÍCH THƯỚC KHỐI
  • KÍCH THƯỚC KHỐI

Nếu có bất kỳ điều nào trong số này tồn tại, kích thước khối được đặt và du ngừng kiểm tra. Nếu không có gì được đặt,du mặc định kích thước khối là 1,024 byte. Trừ khi, nghĩa là, một biến môi trường được gọi là POSIXLY_CORRECT được thiết lập. Nếu đúng như vậy, du mặc định kích thước khối là 512 byte.

Vì vậy, làm thế nào để chúng ta tìm ra cái nào đang được sử dụng? Bạn có thể kiểm tra từng biến môi trường để giải quyết, nhưng có một cách nhanh hơn. Thay vào đó, hãy so sánh kết quả với kích thước khối mà hệ thống tệp sử dụng.

Để khám phá kích thước khối mà hệ thống tệp sử dụng, chúng tôi sẽ sử dụng tune2fs chương trình. Sau đó, chúng tôi sẽ sử dụng -l (list superblock) tùy chọn, chuyển đầu ra qua grep, và sau đó in các dòng có chứa từ "Block".

Trong ví dụ này, chúng ta sẽ xem xét hệ thống tệp trên phân vùng đầu tiên của ổ cứng đầu tiên, sda1và chúng tôi sẽ cần sử dụng sudo:

sudo tune2fs -l / dev / sda1 | khối grep

Kích thước khối hệ thống tệp là 4,096 byte. Nếu chúng ta chia nó cho kết quả chúng ta nhận được du (bốn), nó cho thấydu kích thước khối mặc định là 1,024 byte. Bây giờ chúng ta biết một số điều quan trọng.

Đầu tiên, chúng ta biết lượng bất động sản hệ thống tệp nhỏ nhất có thể dành để lưu trữ một tệp là 4,096 byte. Điều này có nghĩa là ngay cả tệp nhỏ, hai byte của chúng tôi cũng đang chiếm 4 KB dung lượng ổ cứng.

Điều thứ hai cần ghi nhớ là các ứng dụng dành riêng để báo cáo thống kê về ổ cứng và hệ thống tệp, chẳng hạn như du, ls, vàtune2fs, có thể có các khái niệm khác nhau về “khối” nghĩa là gì. Các tune2fs ứng dụng báo cáo kích thước khối hệ thống tệp đúng, trong khilsdu có thể được cấu hình hoặc buộc phải sử dụng các kích thước khối khác. Các kích thước khối đó không nhằm mục đích liên quan đến kích thước khối hệ thống tệp; chúng chỉ là "phần" những lệnh đó sử dụng trong đầu ra của chúng.

Cuối cùng, ngoài việc sử dụng các kích thước khối khác nhau, câu trả lời từ dutune2fs truyền tải cùng một ý nghĩa. Các tune2fs kết quả là một khối 4.096 byte và du kết quả là bốn khối 1.024 byte.

Sử dụng du

Không có tham số dòng lệnh hoặc tùy chọn, du liệt kê tổng dung lượng ổ đĩa mà thư mục hiện tại và tất cả các thư mục con đang sử dụng.

Hãy xem một ví dụ:

du

Kích thước được báo cáo ở kích thước khối mặc định là 1.024 byte cho mỗi khối. Toàn bộ cây thư mục con được duyệt qua.

Sử dụng du trên một thư mục khác

Nếu bạn muốndu để báo cáo về một thư mục khác với thư mục hiện tại, bạn có thể chuyển đường dẫn đến thư mục trên dòng lệnh:

du ~ / .cach / Evolution /

Sử dụng du trên một tệp cụ thể

Nếu bạn muốndu để báo cáo về một tệp cụ thể, hãy chuyển đường dẫn đến tệp đó trên dòng lệnh. Bạn cũng có thể chuyển một mẫu khung cho một nhóm tệp được chọn, chẳng hạn như * .txt:

du ~ / .bash_aliases

Báo cáo về Tệp trong Thư mục

du báo cáo về các tệp trong thư mục hiện tại và thư mục con, sử dụng -a (tất cả các tệp) tùy chọn:

du -a

Đối với mỗi thư mục, kích thước của mỗi tệp được báo cáo, cũng như tổng số cho mỗi thư mục.

Giới hạn độ sâu của cây thư mục

Bạn có thể nói du để liệt kê cây thư mục đến một độ sâu nhất định. Để làm như vậy, hãy sử dụng -d (độ sâu tối đa) và cung cấp giá trị độ sâu dưới dạng tham số. Lưu ý rằng tất cả các thư mục con đều được quét và sử dụng để tính tổng được báo cáo, nhưng chúng không được liệt kê tất cả. Để đặt độ sâu thư mục tối đa của một cấp, hãy sử dụng lệnh sau:

du -d 1

Đầu ra liệt kê tổng kích thước của thư mục con đó trong thư mục hiện tại và cũng cung cấp tổng kích thước cho từng thư mục.

Để liệt kê các thư mục sâu hơn một cấp, hãy sử dụng lệnh sau:

du -d 2

Đặt kích thước khối

Bạn có thể dùng khối tùy chọn để đặt kích thước khối cho du cho hoạt động hiện tại. Để sử dụng kích thước khối là một byte, hãy sử dụng lệnh sau để nhận kích thước chính xác của các thư mục và tệp:

du --block = 1

Nếu bạn muốn sử dụng kích thước khối là một megabyte, bạn có thể sử dụng -m (megabyte) tùy chọn, giống như --block = 1 triệu:

du -m

Nếu bạn muốn kích thước được báo cáo ở kích thước khối thích hợp nhất theo dung lượng đĩa được sử dụng bởi các thư mục và tệp, hãy sử dụng -h tùy chọn (con người có thể đọc được):

tât nhiên

Để xem kích thước rõ ràng của tệp thay vì dung lượng ổ cứng được sử dụng để lưu trữ tệp, hãy sử dụng - kích thước rõ ràng Lựa chọn:

du --apparent-size

Bạn có thể kết hợp điều này với -a (tất cả) tùy chọn để xem kích thước rõ ràng của mỗi tệp:

du --apparent-size -a

Mỗi tệp được liệt kê, cùng với kích thước rõ ràng của nó.

Chỉ Hiển thị Tổng số

Nếu bạn muốndu để chỉ báo cáo tổng số cho thư mục, hãy sử dụng -S (tóm tắt) tùy chọn. Bạn cũng có thể kết hợp điều này với các tùy chọn khác, chẳng hạn như -h tùy chọn (con người có thể đọc được):

du -h -s

Ở đây, chúng tôi sẽ sử dụng nó với - kích thước rõ ràng Lựa chọn:

du --apparent-size -s

Hiển thị thời gian sửa đổi

Để xem ngày và giờ tạo hoặc sửa đổi lần cuối, hãy sử dụng --thời gian Lựa chọn:

du --time -d 2

Kết quả kỳ lạ?

Nếu bạn thấy kết quả lạ từ du , đặc biệt là khi bạn tham chiếu chéo các kích thước đến kết quả đầu ra từ các lệnh khác, thường là do kích thước khối khác nhau mà các lệnh khác nhau có thể được đặt hoặc các lệnh mà chúng mặc định. Nó cũng có thể là do sự khác biệt giữa kích thước tệp thực và dung lượng đĩa cần thiết để lưu trữ chúng.

Nếu bạn cần khớp với đầu ra của các lệnh khác, hãy thử nghiệm với --khối tùy chọn trong du.