Tổng số điểm đó là gì trong dòng đầu tiên sau ls -l? [đóng cửa]


131

Là gì totaltrong đầu ra của ls -l?

    $ ls -l /etc
    total 3344
    -rw-r--r--   1 root root   15276 Oct  5  2004 a2ps.cfg
    -rw-r--r--   1 root root    2562 Oct  5  2004 a2ps-site.cfg
    drwxr-xr-x   4 root root    4096 Feb  2  2007 acpi
    -rw-r--r--   1 root root      48 Feb  8  2008 adjtime
    drwxr-xr-x   4 root root    4096 Feb  2  2007 alchemist

Câu trả lời:


94

Bạn có thể tìm thấy định nghĩa của dòng đó trong lstài liệu cho nền tảng của bạn. Đối với coreutils ls(một hệ thống được tìm thấy trên rất nhiều hệ thống Linux), thông tin có thể được tìm thấy qua info coreutils ls:

Đối với mỗi thư mục được liệt kê, hãy mở đầu các tệp bằng một dòng 'tổng BLOCKS', trong đó BLOCKS là tổng phân bổ đĩa cho tất cả các tệp trong thư mục đó.


14
Thật thú vị, man lstrên hệ thống của tôi không đề cập đến dòng đó, nhưng info coreutils lscó. Làm thế nào đến man lsinfo coreutils lscó thông tin khác nhau về cùng một lệnh? Tại sao không lschỉ là tài liệu một lần? Có hai tài liệu khác nhau cho cùng một lệnh có vẻ như được thiết lập cho thất bại.
HelloGoodbye

1
infotài liệu cho công cụ coreutils thường chi tiết hơn các trang man. Đó là lý do tại sao họ có một ghi chú ở cuối mỗi trang nam giới thiệu bạn đến phần thông tin để biết thêm chi tiết.
Mat

7
Ah. Tôi đã thực hiện info lsvà nó để cho đầu ra giống như info coreutils ls. Lập luận coreutilslàm gì?
HelloGoodbye

46

Công thức: Số đó là gì?

tổng int = Tổng của (vật lý_blocks_in_use) * vật lý_block_size / ls_block_size) cho mỗi tệp.

Ở đâu:

  • ls_block_sizelà một biến môi trường tùy ý (thường là 512 hoặc 1024 byte) có thể tự do sửa đổi với --block-size=<int>cờ trên ls, POSIXLY_CORRECT=1biến môi trường GNU (để lấy các đơn vị 512 byte) hoặc -kcờ để buộc các đơn vị 1kB.
  • physical_block_sizelà giá trị phụ thuộc HĐH của giao diện khối bên trong, có thể hoặc không thể kết nối với phần cứng bên dưới. Giá trị này thường là 512b hoặc 1k, nhưng hoàn toàn phụ thuộc vào HĐH. Nó có thể được tiết lộ thông qua %Bgiá trị trên stathoặc fstat. Lưu ý rằng giá trị này (hầu như luôn luôn) không liên quan đến số khối vật lý trên thiết bị lưu trữ hiện đại .

Tại sao lại khó hiểu như vậy?

Con số này khá tách rời khỏi bất kỳ số liệu vật lý hoặc có ý nghĩa. Nhiều lập trình viên cơ sở chưa có kinh nghiệm với các lỗ tập tin hoặc liên kết cứng / sym . Ngoài ra, tài liệu có sẵn về chủ đề cụ thể này hầu như không tồn tại.

Sự rời rạc và mơ hồ của thuật ngữ "kích thước khối" là kết quả của nhiều biện pháp khác nhau dễ bị nhầm lẫn và mức độ trừu tượng tương đối sâu xoay quanh việc truy cập đĩa.

Ví dụ về thông tin xung đột: du(hoặc ls -s) vs.stat

Chạy du *trong thư mục dự án mang lại kết quả như sau: (Lưu ý: ls -strả về cùng kết quả.)

dactyl:~/p% du *
2       check.cc
2       check.h
1       DONE
3       Makefile
3       memory.cc
5       memory.h
26      p2
4       p2.cc
2       stack.cc
14      stack.h

Tổng cộng : 2 + 2 + 1 + 3 + 3 + 5 + 26 + 4 + 2 + 14 = 62 Khối

Tuy nhiên, khi chạy, statchúng ta thấy một tập hợp các giá trị khác nhau. Chạy stattrong cùng một thư mục mang lại:

dactyl:~/p% stat * --printf="%b\t(%B)\t%n: %s bytes\n"
3       (512)   check.cc: 221 bytes
3       (512)   check.h: 221 bytes
1       (512)   DONE: 0 bytes
5       (512)   Makefile: 980 bytes
6       (512)   memory.cc: 2069 bytes
10      (512)   memory.h: 4219 bytes
51      (512)   p2: 24884 bytes
8       (512)   p2.cc: 2586 bytes
3       (512)   stack.cc: 334 bytes
28      (512)   stack.h: 13028 bytes

Tổng cộng: 3 + 3 + 1 + 5 + 6 + 10 + 51 + 8 + 3 + 28 = 118 Khối

Lưu ý: Bạn có thể sử dụng lệnh stat * --printf="%b\t(%B)\t%n: %s bytes\n"> để xuất (theo thứ tự) số lượng khối, (theo parens) kích thước của các khối đó, tên của tệp và kích thước theo byte, như được hiển thị ở trên.

Có hai điều quan trọng mang lại:

  • statbáo cáo cả physical_blocks_in_usephysical_block_sizenhư được sử dụng trong công thức trên. Lưu ý rằng đây là những giá trị dựa trên giao diện HĐH.
  • duđang cung cấp những gì thường được chấp nhận như một ước tính khá chính xác về việc sử dụng đĩa vật lý.

Để tham khảo, đây là ls -lthư mục trên:

dactyl:~/p% ls -l
**total 59**
-rw-r--r--. 1 dhs217 grad   221 Oct 16  2013 check.cc
-rw-r--r--. 1 dhs217 grad   221 Oct 16  2013 check.h
-rw-r--r--. 1 dhs217 grad     0 Oct 16  2013 DONE
-rw-r--r--. 1 dhs217 grad   980 Oct 16  2013 Makefile
-rw-r--r--. 1 dhs217 grad  2069 Oct 16  2013 memory.cc
-rw-r--r--. 1 dhs217 grad  4219 Oct 16  2013 memory.h
-rwxr-xr-x. 1 dhs217 grad 24884 Oct 18  2013 p2
-rw-r--r--. 1 dhs217 grad  2586 Oct 16  2013 p2.cc
-rw-r--r--. 1 dhs217 grad   334 Oct 16  2013 stack.cc
-rw-r--r--. 1 dhs217 grad 13028 Oct 16  2013 stack.h

26

Đó là tổng số khối hệ thống tệp, bao gồm các khối gián tiếp, được sử dụng bởi các tệp được liệt kê. Nếu bạn chạy ls -strên cùng một tệp và tính tổng các số được báo cáo, bạn sẽ nhận được cùng một số đó.


Điều này chỉ đơn giản là không đúng sự thật. Ví dụ: /bin/ls -s-> total 15 2 filename 3 filename2 3 filename3 3 filename4 2 filename5 2 filename6 2 filename8 2 filename9
Don Scott

3
Tôi không biết bạn đang sử dụng hệ thống nào, nhưng đối với tôi, đó sự thật. Ví dụ: gist.github.com/rfjakob/200f6001bf91cf801891
Jakob

@Jakob Đăng một câu trả lời đầy đủ, hãy xem và cho tôi biết nếu điều đó xóa nó đi.
Don Scott

Điều này không đúng trong Git bash cho Windows.
thdoan

18

Chỉ cần đề cập - bạn có thể sử dụng -h (ls -lh) để chuyển đổi cái này ở định dạng có thể đọc được.

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.