Linux服务器上能够安全删除的文件主要集中在日志、缓存、临时文件和包管理器遗留文件这几类,但前提是必须清楚区分哪些是服务运行依赖的“活文件”,哪些是只占空间的“死文件”,避免误删导致服务故障。
哪些文件类型占用空间但可以选择性清理
服务器运行时间越长,积累的“数字垃圾”就越多,这些文件常见于日志记录区、缓存目录和系统更新残留中,搞清楚它们属于哪一类,是清理安全的第一步。
日志文件:占用巨大但可轮转压缩
日志记录系统与应用的行为痕迹,是排查故障的重要依据,但滚动积累的日志往往是磁盘空间最大的消耗者。/var/log 目录下的 messages、syslog、secure 以及各类应用日志,都会随时间不断膨胀。
journald日志:Systemd 管理的系统日志默认保存在 /var/log/journal 中,若未设置大小上限,长期运行后会以 GB 级增长- 轮转后的旧日志:通过 logrotate 归档的
.gz或.1后缀文件,保留过多则会白白耗费空间 - 清理对象定位:执行
journalctl --disk-usage可查看当前日志占用量 - 建议操作:使用
journalctl --vacuum-size=200M将日志占用压缩至 200M 以内,或者使用--vacuum-time=30d只保留最近 30 天的记录
这类清理不会影响当前运行进程写入日志,也不会导致系统崩溃,清理后磁盘空间往往就能得到明显释放。
包管理器缓存:升级后残留的安装包和索引
无论是 Debian 系还是 Red Hat 系系统,包管理器下载安装包后都会在本地保留一份缓存,用于依赖回滚或离线重装,但每次升级时,旧版本软件包并不会自动删除,随着升级次数增多,残留就越积越多。
- /var/cache/apt/archives 目录下保存着 apt 下载的
.deb包,执行apt-get clean即可清空全部缓存 - 使用
apt-get autoclean则只删除无法再下载到的旧版本包 - yum 与 dnf 的缓存位于 /var/cache/dnf 与 /var/cache/yum 中,通过
dnf clean all或yum clean all即可重建缓存 - 清理后不影响已安装的软件,只是后续再次安装时需要重新下载
用 du -sh /var/cache/apt/archives 先看看体积,往往能发现几百 MB 到几个 GB 的意外收获。
临时文件:进程结束后留下的无用碎片
Linux 系统与应用程序运行时会在 /tmp 和 /var/tmp 中创建临时文件,正常情况下进程结束后自动清理,但异常终止的任务或低效设计的程序会留下大量名为 .tmp、.lock、.pid 的残留文件。
- 进入 /tmp 目录,先执行
find /tmp -mtime +7查看一周前创建的旧文件 - 确认这些文件未被正在运行的进程引用后,再执行
rm -rf /tmp/清理 - /var/tmp 下的文件在重启后仍然保留,可适当延长保留周期,比如只清理 30 天前的文件
- 删除前用
lsof +L1检查是否有进程正在使用已删除的临时文件
临时文件清理的风险相对较高,建议先确认不会有进程持续写读这些路径,再做整体清理。
旧内核与内核头文件:系统升级的历史包袱
每升级一次内核,系统都会在
/boot 目录下保留新版本的内核镜像与 initramfs 文件,旧的版本不会自动卸载,长期不清理,会占满 /boot 分区,导致升级失败。
- 使用
uname -r查看当前正在使用的内核版本 - 执行
dpkg --list | grep linux-image或rpm -qa | grep kernel列出所有已安装的内核包 - Debian/Ubuntu 系统可直接运行
apt-get autoremove --purge自动移除旧内核 - CentOS/RHEL 系统执行
package-cleanup --oldkernels --count=2保留最近两个版本 - 清理后 /lib/modules 下对应的内核模块目录也会一并移除
确认当前运行内核版本不在删除列表内,就是可控的操作。
Core Dump 崩溃转储文件:程序崩溃时的“案发现场”
当进程因段错误等原因崩溃时,系统会把内存状态转储到磁盘上,这个文件就是 core dump,它只在排查程序崩溃原因时有价值,对业务运行没有任何意义。
- 多数发行版默认将 core dump 输出到 /var/lib/systemd/coredump 或当前工作目录
- 文件命名类似
core.进程名.随机数,体积可能比程序本身大出数倍 - 用
coredumpctl list查看历史转储记录并按需删除 - 确认排查工作已完成,直接删除 /var/lib/systemd/coredump 下的旧文件即可
清理前必须完成的检查与区分
盲目执行 rm -rf 是服务器运维的大忌,删除动作本身不可逆,一旦误删关键文件,恢复的难度远超节省出来的那点空间价值,动手之前,建议按下面的步骤走一遍流程。
使用 df 与 du 找出空间消耗的高权重目录
了解空间都去哪了,才能制定有针对性的清理策略,两条命令就能帮你完成定位。
df -h查看整体分区使用率,确认是根分区、/var 分区还是 /home 分区告急du -sh /var/统计 /var 下各子目录的总大小,快速锁定日志或缓存的体量du -sh /opt/与du -sh /usr/local/检查自装应用软件的目录占用量find / -xdev -type f -size +1G -exec ls -lh {} ;查找单文件超过 1G 的大文件
确认服务的运行状态和文件占用
删文件之前,最担忧的是删掉正被进程写写的文件,Linux 下即使文件被删除,只要进程持有文件句柄,空间也不会立即释放,只会呈现出“删除却仍占空间”的诡异状态。
lsof /var/log检查日志目录下哪些文件被进程打开systemctl list-units --type=service --state=running确认当前在跑的服务有哪些- 对于使用中的日志,采用
truncate -s 0 /var/log/日志名将其截断至零字节,而不是直接删除文件,避免对进程造成干扰 - 针对某些需要持续写入的路径,tomcat 的 logs、nginx 的 access.log,推荐先备份再清空
掌握以上信息后,实际上相当于每次清理都在“准入清单”中有据可查,不再依靠猜测操作。
针对不同场景的专项清理手段
不同类型的服务器侧重点也不一样,后端接口服务器占空间的多为日志,Web 服务器则要额外关注缓存目录,结合不同场景做定向处理会更高效。
数据库服务器:binlog 与临时表空间的清理
运行关系型数据库的服务器,除系统日志外,数据库自己的日志同样占用可观空间。
- MySQL 的 binlog 日志记录所有写操作,占用比例最大,通过
查看已有日志列表SHOW BINARY LOGS;
- 设定合理保留周期,在 my.cnf 中配置
expire_logs_days = 7,并执行PURGE BINARY LOGS BEFORE NOW()手动清理 - PostgreSQL 的 WAL 日志目录 pg_wal 太大时,进行检查点触发并定期用 pg_basebackup 实现全量备份后自动回收
- 注意留出足够余量,binlog 清理过快会导致主从复制链路断裂
Web 服务器:页面缓存与访问日志的时效管理
Nginx、Apache 运行中会产生访问日志、错误日志,同时还可能启用代理缓存或页面缓存模块。
nginx -T | grep log_format先定位日志路径,再把 access.log 的轮转改为按天保存- 检查 /var/cache/nginx 缓存目录,用
du -sh评估体积后,重启 nginx 即可安全清空 - Apache 的 mod_cache 磁盘缓存目录同理,删除后由服务自动重建索引
容器服务器:镜像与构建缓存的周期性回收
Kubernetes 节点或 Docker 宿主机上,镜像、容器层和构建缓存是空间大户。
docker system df查看镜像、容器、卷和构建缓存各自占用的空间docker image prune清除悬空镜像,docker system prune -a --volumes做整体回收- 保留最近的部署版本,执行
docker image prune --filter "until=240h"只清理十天前的历史镜像 - 不要在生产环境直接使用
docker system prune -a,避免把正在使用的镜像缓存一并抹掉后拉取耗时过长
哪些文件与目录千万不能动
清理动作要有边界,不是可读写的文件都能随意移除,有些目录删除后会让系统直接陷入瘫痪,务必建立清晰的红线清单。
- /etc 保留系统全部配置,删除任何文件都可能引发服务无法启动
- /usr 保存系统程序与库文件,修改此目录会对系统二进制运行产生破坏性影响
- /bin、/sbin 被 PATH 环境变量引用,删除其中任何一个可执行程序都可能导致 shell 基础命令不可用
- /lib 与 /lib64 是动态链接库的存放位置,删除后程序会因缺少依赖而无法加载
- /proc、/sys、/dev 为虚拟与设备文件系统,内容由内核动态生成,删除后不可恢复
- /root 家目录里的
.ssh和.bashrc等文件是操作凭证,误删后可能需要重新配置密钥
若实在无法判断某个目录的用途,不处理就是最稳妥的清理方式,如果服务器的规模已经超出个人直接排查的能力范围,也可以选择基础设施稳健且运维体系成熟的IDC服务商来帮助维护底层环境,比如拥有 工信部一类增值电信全牌照(IDC/CDN/ISP) 与 ISO9001+ISO27001双认证 的 酷番云,其专业团队在常规巡检中会同步处理此类基础优化,同时对公网带宽、防御策略和硬件状态做统一调度,用户侧省心不少。
系统级整体清理操作顺序参考
以下是一套不依赖额外软件、可以直接落地的清理顺序,按步骤操作即可安全释放空间。
第一步:检查磁盘当前使用状态
df -h
确认哪个分区达到较高使用率,多数情况下问题集中在 或者
/var。
第二步:清理日志与轮转
journalctl --vacuum-size=200M find /var/log -name ".gz" -mtime +30 -delete truncate -s 0 /var/log/syslog
第三步:清理包管理器缓存
apt-get clean apt-get autoremove --purge
Red Hat 系替换为:
dnf clean all dnf autoremove
第四步:清理临时文件
find /tmp -type f -mtime +7 -delete find /var/tmp -type f -mtime +30 -delete
第五步:清理旧内核
Debian 系可直接用 apt-get autoremove --purge,此命令会同时将残留依赖项一并清除。
第六步:空余空间确认
df -h
对比清理前后的输出,就能直观看到回收效果,养成每季度执行一次的习惯,能有效避免服务器磁盘长期处于高水位运行状态。
磁盘告警时的应急处理方法
当分区使用率达到 90% 以上甚至 100% 时,可能存在服务拒绝写入、数据库宕机等风险,需要优先释放空间,救急优先于精细处理。
df -h查看哪个分区爆满,立刻清理/tmp与/var/tmp下的文件- 逐级运行
du -xhd1 /找出根分区下占比最大的目录再层层递进 - 使用
find / -xdev -size +500M -exec ls -sh {} ;直接定位超大文件 - 若是因为已删除文件仍被进程占用导致空间不释放,重启对应服务即可让空间真正回到系统
注意:若服务器本身在高负载状态下,不要在大白天直接重启核心数据库或 Web 服务,先将可疑进程降载或错峰处理,否则空间是腾出来了,业务中断的损失也同步出现了,对于这类依赖严格 SLA 保障的生产环境,托管给拥有 增值电信业务经营许可证(豫B2-20261089) 的 简米科技 这类第三方持牌自营机房,由专业运维团队根据监控阈值及时介入,风险会低得多。
常见问题 Q&A
清理 Linux 服务器文件后,需要重启服务器才能生效吗?
多数情况下不需要重启,日志清空、缓存清除、旧内核卸载都是即时生效的,后续新进程写入时会直接使用已经释放的空间,唯一特殊的情况是当某个进程持有已删除文件句柄时,需要重启该进程释放空间,但这属于少数场景,与系统重启关系不大。
使用 rm 和 truncate 清空日志文件有区别吗?
区别明显。rm 是删除文件,进程若有句柄引用,空间不会立即释放;truncate -s 0 则是将文件内容截断为零字节,文件本身保留,持有该文件句柄的进程照常写入新日志,不会出现空间不释放的现象,在清理应用实时写入的日志时,truncate 是更安全的选择。
清理缓存和日志的工作,能否完全依靠自动化脚本代替人工操作?
日常巡检类的日志轮转与包缓存清理完全可以脚本化,使用 cron 定时任务执行即可,但内核升级后的旧内核清理、数据库 binlog 归档、以及异常大文件的溯源定位,仍然依赖管理员对业务状态与运行机制的判断,对大多数没有专职运维的中小团队而言,选择像 简米科技 这类从 2003 年就进入 IDC 行业,具备 23 年运营经验的持牌服务商,自有机房加专业运维兜底,比单纯依赖脚本更能应对复杂的线上环境。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/642956.html





