隨著systemd的引入,Linux系統日誌記錄發生了變化。瞭解如何使用journalctl命令讀取和過濾系統日誌訊息。
對爭議並不陌生,systemd系統和****器在收集系統日誌的方式上引入了一個重大的改變。根據建立日誌的服務或守護程式,日誌通常位於檔案系統中的不同位置。但他們都有一個共同點。它們是純文字檔案。
使用systemd,所有系統、引導和核心日誌檔案都由一個集中的、專用的日誌解決方案收集和管理。它們儲存的格式是二進位制的。這有助於以不同的格式提取資料,如我們將看到的JSON。
它還可以更容易地交叉引用以前記錄在單獨日誌檔案中的相關資訊。因為資料現在儲存在一個單獨的日誌中,所以可以選擇來自多個感興趣來源的資料,並將其顯示在一個相互交織的條目列表中。
journalctl是用於處理日誌的工具。
您可以在不使用命令列引數的情況下呼叫journalctl:
journalctljournalctl顯示整個日誌,最早的條目位於列表頂部。列表以less顯示,允許您使用less的常用導航功能進行頁面和搜尋。您還可以使用左箭頭和右箭頭鍵橫向滾動以讀取寬日誌條目。
按結束鍵將直接跳到列表的底部,以及最新的日誌條目。
按Ctrl+C退出。
相關:如何在Linux上使用less命令
儘管可以在不使用sudo的情況下呼叫journalctl,但是如果使用sudo,則可以確保看到日誌中的所有細節。
sudo journalctl如果需要,可以使用--no pager選項使journalctl將其輸出傳送到終端視窗,而不是傳送到less。
sudo journalctl --no-pager輸出在終端視窗中快速滾動,然後返回到命令提示符。
要限制journalctl返回的行數,請使用-n(行)選項。讓我們要求10行輸出:
sudo journalctl -n 10要使JournalCtrl在到達日記賬時顯示最新條目,請使用-f(跟隨)選項。
sudo journalctl -f最新條目的時間戳為07:09:07。當新的活動發生時,新的條目將附加到顯示的底部。近實時更新酷!
在07:09:59,一個名為geek app的應用程式在日誌中注入了一個日誌條目,上面寫著“來自HTG的新訊息”
因為日誌是一個二進位制檔案,所以需要將其中的資料翻譯或解析為文字才能顯示給您。使用不同的解析器,可以從相同的二進位制源資料建立不同的輸出格式。journalctl可以使用幾種不同的格式。
預設輸出是short格式,這與經典的系統日誌格式非常相似。要顯式請求短格式,請使用-o(output)選項和short修飾符。
sudo journalctl -n 10 -o short-full從左到右,欄位為:
要獲得完整的日期和時間戳,請使用short-full修飾符:
sudo journalctl -n 10 -o short-full此輸出中的日期和時間格式是您在按時段選擇日誌訊息時需要提供日期和時間的格式,我們將很快看到。
要檢視每個日誌訊息附帶的所有元資料,請使用詳細修飾符。
sudo journalctl -n 10 -o verbose有許多可能的欄位,但很少所有欄位都出現在訊息中。
一個值得討論的領域是優先順序領域。在本例中,它的值為6。該值表示訊息的重要性:
如果要將輸出顯示為格式正確的JavaScript物件表示法(JSON)物件,請使用JSON修飾符:
sudo journalctl -n 10 -o json每條訊息都被正確地包裝為一個格式良好的JSON物件,並在每行輸出中顯示一條訊息。
要使JSON輸出漂亮地打印出來,請使用JSON漂亮修飾符。
sudo journalctl -n 10 -o json-pretty每個JSON物件被分割成多行,每個名稱-值對位於新行上。
要僅檢視日誌條目訊息,而不檢視時間戳或其他元資料,請使用cat修飾符:
sudo journalctl -n 10 -o cat這種顯示格式會使您很難識別是哪個程序引發了日誌事件,儘管有些訊息確實包含線索。
要將journalctl的輸出限制在您感興趣的時間段內,請使用-S(因為)和-U(直到)選項。
要檢視特定時間和日期以來的日誌條目,請使用以下命令:
sudo journalctl -S "2020-91-12 07:00:00"顯示僅包含在命令中的日期和時間之後到達的訊息。
要定義要報告的時間段,請同時使用-S(自)和-U(直到)選項。此命令檢視15分鐘內的日誌訊息:
sudo journalctl -S "2020-91-12 07:00:00" -U "2020-91-12 07:15:00"如果您知道系統上發生了一些奇怪的事情,並且大致是在什麼時候發生的,那麼這是一個很好的組合用法。
選擇時段時可以使用相對定址。這意味著你可以說“向我展示從一天前到現在的所有事件”這正是這個命令的意思。“d”代表“天”;“-1”代表過去的一天。
sudo journalctl -S -1d日誌訊息從昨天00:00:00到“現在”列出
如果您想調查最近發生的事情,可以指定以小時為單位的相對時間段。下面我們正在檢視最後一小時的日誌訊息:
sudo journalctl -S -1h最後一小時的訊息將為您顯示。您還可以使用“m”設定以分鐘為單位的相對時間段,使用“w”設定以周為單位的相對時間段。
journalctl瞭解今天、昨天和明天。這些修飾符提供了一種指定公共時間段的簡便方法。要檢視昨天發生的所有事件,請使用以下命令:
sudo journalctl -S yesterday昨天發生的所有日誌事件,直到午夜00:00:00,都將為您檢索和顯示。
要檢視到目前為止收到的所有日誌訊息,請使用以下命令:
sudo journalctl -S today顯示從00:00:00到發出命令的所有內容。
您可以混合使用不同的時間段修飾符。要檢視從兩天前到今天開始的所有內容,請使用以下命令:
sudo journalctl -S -2d -U today從前天到今天的所有內容都將被檢索和顯示。
您可以搜尋與範圍廣泛的日誌欄位匹配的日誌訊息。這些搜尋嘗試在附加到每條訊息的元資料中查詢匹配項。建議您參考欄位列表並選擇對您最有用的欄位。
請記住,應用程式是否完成每個欄位完全取決於應用程式的作者。你不能保證每個欄位都會被填充。
所有日記欄位修飾符的使用方式都相同。我們將在下面的示例中使用一些。要查詢來自特定應用程式的日誌訊息,請使用\u COMM(command)修飾符。如果還使用-f(follow)選項,journalctl將在新訊息到達時跟蹤來自此應用程式的訊息。
sudo journalctl -f _COMM=geek-app可以使用生成日誌訊息的程序的程序ID搜尋日誌條目。使用ps命令查詢要搜尋的守護程序或應用程式的程序id。
sudo journalctl _PID=751在用於研究本文的機器上,SSH守護程序是process751。
您還可以按使用者Id進行搜尋。這是啟動應用程式或命令的人員或程序所有者的使用者Id。
sudo journalctl _UID=1000與任何其他使用者ID關聯的所有訊息都將被過濾掉。僅顯示與使用者1000相關的訊息:
搜尋與特定應用程式相關的日誌訊息的另一種方法是提供可執行檔案的路徑。
sudo journalctl /usr/bin/anacron檢索並顯示所有anacron排程程式日誌訊息。
為了使搜尋更容易,我們可以要求journalctl列出它持有的所有值,用於任何日誌欄位。
要檢視journalctl為其記錄日誌訊息的使用者ID,請使用-F(fields)選項,並傳遞UID欄位識別符號。
journalctl -F _UID我們再來看一下組ID(GID):
journalctl -F _GID您可以使用任何日誌欄位識別符號來執行此操作。
有一種內建的方法可以快速隔離核心訊息。你不需要自己搜尋和隔離它們。k(kernel)選項刪除所有其他訊息,並提供核心日誌條目的即時檢視。
sudo journalctl -k突出顯示根據優先順序欄位中的值反映訊息的重要性。
如果您有一個與引導相關的問題需要調查,journalctl會為您提供幫助。可能您添加了新硬體,但它沒有響應,或者上次系統升級後,以前工作的硬體元件不再工作。
要檢視與上次引導相關的日誌條目,請使用-b(boot)選項:
journalctl -b將為您顯示上次引導的日誌條目。
當我們說“最後一次啟動”時,我們指的是使您的計算機在當前登入會話中恢復正常的啟動過程。要檢視以前的靴子,您可以使用一個數字來告訴journalctl您感興趣的靴子。要檢視上一次的第三次啟動,請使用以下命令:
journalctl -b 3一般來說,如果你遇到了問題,不得不重新啟動你的機器,這是你感興趣的前一個引導序列。所以這是一個常見的命令形式。
很容易混淆靴子的順序。為了提供幫助,我們可以讓journalctl使用--list boots選項列出它在日誌中記錄的引導。
journalctl --list-boots您可以從日期和時間戳中標識要檢視訊息的引導,然後使用左側列中的數字獲取該引導序列的日誌訊息。您還可以選擇32位引導識別符號,並將其傳遞給journalctl。
sudo journalctl -b 1f00248226ed4ab9a1abac86e0d540d7檢索並顯示來自我們請求的引導序列的日誌訊息。
當然,日誌及其所有日誌訊息都儲存在硬碟上。這意味著它們會佔用硬碟空間。要檢視日誌佔用了多少空間,請使用--disk usage選項。
journalctl --disk-usage對於今天的硬碟驅動器,152MB的空間並不是很大,但是為了演示的目的,我們還是會將其縮小。我們有兩種辦法。第一種方法是設定一個大小限制,以便將日誌縮減回原來的大小。當然,它會再次生長,但我們現在可以修剪它,為新的生長做好準備。
我們將使用奇妙的標題--vacuum size選項,並傳入希望日誌縮小到的大小。我們要100 MB。考慮到這一點,我們要求journalctl“扔掉所有可以扔掉的東西,但不要低於100MB。”
journalctl --vacuum-size=100M另一種修剪日誌大小的方法是使用--vacuum time選項。此選項告訴journalctl放棄比您在命令列上提供的週期早的訊息。您可以在時間段中使用天、周、月和年。
讓我們刪除所有超過一週的郵件:
journalctl --vacuum-time=1weeks資料是沒有用的,除非你能得到它並利用它。然後它就變成有用的資訊。journalctl命令是一個靈活而複雜的工具,允許您以多種方式獲取感興趣的資訊。
您可以使用您需要的日誌訊息中的任何資訊片段。
...此,這幾乎是獲取定量資料的唯一方法,說明系統的效能如何——如果您的數字不足,這表明您可能希望升級一些PC元件。 ...
...hpad圖示,然後單擊System Preferences>Bluetooth。 相關:如何將藍芽裝置與電腦、平板電腦或**配對 重新連線藍芽裝置 如果您的裝置未連線到Mac,請關閉藍芽裝置,然後再次開啟以檢視是否重新連線。這也是檢查裝置電池電量...
...來重新格式化文字流。它不僅限於處理檔案。讓我們看看journalctl工具的原始輸出是什麼樣子的。f(follow)選項顯示systemd日誌中的最新條目,並在新條目到達時更新。 sudo journalctl -f 輸出環繞在終端視窗的邊緣。 它看起來不太...
...個條目來自哪個日誌檔案。 尾巴還是有價值的 儘管現在journalctl提供了對系統日誌檔案的訪問,但tail仍然提供了很多功能。尤其是當它與其他命令結合使用時,透過管道進入或離開尾部。 systemd可能已經改變了環境,但是對於...
...用。它的輸出可能會讓新手感到困惑,但我們將向您展示如何理解它。 自由命令 free命令在終端視窗中列印記憶體使用情況的快速摘要。它沒有太多的選擇和技巧,也不需要花太多的時間和精力去學習如何使用它。然而,要學...
...和術語。按less中的正斜槓“/”鍵啟動搜尋功能。 相關:如何在Linux上使用less命令 不再需要sudo 如果希望避免每次使用dmesg時都必須使用sudo,可以使用以下命令。但是,請注意:它允許任何擁有您的計算機使用者帳戶的人使用dme...
...後才能使用連線到Linux計算機的任何資料儲存裝置。學習如何使用mkfs和其他實用程式來為各種檔案系統實現這一點。我們教你怎麼做。 mkfs**檔案系統 mkfs命令生成檔案系統。在其他作業系統上,建立檔案系統稱為格式化。不管...
...來實現什麼可以完成使用世界衛生組織的命令。 相關:如何在Linux中確定當前使用者帳戶 lastb命令 lastb命令值得一提。它從名為btmp的日誌中讀取資料。關於這個日誌名,大家有了更多的共識。“b”代表壞,但“tmp”部分仍有爭...
...重複警告。如果你完全不確定你對系統檔案所做的更改將如何使你的計算機正常工作,就不要進行更改。 當你確實需要編輯一個文字檔案時,不管它是不是一個系統檔案,你會發現gedit是一個快速而簡單的編輯器,它不會讓你陷...
macOS中的C***ole應用程式是一個用於除錯訊息和日誌檔案的系統範圍的檢視器。您可以使用它來跟蹤應用程式中的錯誤,或者只是瞭解系統中發生了什麼。 這個應用程式中的大部分內容都不是供普通使用者檢視的,因為它是為更...