系統(tǒng)管理員排除故障的五種武器
當(dāng)你不知道從哪里開始時(shí),這五個(gè)工具可以幫助你找到用戶的 IT 問題的源頭。
作為系統(tǒng)管理員,我每天都面臨著需要快速解決的問題,用戶和管理人員期望事情能夠順利地進(jìn)行。在我管理的這樣的一個(gè)大型環(huán)境中,幾乎不可能從頭到尾了解所有的系統(tǒng)和產(chǎn)品,所以我必須使用創(chuàng)造性的技術(shù)來找到問題的根源,并(希望可以)提出解決方案。
這是我 20 多年來的日常經(jīng)驗(yàn)!每天上班時(shí),我從不知道會(huì)發(fā)生什么。因此,我有一些快速而簡陋的技巧,當(dāng)一個(gè)問題落在我的身上,而我又不知道從哪里開始時(shí),我一般就會(huì)采用這些技巧。
但等一下!在你直接打開命令行之前,請花一些時(shí)間與你的用戶交談。是的,這可能很乏味,但他們可能會(huì)有一些好的信息給你。請記住,用戶可能沒有你那么多的經(jīng)驗(yàn),你需要對(duì)他們說的東西進(jìn)行一些解釋。試著清楚地了解正在發(fā)生什么和應(yīng)該發(fā)生什么,然后用技術(shù)語言自己描述故障。請注意,大多數(shù)用戶并不閱讀他們面前的屏幕上的內(nèi)容;這很可悲,但卻是事實(shí)。確保你和用戶都閱讀了所有的文字,以收集盡可能多的信息。一旦你收集到了這些信息,就打開命令行,使用這五個(gè)工具。
Telnet
讓我從一個(gè)經(jīng)典開始。??Telnet?? 是
SSH 的前身,在過去,它在 Unix 系統(tǒng)上用來連接到遠(yuǎn)程終端,就像 SSH 一樣,但它沒有加密。Telnet
在診斷網(wǎng)絡(luò)連接問題方面有一個(gè)非常巧妙和寶貴的技巧:你可以 Telnet 到不是專屬于它 TCP
端口(23/TCP)。要做到這一點(diǎn),可以像平時(shí)一樣使用 Telnet,但在末尾加上 TCP 端口(例如 ??telnet localhost 80?
?),以連接到一個(gè)網(wǎng)絡(luò)服務(wù)器。這可以讓你能夠檢查一個(gè)服務(wù)器,看看服務(wù)是否正在運(yùn)行,或者防火墻是否阻擋了它。因此,在沒有應(yīng)用程序客戶端,甚至沒有登錄應(yīng)用程序的情況下,你可以檢查
TCP 端口是否有反應(yīng)。如果你知道怎么做,有時(shí)你可以通過在 Telnet
提示符手動(dòng)輸入并獲得響應(yīng)以檢查。網(wǎng)絡(luò)服務(wù)器和郵件服務(wù)器是你可以這樣做的兩個(gè)例子。
用 Telnet 獲得網(wǎng)絡(luò)服務(wù)器的響應(yīng)
Tcpdump
??tcpdump?? 工具可以讓你檢查網(wǎng)絡(luò)上正在傳輸?shù)臄?shù)據(jù)。大多數(shù)網(wǎng)絡(luò)協(xié)議都相當(dāng)簡單,如果你把 ??tcpdump?
? 和一個(gè)像 ??Wireshark?? 這樣的工具結(jié)合起來,你會(huì)得到一個(gè)簡單而好用的方法來瀏覽你所捕獲的流量。在如下的例子中,我在下面的窗口中檢查數(shù)據(jù)包,在上面的窗口連接到 TCP 3260 端口。
用 tcpdump 實(shí)時(shí)檢查數(shù)據(jù)包
這張截圖顯示了在現(xiàn)實(shí)世界中使用 Wireshark 查看 iSCSI 協(xié)議的情況;在這種情況下,我能夠確定我們的 QNAP 網(wǎng)絡(luò)附加存儲(chǔ)的配置方式有問題。
使用 Wireshark 檢查 TCP 會(huì)話
find
如果你不知道從哪里開始,??find?? 命令就是最好的工具。在其最簡單的形式中,你可以用它來“尋找”文件。例如,如果我想在所有的目錄中進(jìn)行遞歸搜索,得到一個(gè) conf 文件的列表,我可以輸入:
find . -name '*.conf'.
find 命令輸出
但是,??find?
? 的一個(gè)隱藏的寶藏是,你可以用它對(duì)它找到的每個(gè)項(xiàng)目執(zhí)行一個(gè)命令。例如,如果我想得到每個(gè)文件的長列表,我可以輸入;
find . -name '*.conf' -exec ls -las {}\;
查找命令輸出
一旦你掌握了這種技術(shù),你就可以用各種創(chuàng)造性的方法來尋找、搜索和以特定方式執(zhí)行程序。
strace
我是在 Solaris 上認(rèn)識(shí) ??strace?? 這個(gè)概念的,在那里它被稱為 ??truss?
?。今天,它仍然像多年前一樣有用。??strace?
? 允許你在進(jìn)程實(shí)時(shí)運(yùn)行時(shí)檢查它在做什么。使用它很簡單,只要使用命令 ??ps -ef?
?,找到你感興趣的進(jìn)程 ID。用 ??strace -p <進(jìn)程 ID>?
? 啟動(dòng) ??strace?
?,它會(huì)開始打印出一大堆東西,一開始看起來像垃圾信息。但如果你仔細(xì)觀察,你會(huì)看到你認(rèn)識(shí)的文字,如 ??OPEN?
? 和 ??CLOSE?
? 這樣的詞和文件名。如果你想弄清楚一個(gè)程序?yàn)槭裁床还ぷ?,這可以引導(dǎo)你走向正確的方向。
grep
把最好的留到最后:??grep??。這個(gè)工具是如此有用和強(qiáng)大,以至于我很難想出一個(gè)簡潔的方法來描述它。簡單地說,它是一個(gè)搜索工具,但它的搜索方式使它如此強(qiáng)大。在問題分析中,我通常會(huì)用 ??grep?
? 搜索一堆日志來尋找一些東西。一個(gè)叫 ??zgrep?
? 的配套命令可以對(duì)壓縮文件做同樣的事情。在下面的例子中,我使用 ??zgrep bancroft /var/log/*?
? 在所有的日志文件中進(jìn)行 grep,以查看我在系統(tǒng)中的工作情況。我使用 ??zgrep?
? 是因?yàn)樵撃夸浿杏袎嚎s文件。
grep 命令輸出
使用 ??grep?
? 的另一個(gè)好方法是將其他工具的輸出通過管道輸送到它里面;這樣,它就可以作為一種過濾器來使用。在下面的例子中,我列出了 auth 文件,并通過使用 ??cat auth.log |grep bancroft?
? 來搜索我的登錄信息,看看我都做了什么。這也可以寫成 ??grep bancroft auth.log?
?,但我這里用管道(??|?
?)來證明這一點(diǎn)。
grep 命令輸出
其他需要考慮的工具
你可以用這些工具做更多的事情,但我希望這個(gè)簡單的介紹能給你一個(gè)窗口,讓你了解如何用它們來解決你遇到的討厭的問題。另一個(gè)值得你注意的工具是 ??Nmap??,我沒有包括它,因?yàn)樗侨绱巳?,需要一整篇文章(或更多)來解釋它。最后,我建議學(xué)習(xí)一些白帽和黑客技術(shù);在試圖找出問題的根源時(shí),它們可能非常有益,因?yàn)樗鼈兛梢詭椭闶占瘜?duì)決策至關(guān)重要的信息。