Ubuntu

總在 ls -l 命令的輸出中

  • October 4, 2019

我知道 total 告訴1K我正在處理的目錄中的文件使用的塊數。出於某種目的,我輸入了命令ls -lh以人類可讀的形式查看此內容,我看到了目錄中所有文件的塊大小,但令我驚訝的是,當我添加目錄中所有文件的塊大小時,它們不等於total告訴的內容第一行輸出。所以我的疑問是,這兩種尺寸之間存在差異的原因是什麼?

ls -l有或沒有-h隻顯示每個文件的(表觀)大小,而不是它們的磁碟空間使用情況。

要查看磁碟空間使用情況,請使用ls -s. 然後,總和應該匹配。

請注意,總數是列出的文件的總和。除非您使用-A,否則不會包含隱藏文件。如果您使用-a,兩者...(通常)也將包括在內。請注意,如果同一個文件在列表中出現兩次(例如,因為它們是指向同一個文件的硬連結),它將被計算兩次。

在符合 POSIX 的實現中,大小以 512 字節為單位。GNU ls(Ubuntu 附帶的那個)使用 1024 字節單位,除非POSIXLY_CORRECT環境中有變數($LS_BLOCK_SIZE或者$BLOCKSIZE--block-size選項也可用於指定任意單位)。busyboxls總是使用 1024 字節單位。

例子:

$ truncate -s 15T a
$ echo > b
$ ls -s
total 4
0 a  4 b
$ ls -sl
total 4
0 -rw-rw-r-- 1 me me 16492674416640 Oct  4 21:53 a
4 -rw-rw-r-- 1 me me              1 Oct  4 21:53 b
$ POSIXLY_CORRECT=1 ls -sl
total 8
0 -rw-rw-r-- 1 me me 16492674416640 Oct  4 21:53 a
8 -rw-rw-r-- 1 me me              1 Oct  4 21:53 b
$ LS_BLOCK_SIZE=1 ls -sl
total 4096
  0 -rw-rw-r-- 1 me me 16492674416640 Oct  4 21:53 a
4096 -rw-rw-r-- 1 me me              1 Oct  4 21:53 b
$ LS_BLOCK_SIZE=1 ls -sla
total 1638400
  4096 drwxrwxr-x   2 me me           4096 Oct  4 21:53 ./
1630208 drwxr-xr-x 312 me me        1626112 Oct  4 21:54 ../
     0 -rw-rw-r--   1 me me 16492674416640 Oct  4 21:53 a
  4096 -rw-rw-r--   1 me me              1 Oct  4 21:53 b
$ ls -slah
total 1.6M
4.0K drwxrwxr-x   2 me me 4.0K Oct  4 21:53 ./
1.6M drwxr-xr-x 312 me me 1.6M Oct  4 21:55 ../
  0 -rw-rw-r--   1 me me  15T Oct  4 21:53 a
4.0K -rw-rw-r--   1 me me    1 Oct  4 21:53 b

查看a15TiB 大但不佔用磁碟空間(它是一個稀疏文件),以及b1 字節大但佔用磁碟 4KiB(使用一個文件系統塊)。

請參閱為什麼有這麼多不同的方法來衡量磁碟使用情況?供進一步閱讀。

引用自:https://unix.stackexchange.com/questions/545174