如何清理Ubuntu日志节省空间
Ubuntu系统的日志文件主要存储在/var/log目录下,长期积累会占用大量磁盘空间(尤其是服务器环境)。以下是安全、高效的清理方法,按推荐优先级排序:
journalctl是systemd的日志管理工具,可精准控制systemd-journald生成的日志(覆盖多数系统服务日志),支持按时间或大小清理,避免误删关键信息。
journalctl --disk-usage
输出示例:Archived and active journals take up 1.2G in the file system.sudo journalctl --vacuum-time=7d
sudo journalctl --vacuum-time=1month
sudo journalctl --vacuum-size=100M
ssh.service的旧日志:sudo journalctl --vacuum-service=ssh.service
5.15.0-45-generic):sudo journalctl --vacuum-kernel=5.15.0-45-generic
若需直接操作日志文件(如删除特定文件或清空内容),可通过以下命令完成,但需避免删除正在使用的日志(如syslog、auth.log)。
ls -lh /var/log
重点关注.log(当前日志)、.gz(压缩的旧日志)、.1(轮转后的旧日志)等后缀文件。auth.log(认证日志):sudo truncate -s 0 /var/log/auth.log
或使用重定向到空设备:sudo > /var/log/auth.log
sudo find /var/log -type f -name "*.log" -exec truncate -s 0 {} \;
sudo rm /var/log/syslog.2.gz # 删除syslog的第二轮转日志
logrotate是Ubuntu自带的日志管理工具,可自动完成日志的压缩、删除和轮转,无需手动干预,适合长期维护。
cat /etc/logrotate.conf
主要参数说明:
rotate 7:保留7个轮转日志(如syslog.1到syslog.7);compress:压缩旧日志(节省空间);daily:每日轮转;missingok:日志不存在时不报错。cat /etc/logrotate.d/rsyslog
示例配置(/var/log/syslog):/var/log/syslog {
rotate 7
daily
compress
delaycompress
missingok
notifempty
create 0640 root adm
}
表示:每天轮转syslog,保留7个压缩的旧日志(syslog.1.gz到syslog.7.gz),跳过空日志。sudo logrotate -f /etc/logrotate.conf
强制立即执行轮转,观察/var/log目录下是否生成新的轮转日志。旧内核的日志会保留在/var/log中(如kern.log.1、syslog.2.gz),若系统已升级内核且旧内核不再使用,可清理对应的日志文件。
dpkg --list | grep linux-image
输出示例:ii linux-image-5.15.0-86-generic 5.15.0-86.95 amd64 Linux kernel image for version 5.15.0 on 64 bit x86 SMP
ii linux-image-5.15.0-88-generic 5.15.0-88.98 amd64 Linux kernel image for version 5.15.0 on 64 bit x86 SMP
当前运行的内核为5.15.0-88-generic(通过uname -r查看),5.15.0-86-generic为旧内核,其对应的日志可清理。kern.log.1、syslog.2.gz中属于旧内核的部分),或通过journalctl清理旧内核日志(参考方法1的“清理特定服务/内核日志”)。cp /var/log/syslog /var/log/syslog.bak备份关键日志,防止误删。syslog、auth.log等正在写入的日志,删除可能导致系统日志记录中断。journalctl --vacuum-time=7d或logrotate -f添加到cron任务(如每周日凌晨2点执行),实现自动化清理。通过以上方法,可有效清理Ubuntu系统日志,释放磁盘空间,同时保证系统日志的完整性和可追溯性。