du的功能:`du` reports the amount of disk space used by the specified files and for each subdirectory (of directory arguments). with no arguments,`du` reports the disk space for the current directory。
很明显,与df不同,它用来查看文件或目录所占用的磁盘空间的大小。
字面理解,du指disk usage,df指disk free。du通常针对的是目录,而df通常针对的是文件系统。
统计文件个数看这篇:Linux下统计文件数量
一、du使用
(一)语法&常用选项:
du [-abcDhHklmsSx][-L <符号连接>][-X <文件>][--block-size][--exclude=<目录或文件>][--max-depth=<目录层数>][--help][--version][目录或文件]
-h:–human-readable 单位控制,默认字节;以K,M,G为单位,提高信息的可读性
-a:显示目录占用的磁盘空间大小,还要显示其下目录和文件占用磁盘空间的大小
-s:总计当前目录占用的磁盘空间大小,不要列举显示其下子目录和文件占用的磁盘空间大小
-c:显示几个目录或文件占用的磁盘空间大小,还要统计它们的总和
--apparent-size:显示目录或文件自身的大小
-l :统计硬链接占用磁盘空间的大小
-L:统计符号链接所指向的文件占用的磁盘空间大小
详细学习:Linux du 命令 | 菜鸟教程
(二)实用命令:
1、du -sh 只查当前目录
du -sh 查询当前目录下所有子目录总大小
du -sh * | sort -nr :当前目录下所有文件的大小给列出来,按照从大到小的方式排序。
du -s * | sort -nr | head -10 选出排在前面的10个。
du -s * | sort -nr | tail -5 选出排在后面的5个。
du -lh --max-depth=1 查看当前目录下一级子文件和子目录占用的磁盘容量:
2、du -h 查当前目录及子目录
du -h:显示当前目录下,所有文件夹的大小
du -ah:显示当前目录下,所有文件夹、所有文件的大小
du -ah | sort -rn | head -5 :按文件从大到小排序查看当前目录及子目录文件,前5个文件
3、du -s xx:显示指定目录的大小
4、查看当前目录下及子目录文件个数
ls -l |grep "^-" | wc -l :只查看当前目录下的文件个数(不含子目录)
5、du --apparent-size:显示文件或目录自身大小,而不是它们占用的磁盘空间大小。
文件或目录占用磁盘空间的大小与它们自身大小有时候并非完全一致;这种现象非linux所独有,windows里也是如此。我们看这个选项的帮助文档的解释:The apparent size of a file is the number of bytes reported by `wc –c` regular files ,or more generally, `ls –l –block-size=1` or `stat –format=%s`.For example, a file containing the word `zoo` with no newline would, of course, have an apparent size of 3. Such a small file may require anywhere from 0 to 16 kib or more of disk space, depending on the type and configuration of the file system on which the file resides.
这段话给出了文件或目录自身大小与占用磁盘空间大小的区别。他下面举出了一个更加夸张的例子,这里就不把它写出来了。我们知道了:wc或ls --block-size显示的是其自身大小,而du给出的则是占用的磁盘空间的大小。
6、du -c:使用此选项时,不仅显示几个文件或目录各自占用磁盘空间的大小,还统计它们的总和。
如图所示,加上-c选项后,du不仅显示两个目录各自占用磁盘空间的大小,还在最后一行统计它们的总和。
7、du -l:这个选项主要是针对硬链接。在统计目录占用磁盘空间大小时,-l选项会把硬链接也统计进来。
帮助文档是这样解释的:Count the size of all files,even if they have appeared already(as a hard link)。
我们在download目录下建立一个硬链接,指向本目录下的一个文件。不使用-l选项时,du发现硬链接指向本目录下的文件,于是自动忽略该链接文件,以免造成重复统计;使用-l选项,du才会把硬链接文件也统计进来。
8、du -L:这个选项主要是针对符号链接。它会把符号链接所指向的文件占用磁盘空间的大小也统计进来。
帮助文档是这样解释的:Dereference symbolic links(show the disk space used by the file or directory that the link points to instead of the space used by the link)。
我们在download目录下创建一个符号链接,指向本目录下的一个文件。我们看到上面图片中显示的操作结果,当使用-L选项时,du会把符号链接所指向的文件的大小也统计到目录里来。
另外我们看du -lh的结果,与du -h相同,好像没有统计出符号链接的大小;其实并非如此。从实际操作来看,符号链接本身似乎并不占用磁盘空间,所以才出现上述情况。
最后,du命令在统计目录占用磁盘空间时,默认不统计链接文件(无论是硬链接或是符号链接),所以要用-l和-L选项特地指出来;此外,du命令默认不显示目录下文件占用磁盘空间的信息,但是却默认显示其下子目录所占用磁盘空间的信息。怪哉。
二、df使用
(一)语法&常用选项:
df [选项]... [FILE]...
-a 显示所有文件系统的磁盘使用情况
-k 显示单位
-h 方便人阅读方式显示
-i 显示inode使用情况,而不是默认块使用情况
-t 根据指定文件系统类型作为条件输出
-x 与-t条件相反
-T 输出文件系统类型列
详细学习: Linux df 命令 | 菜鸟教程
(二)常用命令:
1、查看服务器磁盘空间占用/挂载概况 df -h
三、工作应用场景--占用空间大排查
1、、逐级查找定位占用最大的目录
du -lh --max-depth=1 /path
先在/path目录下找出最大的目录path1,然后再在path1下找出最大的目录,这样一级一级就可以找出占用空间最大的目录了
du -lh --max-depth=1 /path/path1