Ubuntu回收日志文件的常用方法
journalctl是Ubuntu管理systemd日志的核心工具,可高效清理旧日志或按大小缩减日志体积。
journalctl --disk-usage(显示当前日志总大小,如“1.2G”)。sudo journalctl --vacuum-time=1week(保留最近1周的日志,支持2d(2天)、3weeks(3周)等格式);sudo journalctl --vacuum-time=2weeks(保留2周日志)。sudo journalctl --vacuum-size=100M(删除日志直至占用≤100MB,可根据磁盘空间调整,如500M、1G)。sudo journalctl --vacuum-by-service=nginx(仅保留nginx服务的最近日志,适用于针对性清理)。/var/log是Ubuntu日志的默认存储路径,可直接删除特定文件或清空内容(需root权限)。
ls -l /var/log(确认需清理的文件,如syslog、auth.log、kern.log等)。sudo rm /var/log/syslog(删除系统日志)、sudo rm /var/log/auth.log(删除认证日志,谨慎操作,避免影响依赖该日志的服务)。sudo > /var/log/syslog(将文件内容清空,适用于不想删除文件但需释放空间的场景);sudo > /var/log/auth.log(同理清空认证日志)。sudo rm -rf /var/log/*(删除/var/log下所有文件,可能导致系统或服务无法追溯历史日志,仅建议在测试环境或确认无重要日志时使用)。logrotate是Ubuntu自带的日志管理工具,可实现日志的自动压缩、备份和删除,避免手动操作。
cat /etc/logrotate.conf(主配置文件,定义全局规则,如默认保留7天日志);ls /etc/logrotate.d/(查看针对特定服务(如rsyslog、nginx)的配置文件)。sudo logrotate -f /etc/logrotate.conf(强制执行轮转,忽略配置中的时间间隔,用于立即应用规则)。/etc/logrotate.d/rsyslog(针对rsyslog服务),添加以下内容:/var/log/syslog {
daily # 每天轮转
rotate 7 # 保留7个旧日志
compress # 压缩旧日志(如syslog.1.gz)
delaycompress # 延迟压缩(不压缩最新的旧日志)
missingok # 日志不存在时不报错
notifempty # 日志为空时不轮转
create 0640 root adm # 创建新日志时设置权限和所有者
}
此配置表示每天轮转syslog,保留7天压缩后的日志,节省磁盘空间。若需批量清空/var/log下的所有.log文件,可使用find命令结合truncate(快速置空文件内容,比rm更安全)。
sudo find /var/log -type f -name "*.log" -exec truncate -s 0 {} \;(查找/var/log下所有.log文件,并将内容截断为0字节,保留文件结构)。cp /var/log/syslog ~/syslog_backup备份关键日志,防止误删导致故障无法排查。kern.log(内核日志)、dmesg(硬件日志)等文件对系统诊断至关重要,删除前确认无需追溯。crontab -e,添加0 3 * * * journalctl --vacuum-time=1week。