版權聲明
本文譯者是一位開源理念的堅定支持者,所以本文雖然不是軟件,但是遵照開源的精神發布。
- 無擔保:本文譯者不保證譯文內容准確無誤,亦不承擔任何由於使用此文檔所導致的損失。
- 自由使用:任何人都可以自由的閱讀/鏈接/打印此文檔,無需任何附加條件。
- 名譽權:任何人都可以自由的轉載/引用/再創作此文檔,但必須保留譯者署名並注明出處。
大綱
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 [, --boot=[ID][±offset]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 來說), 或一組匹配項(對於 PATTERN 來說)。UNIT可以多次使用此選項以添加多個並列的匹配條件(相當於用"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)給分頁程序。
環境變量
- $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)
