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

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

我有一个最令人困惑的问题困扰了我很多年。 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。哪一个是文件的原始大小,它们之间有什么区别?有人可以详细说明一下吗?

答案1

对于文件,显示(除其他外)以字节为单位ls -l file的大小,同时显示磁盘上占用的空间(以 1 kB = 1024 字节为单位)。由于磁盘空间是按块分配的,因此 指示的大小始终略大于 指示的空间(与 相同,但以 1 kB 为单位)。filedu -k filefiledu -kls -klls -l

对于目录,ls -ld dir显示(除其他外). 中文件和子目录的文件名列表(以及许多属性)的大小dir。这只是文件名列表,而不是文件或子目录的内容。因此,当您添加文件时,该大小会增加dir(即使文件为空),但当其中一个文件增长时,该大小保持不变dir

但是,当您dir从列表中的空间中删除文件时,不会立即回收,而是将已删除文件的条目标记为未使用,然后再回收(这实际上取决于实现,但我所描述的几乎是通用的)这些天的行为)。这就是为什么ls -ld当您删除文件时,您可能要等到很久以后才能看到输出中的任何更改(如果有的话)。

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

答案2

ls -l仅显示 1 级文件大小。

du将递归显示文件夹大小(文件夹下文件大小的总和)。

相关内容