df(Disk Free)

df命令直接读取分区的超级块信息获取分区使用情况。它的数据是基于分区元数据的,所以只能针对整个分区。由于df直接读取超级块,所以运行速度不受文件多少影响。

df命令会显示每个有数据的已挂载文件系统。如你在前例中看到的,有些已挂载设备仅限系 统内部使用。命令输出如下.

df命令有一些命令行参数可用,但基本上不会用到。一个常用的参数是-h。它会把输出中的磁盘空间按照用户易读的形式显示,通常用M来替代兆字节,用G替代吉字节。

Linux系统后台一直有进程来处理文件或使用文件。df命令的输出值显示的是Linux系统认 为的当前值。有可能系统上有运行的进程已经创建或删除了某个文件,但尚未释放文件。 这个值是不会算进闲置空间的。

du(Disk Usage)

du命令会对待统计文件逐个调用fstat这个系统调用,获取文件大小。它的数据是基于文件获取的,所以有很大的灵活性,不一定非要针对一个分区,可以跨越多个分区操作。如果针对的目录中文件很多,du速度就会很慢了。

默认情况下,du命令会显示当前目录下所有的文件、目录和子目录的磁盘使用情况,它会以磁盘块为单位来表明每个文件或目录占用了多大存储空间。对标准大小的目录来说,这个输出会是一个比较长的列表。

$ du
484 ./.gstreamer-0.10
8 ./Templates
8 ./Download
8 ./.ccache/7/0
24 ./.ccache/7
368 ./.ccache/a/d
384 ./.ccache/a
424 ./.ccache
8 ./Public
8 ./.gphpedit/plugins
32 ./.gphpedit
72 ./.gconfd
128 ./.nautilus/metafiles
384 ./.nautilus
72 ./.bittorrent/data/metainfo
20 ./.bittorrent/data/resume
144 ./.bittorrent/data
152 ./.bittorrent
8 ./Videos 9 8 ./Music
16 ./.config/gtk-2.0
40 ./.config
8 ./Documents

每行输出左边的数值是每个文件或目录占用的磁盘块数。注意,这个列表是从目录层级的最 底部开始,然后按文件、子目录、目录逐级向上。

这么用du命令(不加参数,用默认参数)作用并不大。我们更想知道每个文件和目录占用了 多大的磁盘空间,但如果还得逐页查找的话就没什么意义了。

du和df的区别

du是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前存在的,没有被删除的。他计算的大小就是当前他认为存在的所有文件大小的累加和。

df通过文件系统来快速获取空间大小的信息,当我们删除一个文件的时候,这个文件不是马上就在文件系统当中消失了,而是暂时消失了,当所有程序都不用时,才会根据OS的规则释放掉已经删除的文件,

df记录的是通过文件系统获取到的文件的大小,他比du强的地方就是能够看到已经删除的文件,而且计算大小的时候,把这一部分的空间也加上了,更精确了。

当文件系统也确定删除了该文件后,这时候du与df就一致了。