温馨提示×

如何清理Linux大量日志

小樊
47
2026-08-02 06:27:06
栏目: 智能运维

清理 Linux 上的大量日志,通常可以从定位大文件 → 安全清理 → 设置自动轮转三个层面来做。下面按常见场景说明。


一、先确认哪些日志占用空间最多

1. 查看磁盘整体情况

df -h

2. 找出占用空间大的目录

du -h --max-depth=1 /var/log

3. 找出大文件(>100MB)

find /var/log -type f -size +100M

二、安全清理日志的方法(推荐)

✅ 方法 1:清空日志文件(不删文件,最安全)

推荐用于正在写入的日志

> /var/log/syslog
> /var/log/messages
> /var/log/nginx/access.log

或:

truncate -s 0 /var/log/syslog

✅ 优点:

  • 不影响服务
  • 不会破坏文件 inode

✅ 方法 2:删除旧日志(已轮转的)

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

常见可删文件:

  • *.log.1
  • *.log.2
  • *.gz
  • *.old

⚠️ 不要直接删 *.log(可能正在写入)


✅ 方法 3:使用 journalctl 清理 systemd 日志

# 查看占用
journalctl --disk-usage

# 只保留最近 3 天
journalctl --vacuum-time=3d

# 限制最大 500MB
journalctl --vacuum-size=500M

三、Docker / Kubernetes 日志清理

Docker 容器日志

du -sh /var/lib/docker/containers/*

清理方式(不删容器):

truncate -s 0 /var/lib/docker/containers/*/*-json.log

✅ 长期方案:配置 daemon.json

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}

四、设置日志自动轮转(非常重要)

1. 检查 logrotate

ls /etc/logrotate.d/

2. 示例:nginx 日志轮转

/var/log/nginx/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    create 0640 www-data adm
    postrotate
        systemctl reload nginx
    endscript
}

3. 手动测试

logrotate -vf /etc/logrotate.conf

五、常见日志位置速查

类型 路径
系统日志 /var/log/syslog / messages
登录日志 /var/log/secure / auth.log
Nginx /var/log/nginx/
Docker /var/lib/docker/containers/
systemd journalctl

六、不推荐的做法 ❌

  • 直接 rm -rf /var/log/*
  • 删除正在写入的 .log 文件
  • 不配置轮转,只靠人工清理

七、一键清理示例(安全版)

find /var/log -type f -name "*.gz" -delete
find /var/log -type f -name "*.1" -delete
journalctl --vacuum-time=7d

如果你愿意,可以告诉我:

  • 服务器 / Docker / Kubernetes
  • 日志路径或 df -h 输出
  • 是否生产环境

我可以给你一套完全适合你环境的清理方案

0