Linux系统中的df和du是两个用于磁盘空间管理的基础命令,虽然都涉及磁盘使用情况,但功能和应用场景存在显著差异,df命令主要用于查看文件系统的磁盘空间使用情况,而du命令则用于估算文件或目录所占用的磁盘空间,掌握这两个命令的用法,能够有效帮助系统管理员和用户监控和管理磁盘资源。

df命令的名称来源于“disk free”,其核心功能是显示各个文件系统的总容量、已用空间、可用空间、使用百分比以及挂载点等信息,通过df命令,用户可以快速了解磁盘空间的整体使用状况,判断是否存在空间不足的风险,df命令的基本语法为df [选项] [文件或目录],如果不指定文件或目录,默认会显示所有已挂载文件系统的信息,常用的选项包括-h(以人类可读的格式显示,如KB、MB、GB)、-T(显示文件系统类型)、-i(显示inode的使用情况)等。df -h命令会以易读的方式列出所有挂载点的磁盘使用情况,输出结果通常包括文件系统、总大小、已用空间、可用空间、使用率和挂载点等列。“使用率”是判断磁盘是否接近满容的重要指标,当使用率超过90%时,可能需要清理空间或扩容。
与df不同,du命令(disk usage)专注于计算特定文件或目录所占用的磁盘空间,它通过递归遍历目录中的所有文件和子目录来统计空间占用,适用于查找大文件或占用空间较多的目录,du命令的基本语法为du [选项] [文件或目录],如果不指定目标,默认会显示当前目录下各子目录的空间占用情况,常用的选项包括-h(人类可读格式)、-s(仅显示总计大小,不显示子目录详情)、-a(显示所有文件的大小,而不仅仅是目录)等。du -sh /var/log命令会以易读格式显示/var/log目录的总空间占用,需要注意的是,du计算的空间是实际占用的块大小,而文件的实际大小可能因块大小(通常为4KB)对齐而有所不同,因此对于小文件,du统计的总空间可能会略大于文件的实际大小。
df和du在功能上的区别可以通过一个例子直观理解:假设用户删除了一个大文件,但df命令显示的磁盘空间并未立即释放,而du命令显示的目录空间已减少,这是因为文件被删除后,如果仍有进程占用该文件(日志文件被写入但未关闭),文件系统不会立即释放空间,直到进程关闭文件,df命令会反映未释放的空间,而du命令则正确显示目录当前的实际占用,df关注的是文件系统级别的空间分配,而du关注的是文件和目录级别的实际占用。
为了更清晰地对比df和du的异同,可以通过以下表格总结:

| 对比项 | df命令 | du命令 |
|---|---|---|
| 主要功能 | 查看文件系统的磁盘空间使用情况 | 计算文件或目录占用的磁盘空间 |
| 统计范围 | 文件系统级别(按挂载点) | 文件/目录级别(递归统计) |
| 输出信息 | 总容量、已用空间、可用空间、使用率、挂载点 | 各文件/目录的大小,可汇总为总计 |
| 常用选项 | -h(人类可读)、-T(文件系统类型)、-i(inode) | -h(人类可读)、-s(总计)、-a(显示所有文件) |
| 典型场景 | 检查磁盘空间是否不足、文件系统类型查看 | 查找大文件、清理目录空间 |
在实际应用中,df和du常常结合使用,当通过df发现某个文件系统的使用率过高时,可以使用du命令定位具体占用空间的文件或目录,具体步骤如下:首先运行df -h找到使用率高的挂载点,如/dev/sda1;然后切换到该挂载点,运行du -sh *或du -sh */按目录排序,找出占用空间最大的目录;如果需要进一步细化,可以对该目录重复使用du命令,直到定位到具体的大文件,这种方法能够高效地解决磁盘空间不足的问题。
需要注意的是,du命令在处理大量文件时可能较慢,尤其是递归遍历大目录时,此时可以通过--max-depth选项限制递归深度,例如du -h --max-depth=1 /path/to/dir只显示一级子目录的大小,df命令显示的“可用空间”是指文件系统可供普通用户使用的空间,而root用户的可用空间通常会更大,因为文件系统会为root保留一部分空间(通常为5%)。
在Linux系统管理中,合理使用df和du命令是维护磁盘健康的重要手段,df提供了全局视角,帮助快速发现潜在的空间问题;而du则提供了微观视角,能够精确定位空间占用的源头,通过熟练掌握这两个命令的选项和组合使用技巧,用户可以更高效地管理磁盘资源,避免因空间不足导致系统服务异常。
相关问答FAQs:
Q1: 为什么删除文件后,df命令显示的磁盘空间没有立即释放?
A: 这通常是因为仍有进程持有已删除文件的句柄(应用程序正在写入日志文件但未关闭),文件系统不会释放空间,直到进程关闭文件或终止,可以通过lsof | grep deleted查看哪些进程占用了已删除的文件,然后重启相关进程或系统来释放空间。
Q2: du命令统计的空间和ls -l显示的文件大小为何不一致?
A: du命令统计的是文件占用的块空间(block),而块大小通常为4KB(可通过stat命令查看文件块大小),一个1KB的文件仍会占用4KB的块空间,因此du统计的总空间可能大于文件实际大小,而ls -l显示的是文件的实际字节数,不包括块对齐占用的额外空间。
