Linux系統日志清理實戰指南
系統日志是記錄系統運行狀態、服務活動和安全事件的關鍵文件,但隨著時間推移,日志文件會不斷膨脹(如/var/log/syslog、/var/log/auth.log等),占用大量磁盤空間。以下是安全、高效清理系統日志的實戰方法,覆蓋手動清理、自動工具和預防措施。
在清理前,需先確認哪些日志文件占用空間最大,避免盲目操作。使用以下命令快速定位:
# 進入/var/log目錄
cd /var/log
# 查看各日志文件大?。ò磸拇蟮叫∨判颍?/span>
sudo du -sh *.log *.gz 2>/dev/null | sort -hr | head -n 10
# 或使用journalctl查看systemd日志占用(適用于systemd系統)
sudo journalctl --disk-usage
注意:優先清理舊日志(如帶.gz后綴的壓縮日志、.1/.2等數字后綴的輪轉日志),避免刪除正在使用的當前日志(如syslog、auth.log)。
若當前日志文件(如syslog、auth.log)過大,可直接清空內容(而非刪除文件),不影響系統服務運行:
# 清空syslog(Ubuntu/Debian)
sudo truncate -s 0 /var/log/syslog
# 清空auth.log(Ubuntu/Debian)或secure(CentOS/RHEL)
sudo truncate -s 0 /var/log/auth.log # 或 /var/log/secure
說明:truncate -s 0將文件大小截斷為0字節,保留文件本身,避免因刪除文件導致服務報錯。
舊日志通常會被壓縮為.gz格式(如syslog.1.gz、auth.log.2.gz),可直接刪除:
# 刪除所有.gz后綴的舊日志
sudo rm -f /var/log/*.gz
# 或僅刪除7天前的舊壓縮日志(更安全)
sudo find /var/log -type f -name "*.gz" -mtime +7 -delete
注意:壓縮日志已無實時價值,刪除后可快速釋放空間。
若需保留近7天的日志,可使用find命令刪除更早的文件:
# 刪除/var/log目錄下所有.log文件(不含.gz)中7天前的
sudo find /var/log -type f -name "*.log" ! -name "*.gz" -mtime +7 -delete
說明:-mtime +7表示修改時間超過7天的文件,-delete需謹慎使用,建議先運行find命令預覽(去掉-delete)確認目標文件。
若系統使用systemd(現代Linux發行版的默認初始化系統),可通過journalctl命令高效管理日志:
# 查看當前journal日志總大小
sudo journalctl --disk-usage
sudo journalctl --vacuum-time=7d
sudo journalctl --vacuum-size=500M
sudo journalctl --vacuum-time=2025-01-01
sudo journalctl --rotate
說明:旋轉日志后,舊日志會被壓縮為.journal~格式,可通過--vacuum命令清理。
手動清理需重復操作,logrotate是Linux自帶的日志輪轉工具,可實現自動壓縮、刪除舊日志。默認配置文件位于/etc/logrotate.conf,自定義配置需放在/etc/logrotate.d/目錄下。
# 強制立即執行logrotate(測試配置是否正確)
sudo logrotate -f /etc/logrotate.conf
以/var/log/syslog為例,在/etc/logrotate.d/syslog中添加以下配置:
/var/log/syslog {
daily # 每天輪轉
rotate 7 # 保留7個舊日志
compress # 壓縮舊日志(.gz格式)
delaycompress # 延遲壓縮(如不壓縮第6個舊日志)
missingok # 若日志不存在也不報錯
notifempty # 若日志為空則不輪轉
postrotate # 輪轉后執行的命令(通知rsyslog重新打開日志文件)
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
說明:配置完成后,logrotate會按計劃(通常每天)自動執行,無需手動干預。
除系統日志外,/tmp和/var/tmp目錄下的臨時文件也會占用空間,可使用以下命令清理:
# 清空/tmp目錄下的所有文件(謹慎使用,確保無正在使用的文件)
sudo rm -rf /tmp/*
# 清空/var/tmp目錄下的所有文件(保留超過1天的文件)
sudo find /var/tmp -type f -mtime +1 -delete
注意:/tmp目錄下的文件通常會在系統重啟時自動清空,但長期運行的服務器需定期清理。
sudo cp /var/log/syslog /mnt/backup/syslog.bak
syslog、auth.log等當前日志文件,刪除可能導致服務無法記錄新日志。cron定時任務(如每周日凌晨2點執行):# 編輯當前用戶的cron任務
crontab -e
添加以下內容:0 2 * * 0 /usr/bin/find /var/log -type f -name "*.gz" -delete && /usr/bin/journalctl --vacuum-time=7d
df -h定期檢查磁盤使用情況,及時發現空間不足問題。通過以上方法,可有效清理系統日志,釋放磁盤空間,同時保證系統日志的完整性和可追溯性。建議結合手動清理與自動化工具(如logrotate),形成常態化的日志管理機制。