菜鸟科技网

打日志命令有哪些?

在Linux和Unix-like系统中,日志记录是系统管理和故障排查的核心环节,通过命令行工具可以高效地查看、过滤和分析日志文件,以下是常用的打日志相关命令及其详细用法,涵盖系统日志、应用日志、实时监控等场景。

打日志命令有哪些?-图1
(图片来源网络,侵删)

基础日志查看命令

  1. cat
    用于直接输出日志文件的全部内容,适合查看小型日志文件。

    cat /var/log/syslog  # 查看系统日志
    cat /var/log/auth.log  # 查看认证日志

    缺点:大文件会瞬间刷屏,需结合moreless分页查看。

  2. less/more
    分页查看工具,支持上下翻页和关键词搜索。

    less /var/log/nginx/access.log  # 交互式查看,按`/`搜索关键词
    more /var/log/kern.log  # 逐页显示,不可回退
  3. tail
    实时监控日志末尾内容,是排查实时问题的利器。

    打日志命令有哪些?-图2
    (图片来源网络,侵删)
    tail -f /var/log/mysql/error.log  # 持续跟踪新增日志
    tail -n 100 /var/log/apache2/access.log  # 查看最后100行
  4. head
    查看日志文件开头部分,适合检查最新配置或错误起始点。

    head -50 /var/log/dmesg  # 查看系统启动日志的前50行

日志过滤与分析命令

  1. grep
    按关键词过滤日志,支持正则表达式和颜色高亮。

    grep "ERROR" /var/log/app.log  # 筛选包含ERROR的行
    grep -i "warning" /var/log/syslog  # 忽略大小写
    grep -A 3 -B 1 "failed" /var/log/auth.log  # 显示匹配行及前后3行
  2. awk
    按列提取或处理日志,适合结构化日志分析。

    awk '{print $1, $9}' /var/log/nginx/access.log  # 提取IP和请求路径
    awk '/POST/ {count++} END {print "POST请求总数:", count}' /var/log/apache2/access.log  # 统计POST请求数
  3. sed
    流编辑器,用于日志替换或删除特定行。

    打日志命令有哪些?-图3
    (图片来源网络,侵删)
    sed -i 's/192.168.1.1/xxx/g' /var/log/app.log  # 替换IP为xxx
    sed -i '/DEBUG/d' /var/log/app.log  # 删除包含DEBUG的行

系统日志管理工具

  1. journalctl(Systemd系统)
    查看和管理systemd的统一日志,功能强大。

    journalctl -u nginx  # 查看nginx服务日志
    journalctl -f -u mysql  # 实时跟踪mysql服务
    journalctl --since "2023-10-01" --until "2023-10-02"  # 查看指定时间范围日志
    journalctl -p err  # 只显示错误级别及以上日志
  2. dmesg
    查看内核环缓冲区日志,记录硬件驱动和系统启动信息。

    dmesg | grep -i usb  # 查看USB相关内核日志
    dmesg -T  # 显示可读时间格式

日志轮转与归档

  1. logrotate
    系统自动日志轮转工具,按配置切割、压缩旧日志。
    cat /etc/logrotate.d/nginx  # 查看nginx日志轮转配置
    logrotate -f /etc/logrotate.d/nginx  # 强制执行轮转

应用日志工具示例

  1. rsyslog
    传统系统日志服务,通过配置文件管理日志格式和存储位置。

    tail -f /var/log/syslog  # 查看rsyslog收集的日志
    vim /etc/rsyslog.conf  # 编辑日志规则
  2. ELK Stack(Elasticsearch+Logstash+Kibana)
    企业级日志分析平台,需部署服务后通过filebeat等工具收集日志。

    filebeat -e -c filebeat.yml  # 启动filebeat收集日志到ELK

常见日志文件路径

日志类型 路径 说明
系统日志 /var/log/syslog 系统通用日志
认证日志 /var/log/auth.log 用户登录、sudo操作记录
应用日志(Nginx) /var/log/nginx/access.log 访问日志
应用日志(MySQL) /var/log/mysql/error.log 数据库错误日志
内核日志 /var/log/dmesg 系统启动和内核事件
日志轮转配置 /etc/logrotate.d/ 各服务日志轮转规则

相关问答FAQs

Q1: 如何实时监控多个日志文件的变化?
A1: 使用tail -f结合multitail工具(需安装)或inotifywait(inotify-tools包)。

multitail -f /var/log/nginx/error.log /var/log/mysql/error.log  # 同时监控两个日志
inotifywait -m /var/log/app.log -e modify | while read; do tail -n 10 /var/log/app.log; done  # 监听文件变化并输出最后10行

Q2: 如何高效查找大日志文件中的特定错误?
A2: 结合grepawk优化搜索,或使用ripgreprg)提升速度。

grep -n "CRITICAL" /var/log/huge.log | head -20  # 显示错误行号及前20条
rg -n "ERROR" /var/log/huge.log --limit 100  # 使用ripgrep快速搜索并限制输出行数
awk '/FATAL/ {print $0, strftime("%Y-%m-%d %H:%M:%S", $1)}' /var/log/app.log  # 结合时间戳格式化输出
分享:
扫描分享到社交APP
上一篇
下一篇