在 Linux 系統中搜索日志是日常運維的重要工作,以下是幾種常用的關鍵字搜索日志方法:
1. 基礎 grep 搜索
bash
復制
# 基本搜索(區分大小寫) grep "keyword" /var/log/syslog# 忽略大小寫搜索 grep -i "error" /var/log/syslog# 顯示匹配行及前后5行內容 grep -A 5 -B 5 "error" /var/log/syslog # 或簡寫為(顯示前后各5行) grep -C 5 "error" /var/log/syslog# 顯示匹配行的行號 grep -n "error" /var/log/syslog
2. 高級 grep 用法
bash
復制
# 正則表達式搜索 grep -E "error|fail|critical" /var/log/syslog# 反向搜索(顯示不包含關鍵字的行) grep -v "success" /var/log/syslog# 統計匹配次數 grep -c "error" /var/log/syslog# 只顯示匹配的部分(而非整行) grep -o "error=[0-9]*" /var/log/syslog
3. 實時日志監控
bash
復制
# 實時跟蹤日志并過濾 tail -f /var/log/nginx/access.log | grep "404"# 多文件實時監控(需要安裝multitail) multitail -e "error" /var/log/syslog /var/log/nginx/error.log
4. 搜索壓縮日志
bash
復制
# 搜索.gz壓縮文件 zgrep "error" /var/log/syslog.2.gz# 搜索多個壓縮文件 zcat /var/log/syslog.*.gz | grep "error"
5. 使用 journalctl(systemd系統)
bash
復制
# 基本搜索 journalctl -x | grep "error"# 按時間過濾 journalctl --since "2023-10-01" --until "2023-10-02" | grep "error"# 按服務/單元過濾 journalctl -u nginx.service | grep "error"# 實時監控 journalctl -f | grep "error"
6. 組合命令高級搜索
bash
復制
# 搜索多個關鍵字(OR條件) grep -e "error" -e "fail" /var/log/syslog# 同時滿足多個條件(AND條件) grep "error" /var/log/syslog | grep "connection"# 搜索后排序并統計 grep "error" /var/log/syslog | cut -d' ' -f5 | sort | uniq -c | sort -nr# 查找最近修改的日志文件并搜索 find /var/log -type f -mtime -1 -exec grep -i "error" {} +
7. 常用日志文件路徑
日志文件 | 用途 |
---|---|
/var/log/syslog | 通用系統日志 |
/var/log/messages | 系統消息(RHEL/CentOS) |
/var/log/auth.log | 認證相關日志 |
/var/log/kern.log | 內核日志 |
/var/log/dmesg | 啟動消息 |
/var/log/nginx/ | Nginx日志目錄 |
/var/log/apache2/ | Apache日志目錄 |
/var/log/mysql/ | MySQL日志目錄 |
小技巧
-
使用?
less
?查看日志時可以按?/
?然后輸入關鍵字進行搜索 -
對于大文件,先用?
head
?或?tail
?查看部分內容再搜索 -
使用?
alias
?創建常用搜索的快捷方式 -
考慮使用?
logwatch
?或?goaccess
?等工具進行更專業的日志分析
根據你的具體需求選擇合適的搜索方法,組合使用這些命令可以大大提高日志分析的效率。