
# 用 Linux `journalctl` 查系統 Log 完全教學:三個實用情境話你知點查
做 IT 嘅你一定試過呢種情況:部機突然 reboot 咗、個 service 無啦啦死咗,或者有個奇怪嘅 network 連線唔知邊度嚟。想搵原因?第一步一定係睇 **Linux journalctl**。呢個係 systemd 系統入面最常用嘅 log 查詢工具,但好多人只識打一句 `journalctl` 就停咗,其實佢仲有好多實用嘅玩法。今日就同大家用三個真實情境,step-by-step 教你點樣用 journalctl 快速定位問題。
## 情境一:搵返部機幾時同點解 reboot
假設你想知部 server 尋日半夜有冇突然重啟,最直接嘅做法係用 `–list-boots`:
journalctl --list-boots
呢個 command 會列出每次開機嘅紀錄,最頂嗰行就係最近一次 boot。你睇到類似下面嘅 output:
0 2026-09-26 23:41:12 HKT ...
-1 2026-09-20 08:15:03 HKT ...
「0」代表而家呢次 boot,「-1」代表對上一次。如果部機尋晚 23:41 先 boot 起,但你又冇人手重啟過,咁就好可能係 crash 或者斷電。
想睇對上一次 boot 嘅最後幾條 log(通常係 crash 前最後紀錄),可以打:
journalctl -b -1 -n 50
`-b -1` 揀對上一次 boot,`-n 50` 顯示最後 50 行。呢度好大機會會睇到 kernel panic、OOM killer 或者硬件錯誤嘅訊息。
## 情境二:追蹤某個 service 出咗咩事
比如 nginx 無啦啦停咗,想睇佢嘅 log:
journalctl -u nginx.service --since "1 hour ago"
`-u` 係 unit 嘅意思,`–since` 可以指定時間範圍。你仲可以配合 `-f`(follow)即時睇住個 log 更新:
journalctl -u nginx.service -f
如果想搵特定 keyword,用 `-p` 指定優先級都得。`-p err` 只顯示 error 級或以上嘅訊息:
journalctl -u nginx.service -p err
呢招好實用,因為正常 service 會出好多 info 級 log,你只要睇 err 以上就快好多。
## 情境三:即時監察 kernel 訊息
想知有冇硬件問題、磁碟錯誤或者網絡卡異常,可以直接睇 kernel log:
journalctl -k
`-k` 係 kernel 專用 shortcut,等於 `journalctl _TRANSPORT=kernel`。配合 `–since` 同 `-p` 一齊用:
journalctl -k --since "today" -p warning
咁就可以快速搵出今日所有 kernel 級嘅 warning。
## 兩個必學加分技巧
**技巧一:將輸出轉做 JSON 方便處理**
journalctl -u nginx.service --since "1 hour ago" -o json-pretty
`-o` 係 output format,揀 `json-pretty` 之後你可以 pipe 去其他工具做分析。
🔗 參考資料:NVD NIST 漏洞資料庫
**技巧二:限制輸出大小,避免爆畫面**
journalctl -u nginx.service --since "1 hour ago" --no-pager | head -100
`–no-pager` 停用分頁器,再 pipe 去 `head` 就唔會一次過倒晒成個 screen。
## 總結
journalctl 其實好強大,記住幾個關鍵參數就得:`-b`(揀 boot)、`-u`(揀 service)、`-k`(kernel)、`-p`(優先級)、`–since`(時間)、`-f`(follow)。下次部機有咩問題,唔好再盲目 reboot,先開 journalctl 睇清楚個原因先,咁先係專業嘅做法。



