系統管理員排除故障的五種武器
作為系統管理員,我每天都面臨著需要快速解決的問題,用戶和管理人員期望事情能夠順利地進行。在我管理的這樣的一個大型環境中,幾乎不可能從頭到尾了解所有的系統和產品,所以我必須使用創造性的技術來找到問題的根源,並(希望可以)提出解決方案。
這是我 20 多年來的日常經驗!每天上班時,我從不知道會發生什麼。因此,我有一些快速而簡陋的技巧,當一個問題落在我的身上,而我又不知道從哪裡開始時,我一般就會採用這些技巧。
但等一下!在你直接打開命令行之前,請花一些時間與你的用戶交談。是的,這可能很乏味,但他們可能會有一些好的信息給你。請記住,用戶可能沒有你那麼多的經驗,你需要對他們說的東西進行一些解釋。試著清楚地了解正在發生什麼和應該發生什麼,然後用技術語言自己描述故障。請注意,大多數用戶並不閱讀他們面前的屏幕上的內容;這很可悲,但卻是事實。確保你和用戶都閱讀了所有的文字,以收集儘可能多的信息。一旦你收集到了這些信息,就打開命令行,使用這五個工具。
Telnet
讓我從一個經典開始。Telnet 是 SSH 的前身,在過去,它在 Unix 系統上用來連接到遠程終端,就像 SSH 一樣,但它沒有加密。Telnet 在診斷網路連接問題方面有一個非常巧妙和寶貴的技巧:你可以 Telnet 到不是專屬於它 TCP 埠(23/TCP)。要做到這一點,可以像平時一樣使用 Telnet,但在末尾加上 TCP 埠(例如 telnet localhost 80
),以連接到一個網路伺服器。這可以讓你能夠檢查一個伺服器,看看服務是否正在運行,或者防火牆是否阻擋了它。因此,在沒有應用程序客戶端,甚至沒有登錄應用程序的情況下,你可以檢查 TCP 埠是否有反應。如果你知道怎麼做,有時你可以通過在 Telnet 提示符手動輸入並獲得響應以檢查。網路伺服器和郵件伺服器是你可以這樣做的兩個例子。
![用 Telnet 獲得網路伺服器的響應](/data/attachment/album/202202/01/005659e4u0xdx0ukeme6k7.png "Getting a response from a webserver with Telnet")
Tcpdump
tcpdump 工具可以讓你檢查網路上正在傳輸的數據。大多數網路協議都相當簡單,如果你把 tcpdump
和一個像 Wireshark 這樣的工具結合起來,你會得到一個簡單而好用的方法來瀏覽你所捕獲的流量。在如下的例子中,我在下面的窗口中檢查數據包,在上面的窗口連接到 TCP 3260 埠。
![用 tcpdump 實時檢查數據包](/data/attachment/album/202202/01/005700ym5z1z10f5q9dl51.png "Inspecting packets in real time with tcpdump")
這張截圖顯示了在現實世界中使用 Wireshark 查看 iSCSI 協議的情況;在這種情況下,我能夠確定我們的 QNAP 網路附加存儲的配置方式有問題。
![使用 Wireshark 檢查 TCP 會話](/data/attachment/album/202202/01/005700mzr8m59c082j2t96.png "Using Wireshark to inspect a TCP session")
find
如果你不知道從哪裡開始,find 命令就是最好的工具。在其最簡單的形式中,你可以用它來「尋找」文件。例如,如果我想在所有的目錄中進行遞歸搜索,得到一個 conf 文件的列表,我可以輸入:
find . -name '*.conf'.
![find 命令輸出](/data/attachment/album/202202/01/005701y973jmt6jg6g6t96.png "find command output")
但是,find
的一個隱藏的寶藏是,你可以用它對它找到的每個項目執行一個命令。例如,如果我想得到每個文件的長列表,我可以輸入;
find . -name '*.conf' -exec ls -las {};
![查找命令輸出](/data/attachment/album/202202/01/005701t2sptl2ksbb2at8p.png "find command output")
一旦你掌握了這種技術,你就可以用各種創造性的方法來尋找、搜索和以特定方式執行程序。
strace
我是在 Solaris 上認識 strace 這個概念的,在那裡它被稱為 truss
。今天,它仍然像多年前一樣有用。strace
允許你在進程實時運行時檢查它在做什麼。使用它很簡單,只要使用命令 ps -ef
,找到你感興趣的進程 ID。用 strace -p <進程 ID>
啟動 strace
,它會開始列印出一大堆東西,一開始看起來像垃圾信息。但如果你仔細觀察,你會看到你認識的文字,如 OPEN
和 CLOSE
這樣的詞和文件名。如果你想弄清楚一個程序為什麼不工作,這可以引導你走向正確的方向。
grep
把最好的留到最後:grep。這個工具是如此有用和強大,以至於我很難想出一個簡潔的方法來描述它。簡單地說,它是一個搜索工具,但它的搜索方式使它如此強大。在問題分析中,我通常會用 grep
搜索一堆日誌來尋找一些東西。一個叫 zgrep
的配套命令可以對壓縮文件做同樣的事情。在下面的例子中,我使用 zgrep bancroft /var/log/*
在所有的日誌文件中進行 grep,以查看我在系統中的工作情況。我使用 zgrep
是因為該目錄中有壓縮文件。
![grep 命令輸出](/data/attachment/album/202202/01/005701cvwhw9vd9v88xkxx.png "grep command output")
使用 grep
的另一個好方法是將其他工具的輸出通過管道輸送到它裡面;這樣,它就可以作為一種過濾器來使用。在下面的例子中,我列出了 auth 文件,並通過使用 cat auth.log |grep bancroft
來搜索我的登錄信息,看看我都做了什麼。這也可以寫成 grep bancroft auth.log
,但我這裡用管道(|
)來證明這一點。
![grep 命令輸出](/data/attachment/album/202202/01/005702qt54z1uz8u1p66n8.png "grep command output")
其他需要考慮的工具
你可以用這些工具做更多的事情,但我希望這個簡單的介紹能給你一個窗口,讓你了解如何用它們來解決你遇到的討厭的問題。另一個值得你注意的工具是 Nmap,我沒有包括它,因為它是如此全面,需要一整篇文章(或更多)來解釋它。最後,我建議學習一些白帽和黑客技術;在試圖找出問題的根源時,它們可能非常有益,因為它們可以幫助你收集對決策至關重要的信息。
via: https://opensource.com/article/20/1/ops-hacks-sysadmins
作者:Stephen Bancroft 選題:lujun9972 譯者:wxy 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive