可以删的文件集中在日志、缓存、临时文件、旧备份和回收站这几类,删之前先分清“垃圾”和“正在使用的数据”,确认后清理能快速释放磁盘空间。
先给服务器做个“体检”,再谈删除
服务器磁盘告急时,别急着乱删,先把磁盘占用情况摸清楚,才知道哪些文件可以删、哪些不该碰,行业共识认为,清理服务器文件的第一步永远是查看磁盘空间分布,而不是凭感觉找文件。
登录服务器后,用以下命令快速定位占用大户:
df -h du -h --max-depth=1 / 2>/dev/null | sort -rh | head -20
第一条命令看整体分区使用率,第二条命令递归统计根目录下各子目录的大小,看到输出结果后,重点检查这几个常见目录:
- /var/log系统日志和软件日志的默认老家
- /tmp存放临时文件的公共区域
- /var/cache各类包管理器和应用程序的缓存目录
- /home/用户名/备份很多站长喜欢把备份堆在某个不显眼的地方
将磁盘占用情况和业务类型做对比,基本就能判断出哪些文件是“赘肉”。
网站服务器缓存文件哪些可以删
缓存文件是清理时的“第一优先级”,它们是程序为了加速访问生成的中间数据,删了会自动重建,性价比极高。
程序运行时缓存
常见的有PHP类的框架缓存、前端静态文件缓存、对象缓存等,这类文件通常存在于项目目录下的runtime、cache、temp文件夹中。
以ThinkPHP和Laravel项目为例:
# 清除ThinkPHP运行时缓存 rm -rf /www/wwwroot/你的站点/runtime/ # 清除Laravel缓存 php artisan cache:clear
删除后程序会自动重建缓存,没有任何副作用,但有一个细节需要注意:清缓存前建议先让网站访问量处于低峰期,避免重建缓存时出现短暂的高CPU占用。
浏览器强制缓存文件
有些服务器上配置了nginx或Apache的页面压缩缓存,比如fastcgi_cache、proxy_cache指定的缓存目录,这些缓存文件以jpeg、html、json碎片形式存在,直接删除即可,删除前看一眼配置路径:
nginx -T | grep -E "fastcgi_cache_path|proxy_cache_path"
把命令输出的缓存目录路径填进去,执行rm -rf 路径/,然后nginx -s reload重载配置,清理就完成了。
Docker镜像和容器垃圾
如果服务器装了Docker,清理空间的关键在镜像层,旧镜像依赖、悬空镜像、停止的容器日志都是磁盘杀手。
# 查看磁盘占用 docker system df # 删除悬空镜像和停止的容器 docker container prune -f docker image prune -f
清理完顺手执行docker system prune -a,但注意这个命令会把没有被容器引用的镜像全删掉,部署时依赖旧镜像回滚的场景慎用。
服务器日志文件清理方法
日志文件是另一个“吞磁盘大户”,尤其是没配日志轮转的服务器,单个日志涨到上百GB都正常,不同位置的日志,处理方式不同。
systemd日志清理
使用CentOS 7+或Ubuntu 16+的服务器,日志由journald管理,默认只限制在/run/log/journal或/var/log/journal,检查一下:
journalctl --disk-usage
如果显示占用几个GB,执行:
# 只保留最近2天日志 journalctl --vacuum-time=2d # 或者限定日志总大小只占500MB journalctl --vacuum-size=500M
配一个定时任务,让系统每个月自动清理一次,比每次手动操作靠谱得多。
Nginx和Apache访问日志
/var/log/nginx/access.log或/var/log/apache2/access.log这类文件,记录着每一条HTTP请求,业务量大的站点一天就能写几百MB,处理办法分两步:
- 先接管日志轮转系统自带的
logrotate已经默认配置了nginx日志轮转,检查配置是否生效:
cat /etc/logrotate.d/nginx
- 轮转间隔设置为
daily,保留30天足够了,时间再长只会堆砌没人看的旧数据,在轮转期间,copytruncate参数能确保nginx不中断写日志。
对于已经膨胀到几GB的旧日志,直接删掉最省事:
rm -f /var/log/nginx/access.log-
删完不需要重启服务,日志文件重新写入时会自动创建。
pm2或node服务日志
用pm2管理Node.js应用的服务器,日志默认放在~/.pm2/logs,长时间运行的应用,out.log和error.log都能轻松超过10GB。
pm2 flush # 清空全部日志 pm2 startup # 配置启动时日志清理策略
更推荐的做法是在pm2启动时附加--merge-logs参数,再通过pm2 install pm2-logrotate装上日志切割模块,把日切割大小设为100M,保留份数设为10。
哪些服务器文件千万别碰
清理时容易手滑的区域,误删后的恢复成本远高于省下的那点空间。
数据库数据目录
/var/lib/mysql、/var/lib/postgresql、或宝塔面板中database目录,存放的是所有数据库的物理文件,删掉一个ibd文件等于直接报废一张表,数据无价,别为那一两GB空间赌运气。
/usr /bin /lib等系统目录
新手最容易犯的错是看到/usr/local目录特别大就顺手删旧软件包,但/usr下的东西牵一发动全身,未必都依赖包管理器记录,比如/usr/local里的python源码编译安装目录,删了之后很多运维脚本直接跑不起来。
有个更安全的替代方案用包管理器清理:
# CentOS清理yum缓存 yum clean all # Ubuntu清理apt缓存 apt-get clean
这些命令只清理没用的安装包缓存,不碰实际安装的程序。
/root 下的隐藏备份文件
很多服务器里藏着.sql.gz、.zip、site_backup.tar这类备份文件,体积大得吓人,但删除前先确认备份是否同步到了其他地方,业内专家指出,服务器本地备份最大的价值是防误删和快速回滚,删本地备份前必须确认异地有副本,确认过有云端备份后,本地保留最新的2份就够,其他都可清掉。
用宝塔面板的站长怎么清理操作更方便
宝塔面板是国内站长使用率非常高的工具,面板上大部分“哪些文件可以删”的问题都能通过图形界面解决。
文件目录按大小排序
打开宝塔的“文件”功能,进入/www/wwwroot,右上角选择按“大小”倒序排列,立马就能看到占用最高的是哪个站点目录,进入站点目录后,重点排查这三个子目录:
- runtime程序运行时缓存
- logs单独的日志目录
- backup面板自动备份的压缩包
其中backup通常是被人遗忘的重灾区,宝塔默认的备份计划每天拉一次备份到/www/backup,但很多站长把备份路径改到了站点同一磁盘分区,运行半年后这个目录能吞掉几十GB。
宝塔系统加固后的清理限制
开了系统加固或防篡改的宝塔面板,删除文件前要先到“安全-SSH管理”里临时关闭“禁止删除文件”策略,否则提示“Permission denied”却在界面上看不出原因,清理完再回面板恢复防守,整个操作不超过一分钟。
数据库日志文件
MySQL开binlog的服务器,/www/server/data目录下会堆积大量mysql-bin.0000xx文件,这些文件记录着全部数据库变更日志,是增量备份的基础,确认在用的备份策略依赖binlog的情况下,删除就等于废掉了恢复能力。
更稳妥的做法是设置过期自动清理:
-- 在mysql命令行执行,保留最近3天binlog PURGE BINARY LOGS BEFORE NOW() - INTERVAL 3 DAY;
执行前先查一下当前binlog保留策略SHOW VARIABLES LIKE 'expire_logs_days';,MySQL 8.0以上用binlog_expire_logs_seconds控制。
临时目录的安全清理法
/tmp目录建议每周清理一次,但直接rm -rf /tmp/有个隐患有些正在运行的进程临时文件写一半被你删了,可能触发服务异常,用以下命令排除正在使用的文件:
find /tmp -type f -mtime +7 -exec rm -f {} \;
这条命令只删除修改时间超过7天前的文件,正在使用的文件因为持续写入,修改时间新,不会误伤。
清理后的验证与预防
清理完别急着关终端,配合一条命令确认一下效果:
df -h /
同时查看你的网站页面响应速度是否恢复正常,给服务器配一个每周自动清理的任务,Linux下用cron实现:
crontab -e
添加一行:
0 2 1 journalctl --vacuum-size=500M; find /tmp -mtime +7 -exec rm -rf {} \;
让每周一凌晨2点自动执行日志限制和临时文件清理,比等磁盘满了再动手更省心。
临时文件的代价与阈值管理
每个应用都会在系统临时目录、php的session目录、或者软件自带temp文件夹产生临时文件,这类文件的特点是非常陈旧后毫无价值,且数量巨大,尤其适合find命令做时间维度批量清理。
PHP站点session文件
PHP默认把session存放在/tmp或var/lib/php/sessions,长期运行的站点,这里能积攒几十万个无主session文件,它们不再被任何用户会话引用,删除不影响线上功能:
find /var/lib/php/sessions -type f -mtime +30 -delete
文件上传临时目录
/tmp目录下的php开头的临时文件,是PHP上传文件时留下的中间产物,nginx处理multipart上传时也可能产生client_temp目录下的碎片文件,这些文件一旦上传完成就毫无意义,清理规则同样用mtime +1来过滤。
服务器磁盘空间不足时花钱升级前先看清可回收空间
很多低价服务器套餐,数据盘只有40GB,磁盘满时接到的第一反应往往是升级配置买更大硬盘,但专业运维给出的更优解是先把可回收的空间挤出来,据统计,相当一部分磁盘告警的服务器,可清理空间占总空间比值达30%以上,而这些空间多为日志、缓存、临时文件。
看清楚可回收空间的流程是df -h定位分区,du -sh | sort -rh在对应目录里找到最大占用的文件类别,执行完上文提到的所有清理手段后,再回到df -h看使用率是否下降到安全线(通常低于80%),如果清理完仍然逼近85%以上,再考虑升级套餐也不迟,这类场景下更换服务器配置时,注意迁移数据时的排障窗口期。
常见问题 Q&A
服务器磁盘爆满最优先删哪些文件,不影响网站正常运行?
优先清理/var/log下的日志文件、/tmp下的临时文件、程序runtime缓存三个位置,日志文件直接rm扩容最明显;runtime缓存目录删除后自动重建;临时文件对业务没有依赖,处理完这三处,磁盘使用率能明显下降,网站不受影响。
为什么日志文件删除后磁盘空间没有立刻释放?
服务器里删除文件后空间不释放,通常是有进程仍持有旧日志的文件句柄,遇到这种情况,执行lsof -nP +L1找出被占用但已删除的文件与对应进程PID,然后使用kill -USR1 PID通知进程重新打开日志(nginx支持热重载信号),或直接restart对应服务,系统会在进程释放句柄后完成磁盘空间的真正回收。
宝塔面板的备份多久删除一次比较合适?
本地备份保留最近3份即可,多份备份叠加的空间成本远大于实际回滚价值,如果站点每天产生全量网站+数据库备份,保留3天就覆盖了绝大多数误操作场景,超过3天以上的备份不在服务器本地留,定期转移到对象存储或异地FTP,服务器磁盘只为短期容错服务,不为长期存档买单。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/774428.html


