Linux日志命令大全:从日志小白到排查高手

引言:日志的那些事儿

大家好!作为一名Linux用户,你是否曾经遇到过这样的情况:

  • 网站突然挂了,一脸懵逼不知道发生了什么
  • 系统变得奇慢无比,却找不到原因
  • 安全警报响了,却不知道谁在搞事情

别担心!Linux的日志系统就像系统的”日记本”,记录着系统的一举一动。今天,我就带你掌握阅读这本”日记”的神奇技能!

📝 基础日志命令四剑客

1. tail - 实时追踪小能手

基本用法:

# 查看日志最后10行(默认)
tail /var/log/syslog

# 查看最后50行
tail -n 50 /var/log/auth.log

# 实时追踪日志更新(最常用!)
tail -f /var/log/nginx/access.log

进阶玩法:

# 实时追踪并高亮关键词
tail -f /var/log/nginx/access.log | grep --color "404"

# 同时追踪多个日志文件
tail -f /var/log/nginx/access.log -f /var/log/nginx/error.log

# 从第100行开始显示
tail -n +100 /var/log/syslog

2. head - 只看开头的好奇宝宝

基本用法:

# 查看日志前10行
head /var/log/bootstrap.log

# 查看前20行
head -n 20 /var/log/dpkg.log

实用场景:

# 查看最新的安装日志开头
head -n 30 /var/log/apt/history.log

# 结合grep查看匹配行的前几行
grep -B 5 "error" /var/log/syslog | head -n 20

3. cat - 直来直去的实在人

基本用法:

# 显示整个日志文件(小心,可能很长!)
cat /var/log/bootstrap.log

# 显示行号
cat -n /var/log/install.log

实用组合拳:

# 查看日志并显示行号
cat -n /var/log/syslog | tail -20

# 结合more/less分页查看
cat /var/long/log/file.log | less

4. less/more - 优雅的浏览专家

基本用法:

# 使用less浏览日志(推荐!)
less /var/log/syslog

# 使用more浏览
more /var/log/syslog

less的超级技巧:

在less中,你可以使用:
/关键词 - 搜索
n - 下一个匹配项
N - 上一个匹配项
G - 跳到文件末尾
g - 跳到文件开头
q - 退出
F - 实时追踪模式(类似tail -f)

🔍 高级搜索与过滤大师

5. grep - 日志搜索的瑞士军刀

基础搜索:

# 搜索包含"error"的行
grep "error" /var/log/syslog

# 忽略大小写
grep -i "error" /var/log/syslog

# 显示行号
grep -n "Failed" /var/log/auth.log

高级搜索技巧:

# 搜索多个关键词
grep -e "error" -e "warning" /var/log/syslog

# 反向搜索(不包含关键词的行)
grep -v "INFO" /var/log/application.log

# 显示匹配行及前后3行
grep -A 3 -B 3 "crash" /var/log/syslog

# 递归搜索目录
grep -r "database" /var/log/

6. awk - 文本处理魔术师

基本用法:

# 提取第一列和第四列
awk '{print $1, $4}' /var/log/nginx/access.log

# 根据条件过滤
awk '$9 == 404 {print $7}' /var/log/nginx/access.log

# 统计HTTP状态码出现次数
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn

实战案例:

# 分析Nginx日志,统计访问量前10的IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10

# 统计每个URL的访问次数
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

7. sed - 流编辑大师

实用技巧:

# 提取特定时间范围的日志
sed -n '/2023-10-01 14:00:00/,/2023-10-01 15:00:00/p' /var/log/syslog

# 替换文本
sed 's/error/ERROR/g' /var/log/application.log

# 删除包含特定关键词的行
sed '/debug/d' /var/log/application.log

🎯 实战场景大集合

场景1:实时监控网站访问

# 实时监控Nginx访问日志,高亮404和500错误
tail -f /var/log/nginx/access.log | awk '{
if($9 == "404") print "\033[33m" $0 "\033[0m";
else if($9 == "500") print "\033[31m" $0 "\033[0m";
else print $0
}'

场景2:分析系统登录情况

# 查看最近的成功登录
grep "Accepted" /var/log/auth.log | tail -10

# 统计失败登录尝试
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -rn

# 实时监控SSH登录
tail -f /var/log/auth.log | grep --color -E "(Accepted|Failed)"

场景3:排查系统故障

# 查看最近系统错误
grep -i "error\|fail\|critical" /var/log/syslog | tail -20

# 分析磁盘问题
dmesg | grep -i "disk\|memory\|error"

# 查看服务启动问题
journalctl -u nginx.service --since "1 hour ago"

场景4:性能监控

# 监控高内存进程
ps aux --sort=-%mem | head -10

# 查看系统负载历史
cat /var/log/syslog | grep "load average"

# 实时监控系统资源
watch -n 1 'echo "Memory:" && free -h && echo "Disk:" && df -h /'

🛠️ 专业工具推荐

8. journalctl - Systemd日志专家

# 查看所有日志
journalctl

# 查看指定服务日志
journalctl -u nginx

# 实时追踪
journalctl -f

# 查看今天日志
journalctl --since today

# 查看指定时间范围
journalctl --since "2023-10-01 09:00:00" --until "2023-10-01 17:00:00"

# 按优先级过滤
journalctl -p err
journalctl -p 0..4 # 0=emerg, 1=alert, 2=crit, 3=err, 4=warning

9. logrotate - 日志管理管家

查看日志轮转配置:

cat /etc/logrotate.conf
ls /etc/logrotate.d/

💡 实用小贴士

自定义日志监控脚本

#!/bin/bash
# 简单的日志监控脚本

LOG_FILE="/var/log/application.log"
ALERT_EMAIL="admin@company.com"

# 监控错误并发送警报
tail -F $LOG_FILE | while read line
do
if echo "$line" | grep -q "CRITICAL"; then
echo "$line" | mail -s "CRITICAL ERROR DETECTED" $ALERT_EMAIL
echo "[$(date)] CRITICAL ERROR: $line" >> /var/log/monitor.log
fi
done

彩色输出让日志更易读

# 在~/.bashrc中添加这些别名
alias tail-error='tail -f /var/log/syslog | grep --color -E "(ERROR|WARNING|CRITICAL)"'
alias grep-error='grep --color -E "(ERROR|WARNING|CRITICAL)"'

🎓 总结表格

命令 主要用途 使用频率 难度级别
tail -f 实时监控 ⭐⭐⭐⭐⭐ 入门
grep 关键词搜索 ⭐⭐⭐⭐⭐ 入门
less 浏览大文件 ⭐⭐⭐⭐ 入门
awk 数据分析 ⭐⭐⭐ 进阶
journalctl Systemd日志 ⭐⭐⭐⭐ 中级
sed 文本处理 ⭐⭐ 进阶

结语

掌握了这些日志命令,你就拥有了排查系统问题的”火眼金睛”。记住,优秀的系统管理员不是不会遇到问题,而是能够快速找到并解决问题。

日志就像系统的”自白书”,学会倾听它们的声音,你就能成为真正的Linux高手!

Happy logging! 🚀


PS: 如果你在实战中遇到有趣的日志问题,欢迎分享你的排查故事!