Files

ls -l 和 du-sh 中的文件大小有什麼區別?

  • July 13, 2019

我有一個困擾我多年的最令人困惑的任務。ls -l 和 du -sh *.

GRILL:/user/MAIL/DATA>ll
total 270
drwxr-xr-x  11 user     users         1024 Mar 21  2013 .
drwxr-xr-x   6 user     users           96 May 28  2008 ..
drwxr-xr-x  10 user     users         1024 Jun 14 09:40 Rod
drwxr-xr-x   3 user     users           96 Sep 17  2010 Atlas
drwxr-xr-x  2339 user     users       132096 Jun 14 15:00 Admin    
drwxr-xr-x   3 user     users           96 Jul 11  2014 DE
drwxr-xr-x   5 user     users           96 Jun 14 08:30 Express
drwxr-xr-x   3 user     users           96 Sep 17  2010 Deferred
drwxr-xr-x   2 user     users           96 Feb 10  2009 Imagi
drwxr-xr-x   6 user     users         1024 Jul 11  2014 NO
drwxr-xr-x   3 user     users         2048 Mar 21  2013 SE
-rw-r--r--   1 user     users           55 Mar 21  2013 cmd

GRILL:/user/MAIL/DATA>du -sk *
6723    Rod
0       Atlas
435494  Admin
2       DE
111273  Express
2       Deferred
0       Imagi
541     NO
12      SE
1       cmd

Admin 的大小ls -l132096,我嘗試從 Admin 目錄中刪除 400000+ 個文件,但我沒有發現空間減少了一點。

du -sk給出大小為435494. 哪個是文件的原始大小,它們之間有什麼區別?有人可以詳細說明嗎?

對於文件,ls -l file顯示(除其他外)file字節大小,同時du -k file顯示磁碟佔用的空間file(以 1 kB = 1024 字節為單位)。由於磁碟空間是以塊為單位分配的,由 指示的大小du -k總是略大於由 指示的空間ls -kl(與 相同ls -l,但以 1 kB 為單位)。

對於目錄,ls -ld dir顯示dir. 這只是文件名列表,而不是文件或子目錄的內容。dir因此,當您向其中添加文件時(即使文件為空),此大小會增加,但當其中一個文件dir增長時,它會保持不變。

但是,當您dir從列表中的空間中刪除文件時,不會立即回收,而是將已刪除文件的條目標記為未使用,然後再回收(這實際上取決於實現,但我所描述的幾乎是通用的這些天的行為)。這就是為什麼您在ls -ld刪除文件時可能看不到任何輸出變化的原因,直到很久以後(如果有的話)。

最後,du -ks dir顯示(估計) 中的所有文件dir以及所有dir子目錄中的所有文件在磁碟上佔用的空間,以 1 kB = 1024 字節為單位。考慮到上面的描述,這與 的輸出沒有任何關係ls -kld dir

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