答案:通过df和du命令组合使用可有效查看Linux磁盘空间。df -h查看文件系统整体使用情况,du -sh定位具体目录占用,du --max-depth=1 | sort -rh快速找出大文件,结合lsof、find、ncdu等工具可排查差异、清理空间并实现高效管理。

在Linux系统里,查看磁盘空间是日常运维最基础也最频繁的操作之一。它能帮你快速了解系统的健康状况,避免潜在的存储问题,无论是排查性能瓶颈还是日常监控,都离不开这些命令的辅助。核心观点就是,我们主要依赖
df和
du这两个命令,它们各有侧重,理解其差异和组合使用是关键。
解决方案
要有效地查看Linux磁盘空间,我们通常会组合使用几个核心命令,它们从不同维度提供信息。
我个人最常用的,也是最直观的,就是
df命令了。每次系统报警或者感觉哪里不对劲,第一个想到的就是它。
df -h
这个命令会列出所有文件系统(包括物理磁盘、虚拟文件系统等)的磁盘使用情况。
-h参数让输出结果更易读,以人类可读的格式(如GB、MB)显示大小。你会看到文件系统名称、总大小、已用空间、可用空间、使用百分比以及挂载点。这就像是系统层面的一个总览图,一眼就能看出哪个分区快满了。
然而,
df命令只能看到文件系统的整体使用情况,如果你想深入了解某个特定目录或文件占用了多少空间,那就得请出
du命令了。
du是“disk usage”的缩写,它会递归地统计指定目录或文件的磁盘使用量。
du -sh /path/to/directory
-s参数表示只显示总计(summary),不列出子目录的详细信息;
-h同样是为了可读性。当你发现某个分区通过
df显示已经爆满,但不知道具体是哪个目录导致的时候,
du -sh配合路径,就能帮你快速定位。比如,我经常会用
du -sh /var/log来检查日志文件是不是又“失控”了。
如何快速定位Linux系统中占用空间最大的文件或目录?
当
df -h告诉你某个分区空间告急,但你一头雾水不知道具体是哪个“元凶”时,定位大文件或大目录就成了当务之急。这其实是一个非常经典的场景,我几乎每个月都会遇到几次。
最直接有效的方法就是结合
du命令和一些管道操作。
du -h --max-depth=1 /path/to/check | sort -rh
让我来拆解一下这个命令:
du -h /path/to/check
: 这部分我们已经熟悉了,它会列出/path/to/check
下所有子目录和文件的磁盘使用情况。--max-depth=1
: 这是一个非常实用的参数,它告诉du
只深入一层目录。如果你不加这个,在一个很大的文件系统上,du
会遍历所有子目录,耗时会非常长,而且输出会爆炸。我通常会从根目录/
或者/var
、/home
这些大分区开始,然后逐步深入。|
: 管道符,将du
的输出作为sort
命令的输入。sort -rh
: 这是排序的关键。-r
表示反向排序(从大到小)。-h
表示按照人类可读的格式(如10G、200M)进行排序。这很重要,因为du -h
输出的单位是带字母的,普通的sort
无法正确识别。
通过这个命令,你就能一目了然地看到当前目录下,哪些一级子目录或文件占用了最多的空间。然后,你可以根据结果,对占用最大的目录重复执行这个命令,一层层地深入,直到找到具体的罪魁祸首。比如,我发现
/var很大,我就再
du -h --max-depth=1 /var | sort -rh,直到定位到具体的日志文件或者缓存目录。
理解df和du命令的统计差异及其原因
这真的是一个经典的“坑”,很多初学者都会在这里犯迷糊,甚至连我这种老手,偶尔也会因为一时的疏忽而误判。
df和
du在某些情况下,显示的结果可能会有显著差异,理解这些差异的根本原因,对于准确判断磁盘使用情况至关重要。
简单来说:
df
统计的是文件系统的已用空间,它看的是文件系统的元数据,即有多少数据块被标记为已使用。du
统计的是文件和目录实际占用的磁盘空间,它会遍历文件系统中的文件,累加它们的大小。
那么,差异从何而来呢?
-
已删除但仍被进程占用的文件: 这是最常见也最让人头疼的原因。当一个文件被删除后,如果仍有进程(比如一个日志服务)打开着这个文件句柄,那么操作系统并不会立即释放这个文件所占用的磁盘空间。
df
会继续将这部分空间算作“已用”,因为它并没有被真正释放回文件系统。但du
在遍历时,已经找不到这个文件了,所以不会将其计入。我遇到过好几次日志文件被删了,但服务没重启,导致df
显示空间满,du
却“找不到”大文件的诡异情况。-
如何排查?
lsof | grep deleted
可以帮你找出那些被删除但仍在使用的文件。
-
如何排查?
硬链接:
du
在统计时,如果遇到多个硬链接指向同一个文件,它会多次计算这个文件的大小。而df
则不会,因为它只关心文件系统层面实际占用了多少数据块。不过,现代du
版本通常会处理这种情况,避免重复计算,但旧版本或特定场景下仍可能出现。挂载点: 如果一个目录下面又挂载了另一个文件系统,
du
在不加--xdev
(或-x
)参数的情况下,会“钻”进子文件系统去计算空间。而df
只会显示顶层文件系统的使用情况,不会把子文件系统的内容算进去。
Git版本控制与工作流 中文WORD版下载篇文章是针对git版本控制和工作流的总结,如果有些朋友之前还没使用过git,对git的基本概念和命令不是很熟悉,可以从以下基本教程入手: Git是分布式版本控制系统,与SVN类似的集中化版本控制系统相比,集中化版本控制系统虽然能够令多个团队成员一起协作开发,但有时如果中央服务器宕机的话,谁也无法在宕机期间提交更新和协同开发。甚至有时,中央服务器磁盘故障,恰巧又没有做备份或备份没及时,那就可能有丢失数据的风险。感兴趣的朋友可以过来看看
文件系统保留空间: 某些文件系统(如ext系列)会默认保留一部分空间(通常是5%)供root用户使用,以防止文件系统完全写满导致系统崩溃。
df
会把这部分空间算作“已用”或者“不可用”,因为它不向普通用户开放。而du
只关心实际文件占用的空间,不会考虑这部分保留空间。块大小差异: 文件系统通常以块(block)为单位分配空间。即使一个文件很小,它也至少会占用一个块。
du
会累加文件实际占用的块数,而df
则直接看文件系统层面的块使用情况。这通常不会造成巨大差异,但在文件数量极多且文件都很小的情况下,也可能导致细微差别。
理解这些,能让你在面对
df和
du数据不一致时,不再那么恐慌,而是能有条不紊地进行排查。
除了基本查看,还有哪些高级技巧能更高效地管理磁盘空间?
仅仅知道如何查看磁盘空间是远远不够的,我们还需要一些高级技巧来更高效地管理它,预防问题于未然,或者在问题发生时能快速响应。这不光是命令的堆砌,更是一种思维方式的转变。
-
使用
ncdu
进行交互式分析: 如果说du
配合sort
是命令行下的“手工活”,那ncdu
(NCurses Disk Usage)就是一款图形化的“瑞士军刀”。它提供了一个基于终端的交互式界面,能让你像文件管理器一样浏览目录结构,并直观地看到每个目录的大小,支持排序、删除文件等操作。sudo apt install ncdu # Debian/Ubuntu sudo yum install ncdu # CentOS/RHEL ncdu /path/to/check
ncdu
的强大之处在于它的交互性。你可以用方向键上下移动,按Enter键进入子目录,按d
键删除文件或目录(需要谨慎!),按g
键切换显示模式(百分比/大小)。这对于快速定位和清理大文件,效率远高于反复敲du
命令。我经常用它来清理那些因为开发或测试留下来的巨型临时文件。 -
结合
find
命令查找特定类型或时间的文件: 在清理磁盘空间时,我们往往需要查找特定类型(如日志文件、备份文件)或者在某个时间点之前创建/修改的文件。find
命令在这方面表现出色。-
查找大文件:
find /path/to/search -type f -size +1G -print0 | xargs -0 du -h | sort -rh
这个命令会查找
/path/to/search
目录下所有大于1GB的文件,然后通过xargs
将结果传递给du -h
进行格式化显示,并最终排序。print0
和xargs -0
是为了正确处理文件名中含有空格或特殊字符的情况。 -
查找旧文件并删除(慎用!):
find /var/log -type f -name "*.log" -mtime +30 -delete
这个命令会查找
/var/log
目录下所有30天前修改过的.log
文件,并直接删除。-mtime +30
表示修改时间超过30天,-delete
则直接执行删除操作。在生产环境中,这样的操作需要极其谨慎,最好先用-print
代替-delete
来预览将要删除的文件。
-
-
监控文件系统事件: 虽然这不是直接查看磁盘空间,但通过监控文件系统事件,可以帮助你提前发现潜在的磁盘空间问题。例如,使用
inotify-tools
可以监控特定目录的文件创建、修改、删除等事件,当有异常大量的文件写入时,可以及时发出警报。# 示例:监控 /var/log 目录的文件创建事件 inotifywait -m -r /var/log -e create
这对于那些日志文件增长过快、或者有未知进程在偷偷写入大量数据的场景非常有用。我曾经通过这种方式,定位到一个因为配置错误导致疯狂生成临时文件的服务。
这些高级技巧,将查看磁盘空间从被动响应提升到主动管理和预防,让你的Linux系统运维工作更加从容。但请记住,任何删除操作都应在充分理解其影响后谨慎执行,尤其是在生产环境中。









