服务器运维:Linux 磁盘查看 & 清理常用命令
一、整体使用思路(先看全局,再清理)
- 第一步:看整个磁盘使用情况(df)
- 第二步:看具体哪个目录占得多(du、ncdu 等)
- 第三步:按类型清理:
- 系统缓存 / 日志 / 旧内核 / 包管理器缓存
- 应用日志、临时文件
- 用户自己的大文件(日志、镜像、备份、下载等)
可以用一个小流程图来概括:
下面展开具体命令。
二、查看磁盘使用情况(“看”)
1. df:查看文件系统整体使用情况
- 查看所有挂载点的使用情况 :
df-h- -h:human-readable(K/M/G)
- 会显示每个挂载点:总容量、已用、可用、使用百分比、挂载点路径
- 只看本地的文件系统(不显示 tmpfs 等):
df-hT -x tmpfs -x devtmpfs- -T:显示文件系统类型(ext4、xfs 等)
- -x:排除某些类型
- 查看某个目录所在的文件系统使用情况:
df-h /var /homeFilesystem Size Used Avail Use% Mounted on /dev/sda2 50G 32G 16G 67% /
2. du:查看目录/文件占用的空间
- 查看当前目录下各一级子目录的大小:
du-h --max-depth=1- -h:人类可读
- –max-depth=1:只看一层
- 按大小排序,找出最大的几个目录(非常常用):
du-h --max-depth=1|sort-hr|head-n10- sort -hr:按数字逆序(大在前)且按人类可读格式(100M/1G)
- head -n 10:前 10 行【turn0search15】【turn0search16】
- 查看某个目录的总大小:
du-sh /var/log- -s:summary,只看总计
3. lsblk / fdisk -l:查看磁盘和分区
- 列出块设备及挂载点:
lsblk -f- -f:会显示文件系统类型、UUID、挂载点等
- 查看详细分区信息(需 root):
sudofdisk-l
4. 其他小工具
- ncdu:交互式的磁盘使用分析工具(很直观)
sudoncdu /- 使用方向键进入目录,按 d 删除文件/目录
- pydf:一个带彩色的 df 替代工具
pydf - baobab(图形化磁盘分析工具,GNOME 桌面
baobab
三、找出大文件/目录(“找”)
1. du 排序法(最常用)
- 找出当前目录下占用最大的 10 个目录/文件:
du-ah.|sort-hr|head-n10- -a:包含文件
- 指定目录,比如 /var 下:
du-ah /var2>/dev/null|sort-hr|head-n10
2. find + size 法(按文件大小查找)
- 查找大于 100M 的文件(从根目录开始,会有些慢,可换成具体路径):
sudofind/ -type f -size +100M2>/dev/null - 查找 /home 下大于 500M 的文件并显示大小:
逻辑:find/home -type f -size +500M -execdu-sh{}\;2>/dev/null|sort-hr|head-n10- -type f:只要文件
- -size +500M:大于 500M
- -exec du -sh {} ;:对每个文件执行 du -sh,显示大小
四、系统层面的常见清理(“系统清理”)
1. systemd 日志(journald)
默认 systemd 日志可能会越来越大,可以限制大小或保留时间:
- 将日志限制到最大 300M:
sudojournalctl --vacuum-size=300M - 只保留最近 10 天的日志:
sudojournalctl --vacuum-time=10d
查看当前日志占用:
sudojournalctl --disk-usage2. 包管理器缓存(以 Debian/Ubuntu 为例)
Ubuntu/Debian 中的 apt 会缓存大量 .deb 包:
- 清理已卸载软件的依赖包(不再需要的包):
sudoaptautoremove - 清理本地软件包缓存(/var/cache/apt/archives):
sudoaptcleansudoaptautoclean- clean:删除所有缓存包
- autoclean:只删除过期的旧版本包
- 删除旧内核(谨慎操作,至少保留一个可用的内核):
sudoaptautoremove --purge
3. 旧内核(更通用的方式)
查看已安装内核:
dpkg -l'linux-*'|sed'/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'(比较复杂,一般是包管理器自动清理)
更安全的方式是通过包管理器清理旧内核(如 apt autoremove,或对应发行版的命令)。
4. 系统临时目录 /tmp、/var/tmp
- 清理 /tmp(一般重启会自动清理,也可以手动):
注意:不要删 /tmp 本身目录,只删里面的内容。sudorm-rf /tmp/* - 清理 /var/tmp(通常保留更久,需谨慎确认内容):
sudorm-rf /var/tmp/*
5. 日志轮转 /var/log(logrotate)
通常系统通过 logrotate 来管理 /var/log 下的日志,可以手动触发轮转或检查配置:
- 手动执行轮转:
sudologrotate-f /etc/logrotate.conf - 查看/编辑配置:
sudoless/etc/logrotate.confsudols/etc/logrotate.d/
常见做法是在配置中设置:
- rotate 保留份数
- compress 压缩旧日志
- maxsize 单个日志最大大小
6. 用户回收站(桌面环境)
- 如果是图形桌面环境,回收站一般在:
- ~/.local/share/Trash/
- 或 ~/.Trash/
清理(谨慎):
rm-rf ~/.local/share/Trash/files/*rm-rf ~/.local/share/Trash/info/*
五、删除/清理文件的常用命令(“删”)
1. 基本删除命令
- 删除文件:
rm文件名 - 删除目录及内容(递归、强制):
rm-rf 目录名
注意:rm -f 不再提示,一定确认路径正确。
2. 按时间/名称/条件批量删除(find + rm)
- 删除 /var/log 下 30 天前修改的 .log 文件(先不加 -delete 测试):
确认无误后:sudofind/var/log -name"*.log"-type f -mtime +30sudofind/var/log -name"*.log"-type f -mtime +30 -delete - 删除 1 小时前修改过的文件(-cmin:按状态更改时间分钟):
find/path -type f -cmin +60 - 按名字包含某字符串删除(如包含 “chrome” 的文件):
find.-type f -name'*chrome*'-delete
3. 删除大量文件时的注意事项
某些目录包含数百万个文件时,直接rm -rf会非常慢,甚至失败【turn0search5】:
- 尝试使用 find + delete:
find目录 -type f -deletefind目录 -type d -empty -delete - 或用 rsync “空目录”覆盖的方式(进阶用法):
mkdir/tmp/emptyrsync-a --delete /tmp/empty/ 要清空的目录/
六、不同发行版的“一键清理”工具(可选)
- Ubuntu / Debian 系:
sudoaptautoremovesudoaptclean - Fedora / CentOS / RHEL 系(dnf/yum):
sudodnf clean allsudodnf autoremove - openSUSE(zypper):
sudozypperclean - Arch Linux:
sudopacman -Sc# 清理未安装包的缓存# 或sudopaccache -r# 使用 paccache 脚本清理旧版本缓存
七、安全检查与定期维护建议
- 清理前一定要做的事:
- 确认路径(多看几眼,尤其是带 / 的全局路径)
- 大规模删除前先“只列出不删除”(find 不加 -delete、rm 不加 -f)
- 对重要数据先备份
- 建议定期维护:
- 使用 crontab 定期:
- 清理临时文件
- 对日志做 journalctl --vacuum-time
- 运行 apt/yum/dnf autoremove 等
- 使用 crontab 定期:
- 示例 crontab(每周日凌晨 2 点检查一次磁盘):
编辑:
加入:crontab-e
把 df 结果写到日志,方便事后查看历史。0 2 * * 0 df -h >> /var/log/disk_usage.log
八、一个快速速查表
- 查看整体使用:df -h
- 查看某个目录占用:du -sh /path
- 找最大目录:du -h --max-depth=1 | sort -hr | head
- 找大文件:find /path -type f -size +100M
- 清理 systemd 日志:journalctl --vacuum-size=300M
- Debian/Ubuntu 清理包缓存:apt clean && apt autoclean && apt autoremove
- 按时间删除旧日志:find /var/log -name “*.log” -mtime +30 -delete
- 清理 /tmp:rm -rf /tmp/*
- 清理回收站(用户):rm -rf ~/.local/share/Trash/files/*