我有一个最令人困惑的问题困扰了我很多年。 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 -l
为132096
,我尝试从 Admin 目录中删除 400000+ 个文件,但没有发现空间减少了一点。
而du -sk
给出的大小为435494
。哪一个是文件的原始大小,它们之间有什么区别?有人可以详细说明一下吗?
答案1
对于文件,显示(除其他外)以字节为单位ls -l file
的大小,同时显示磁盘上占用的空间(以 1 kB = 1024 字节为单位)。由于磁盘空间是按块分配的,因此 指示的大小始终略大于 指示的空间(与 相同,但以 1 kB 为单位)。file
du -k file
file
du -k
ls -kl
ls -l
对于目录,ls -ld dir
显示(除其他外). 中文件和子目录的文件名列表(以及许多属性)的大小dir
。这只是文件名列表,而不是文件或子目录的内容。因此,当您添加文件时,该大小会增加dir
(即使文件为空),但当其中一个文件增长时,该大小保持不变dir
。
但是,当您dir
从列表中的空间中删除文件时,不会立即回收,而是将已删除文件的条目标记为未使用,然后再回收(这实际上取决于实现,但我所描述的几乎是通用的)这些天的行为)。这就是为什么ls -ld
当您删除文件时,您可能要等到很久以后才能看到输出中的任何更改(如果有的话)。
最后,显示 中的所有文件以及 的所有子目录中的所有文件du -ks dir
在磁盘上占用的空间(估计值) ,以 1 kB = 1024 字节为单位。考虑到上面的描述,这与 的输出没有任何关系。dir
dir
ls -kld dir
答案2
ls -l
仅显示 1 级文件大小。
du
将递归显示文件夹大小(文件夹下文件大小的总和)。