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