Linux系统中的/var/log目录是系统日志的核心存储位置,里面存放了系统启动、服务运行、应用程序报错等各类运行记录,这些文件对于系统故障排查、运行状态监控都有重要作用。很多用户在磁盘空间不足时,会考虑清理这个目录下的文件,但需要注意不能随意删除所有内容。

/var/log目录的核心作用
/var/log目录下的日志文件记录了系统从启动到当前运行的所有关键事件,不同文件对应不同的记录内容:
- 系统基础日志:比如messages记录系统通用信息,secure记录安全相关事件,dmesg记录内核启动信息
- 服务专属日志:比如nginx、mysql等服务会在该目录下生成自己的日志子目录,记录服务的运行状态和报错信息
- 用户操作日志:比如wtmp记录用户登录登出记录,lastlog记录所有用户最后登录时间
这些日志是运维人员排查系统故障、定位服务异常的核心依据,如果全部删除,后续系统出现问题将很难找到原因。
哪些/var/log文件可以安全清理
并不是所有/var/log下的文件都不能删除,部分已经归档的历史日志、体积过大的过期日志可以清理,具体可以分为以下几类:
可以清理的文件类型
- 以
.log.1、.log.2.gz等结尾的历史归档日志,这些是已经轮转过的旧日志,不再被实时写入 - 部分应用生成的临时调试日志,确认不再需要排查相关问题时可以删除
- 体积超过1G且长期未更新的单个日志文件,比如已经停止运行的服务留下的旧日志
绝对不能删除的文件类型
- 正在被系统或服务实时写入的
.log文件,直接删除会导致服务无法继续写入日志,甚至引发服务异常 - 系统核心的基础日志文件,比如messages、secure、dmesg等,删除后会影响系统基础功能
- /var/log目录本身,以及目录下的子目录结构,删除后服务无法正常生成新的日志文件
正确的/var/log清理方法
清理/var/log目录需要遵循安全原则,避免直接rm删除正在使用的文件,推荐以下几种正确的清理方式:
方法1:清空正在写入的日志文件
如果需要清理正在被写入的大体积日志文件,不要直接删除,而是清空文件内容,这样既释放空间,又不会影响服务写入:
# 清空指定日志文件内容,注意替换文件路径为实际需要清理的文件 > /var/log/nginx/access.log # 也可以使用truncate命令清空 truncate -s 0 /var/log/mysql/error.log
方法2:删除历史归档日志
对于已经轮转的旧日志,可以直接删除,这些文件不会被实时写入,删除后无副作用:
# 删除7天前的所有.gz归档日志 find /var/log -name "*.gz" -mtime +7 -delete # 删除所有以.log.数字结尾的历史日志 find /var/log -name "*.log.[0-9]" -delete
方法3:使用系统自带的日志清理工具
大部分Linux发行版都自带了日志管理工具,比如systemd系统的journalctl工具,可以安全清理系统日志:
# 清理7天前的系统日志 journalctl --vacuum-time=7d # 清理日志到剩余空间为500M journalctl --vacuum-size=500M
清理时的注意事项
清理/var/log目录时需要注意以下几点,避免出现系统问题:
- 清理前先确认文件是否正在被使用,可以通过
lsof | grep 文件名命令查看,如果有输出说明文件正在被占用 - 不要一次性删除所有文件,建议分批清理,清理后观察系统和服务是否运行正常
- 重要日志建议先备份再清理,比如将需要清理的大日志文件复制到本地存储,确认无问题后再删除
- 如果是生产环境,清理操作建议在业务低峰期进行,避免影响正常业务运行
常见问题解答
删除/var/log下的文件后服务无法启动怎么办
这种情况通常是删除了服务正在写入的日志文件,导致服务无法创建新的日志文件。可以手动创建对应的日志文件,并修改文件权限为服务运行用户的权限即可恢复:
# 以nginx为例,重新创建access.log文件并修改权限 touch /var/log/nginx/access.log chown nginx:nginx /var/log/nginx/access.log # 重启nginx服务 systemctl restart nginx
为什么清理后磁盘空间没有释放
如果删除的是正在被进程占用的日志文件,虽然文件被删除,但磁盘空间不会立即释放,因为进程还持有文件的句柄。可以通过重启占用文件的进程,或者使用lsof | grep deleted找到对应的进程ID,然后结束进程来释放空间。