先诊断、再清理、后防御,具体操作是使用 du 和 df 定位占用,用 rm、find、truncate 等命令精准清除,系统日志、缓存、旧内核是三大重点清理对象。
磁盘满了才着急?先从体检开始
很多朋友找我,第一句话就是“服务器上不去了,网站打不开了”,登录后台一看,磁盘使用率100%,连写日志的余地都没有,这时候千万别直接乱删文件,先花两分钟做个体检,摸清家底。
第一步:快速定位大文件和目录
用 df -h 查看整体分区占用情况,这一步能让你快速判断是系统盘还是数据盘满了。
df -h
如果看到 /dev/vda1 这类系统盘使用率超过80%,就需要进入下一步精细排查,用 du 命令扫描根目录下哪个目录最占空间。
du -sh / 2>/dev/null | sort -rh | head -20
这条命令会列出根目录下各个子目录的占用大小,从大到小排列,你会惊讶地发现,真正吃空间的往往就是 /var、/home、/usr 这三个目录。
第二步:细分目录深入排查
定位到大的目录后,一层层往下查。
du -sh /var/ 2>/dev/null | sort -rh | head -10
比如排查 /var 目录时,大概率能看到 log 和 lib 占用惊人。日志文件不清理,半年能涨到几十个G,这在中小型配置的云服务器上是致命的。
Linux云服务器清理文件命令的核心实战
体检报告出来了,硬盘确实被塞满了,那接下来就直接上手清理,这里按场景拆分,每种场景的清理原则不一样。
清理系统日志和临时文件
日志是占用磁盘的“头号元凶”。journald 是CentOS 7和主流Ubuntu的系统日志服务,它的历史日志默认不受限,时间久了会积累几十GB。
# 查看日志占用的磁盘空间 journalctl --disk-usage # 清理保留2天之前的日志 journalctl --vacuum-time=2d # 限制日志最大占用100M journalctl --vacuum-size=100M
/var/log/ 下的传统日志文件,syslog、messages、nginx access.log,使用 truncate 命令清空,不要用 rm 删除,原因很简单:很多进程已经打开了这些文件的句柄,直接删除磁盘空间不会立即释放,需要重启服务才行。
truncate -s 0 /var/log/syslog truncate -s 0 /var/log/messages
清理软件包缓存和孤儿依赖
Linux软件包管理器(yum、apt)在安装软件时会把下载的包缓存到本地,这些缓存文件在系统升级后完全不派用场。
# CentOS 系统 yum clean all # Ubuntu 系统 apt clean apt autoremove
清理临时文件使用 /tmp 目录下的旧文件遍历删除,这里注意别全删,只删超过7天的。
find /tmp -type f -mtime +7 -exec rm -f {} \;
清理旧内核
这是多数新手忽略的点,每次升级内核,旧的 vmlinuz 和 initramfs 文件都会留在 /boot 分区里。内核文件每个大约50M到100M,留三五个不觉得,留十个以上就开始吃紧。
# 查看当前正在使用的内核 uname -a # 查看系统已安装的内核列表 dpkg --list | grep linux-image # 或 rpm -qa | grep kernel
保留最近1-2个版本,其他用包管理命令删除,比如Ubuntu系统:
sudo apt autoremove --purge
这条命令会自动移除已不再需要的旧内核,如果系统盘空间逼不得已,也可以用 rm 直接删除 /boot 下的旧内核文件,但删除前务必确认不是你当前这个版本。
宝塔面板清理垃圾文件的便捷操作
用宝塔面板管理的云服务器,不用敲那么多命令,面板的“文件”模块自带空间分析功能,可以按目录大小排序查看。宝塔面板自身产生的日志和备份文件有时比网站日志更占空间。
网站日志与备份的清理
宝塔面板默认给每个站点开启了访问日志,写在 /www/wwwlogs/ 目录,建议在面板的“网站-配置文件”中关闭访问日志,或者设置日志切割任务。
# 清空所有网站的访问日志
find /www/wwwlogs -type f -name ".log" -exec truncate -s 0 {} \;
面板的“计划任务”如果设置了数据库自动备份,备份文件存放在 /www/backup/,检查这个目录,只保留最近3份备份即可。
清理干净的临时目录
PHP会话文件、上传临时文件堆积在 /tmp 或 /www/server/temp,用 find 删除10天以前的临时文件。
find /www/server/temp -type f -mtime +10 -exec rm -f {} \;
扫描Docker与Nginx日志目录的隐藏空间
在云服务器上跑Docker容器,日志膨胀速度比传统架构快得多,很多人在宿主机上排查了半天,结果发现空间全被Docker容器日志占了。
容器日志的边界处理
Docker容器默认会把标准输出写到 /var/lib/docker/containers/ 下,一个长期运行的高并发接口容器,日志文件轻松超过10GB,查看单个容器日志大小:
du -sh /var/lib/docker/containers//-json.log
清理方法是直接清空日志文件,注意是清空不是删除容器。
truncate -s 0 /var/lib/docker/containers/容器ID/容器ID-json.log
要一劳永逸,写个定时任务,每天凌晨清一次:
crontab -e
# 添加以下任务,每天4点执行
0 4 find /var/lib/docker/containers -name "-json.log" -type f -exec truncate -s 0 {} \;
Nginx反向代理的缓存清理
Nginx的代理缓存目录通常配置在 /var/cache/nginx 或宝塔的 /www/server/nginx/proxy_cache_dir,大型网站的高频调用会产生大量缓存碎片。
# 查看缓存目录大小 du -sh /var/cache/nginx # 清理前先移除缓存目录,重新创建 mv /var/cache/nginx /var/cache/nginx_bak && mkdir -p /var/cache/nginx # 重载Nginx - 释放空间 nginx -s reload # 确认新缓存目录工作正常后,删除备份 rm -rf /var/cache/nginx_bak
缓存清理需要谨慎,优先推荐直接删除缓存文件而不是清空整个目录,否则可能导致CPU短时占满,因为Nginx需要重新写缓存。
清理之后的熔断防御机制
很多用户清理完磁盘后,没过两个月又满了,原因就是没建立长效防御,磁盘检查要形成习惯,用一条命令快速扫描获取核心数据。
用crontab定时自动清理
将清理日志和临时文件的脚本写入一个 .sh 脚本,配合定时任务,让云服务器自己在后台开完刀还不留疤。
#!/bin/bash
# 清理journal日志
journalctl --vacuum-size=50M
# 清理超过5天的日志文件
find /var/log -type f -name ".log" -mtime +5 -exec truncate -s 0 {} \;
# 清理docker日志
find /var/lib/docker/containers -name "-json.log" -type f -exec truncate -s 0 {} \;
# 清理临时文件
find /tmp -type f -mtime +3 -exec rm -f {} \;
放入 crontab 设为每周执行一次:
0 3 0 bash /opt/clean_script.sh
关注可观测性文件,防患于未然
上面这些命令处理的是“垃圾文件”,但在高负载云服务器上,核心业务程序产生的输出文件才是空间杀手,如果看到某个文件在 du 排名中最高,先想想这是不是业务日志,如果是,那么不建议直接删除,建议在应用日志配置里添加日志分割策略,比如按天或按小时切割,并且清理7天前的历史分片。
业内专家指出,大部分云服务器磁盘告警发生在凌晨备份时段或大促流量洪峰之后,这与日志写入量直接相关。
Q&A:关于云服务器清理文件命令的常见疑问
清理云服务器文件会影响网站正常运行吗?
正常情况下不会,只要你不去删除业务目录(如 /www/wwwroot/ 下的项目代码)和数据库文件,清理日志、缓存、临时文件不会影响服务,但需要确保执行用户有权限,对系统目录清理时,务必使用 sudo 提权,并且建议在业务低峰期操作。
删除文件后磁盘空间还是没释放,是什么情况?
这个现象常见于有进程长时间打开文件的服务,比如Nginx、MySQL正在写入的日志文件,你用 rm 删除了文件,但进程仍持有文件句柄,空间要等进程重启后才释放。这类情况的正确做法是使用 truncate 清空文件内容而非删除文件,可以先用 lsof | grep deleted 查看正在占用但已被删除的文件列表。
宝塔面板和纯命令行清理,哪个更安全?
对于不熟悉Linux的用户,宝塔面板的目录排序功能更直观,误操作风险相对低,但面板自身的清理工具深度有限,比如不处理旧内核和Docker日志,纯命令行清理在掌控力和灵活性上更好,但需要在操作前备份关键配置,行业共识认为,熟练掌握Linux云服务器清理文件命令是运维的基本功,哪怕你用面板做日常管理,关键救援时刻还是得靠命令行入场。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/784844.html


