journalctl 中文手冊
譯者:金步國
版權聲明
本文譯者是一位開源理念的堅定支持者,所以本文雖然不是軟件,但是遵照開源的精神發佈。
無擔保:本文譯者不保證譯文內容準確無誤,亦不承擔任何由於使用此文檔所導致的損失。
自由使用:任何人都可以自由的閱讀/鏈接/打印此文檔,無需任何附加條件。
名譽權:任何人都可以自由的轉載/引用/再創作此文檔,但必須保留譯者署名並註明出處。
其他作品
本文譯者十分願意與他人分享勞動成果,如果你對我的其他翻譯作品或者技術文章有興趣,可以在如下位置查看現有的作品集:
聯繫方式
由於譯者水平有限,因此不能保證譯文內容準確無誤。如果你發現了譯文中的錯誤(哪怕是錯別字也好),請來信指出,任何提高譯文質量的建議我都將虛心接納。
Email(QQ):70171448在QQ郵箱
名稱
journalctl — 檢索 systemd 日誌
大綱
journalctl
[OPTIONS...] [MATCHES...]
描述
journalctl 可用於檢索 systemd(1) 日誌(由 systemd-journald.service(8) 記錄)。
如果不帶任何參數直接調用此命令, 那麼將顯示所有日誌內容(從最早一條日誌記錄開始)。
如果指定了 [MATCHES...] 參數,
那麼輸出的日誌將會按照 [MATCHES...] 參數進行過濾。
MATCHE 必須符合 "FIELD=VALUE
" 格式
(例如 "_SYSTEMD_UNIT=httpd.service
" ),
參見 systemd.journal-fields(7)
手冊以瞭解日誌字段的詳細介紹。
如果有多個不同的字段被 [MATCHES...] 參數匹配,
那麼這些字段之間使用"AND"邏輯連接,
也就是,日誌項必須同時滿足全部字段的匹配條件才能被輸出。
如果同一個字段被多個 [MATCHES...] 參數匹配,
那麼這些匹配條件之間使用"OR"邏輯連接,
也就是對於同一個字段,日誌項只需滿足任意一個匹配條件即可輸出。
最後, "+
" 字符可用作 [MATCHES...] 組之間的分隔符,並被視爲使用"OR"邏輯連接。
也就是,MATCHE1 MATCHE2 + MATCHE3 MATCHE4 MATCHE5 + MATCHE6 MATCHE7
相當於 ( MATCHE1 MATCHE2 ) OR ( MATCHE3 MATCHE4 MATCHE5 ) OR ( MATCHE6 MATCHE7 )
還可以使用絕對路徑作爲參數來過濾日誌。
絕對路徑可以是普通文件,也可以是軟連接,但必須指向一個確實存在的文件。
如果路徑指向了一個二進制可執行文件,
那麼它實際上相當於是一個對 "_EXE=
" 字段的匹配(僅匹配完整的絕對路徑)。
如果路徑指向了一個可執行腳本,
那麼它實際上相當於是一個對 "_COMM=
" 字段的匹配(僅匹配腳本的文件名)。
如果路徑指向了一個設備節點,
那麼它實際上相當於是一個對 "_KERNEL_DEVICE=
" 字段的匹配(匹配該設備及其所有父設備的內核設備名稱)。
在查詢時,軟連接會被追蹤到底,內核設備名稱將被合成,
父設備將按照當時的實際情況被提列出來。
因爲日誌項一般並不包含標記實際物理設備的字段,
所以,設備節點一般就是實際物理設備的最佳代表。
但是又因爲設備節點與物理設備之間的對應關係在系統重啓之後可能會發生變化,
所以,根據設備節點過濾日誌僅對本次啓動有意義,
除非你能確認對應關係在重啓之後保持不變。
可以使用 --boot
, --unit=
等選項
進一步附加額外的約束條件(相當於使用"AND"邏輯連接)。
最終的輸出結果來自所有可訪問的日誌文件的綜合, 無論這些日誌文件是否正在滾動或者正在被寫入, 也無論這些日誌文件是屬於系統日誌還是用戶日誌, 只要有訪問權限,就會被包括進來。
用於提取日誌的日誌文件的集合可以使用 --user
, --system
, --directory
, --file
選項進行篩選。
每個用戶都可以訪問其專屬的用戶日誌。
但是默認情況下,
只有root用戶以及
"systemd-journal
", "adm
",
"wheel
" 組中的用戶纔可以訪問全部的日誌(系統與其他用戶)。
注意,一般發行版還會給 "adm
"
與 "wheel
" 組一些其他額外的特權。
例如 "wheel
" 組的用戶一般都可以執行一些系統管理任務。
默認情況下,結果會通過 less 工具進行分頁輸出,
並且超長行會在屏幕邊緣被截斷。
不過,被截掉的部分可以通過左右箭頭按鍵查看。
如果不想分頁輸出,那麼可以使用 --no-pager
選項,參見下面的"環境變量"小節。
如果是輸出到 tty 的話,行的顏色還會根據日誌的級別變化: ERROR 或更高級別爲紅色,NOTICE 或更高級別爲高亮,其他級別則正常顯示。
選項
能夠識別的命令行選項如下:
--no-full
,--full
,-l
如果字段內容超長則以省略號(…)截斷以適應列寬。 默認顯示完整的字段內容(超長的部分換行顯示或者被分頁工具截斷)。
老舊的
-l
/--full
選項 僅用於撤銷已有的--no-full
選項,除此之外沒有其他用處。-a
,--all
完整顯示所有字段內容, 即使其中包含不可打印字符或者字段內容超長。
-f
,--follow
只顯示最新的日誌項,並且不斷顯示新生成的日誌項。 此選項隱含了 -n 選項。
-e
,--pager-end
在分頁工具內立即跳轉到日誌的尾部。 此選項隱含了
-n1000
以確保分頁工具不必緩存太多的日誌行。 不過這個隱含的行數可以被明確設置的-n
選項覆蓋。 注意,此選項僅可用於 less(1) 分頁器。-n
,--lines=
限制顯示最新的日誌行數。
--pager-end
與--follow
隱含了此選項。 此選項的參數:若爲正整數則表示最大行數; 若爲 "all
" 則表示不限制行數; 若不設參數則表示默認值10行。--no-tail
顯示所有日誌行, 也就是用於撤銷已有的
--lines=
選項(即使與 -f 連用)。-r
,--reverse
反轉日誌行的輸出順序, 也就是最先顯示最新的日誌。
-o
,--output=
控制日誌的輸出格式。 可以使用如下選項:
short
這是默認值, 其輸出格式與傳統的 syslog 文件的格式相似, 每條日誌一行。
short-iso
與 short 類似,只是將時間戳字段以 ISO 8601 格式顯示。
short-precise
與 short 類似,只是將時間戳字段的秒數精確到微秒級別。
short-monotonic
與 short 類似,只是將時間戳字段的零值從內核啓動時開始計算。
short-unix
與 short 類似,只是將時間戳字段顯示爲從"UNIX時間原點"(1970-1-1 00:00:00 UTC)以來的秒數。 精確到微秒級別。
verbose
以結構化的格式顯示每條日誌的所有字段。
export
將日誌序列化爲二進制字節流(大部分依然是文本) 以適用於備份與網絡傳輸(詳見 Journal Export Format 文檔)。
json
將日誌項按照JSON數據結構格式化, 每條日誌一行(詳見 Journal JSON Format 文檔)。
json-pretty
將日誌項按照JSON數據結構格式化, 但是每個字段一行, 以便於人類閱讀。
json-sse
將日誌項按照JSON數據結構格式化,每條日誌一行,但是用大括號包圍, 以適應 Server-Sent Events 的要求。
cat
僅顯示日誌的實際內容, 而不顯示與此日誌相關的任何元數據(包括時間戳)。
--utc
以世界統一時間(UTC)表示時間
--no-hostname
不顯示來源於本機的日誌消息的主機名字段。 此選項僅對
short
系列輸出格式(見上文)有效。-x
,--catalog
在日誌的輸出中增加一些解釋性的短文本, 以幫助進一步說明日誌的含義、 問題的解決方案、支持論壇、 開發文檔、以及其他任何內容。 並非所有日誌都有這些額外的幫助文本, 詳見 Message Catalog Developer Documentation 文檔。
注意,如果要將日誌輸出用於bug報告, 請不要使用此選項。
-q
,--quiet
當以普通用戶身份運行時, 不顯示任何警告信息與提示信息。 例如:"-- Logs begin at ...", "-- Reboot --"
-m
,--merge
混合顯示包括遠程日誌在內的所有可見日誌。
-b [
,ID
][±offset
]--boot=[
ID
][±offset
]顯示特定於某次啓動的日誌, 這相當於添加了一個 "
_BOOT_ID=
" 匹配條件。如果參數爲空(也就是
ID
與±offset
都未指定), 則表示僅顯示本次啓動的日誌。如果省略了
ID
, 那麼當±offset
是正數的時候, 將從日誌頭開始正向查找, 否則(也就是爲負數或零)將從日誌尾開始反響查找。 舉例來說, "-b 1"表示按時間順序排列最早的那次啓動, "-b 2"則表示在時間上第二早的那次啓動; "-b -0"表示最後一次啓動, "-b -1"表示在時間上第二近的那次啓動, 以此類推。 如果±offset
也省略了, 那麼相當於"-b -0", 除非本次啓動不是最後一次啓動(例如用--directory
指定了另外一臺主機上的日誌目錄)。如果指定了32字符的
ID
, 那麼表示以此ID
所代表的那次啓動爲基準 計算偏移量(±offset
), 計算方法同上。 換句話說, 省略ID
表示以本次啓動爲基準 計算偏移量(±offset
)。--list-boots
列出每次啓動的 序號(也就是相對於本次啓動的偏移量)、32字符的ID、 第一條日誌的時間戳、最後一條日誌的時間戳。
-k
,--dmesg
僅顯示內核日誌。隱含了
-b
選項以及 "_TRANSPORT=kernel
" 匹配項。-t
,--identifier=
SYSLOG_IDENTIFIER
僅顯示 syslog 識別符爲
SYSLOG_IDENTIFIER
的日誌項。可以多次使用該選項以指定多個識別符。
-u
,--unit=
UNIT
|PATTERN
僅顯示屬於特定單元的日誌。 也就是單元名稱正好等於
UNIT
或者符合PATTERN
模式的單元。 這相當於添加了一個 "_SYSTEMD_UNIT=
" 匹配項(對於UNIT
UNIT
來說), 或一組匹配項(對於PATTERN
來說)。可以多次使用此選項以添加多個並列的匹配條件(相當於用"OR"邏輯連接)。
--user-unit=
僅顯示屬於特定用戶會話單元的日誌。 相當於同時添加了 "
_SYSTEMD_USER_UNIT=
" 與 "_UID=
" 兩個匹配條件。可以多次使用此選項以添加多個並列的匹配條件(相當於用"OR"邏輯連接)。
-p
,--priority=
根據日誌等級(包括等級範圍)過濾輸出結果。 日誌等級數字與其名稱之間的對應關係如下 (參見 syslog(3)): "
emerg
" (0), "alert
" (1), "crit
" (2), "err
" (3), "warning
" (4), "notice
" (5), "info
" (6), "debug
" (7) 。 若設爲一個單獨的數字或日誌等級名稱, 則表示僅顯示小於或等於此等級的日誌 (也就是重要程度等於或高於此等級的日誌)。 若使用 FROM..TO.. 設置一個範圍, 則表示僅顯示指定的等級範圍內(含兩端)的日誌。 此選項相當於添加了 "PRIORITY=
" 匹配條件。-c
,--cursor=
從指定的遊標(cursor)開始顯示日誌。 [提示]每條日誌都有一個"__CURSOR"字段,類似於該條日誌的指紋。
--after-cursor=
從指定的遊標(cursor)之後開始顯示日誌。 如果使用了
--show-cursor
選項, 則也會顯示遊標本身。--show-cursor
在最後一條日誌之後顯示遊標, 類似下面這樣,以"--"開頭:
-- cursor: s=0639...
遊標的具體格式是私有的(也就是沒有公開的規範), 並且會變化。
-S
,--since=
,-U
,--until=
顯示晚於指定時間(--since=)的日誌、顯示早於指定時間(--until=)的日誌。 參數的格式類似 "
2012-10-30 18:17:16
" 這樣。 如果省略了"時:分:秒"部分, 則相當於設爲 "00:00:00
" 。 如果僅省略了"秒"的部分則相當於設爲 ":00
" 。 如果省略了"年-月-日"部分, 則相當於設爲當前日期。 除了"年-月-日 時:分:秒"格式, 參數還可以進行如下設置: (1)設爲 "yesterday
", "today
", "tomorrow
" 以表示那一天的零點(00:00:00)。 (2)設爲 "now
" 以表示當前時間。 (3)可以在"年-月-日 時:分:秒"前加上 "-
"(前移) 或 "+
"(後移) 前綴以表示相對於當前時間的偏移。 關於時間與日期的詳細規範, 參見 systemd.time(7)-F
,--field=
顯示所有日誌中某個字段的所有可能值。 [譯者注]類似於SQL語句:"
SELECT DISTINCT 某字段 FROM 全部日誌
"-N
,--fields
輸出所有日誌字段的名稱
--system
,--user
僅顯示系統服務與內核的日誌(
--system
)、 僅顯示當前用戶的日誌(--user
)。 如果兩個選項都未指定,則顯示當前用戶的所有可見日誌。-M
,--machine=
顯示來自於正在運行的、特定名稱的本地容器的日誌。 參數必須是一個本地容器的名稱。
-D
,DIR
--directory=
DIR
僅顯示來自於特定目錄中的日誌, 而不是默認的運行時和系統日誌目錄中的日誌。
--file=
GLOB
GLOB
是一個可以包含"?"與"*"的文件路徑匹配模式。 表示僅顯示來自與指定的GLOB
模式匹配的文件中的日誌, 而不是默認的運行時和系統日誌目錄中的日誌。 可以多次使用此選項以指定多個匹配模式(多個模式之間用"OR"邏輯連接)。--root=
ROOT
在對日誌進行操作時, 將
ROOT
視爲系統的根目錄。 例如--update-catalog
將會創建ROOT
/var/lib/systemd/catalog/database--new-id128
此選項並不用於顯示日誌內容, 而是用於重新生成一個標識日誌分類的 128-bit ID 。 此選項的目的在於 幫助開發者生成易於辨別的日誌消息, 以方便調試。
--header
此選項並不用於顯示日誌內容, 而是用於顯示日誌文件內部的頭信息(類似於元數據)。
--disk-usage
此選項並不用於顯示日誌內容, 而是用於顯示所有日誌文件(歸檔文件與活動文件)的磁盤佔用總量。
--vacuum-size=
,--vacuum-time=
,--vacuum-files=
這些選項並不用於顯示日誌內容, 而是用於清理日誌歸檔文件(並不清理活動的日誌文件), 以釋放磁盤空間。
--vacuum-size=
可用於限制歸檔文件的最大磁盤使用量 (可以使用 "K
", "M
", "G
", "T
" 後綴);--vacuum-time=
可用於清除指定時間之前的歸檔 (可以使用 "s
", "m
", "h
", "days
", "weeks
", "months
", "years
" 後綴);--vacuum-files=
可用於限制日誌歸檔文件的最大數量。 注意,--vacuum-size=
對--disk-usage
的輸出僅有間接效果, 因爲--disk-usage
輸出的是歸檔日誌與活動日誌的總量。 同樣,--vacuum-files=
也未必一定會減少日誌文件的總數, 因爲它同樣僅作用於歸檔文件而不會刪除活動的日誌文件。 此三個選項可以同時使用,以同時從三個維度去限制歸檔文件。 若將某選項設爲零,則表示取消此選項的限制。--list-catalog [
128-bit-ID...
]簡要列出日誌分類信息, 其中包括對分類信息的簡要描述。
如果明確指定了分類ID(
128-bit-ID
), 那麼僅顯示指定的分類。--dump-catalog [
128-bit-ID...
]詳細列出日誌分類信息 (格式與
.catalog
文件相同)。如果明確指定了分類ID(
128-bit-ID
), 那麼僅顯示指定的分類。--update-catalog
更新日誌分類索引二進制文件。 每當安裝、刪除、更新了分類文件,都需要執行一次此動作。
--setup-keys
此選項並不用於顯示日誌內容, 而是用於生成一個新的FSS(Forward Secure Sealing)密鑰對。 此密鑰對包含一個"sealing key"與一個"verification key"。 "sealing key"保存在本地日誌目錄中, 而"verification key"則必須保存在其他地方。 詳見 journald.conf(5) 中的
Seal=
選項。--force
與
--setup-keys
連用, 表示即使已經配置了FSS(Forward Secure Sealing)密鑰對, 也要強制重新生成。--interval=
與
--setup-keys
連用,指定"sealing key"的變化間隔。 較短的時間間隔會導致佔用更多的CPU資源, 但是能夠減少未檢測的日誌變化時間。 默認值是 15min--verify
檢查日誌文件的內在一致性。 如果日誌文件在生成時開啓了FSS特性, 並且使用
--verify-key=
指定了FSS的"verification key", 那麼,同時還將驗證日誌文件的真實性。--verify-key=
與
--verify
選項連用, 指定FSS的"verification key"--sync
要求日誌守護進程將所有未寫入磁盤的日誌數據刷寫到磁盤上, 並且一直阻塞到刷寫操作實際完成之後才返回。 因此該命令可以保證當它返回的時候, 所有在調用此命令的時間點之前的日誌, 已經全部安全的刷寫到了磁盤中。
--flush
要求日誌守護進程 將
/run/log/journal
中的日誌數據 刷寫到/var/log/journal
中 (如果持久存儲設備當前可用的話)。 此操作會一直阻塞到操作完成之後纔會返回, 因此可以確保在該命令返回時, 數據轉移確實已經完成。 注意,此命令僅執行一個單獨的、一次性的轉移動作, 若沒有數據需要轉移, 則此命令什麼也不做, 並且也會返回一個表示操作已正確完成的返回值。--rotate
要求日誌守護進程滾動日誌文件。 此命令會一直阻塞到滾動完成之後纔會返回。
-h
,--help
--version
--no-pager
不將程序的輸出內容管道(pipe)給分頁程序。
退出狀態
返回值爲 0 表示成功, 非零返回值表示失敗代碼。
環境變量
$SYSTEMD_PAGER
指定分頁程序。僅在未指定
--no-pager
選項時有意義。 此變量會覆蓋$PAGER
的值。 將此變量設爲空字符串或 "cat
" 等價於使用--no-pager
選項。$SYSTEMD_LESS
用於覆蓋 默認傳遞給 less 程序的命令行選項 ("
FRSXMK
")。
例子
不帶任何選項與參數,表示顯示全部日誌
journalctl
僅指定一個匹配條件, 顯示所有符合該匹配條件的日誌
journalctl _SYSTEMD_UNIT=avahi-daemon.service
指定了兩個不同字段的匹配條件, 顯示同時滿足兩個匹配條件的日誌
journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=28097
指定了同一個字段的兩個不同匹配條件, 顯示滿足其中任意一個條件的日誌
journalctl _SYSTEMD_UNIT=avahi-daemon.service _SYSTEMD_UNIT=dbus.service
使用 "+
"
連接兩組匹配條件,
相當於邏輯"OR"連接
journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=28097 + _SYSTEMD_UNIT=dbus.service
顯示所有 D-Bus 進程產生的日誌
journalctl /usr/bin/dbus-daemon
顯示上一次啓動所產生的所有內核日誌
journalctl -k -b -1
持續顯示 apache.service
服務不斷生成的日誌
journalctl -f -u apache
參見
systemd(1), systemd-journald.service(8), systemctl(1), coredumpctl(1), systemd.journal-fields(7), journald.conf(5), systemd.time(7)