ls -l 和 du-sh 中的文件大小有什么区别?

sab*_*son 8 ls disk-usage files

我有一个最令人困惑的问题困扰了我多年。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
Run Code Online (Sandbox Code Playgroud)

Admin 的大小ls -l132096,我尝试从 Admin 目录中删除 400000+ 个文件,但我没有发现空间减少了一点。

du -sk给出大小为435494。哪个是文件的原始大小,它们之间有什么区别?有人可以详细说明吗?

Sat*_*ura 5

对于文件,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当您删除文件时可能看不到任何更改的原因,直到很久以后,如果有的话。

最后,以 1 kB = 1024 字节为单位du -ks dir显示(估计)中dir所有文件以及所有dir子目录中的所有文件在磁盘上占用的空间。考虑到上面的描述,这与 的输出没有任何关系ls -kld dir