Linux日志查看常用命令
Linux日志查看常用命令
大多数日志操作都可以由这几个核心命令通过管道(|
)组合完成:
cat
:连接文件并打印到标准输出(查看整个文件)tail
:输出文件的末尾部分head
:输出文件的开头部分grep
:强大的文本搜索工具less
/more
:分页交互式查看文件awk
:强大的文本分析和处理语言sed
:流编辑器,用于过滤和转换文本sort
:对文本行进行排序uniq
:报告或忽略重复的行wc
:统计行数、单词数、字节数
一、基础查看与跟踪
1. tail
- 查看日志尾部(最常用)
这是查看最新日志的首选命令。
# 查看文件最后10行(默认)
tail /var/log/syslog# 查看最后100行
tail -n 100 /var/log/nginx/access.log# 实时追踪日志文件(极其重要!用于监控最新动态)
tail -f /var/log/apache2/error.log# 实时追踪并显示行号
tail -fn 50 /var/log/application.log# 在文件被轮转后仍能继续跟踪(如logrotate)
tail -F /var/log/application.log
-f
vs -F
:-F
更强大,即使日志文件被重命名或重建(如日志切割)也能继续跟踪。
2. head
- 查看日志开头
# 查看文件开头10行(默认)
head /var/log/syslog# 查看文件开头100行
head -n 100 /var/log/bootstrap.log
用途:查看日志文件的启动信息、初始化配置等。
3. cat
- 一次性显示整个文件
# 显示整个文件(不适合大文件)
cat /var/log/dpkg.log# 显示文件并带上行号(非常有用!)
cat -n /var/log/dpkg.log# 与grep结合使用(高亮匹配项)
cat -n /var/log/syslog | grep --color=auto "error"
4. less
/ more
- 分页查看(大文件首选)
# 使用 less 查看文件(推荐)
less /var/log/syslog# 使用 more 查看文件
more /var/log/syslog
less
常用操作(进入后):
空格键
/Page Down
:向下翻一页b
/Page Up
:向上翻一页/keyword
:向下搜索关键词(按n
下一个,N
上一个)?keyword
:向上搜索关键词G
:跳到文件末尾g
:跳到文件开头q
:退出
二、搜索与过滤
5. grep
- 强大的搜索工具(日志分析核心)
# 简单搜索包含 "error" 的行
grep "error" /var/log/syslog# 忽略大小写
grep -i "error" /var/log/syslog# 显示匹配行的前后内容(非常实用!)
grep -A 5 -B 5 "panic" /var/log/syslog # 显示匹配行及前后5行
grep -C 3 "Connection refused" /var/log/app.log # 显示匹配行及前后3行# 只显示匹配的模式,而不是整行(提取特定字段)
grep -o 'user=[a-zA-Z0-9]*' /var/log/auth.log# 反向选择,显示不包含 "INFO" 的行
grep -v "INFO" /var/log/application.log# 递归搜索目录下所有文件
grep -r "192.168.1.100" /var/log/# 使用正则表达式
grep -E "Failed|Error|Timeout" /var/log/application.log# 统计匹配的行数
grep -c "404" /var/log/nginx/access.log
6. 组合使用示例
# 查看最近1000行中包含 "error" 的行及其后2行
tail -n 1000 /var/log/syslog | grep -A 2 -i "error"# 实时跟踪并过滤
tail -f /var/log/nginx/access.log | grep "POST"# 查找并高亮,并显示行号
cat -n /var/log/syslog | grep --color=auto -C 2 "fail"
三、高级分析与统计
7. awk
- 文本处理瑞士军刀
# 打印日志的第5列(默认以空格分隔)
awk '{print $5}' /var/log/nginx/access.log# 打印特定列(例如IP和状态码)
awk '{print $1, $9}' /var/log/nginx/access.log# 使用特定分隔符(如逗号)
awk -F',' '{print $2}' /var/log/app.csv.log# 条件过滤(状态码为404的请求)
awk '$9 == 404 {print $1, $7}' /var/log/nginx/access.log# 统计状态码出现次数
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn# 统计IP访问次数
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
8. sed
- 流编辑器
# 显示特定行范围(第10-20行)
sed -n '10,20p' /var/log/syslog# 删除包含 "DEBUG" 的行
sed '/DEBUG/d' /var/log/application.log# 替换文本
sed 's/error/ERROR/g' /var/log/app.log# 显示从第100行到文件末尾
sed -n '100,$p' /var/log/syslog
9. 排序与去重统计
# 统计IP访问次数TOP 10
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10# 统计不同状态码数量
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c# 统计日志总行数
wc -l /var/log/syslog# 统计包含 "error" 的行数
grep -c "error" /var/log/syslog
四、实时监控与复杂分析
10. 实时监控日志中的错误
# 监控多个日志文件
tail -f /var/log/nginx/access.log /var/log/nginx/error.log# 实时跟踪并高亮错误
tail -f /var/log/application.log | grep --color=auto -E "ERROR|FAIL|Exception"# 使用 multitail 工具(需要安装)
multitail /var/log/nginx/access.log /var/log/nginx/error.log
11. 分析时间范围内的日志
# 使用 sed 提取时间范围(比如 14:00 到 14:30)
sed -n '/2024-01-01 14:00:/,/2024-01-01 14:30:/p' /var/log/application.log# 使用 awk 按时间过滤
awk '/2024-01-01 14:00:/,/2024-01-01 14:30:/' /var/log/application.log
五、实用单行命令合集
# 查看最近1小时内修改过的日志文件
find /var/log -name "*.log" -mmin -60# 压缩旧日志(保留原文件)
gzip /var/log/old.log# 查看压缩的日志
zcat /var/log/old.log.gz
zgrep "error" /var/log/old.log.gz# 清空日志文件(谨慎使用!)
: > /var/log/application.log
# 或者
cat /dev/null > /var/log/application.log# 监控HTTP状态码分布(实时)
tail -f /var/log/nginx/access.log | awk '{print $9}' | sort | uniq -c# 查找最频繁访问的URL
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20
总结
场景 | 推荐命令 |
---|---|
查看最新日志 | tail -f -n 100 filename.log |
搜索关键词 | grep -C 5 -i "error" filename.log |
大文件查看 | less filename.log |
统计与分析 | awk + sort + uniq 组合 |
实时监控过滤 | `tail -f filename.log |
提取特定字段 | awk '{print $1, $5}' filename.log |
掌握这些命令的组合使用,你将能高效地处理任何 Linux 日志分析任务。关键在于多用管道 |
将命令组合起来,每个命令只做一件事,然后组合成强大的处理流程。