温馨提示×

如何清理Linux历史日志

小樊
47
2026-07-07 03:56:08
栏目: 智能运维

清理 Linux 历史日志(如系统日志、用户操作历史、应用日志等)需要根据日志类型系统发行版选择对应方法。以下是常见场景的详细操作指南,操作前建议备份重要日志(如需要审计时)。

一、清理系统日志(rsyslog/journald)

Linux 系统日志主要由 rsyslog(传统日志服务)或 systemd-journald(systemd 系统日志)管理,不同服务清理方式不同。

1. 清理 rsyslog 日志(CentOS 6/7、Ubuntu 16.04 及更早版本)

rsyslog 日志通常存储在 /var/log/ 目录下,例如:

  • /var/log/messages:系统通用日志
  • /var/log/secure:安全日志(SSH 登录、sudo 操作等)
  • /var/log/cron:定时任务日志
  • /var/log/dmesg:内核启动日志

清理方法

  • 临时清空单个日志文件(保留文件,清空内容):
    truncateecho 清空(避免直接删除文件导致服务无法写入):

    # 清空 /var/log/messages
    sudo truncate -s 0 /var/log/messages
    # 或
    sudo echo > /var/log/messages
    
  • 批量清空 /var/log 下所有 .log 文件(谨慎!):

    sudo find /var/log -type f -name "*.log" -exec truncate -s 0 {} \;
    
  • 删除旧日志轮转文件(如 .gz 压缩包):
    rsyslog 会通过 logrotate 自动轮转日志(保留旧日志为 .1.gz 等),可直接删除:

    sudo rm -f /var/log/*.gz /var/log/*.1 /var/log/*.old
    

2. 清理 systemd-journald 日志(CentOS 7+、Ubuntu 16.04+、Debian 8+)

systemd 系统的日志由 journald 管理,存储在 /var/log/journal/(持久化)或 /run/log/journal/(临时)。

清理方法

  • 查看当前日志大小

    journalctl --disk-usage
    
  • 按时间清理(保留最近 N 天/小时):

    # 保留最近 7 天的日志
    sudo journalctl --vacuum-time=7d
    # 保留最近 24 小时
    sudo journalctl --vacuum-time=24h
    
  • 按大小清理(限制日志总大小):

    # 保留最多 100MB 日志
    sudo journalctl --vacuum-size=100M
    
  • 清空所有 journal 日志(彻底删除):

    sudo journalctl --vacuum-time=0s  # 保留 0 秒,即全部删除
    # 或直接删除持久化目录(需重启 journald)
    sudo rm -rf /var/log/journal/*
    sudo systemctl restart systemd-journald
    

二、清理用户操作历史

用户操作历史(如命令历史、登录记录)存储在用户家目录或系统日志中。

1. 清理当前用户的命令历史(bash/zsh)

  • bash 历史:存储在 ~/.bash_history

    # 清空当前用户历史
    history -c  # 清空内存中的历史(当前终端生效)
    echo > ~/.bash_history  # 清空文件中的历史(永久生效)
    
  • zsh 历史:存储在 ~/.zsh_history

    history -c
    echo > ~/.zsh_history
    
  • 所有用户的历史(需 root 权限):

    sudo find /home -name ".bash_history" -exec truncate -s 0 {} \;
    sudo truncate -s 0 /root/.bash_history  # root 用户历史
    

2. 清理登录/操作审计日志

系统会记录用户登录、sudo 操作等,日志位置:

  • /var/log/wtmp:记录登录成功历史(last 命令读取)
  • /var/log/btmp:记录登录失败历史(lastb 命令读取)
  • /var/log/lastlog:记录所有用户最后登录时间(lastlog 命令读取)
  • /var/log/secure/var/log/auth.log:sudo、SSH 操作日志(rsyslog 管理)

清理方法

  • 清空 wtmp/btmp(避免 last/lastb 显示历史):

    sudo truncate -s 0 /var/log/wtmp
    sudo truncate -s 0 /var/log/btmp
    
  • 若需清理 secure/auth.log(如 SSH 登录记录),参考上文 rsyslog 日志清理方式。

三、清理应用日志

常见应用(如 Nginx、MySQL、Docker)的日志通常存储在 /var/log/ 下的子目录,例如:

  • Nginx:/var/log/nginx/(access.log、error.log)
  • MySQL:/var/log/mysql/(error.log)
  • Docker:/var/log/docker.log 或容器日志(/var/lib/docker/containers/

清理方法

  • 直接清空应用日志文件(需先停止应用,避免写入冲突):

    # 例:清理 Nginx 日志
    sudo systemctl stop nginx
    sudo truncate -s 0 /var/log/nginx/access.log
    sudo truncate -s 0 /var/log/nginx/error.log
    sudo systemctl start nginx
    
  • 若应用支持日志轮转(如 Nginx 可通过 logrotate 配置),可修改 /etc/logrotate.d/nginx 调整轮转策略(如保留天数、大小)。

四、注意事项

  1. 备份重要日志:若需审计(如排查故障、安全事件),清理前先备份:

    sudo cp -r /var/log /var/log_backup_$(date +%Y%m%d)
    
  2. 避免直接删除日志文件:直接 rm 日志文件可能导致服务无法写入(需重启服务恢复),建议用 truncate -s 0 清空内容。

  3. 日志轮转配置:长期管理日志建议通过 logrotate 自动轮转(配置文件在 /etc/logrotate.conf/etc/logrotate.d/ 下),例如设置日志保留 7 天、超过 100M 自动切割。

  4. 合规性风险:清理日志可能违反安全审计要求(如等保、企业合规),操作前确认是否允许。

总结

  • 系统日志:journalctl --vacuum-time(systemd)或 truncate 清空 rsyslog 文件。
  • 用户历史:history -c + 清空 ~/.bash_history
  • 应用日志:停止应用后清空对应日志文件,或配置 logrotate 自动管理。

根据实际需求选择操作,谨慎清理生产环境日志

0