一、什麼是Linux日誌?爲什麼重要?

在Linux系統中,日誌就像“系統日記”,記錄了系統運行時發生的每一件事。從系統啓動、服務運行,到用戶登錄、錯誤發生,所有關鍵操作和異常都會被日誌文件“記錄在案”。當系統出現故障(比如服務無法啓動、網絡不通、數據丟失)時,日誌就是排查問題的“線索庫”。

舉個例子:如果你的Web網站突然打不開,通過分析Web服務器的日誌,你可能會發現“404錯誤”“權限不足”或“數據庫連接失敗”等信息,從而快速定位問題原因。

二、常見的Linux日誌文件及作用

Linux系統的日誌由專門的服務(如rsyslogdsystemd-journald)管理,默認存儲在/var/log目錄下。以下是初學者必須瞭解的幾個核心日誌文件:

1. /var/log/messages(系統主日誌)
  • 作用:記錄系統中大部分常規事件,包括系統啓動、服務啓停、內核消息、軟件錯誤等。
  • 典型場景
  • 系統啓動時,內核初始化硬件的信息會被記錄在這裏;
  • 安裝軟件後,軟件安裝過程或啓動失敗的錯誤會被標記;
  • 服務(如Apache、MySQL)運行中的關鍵狀態也會在這裏體現。
  • 示例
  Sep 10 12:34:56 server kernel: [   10.23] EXT4-fs error (device sda1): ext4_mb_read_super: Bad magic number in super-block while trying to open /dev/sda1

這條日誌顯示“/dev/sda1分區超級塊損壞”,可能導致磁盤掛載失敗。

2. /var/log/auth.log(認證與安全日誌)
  • 作用:記錄所有與用戶認證相關的事件,包括登錄嘗試、密碼驗證、權限變更等。
  • 典型場景
  • 用戶登錄時,成功/失敗的登錄信息(如“Failed password”);
  • su切換用戶時的權限驗證結果;
  • 防火牆規則變更、sudo操作記錄等。
  • 示例
  Sep 10 14:20:15 server sshd[1234]: Failed password for root from 192.168.1.100 port 54321 ssh2

這條日誌顯示“root用戶在IP 192.168.1.100上登錄失敗,密碼錯誤”。

3. /var/log/dmesg(內核消息日誌)
  • 作用:記錄系統內核啓動時的硬件初始化信息、內核錯誤(如驅動加載失敗、硬件故障)等。
  • 典型場景
  • 開機時查看硬件是否正常(如網卡、硬盤識別);
  • 內核崩潰(Kernel Panic)的詳細堆棧信息;
  • 硬件驅動加載失敗的報錯。
  • 示例
  Sep 10 09:00:00 server kernel: [    5.67] usb 1-2: device not found

這條日誌顯示“USB設備未找到”,可能是硬件連接問題或驅動未加載。

4. 應用服務專屬日誌

不同服務有自己的日誌文件,例如:
- Apache/Nginx/var/log/apache2/error.log/var/log/nginx/error.log(記錄Web服務錯誤);
- MySQL/MariaDB/var/log/mysql/error.log(數據庫啓動/連接錯誤);
- 系統登錄/var/log/btmp(記錄登錄失敗的IP和用戶,需用lastb查看)。

三、查看日誌的常用命令

Linux提供了多種工具查看日誌,初學者重點掌握以下幾個基礎命令:

1. tail:即時跟蹤日誌末尾
  • 即時查看tail -f /var/log/messages-f參數會持續刷新日誌,適合監控服務啓動或即時事件);
  • 查看最後10行tail -n 10 /var/log/auth.log-n指定行數);
  • 示例
  # 即時監控系統日誌
  $ tail -f /var/log/messages
  Sep 10 15:00:00 server CRON[5678]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
2. grep:過濾日誌關鍵詞
  • 查找含“error”的行grep "error" /var/log/messages(支持模糊匹配,區分大小寫);
  • 忽略大小寫grep -i "error" /var/log/messages-i參數不區分大小寫);
  • 反向過濾(排除關鍵詞)grep -v "info" /var/log/messages-v排除含“info”的行);
  • 示例
  # 快速定位MySQL錯誤
  $ grep "MySQL" /var/log/messages | grep "error"
  Sep 10 16:00:00 server mysqld[1234]: [ERROR] Can't connect to local MySQL server through socket
3. cat:查看小日誌文件

適合快速查看完整日誌(文件較小的情況):

$ cat /var/log/dmesg | head  # 查看內核日誌前10行
4. less:分頁查看大日誌

適合查看大文件,支持翻頁和搜索:

$ less /var/log/syslog  # 按PageUp/PageDown翻頁,按Q退出

四、故障排查實戰:從日誌中找線索

排查故障的核心思路是:現象→定位日誌→找關鍵詞→分析原因。以下是3個常見場景及處理方法:

場景1:用戶無法登錄系統
  • 現象:用戶輸入正確密碼後,系統提示“Login incorrect”或“Permission denied”。
  • 定位日誌/var/log/auth.log
  • 關鍵詞Failed password(密碼錯誤)、Permission denied(權限不足)、invalid user(非法用戶);
  • 解決方向
  • 密碼錯誤:確認用戶密碼是否正確(可通過passwd重置);
  • 權限問題:檢查/etc/passwd中用戶權限是否正常,或/etc/ssh/sshd_config是否限制了登錄;
  • 非法用戶:查看/var/log/btmp,發現惡意登錄IP並加入防火牆黑名單。
場景2:Web服務(如Apache)無法啓動
  • 現象:執行systemctl start apache2後,服務狀態顯示“failed”。
  • 定位日誌var/log/apache2/error.log(或對應服務的錯誤日誌);
  • 關鍵詞Address already in use(端口被佔用)、Cannot load modules(模塊加載失敗)、Permission denied(權限不足);
  • 解決方向
  • 端口衝突:用netstat -tuln查看端口占用,殺死衝突進程(如kill -9 1234);
  • 模塊問題:檢查/etc/apache2/mods-enabled是否有損壞的模塊配置文件。
場景3:系統突然卡頓或崩潰
  • 現象:系統無響應,或操作命令後長時間卡住。
  • 定位日誌/var/log/messages(系統事件)和/var/log/dmesg(內核信息);
  • 關鍵詞out of memory(內存不足)、kernel panic(內核崩潰)、IO error(磁盤/IO錯誤);
  • 解決方向
  • 內存不足:查看free -m,用tophtop結束佔用高內存的進程;
  • 磁盤問題:檢查dmesg中“IO error”相關日誌,確認磁盤是否損壞。

五、總結與進階

Linux日誌分析是系統管理的“基本功”,掌握後能快速解決80%的常見故障。核心要點:
1. 定位正確的日誌文件:根據問題類型選擇messagesauth.log、服務專屬日誌;
2. 善用關鍵詞過濾grep+tail -f組合是排查利器;
3. 關注時間戳:日誌中的時間能幫助確認問題發生的精確時刻,縮小排查範圍。

進階工具推薦:
- journalctlsystemd系統的日誌管理工具,支持按服務、時間範圍篩選(如journalctl -u sshd查看SSH服務日誌);
- 日誌聚合工具:ELK Stack(Elasticsearch+Logstash+Kibana),適合企業級日誌集中分析。

練習建議:啓動一個測試服務器,故意製造“服務啓動失敗”“用戶登錄錯誤”等場景,用上述命令分析日誌,加深理解。

提示:日誌內容通常包含敏感信息(如密碼、IP),排查後注意清理或加密,避免泄露。

小夜