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