Ubuntu
總在 ls -l 命令的輸出中
我知道 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
查看
a
15TiB 大但不佔用磁碟空間(它是一個稀疏文件),以及b
1 字節大但佔用磁碟 4KiB(使用一個文件系統塊)。請參閱為什麼有這麼多不同的方法來衡量磁碟使用情況?供進一步閱讀。