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 -l是132096,我尝试从 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当您删除文件时可能看不到任何更改的原因,直到很久以后,如果有的话。
最后,以 1 kB = 1024 字节为单位du -ks dir显示(估计)中dir所有文件以及所有dir子目录中的所有文件在磁盘上占用的空间。考虑到上面的描述,这与 的输出没有任何关系ls -kld dir。