插件窝 干货文章 如何使用Linux命令清理无用日志文件

如何使用Linux命令清理无用日志文件

日志 清理 log 文件 280    来源:    2025-05-04

Linux日志文件清理指南

作为IT工程师,清理日志文件是日常维护的重要工作。以下是一些高效清理无用日志文件的方法和最佳实践:

1. 查找日志文件

首先需要定位系统中的日志文件位置:

# 查找大日志文件(大于100MB)
find /var/log -type f -name "*.log" -size +100M -exec ls -lh {} \;

# 查找所有日志文件
find / -type f \( -name "*.log" -o -name "*.gz" -o -name "*.bz2" \) 2>/dev/null

2. 清理旧日志文件

按时间清理

# 删除30天前的日志文件
find /var/log -type f -name "*.log" -mtime +30 -delete

# 删除空日志文件
find /var/log -type f -name "*.log" -empty -delete

按大小清理

# 压缩大日志文件
find /var/log -type f -name "*.log" -size +100M -exec gzip {} \;

# 截断大日志文件(保留最近内容)
sudo truncate -s 0 /var/log/large.log

3. 使用logrotate工具

logrotate是Linux自带的日志管理工具,可以自动轮转、压缩和删除旧日志。

# 查看logrotate配置
cat /etc/logrotate.conf
ls /etc/logrotate.d/

# 手动执行logrotate
sudo logrotate -vf /etc/logrotate.conf

4. 清理特定服务的日志

清理journal日志

# 查看journal日志大小
journalctl --disk-usage

# 清理journal日志(保留最近500MB)
sudo journalctl --vacuum-size=500M

# 清理7天前的journal日志
sudo journalctl --vacuum-time=7d

清理Apache/Nginx日志

# Apache
sudo truncate -s 0 /var/log/apache2/access.log
sudo truncate -s 0 /var/log/apache2/error.log

# Nginx
sudo truncate -s 0 /var/log/nginx/access.log
sudo truncate -s 0 /var/log/nginx/error.log

5. 清理系统其他日志

# 清理旧的安装日志
sudo rm -f /var/log/installer/*

# 清理apt日志
sudo rm -f /var/log/apt/*.log

# 清理内核日志
sudo rm -f /var/log/kern.log*

6. 自动化清理脚本示例

#!/bin/bash
# 清理30天前的日志
find /var/log -type f -name "*.log" -mtime +30 -delete
# 压缩大日志文件
find /var/log -type f -name "*.log" -size +50M -exec gzip {} \;
# 清理空日志文件
find /var/log -type f -name "*.log" -empty -delete
# 清理journal日志
journalctl --vacuum-time=30d

最佳实践

  1. 不要直接删除正在写入的日志文件 - 使用truncate> filename清空内容
  2. 设置logrotate规则 - 为关键服务配置适当的日志轮转策略
  3. 保留必要的日志 - 根据合规要求保留足够时间的日志
  4. 监控日志大小 - 设置告警监控关键日志目录大小
  5. 考虑日志集中管理 - 对于分布式系统,考虑使用ELK等集中式日志管理方案

通过合理配置和定期维护,可以有效管理系统日志而不影响系统运行。