菜鸟科技网

Linux日志常用命令有哪些?

Linux系统中,日志管理是系统运维和故障排查的核心环节,通过查看日志可以快速定位问题根源、监控系统运行状态以及追踪安全事件,Linux日志通常存储在/var/log目录下,不同类型的日志由不同的系统服务或应用程序生成,掌握常用的日志查看和分析命令,能够显著提升运维效率,以下将详细介绍Linux日志管理中常用的命令及其使用方法。

基础日志查看命令

  1. cat命令
    cat是最基础的文本查看命令,适用于查看较小的日志文件,查看系统启动日志/var/log/boot.log,可以使用cat /var/log/boot.log,若需显示行号,可添加-n参数:cat -n /var/log/boot.log,但cat会一次性加载整个文件,对于大日志文件可能导致终端卡顿,因此不推荐直接查看大型日志。

  2. less与more命令
    lessmore是分页查看工具,适合处理大文件。more只能向前翻页,按空格键下一页,按q退出;less支持前后翻页(方向键或PageUp/PageDown),并支持搜索()和跳转(G到末尾,1G到开头),查看系统日志/var/log/syslogless /var/log/syslogless功能更强大,是运维中更常用的分页工具。

  3. head与tail命令

    • head:用于查看文件开头部分,默认显示前10行,查看日志最新状态的前20行:head -n 20 /var/log/auth.log
    • tail:查看文件末尾部分,常用于实时监控日志更新,实时查看系统日志的实时输出:tail -f /var/log/syslog-f参数会持续跟踪文件变化,按Ctrl+C退出,若需查看末尾50行:tail -n 50 /var/log/kern.log

高级日志过滤与分析命令

  1. grep命令
    grep是文本搜索工具,用于从日志中过滤特定关键词,在/var/log/apache2/access.log中搜索包含"error"的行:grep "error" /var/log/apache2/access.log,常用参数包括:

    • -i:忽略大小写(grep -i "ERROR" log.txt
    • -v:反向匹配(排除包含关键词的行)
    • -c:统计匹配行数(grep -c "404" /var/log/nginx/access.log
    • -A 3 -B 3:显示匹配行及其前后3行(grep -A 3 -B 3 "failed" /var/log/secure)。
  2. awk命令
    awk是强大的文本处理工具,基于列进行提取和计算,从/var/log/nginx/access.log中提取IP地址和访问状态码(假设日志格式为IP - - [时间] "请求" 状态码):awk '{print $1, $9}' /var/log/nginx/access.log,统计每个IP的访问次数:awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr

  3. sed命令
    sed(流编辑器)用于对文本进行替换、删除等操作,将日志中的"old_ip"替换为"new_ip":sed 's/old_ip/new_ip/g' /var/log/app.log,若需直接修改文件(慎用),添加-i参数:sed -i 's/old_ip/new_ip/g' /var/log/app.log

  4. sort与uniq命令

    • sort:对文本行进行排序,默认按ASCII码顺序,按访问量对IP排序:awk '{print $1}' /var/log/nginx/access.log | sort
    • uniq:去除相邻重复行,常与sort配合使用统计唯一值,统计唯一IP数量:awk '{print $1}' /var/log/nginx/access.log | sort | uniq | wc -l
  5. journalctl命令
    对于使用systemd的现代Linux系统,journalctl是查看系统日志的核心命令。

    • 查看内核日志:journalctl -k
    • 查看系统服务日志:journalctl -u nginx.service
    • 实时查看日志:journalctl -f
    • 按时间范围查看:journalctl --since "2025-10-01" --until "2025-10-02"
    • 按优先级过滤(如错误日志):journalctl -p err

日志轮转与归档管理

Linux系统通过logrotate工具实现日志轮转,避免单个日志文件过大,配置文件通常位于/etc/logrotate.conf/etc/logrotate.d/目录下。/etc/logrotate.d/nginx配置了Nginx日志的轮转规则:每日轮转、保留30天历史、压缩旧日志等,手动触发轮转可使用logrotate -f /etc/logrotate.d/nginx

日志文件类型与常见路径

日志文件名 说明
/var/log/syslog 系统日志,记录内核、服务等信息
/var/log/auth.log 认证日志,记录用户登录、sudo操作等安全事件
/var/log/kern.log 内核日志,记录硬件驱动、系统错误等
/var/log/dmesg 系统启动时的内核消息
/var/log/apache2/access.log Apache访问日志,记录客户端请求
/var/log/nginx/access.log Nginx访问日志,记录请求详情
/var/log/mysql/error.log MySQL数据库错误日志
/var/log/boot.log 系统启动日志,记录启动过程中的服务状态

日志分析实战案例

案例1:排查Web服务器404错误

# 统计404错误次数并排序
grep " 404 " /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -nr
# 查看特定IP的404请求
grep "192.168.1.100" /var/log/nginx/access.log | grep " 404 "

案例2:分析系统登录失败原因

# 查看登录失败记录
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr
# 统计失败IP的登录尝试次数
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head -10

相关问答FAQs

Q1: 如何实时监控多个日志文件的更新?
A1: 可以使用tail命令结合multitail工具(需安装),例如multitail -f /var/log/syslog /var/log/nginx/error.log,或使用tail的多个实例配合&后台运行,例如tail -f /var/log/syslog & tail -f /var/log/auth.log &inotifywait(来自inotify-tools工具包)也可实现文件变更监控,例如inotifywait -m /var/log -e modify

Q2: 日志文件过大导致磁盘空间不足,如何快速清理?
A2: 首先通过du -sh /var/log/*定位大日志文件,然后根据情况处理:

  • 对于已轮转的旧日志,直接删除:rm /var/log/nginx/access.log.1.gz
  • 使用logrotate强制轮转并清理:logrotate -f /etc/logrotate.d/nginx
  • 清空当前日志文件(需谨慎,避免影响服务):> /var/log/app.log(注意:此操作会清空文件内容,但文件句柄仍存在,服务可能继续写入)
  • 若服务支持,重启服务可自动创建新日志文件:systemctl restart nginx,建议定期配置logrotate规则,避免日志堆积。
分享:
扫描分享到社交APP
上一篇
下一篇