Ubuntu系统清理日志的常用方法
journalctl是Ubuntu默认的日志管理工具,适用于管理系统日志(如内核、服务、认证等)。其核心功能包括查看日志大小、清理旧日志及按条件筛选清理:
journalctl --disk-usage(显示当前日志总大小);sudo journalctl --vacuum-size=100M(保留最近100MB日志,删除旧日志);sudo journalctl --vacuum-time=2weeks(保留最近2周日志);sudo journalctl --vacuum-by-service=ssh.service(仅清理ssh服务的日志);sudo journalctl --vacuum-kernel=4.15.0-45-generic(清理指定内核版本的日志)。/var/log是Ubuntu存储系统及应用日志的核心目录(如syslog、auth.log、kern.log等)。手动清理需谨慎操作,避免误删关键日志:
ls -l /var/log(确认需清理的文件);sudo > /var/log/auth.log(用空内容覆盖文件,保留文件结构);sudo rm /var/log/syslog(彻底删除文件,需确认文件无用);sudo find /var/log -type f -iname "*.log" -exec sudo sh -c 'cat /dev/null > {}' \;(安全清空所有.log文件)。sudo rm -rf /var/log/*(会删除整个目录,可能导致系统无法诊断问题)。logrotate是Ubuntu默认的日志轮转工具,可自动压缩、删除旧日志,避免日志文件无限增长。默认配置文件位于/etc/logrotate.conf,服务特定配置位于/etc/logrotate.d/(如rsyslog、nginx):
cat /etc/logrotate.conf(了解全局设置,如保留天数、压缩方式);cat /etc/logrotate.d/rsyslog(示例:/var/log/syslog { rotate 7 daily compress delaycompress missingok notifempty create 0640 root adm },表示每天轮转,保留7天,压缩旧日志);sudo logrotate -f /etc/logrotate.conf(强制立即执行轮转)。rotate值、compress选项)。为避免频繁手动操作,可通过crontab设置定时任务,定期执行清理脚本:
/usr/local/bin/cleanup_logs.sh,内容如下:#!/bin/bash
# 清空/var/log下的所有.log文件
sudo find /var/log -type f -iname "*.log" -exec sudo sh -c 'cat /dev/null > {}' \;
# 删除7天前的备份日志(如*.log.1.gz)
sudo find /var/log -type f -iname "*.log.*.gz" -mtime +7 -exec rm -f {} \;
# 记录执行时间
echo "$(date '+%Y-%m-%d %H:%M:%S') - Logs cleaned up" >> /var/log/log_cleanup.log
sudo chmod +x /usr/local/bin/cleanup_logs.sh;crontab -e,添加以下行(每天凌晨2点执行):0 2 * * * /usr/local/bin/cleanup_logs.sh
该方法可实现自动化清理,释放磁盘空间的同时减少人工干预。