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

基础日志查看命令
-
cat
用于直接输出日志文件的全部内容,适合查看小型日志文件。cat /var/log/syslog # 查看系统日志 cat /var/log/auth.log # 查看认证日志
缺点:大文件会瞬间刷屏,需结合
more
或less
分页查看。 -
less
/more
分页查看工具,支持上下翻页和关键词搜索。less /var/log/nginx/access.log # 交互式查看,按`/`搜索关键词 more /var/log/kern.log # 逐页显示,不可回退
-
tail
实时监控日志末尾内容,是排查实时问题的利器。(图片来源网络,侵删)tail -f /var/log/mysql/error.log # 持续跟踪新增日志 tail -n 100 /var/log/apache2/access.log # 查看最后100行
-
head
查看日志文件开头部分,适合检查最新配置或错误起始点。head -50 /var/log/dmesg # 查看系统启动日志的前50行
日志过滤与分析命令
-
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行
-
awk
按列提取或处理日志,适合结构化日志分析。awk '{print $1, $9}' /var/log/nginx/access.log # 提取IP和请求路径 awk '/POST/ {count++} END {print "POST请求总数:", count}' /var/log/apache2/access.log # 统计POST请求数
-
sed
流编辑器,用于日志替换或删除特定行。(图片来源网络,侵删)sed -i 's/192.168.1.1/xxx/g' /var/log/app.log # 替换IP为xxx sed -i '/DEBUG/d' /var/log/app.log # 删除包含DEBUG的行
系统日志管理工具
-
journalctl
(Systemd系统)
查看和管理systemd的统一日志,功能强大。journalctl -u nginx # 查看nginx服务日志 journalctl -f -u mysql # 实时跟踪mysql服务 journalctl --since "2023-10-01" --until "2023-10-02" # 查看指定时间范围日志 journalctl -p err # 只显示错误级别及以上日志
-
dmesg
查看内核环缓冲区日志,记录硬件驱动和系统启动信息。dmesg | grep -i usb # 查看USB相关内核日志 dmesg -T # 显示可读时间格式
日志轮转与归档
logrotate
系统自动日志轮转工具,按配置切割、压缩旧日志。cat /etc/logrotate.d/nginx # 查看nginx日志轮转配置 logrotate -f /etc/logrotate.d/nginx # 强制执行轮转
应用日志工具示例
-
rsyslog
传统系统日志服务,通过配置文件管理日志格式和存储位置。tail -f /var/log/syslog # 查看rsyslog收集的日志 vim /etc/rsyslog.conf # 编辑日志规则
-
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: 结合grep
和awk
优化搜索,或使用ripgrep
(rg
)提升速度。
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 # 结合时间戳格式化输出