在管理和维护 CentOS 服务器的过程中,监控和分析磁盘空间占用是一项至关重要的日常任务,磁盘空间耗尽可能导致服务中断、数据丢失甚至系统崩溃,熟练掌握查看空间占用的各种命令和技巧,是每一位系统管理员的必备技能,本文将详细介绍在 CentOS 系统中查看磁盘空间占用的多种方法,从宏观的文件系统概览到微观的文件与目录分析,帮助您全面、高效地管理服务器存储资源。
使用 df
命令查看文件系统空间
df
(Disk Free)命令是最基础、最常用的工具,用于显示文件系统的磁盘空间使用情况,它能快速提供各个挂载点的总容量、已用空间、可用空间及使用百分比。
基本用法:df -h
直接使用 df
命令会以 1KB 为单位显示信息,这对于人类阅读并不友好,我们通常会加上 -h
(human-readable)参数,它会以 KB、MB、GB 等更易读的格式输出。
df -h
执行后,您会看到类似以下的输出:
文件系统 | 容量 | 已用 | 可用 | 已用% | 挂载点 |
---|---|---|---|---|---|
/dev/vda1 | 50G | 5G | 39G | 19% | |
devtmpfs | 488M | 0 | 488M | 0% | /dev |
tmpfs | 497M | 0 | 497M | 0% | /dev/shm |
tmpfs | 497M | 4M | 489M | 2% | /run |
tmpfs | 497M | 0 | 497M | 0% | /sys/fs/cgroup |
/dev/vdb1 | 100G | 60G | 40G | 61% | /data |
输出字段解析:
- 文件系统: 分区的设备名称,如
/dev/vda1
。 - 容量: 该分区的总大小。
- 已用: 已使用的空间大小。
- 可用: 剩余的可用空间大小。
- 已用%: 磁盘使用率的百分比,这是需要重点关注的指标,当它接近 100% 时就需要警惕了。
- 挂载点: 该分区挂载到的目录路径。
其他实用参数
df -T
:在输出中增加一列,显示文件系统的类型(如 ext4, xfs)。df -h --total
:在最后一行显示所有文件系统的总计信息。df -h -x tmpfs -x devtmpfs
:使用-x
参数可以排除特定类型的文件系统,例如排除内存文件系统tmpfs
,让输出更聚焦于物理磁盘分区。
使用 du
命令深入分析目录空间
当 df
命令显示某个分区(如 或 /data
)空间紧张时,我们需要进一步定位到底是哪个目录或文件占用了大量空间,这时,du
(Disk Usage)命令就派上了用场。
常用组合:du -sh <目录>
du
命令默认会递归显示指定目录下所有子目录和文件的磁盘使用情况,输出通常非常冗长,我们经常使用 -s
和 -h
参数的组合。
-s
(–summarize):仅显示总计,即指定目录本身的总大小,而不列出其子目录。-h
(–human-readable):以人类可读的格式显示大小。
查看 /var
目录的总大小:
du -sh /var
输出可能为:1G /var
要查看 /var
目录下各个一级子目录的大小,以便快速定位占用空间最多的“罪魁祸首”,可以结合通配符 :
du -sh /var/*
输出示例:
180M /var/cache
1.2G /var/lib
58M /var/log
... (其他目录)
从上例可以清晰地看到,/var/lib
目录占用了最多的空间。
进阶技巧:查找最大的文件和目录
我们想知道一个目录下排名前 N 位的“大胃王”,这可以通过管道将 du
的输出传递给 sort
和 head
命令来实现。
以下命令可以查找当前目录下占用空间最大的前 10 个文件或目录:
du -ah . | sort -rh | head -n 10
命令拆解:
du -ah .
:-a
表示显示所有文件和目录, 代表当前目录。sort -rh
:-r
表示逆序排序(从大到小),-h
表示按人类可读的数字大小进行排序(非常重要!)。head -n 10
:只显示排序结果的前 10 行。
使用 ncdu
进行交互式分析
对于习惯了图形界面的用户来说,du
和 sort
的组合可能还不够直观。ncdu
(NCurses Disk Usage)是一个非常有用的工具,它提供了一个基于文本的交互式界面,让磁盘空间分析变得直观而高效。
需要安装 ncdu
,在 CentOS 7/8 上,可以使用 yum
或 dnf
:
# CentOS 7 sudo yum install ncdu # CentOS 8 sudo dnf install ncdu
安装完成后,直接在终端运行 ncdu
并指定要扫描的目录:
ncdu /data
ncdu
会先扫描指定目录下的所有文件,然后进入一个交互界面,在这个界面中:
- 使用上下方向键选择目录或文件。
- 按回车键进入选定的目录。
- 按左方向键或退格键返回上一级目录。
- 按 键查看帮助。
- 按
q
键退出。
ncdu
的最大优点是实时、排序清晰,并且可以像在文件管理器中一样逐层深入,极大地提高了定位大文件的效率。
使用 find
命令查找特定大文件
如果你只想查找超过特定大小的文件(大于 1GB 的文件),find
命令是最好的选择。
find / -type f -size +1G 2>/dev/null
命令拆解:
find /
:从根目录 开始搜索,你可以将其替换为任何路径,如/home
。-type f
:只查找文件(f),不查找目录。-size +1G
:查找大小大于 1GB 的文件,你也可以使用M
(兆字节)或k
(千字节),如+100M
。2>/dev/null
:这是一个很好的实践,它会将“权限不足”之类的错误信息重定向到空设备,使输出更干净。
如果还想查看这些文件的详细信息(如大小、修改时间),可以结合 -exec
参数:
find / -type f -size +100M -exec ls -lh {} ; 2>/dev/null
在 CentOS 中管理和分析磁盘空间,一个高效的流程通常是:
- 使用
df -h
快速概览,发现空间紧张的分区。 - 使用
du -sh /path/*
或ncdu /path
对该分区进行深入分析,定位占用空间最多的目录。 - 在确定的大目录中,使用
du -sh *
或find
命令进一步查找具体的大文件。 - 清理无用文件后,再次使用
df -h
确认空间是否已释放。
通过灵活组合使用 df
、du
、ncdu
和 find
这四个强大的工具,您就可以从容应对各种磁盘空间问题,确保服务器的稳定运行。
相关问答 FAQs
问题1:为什么我使用 df
命令看到磁盘空间几乎满了,但用 du
命令统计所有目录大小后,发现占用空间远没有那么多?
解答: 这是一个在 Linux 系统中非常经典的问题,最常见的原因是:某个文件已经被删除(使用 rm
命令),但仍然有正在运行的进程持有该文件的句柄,对于系统来说,只要文件句柄还存在,该文件占用的磁盘空间就不会被真正释放。du
命令统计的是目录树中实际存在的文件,所以看不到这部分空间;而 df
命令统计的是文件系统级别的超级块信息,它知道这部分空间已被分配。
解决方法:
- 使用
lsof +L1
或lsof | grep deleted
命令查找哪些已删除的文件仍被进程占用。 - 找到占用文件的进程(PID)后,可以重启该服务(如
systemctl restart nginx
)或者直接终止进程(kill -9 <PID>
),进程退出后,被其占用的空间就会被系统自动释放。
问题2:在 CentOS 中,有哪些目录是清理磁盘空间时需要特别注意的?
解答: 清理磁盘空间时,应谨慎操作,避免删除重要的系统文件,以下是一些通常可以安全清理的目录:
:日志目录,可以手动删除或清理一些旧的、滚动的日志文件(如 messages.1
,secure.2
等),对于当前正在使用的日志文件(如messages
),建议使用> /var/log/messages
的方式清空内容,而不是直接删除文件。/tmp
:临时文件目录,系统重启时会自动清空,但也可以在运行期间手动删除其中较旧的文件。- 软件包缓存:使用
yum clean all
(CentOS 7)或dnf clean all
(CentOS 8)命令可以清理掉已下载的、不再需要的软件包缓存,通常能释放几百兆甚至上 GB 的空间。 - 用户目录:检查各个用户在
/home
下的家目录,清理他们不再需要的大文件、下载内容或回收站(.local/share/Trash
)。
请务必避免删除 /bin
, /sbin
, /lib
, /etc
, /usr
等核心系统目录下的文件,除非你非常清楚自己在做什么。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复