journalctl命令
journalctl命令是Systemd日志系統的一個命令,主要用途是用來查看通過Systemd日志系統記錄的日志,在Systemd出現之前,Linux系統及各應用的日志都是分別管理的,Systemd取代了initd之后便開始統一管理了所有Unit的啟動日志,可以只用一個journalctl命令,查看所有內核和應用的日志。
語法
journalctl [OPTIONS...] [MATCHES...]
參數
--no-full, --full, -l: 當字段匹配可用列時將其省略,默認設置是顯示完整字段,允許它們換行或被截斷,舊的選項-l/--full不再有用,除了撤銷--no-full。-a, --all: 完整顯示所有字段,即使它們包含不可打印字符或非常長。-f, --follow: 僅顯示最近的日志條目,並在新條目附加到日志時連續打印。-e, --pager-end: 立即跳到日志的結尾內隱含的工具,這意味着-n 1000可以保證分頁器不會緩沖大小不受限制的日志,可以在命令行中使用顯式的-n和其他一些數值來覆蓋它,注意,這個選項只支持less頁。-n, --lines=: 顯示最近的日志事件並限制顯示的事件數,如果使用--follow,則隱含此選項,參數為正整數,是可選的,默認為10。--no-tail: 顯示所有存儲的輸出行,即使在follow模式下也是如此,撤消--line=的效果。-r, --reverse: 反轉輸出,以便首先顯示最新的條目。-o, --output=: 控制所顯示的日志條目的格式,采用以下選項之一:short: 默認值,並生成與經典syslog文件格式基本相同的輸出,每個日志條目顯示一行。short-iso: 與short非常相似,但顯示ISO 8601 wallclock時間戳。short-precise: 與short非常相似,但是以微秒的精度顯示時間戳。short-monotonic: 非常相似,但是顯示的是monotonic的時間戳,而不是wallclock的時間戳。verbose: 顯示具有所有字段的完整結構條目。export: 將日志序列化成適合備份和網絡傳輸的二進制流,主要是基於文本的。json: 將條目格式化為JSON數據結構,每行一個。json-pretty: 將條目格式化為JSON數據結構,但將它們格式化為多行,以使人們更容易閱讀。json-sse: 將條目格式化為JSON數據結構,但將它們包裝為適合服務器發送的Eventsm的格式。cat: 生成一個非常簡潔的輸出,只顯示每個日志條目的實際消息,沒有元數據,甚至沒有時間戳。
-x, --catalog: 用來自消息目錄的解釋文本擴充日志行,這將向輸出中可用的日志消息中添加解釋性幫助文本,這些簡短的幫助文本將解釋錯誤或日志事件的上下文、可能的解決方案,以及指向支持論壇、開發人員文檔和任何其他相關手冊的指針,注意,幫助文本不是對所有消息都可用,而是僅對選定的消息可用。此外,將journalctl輸出附加到錯誤報告時,請不要使用-x。-q, --quiet: 當以普通用戶身份運行時,禁止顯示有關不可訪問的系統日志的任何警告消息。-m, --merge: 顯示所有可用的日志,包括遠程日志的交叉條目。-b [ID][±offset], --boot=[ID][±offset]: 顯示來自特定啟動的消息,這將為_BOOT_ID=添加匹配項,參數可能為空,在這種情況下,將顯示當前引導的日志,如果省略引導ID,則正偏移量將查找從日志開始的引導,而等於或小於零的偏移量將查找從日志結束的引導,因此,1表示按時間順序在日志中找到的第一個引導,2表示第二個引導,依此類推,而-0表示最后一個引導,-1表示最后一個引導之前的引導,依此類推,空偏移量等同於指定-0,除非當前引導不是最后一次引導,例如因為指定--directory查看來自不同計算機的日志。如果指定了32個字符的ID,則可以選擇后跟偏移量,該偏移量標識相對於boot ID給定的引導,負值表示較早的引導,正值表示較晚的引導,如果未指定offset,則假定值為零,並顯示ID給定的引導日志。--list-boots: 顯示引導編號(相對於當前引導)、它們的id以及與引導相關的第一條和最后一條消息的時間戳的列表。-k, --dmesg: 只顯示內核消息,這意味着-b並添加匹配_TRANSPORT=kernel。-u, --unit=UNIT|PATTERN: 顯示指定的systemd單元單元的消息,或任何與PATTERN匹配的單元的消息,如果指定了模式,日志中找到的單元名稱列表將與指定的模式進行比較,並使用所有匹配的內容,對於每個單元名,將為來自該單元的消息添加一個匹配_SYSTEMD_UNIT= unit,以及來自systemd的消息和關於指定單元的coredumps的消息的額外匹配,該參數可以指定多次。--user-unit=: 顯示指定用戶會話單元的消息,這將為來自單元的消息_SYSTEMD_USER_UNIT=和_UID=添加匹配,並為來自會話systemd的消息和關於指定單元的coredumps的消息添加額外匹配,該參數可以指定多次。-p, --priority=: 根據消息優先級或優先級范圍篩選輸出,接受單個數字或文本日志級別(即在0 emerg和7 debug之間),或以..形式表示的numeric/text日志級別范圍,日志級別是syslog中記錄的通常的syslog日志級別,即emerg 0、alert 1、crit 2、err 3、warning 4、notice 5、info 6、debug 7,如果指定一個日志級別,則顯示該級別或更低(值更低優先級更高)日志級別的所有消息,如果指定了一個范圍,則將顯示該范圍內的所有消息,包括該范圍的開始值和結束值,這將為指定的優先級添加PRIORITY=匹配項。-c, --cursor=: 從傳遞的游標指定的日志位置開始顯示條目。--after-cursor=: 從該光標指定的位置之后的日志位置開始顯示條目,使用--show-cursor選項時將顯示光標。--show-cursor: 光標顯示在最后一項的兩個破折號后,類似於-- cursor: s=0639...,光標的格式是私有的,可能會更改。--since=, --until=: 分別在指定日期或更新日期,或在指定日期或更新日期開始顯示條目,日期規范的格式應該是2012-10-30 18:17:16,如果省略了時間部分,則假定為00:00:00,如果只省略了seconds組件,則假定為:00,如果省略了date部分,則假定為當前日期,或者理解字符串yesterday、today、tomorrow,分別表示當前日期的前一天00:00:00、當前日期的前一天00:00:00、當前日期的后一天,now指的是當前時間,最后,可以指定相對次數,以-或+作為前綴,分別表示當前時間之前或之后的次數。-F, --field=: 在日志的所有條目中打印指定字段可以接受的所有可能數據值。--system, --user: 顯示來自系統服務和內核的消息(使用--system),顯示來自當前用戶服務的消息(使用--user),如果兩者都未指定,則顯示用戶可以看到的所有消息。-M, --machine=: 顯示來自運行中的本地容器的消息,指定要連接的容器名稱。-D DIR, --directory=DIR: 以目錄路徑作為參數,如果指定,journalctl將操作指定的日志目錄DIR,而不是默認的運行時和系統日志路徑。--file=GLOB: 以文件glob作為參數,如果指定,journalctl將操作與GLOB匹配的指定日志文件,而不是默認的運行時和系統日志路徑,可以指定多次,在這種情況下文件將被適當地交錯。--root=ROOT: 以目錄路徑作為參數,如果指定,journalctl將對指定目錄下的目錄文件層次結構而不是根目錄進行操作,例如--update catalog將創建root/var/lib/systemd/catalog/database。--new-id128: 生成一個新的適合標識消息的128位ID,而不是顯示日志內容,這是為那些需要為他們引入的新消息使用新標識符並希望使其可識別的開發人員准備的,這將以三種不同的格式打印新的ID,這些格式可以復制到源代碼或類似的文件中。--header: 不是顯示日志內容,而是顯示所訪問日志字段的內部頭信息。--disk-usage: 顯示所有日志文件的當前磁盤使用情況。--list-catalog [128-bit-ID...]: 以消息id表的形式列出消息目錄的內容,以及它們的簡短描述字符串,如果指定了任何128位id,則只顯示那些條目。--dump-catalog [128-bit-ID...]: 顯示消息目錄的內容,條目由由兩個破折號和ID組成的行分隔,格式與.catalog文件相同,如果指定了任何128位id,則只顯示那些條目。--update-catalog: 更新消息目錄索引,每次安裝、刪除或更新新的編目文件以重新生成二進制編目索引時,都需要執行此命令。--setup-keys: 生成一個用於前向安全密封FSS的新密鑰對,而不是顯示日志內容,這將生成一個密封密鑰和一個驗證密鑰,密封密鑰存儲在日志數據目錄中,並保留在主機上,驗證鍵應該存儲在外部。--force: 當傳遞了--setup keys並且已經配置了前向安全密封FSS時,重新創建FSS keys。--interval=: 指定使用--setup-keys生成FSS密鑰對時密封密鑰的更改間隔,較短的時間間隔會增加CPU消耗,但會縮短無法檢測到的日志更改的時間范圍,默認為15分鍾。--verify: 檢查日志文件的內部一致性,如果文件是在啟用FSS的情況下生成的,並且FSS驗證密鑰是用--verify key=指定的,則會驗證日志文件的真實性。--verify-key=: 指定用於--verify操作的FSS驗證密鑰。--no-pager: 不將程序的輸出內容管道pipe給分頁程序。--vacuum-size=BYTES: 將磁盤使用減少到指定大小以下。--vacuum-files=INT: 僅保留指定數量的日記文件。--vacuum-time=TIME: 任何早於指定時間點的條目都將被刪除。--rotate: 要求日志守護進程滾動日志文件,此命令會一直阻塞到滾動操作完成之后才會返回,日志滾動可以確保所有活動的日志文件都被關閉、並被重命名以完成歸檔,同時新的空白日志文件將被創建,並成為新的活動日志文件,通常可以與--vacuum-size=、--vacuum-time=、--vacuum-file=一起使用, 以提高日志清理的效率。-h, --help: 輸出幫助信息。--version: 輸出版本信息。
示例
顯示本次啟動以來的全部日志。
journalctl
顯示內核日志。
journalctl -k
使用-n參數可以顯示最后n行日志,如果不指定行數,默認顯示10行。
journalctl -n 20
查看指定進程的日志。
journalctl _PID=1
顯示最近30分鍾的日志。
journalctl --since=-30m
顯示2021年以來的日志。
journalctl --since="2021-01-01"
顯示今天的日志。
journalctl --since=today
使用-f參數可以實現類型tail -f的功能,持續監控最新的日志。
journalctl -f
查看指定Unit的日志。
journalctl -u nginx.service
查看日志占用的磁盤空間。
journalctl --disk-usage
要求日志守護進程滾動日志文件,日志滾動可以確保所有活動的日志文件都被關閉、並被重命名以完成歸檔,同時新的空白日志文件將被創建,並成為新的活動日志文件。
journalctl --rotate
清理一個周前的日志。
journalctl --vacuum-time=1week
將磁盤占用減少到指定大小以下。
journalctl --vacuum-size=10M
每日一題
https://github.com/WindrunnerMax/EveryDay
參考
http://www.jinbuguo.com/systemd/journalctl.html#
https://www.commandlinux.com/man-page/man1/journalctl.1.html
https://blog.orchidflower.cn/2020/04/20/linux-command-introduction-04-journalctl/
