- 相關(guān)推薦
Linux管理員必學(xué)技巧匯總
如果一位高效的系統管理員能在 10 分鐘內完成一件他人需要 2 個(gè)小時(shí)才能完成的任務(wù),那么他應該受到獎勵(得到更多報酬),因為他為公司節約了時(shí)間,而時(shí)間就是金錢(qián),不是嗎?然而技巧是為了提高管理效率。下文會(huì )介紹 “懶惰” 管理員所用的 10 個(gè)基本法寶。這些技巧可以節約時(shí)間 —— 即使沒(méi)有因為高效而得到更多的報酬,但至少可以有更多的時(shí)間去玩。
技巧 1
卸載無(wú)響應的 DVD 驅動(dòng)器
網(wǎng)絡(luò )新手的經(jīng)歷:按下服務(wù)器(運行基于 Redmond 的操作系統)DVD 驅動(dòng)器上的 Eject 按鈕時(shí),它會(huì )立即彈出。他然后抱怨說(shuō),在大多數企業(yè) Linux 服務(wù)器中,如果在那個(gè)目錄中運行某個(gè)進(jìn)程,彈出就不會(huì )發(fā)生。作為一名長(cháng)期的 Linux 管理員,我會(huì )重啟機器。如果我不清楚正在運行什么,以及為何不釋放 DVD 驅動(dòng)器,我則會(huì )彈出磁盤(pán)。但這樣效率很低。
下面介紹如何找到保持 DVD 驅動(dòng)器的進(jìn)程,并輕松彈出 DVD 驅動(dòng)器:首先進(jìn)行模擬。在 DVD 驅動(dòng)器中放入磁盤(pán),打開(kāi)一個(gè)終端,裝載 DVD 驅動(dòng)器:
# mount /media/cdrom
# cd /media/cdrom
# while [ 1 ]; do echo "All your drives are belong to us!"; sleep 30; done
現在打開(kāi)第二個(gè)終端并試著(zhù)彈出 DVD 驅動(dòng)器:
# eject
將得到以下消息:
umount: /media/cdrom: device is busy
在釋放該設備之前,讓我們找出誰(shuí)在使用它。
# fuser /media/cdrom
進(jìn)程正在運行,無(wú)法彈出磁盤(pán)其實(shí)是我們的錯誤。
現在,如果您是根用戶(hù),可以隨意終止進(jìn)程:
# fuser -k /media/cdrom
現在終于可以卸載驅動(dòng)器了:
# eject
fuser 很正常。
技巧 2
恢復出現問(wèn)題的屏幕
嘗試以下操作:
# cat /bin/cat
注意!終端就想垃圾一樣。輸入的所有內容非常零亂。那么該怎么做呢?
輸入 reset。但是,輸入 reset 與 輸入 reboot 或 shutdown 太接近了。嚇得手心冒汗了吧 — 特別是在生產(chǎn)機器上執行這個(gè)操作時(shí)。
放心吧,在進(jìn)行此操作時(shí),機器不會(huì )重啟。繼續操作:
# reset
現在屏幕恢復正常了。這比關(guān)閉窗口后再次登陸好多了,特別是必須經(jīng)過(guò) 5 臺機器和 SSH 才能到達這臺機器時(shí)。
技巧 3
屏幕協(xié)作
來(lái)自產(chǎn)品工程的高級維護用戶(hù) David 打電話(huà)說(shuō):“為什么我不能在您部署的這些新機器上編譯 supercode.c”。
您會(huì )問(wèn)他:“您運行的是什么機器?”
David 答道:“ Posh”。(這個(gè)虛夠的公司將它的 5 臺生產(chǎn)服務(wù)器以紀念 Spice Girls 的方式命名)。這下您可以大顯身手了,另一臺機器由 David 操作:
# su - david
轉到 posh:
# ssh posh
到達之后,運行以下代碼:
# screen -S foo
然后呼叫 David:
“David,在終端運行命令 # screen -x foo”。
這使您和 David 的會(huì )話(huà)在 Linux shell 中聯(lián)接在一起。您可以輸入,他也可以輸入,但彼此可以看到對方所做的事情。這避免了進(jìn)入其他層次,而且雙方都有相同的控制權。這樣做的好處是 David 可以觀(guān)察到您的故障診斷技巧,并能準確了解如何解決問(wèn)題。
最后大家都能看到問(wèn)題所在:David 的編譯腳本對一個(gè)不在此新服務(wù)器上的舊目錄進(jìn)行了硬編碼。將它裝載后再次編譯即可解決問(wèn)題,然后 David 繼續工作。您則可以繼續之前的娛樂(lè )活動(dòng)。
關(guān)于此技巧需要注意的一點(diǎn)是,雙方需要以同一用戶(hù)登錄。screen 命令還可以:實(shí)現多個(gè)窗口和拆分屏幕。請閱讀手冊頁(yè)獲取更多相關(guān)信息。
對于 screen 會(huì )話(huà),我還有最后一個(gè)技巧。要從中分離并讓它打開(kāi),請輸入 Ctrl-A D(即按住 Ctrl 鍵并點(diǎn)擊 A 鍵。然后按 D 鍵)。
然后通過(guò)再次運行 screen -x foo 命令可以重新拼接起來(lái)。
技巧 4:找回根密碼
如果忘記根密碼,就必須重新安裝整臺機器。更慘的是,許多人都會(huì )這樣做。但是啟動(dòng)機器并更改密碼卻十分簡(jiǎn)單。這并非在所有情況下都適用(比如設置了一個(gè) GRUB 密碼,但也忘記了),但這里介紹一個(gè) Cent OS Linux 示例,說(shuō)明一般情況下的操作。
首先重啟系統。重啟時(shí)會(huì )跳出如圖 1 所示的 GRUB 屏幕。移動(dòng)箭頭鍵,這樣可以保留在此屏幕上,而不是進(jìn)入正常啟動(dòng)。
圖 1. 重啟后的 GRUB 屏幕
然后,使用箭頭鍵選擇要啟動(dòng)的內核,并輸入 E 編輯內核行。然后便可看到如圖 2 所示的屏幕:
圖 2:準備編輯內核行
再次使用箭頭鍵突出顯示以 kernel 開(kāi)始的行,按 E 編輯內核參數。到達如圖 3 所示的屏幕時(shí),在圖 3 中所示的參數后追加數字 1 即可:
圖 3. 在參數后追加數字 1
然后按 Enter 和 B,內核會(huì )啟動(dòng)到單用戶(hù)模式。然后運行 passwd 命令,更改用戶(hù)根密碼:
sh-3.00# passwd
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully
現在可以重啟了,機器將使用新密碼啟動(dòng)。
技巧 5:SSH 后門(mén)
有很多次,我所在的站點(diǎn)需要某人的遠程支持,而他卻被公司防火強阻擋在外。很少有人意識到,如果能通過(guò)防火墻到達外部,那么也能輕松實(shí)現讓外部的信息進(jìn)來(lái)。
從本意講,這稱(chēng)為 “在防火墻上砸一個(gè)洞”。我稱(chēng)之為 SSH 后門(mén)。為了使用它,必須有一臺作為中介的連接到 Internet 的機器。
在本例中,將這樣臺機器稱(chēng)為 blackbox.example.com。公司防火墻后面的機器稱(chēng)為 ginger。此技術(shù)支持的機器稱(chēng)為 tech。圖 4 解釋了設置過(guò)程。
圖 4. 在防火墻上砸一個(gè)洞
以下是操作步驟:
檢查什么是允許做的,但要確保您問(wèn)對了人。大多數人都擔心您打開(kāi)了防火墻,但他們不明白這是完全加密的。而且,必須破解外部機器才能進(jìn)入公司內部。不過(guò),您可能屬于 “敢作敢為” 型的人物。自己進(jìn)行判斷應該選擇的方式,但不如意時(shí)不抱怨別人。
使用 -R 標記通過(guò) SSH 從 ginger 連接到 blackbox.example.com。假設您是 ginger 上的根用戶(hù),tech 需要根用戶(hù) ID 來(lái)幫助使用系統。使用-R 標記將 blackbox 上端口 2222 的說(shuō)明轉發(fā)到 ginger 的端口 22 上。這就設置了 SSH 通道。注意,只有 SSH 通信可以進(jìn)入 ginger:您不會(huì )將 ginger 放在無(wú)保護的 Internet 上。
可以使用以下語(yǔ)法實(shí)現此操作:
~# ssh -R 2222:localhost:22 thedude@blackbox.example.com
進(jìn)入 blackbox 后,只需一直保持登錄狀態(tài)。我總是輸入以下命令:
thedude@blackbox:~$ while [ 1 ]; do date; sleep 300; done
使機器保持忙碌狀態(tài)。然后最小化窗口。
現在指示 tech 上的朋友使用 SSH 連接到 blackbox,而不需要使用任何特殊的 SSH 標記。但必須把密碼給他們:
root@tech:~# ssh thedude@blackbox.example.com.
tech 位于 blackbox 上后,可以使用以下命令從 SSH 連接到 ginger:
thedude@blackbox:~$: ssh -p 2222 root@localhost
Tech 將提示輸入密碼。應該輸入 ginger 的根密碼。
現在您和來(lái)自 tech 的支持可以一起工作并解決問(wèn)題。甚至需要一起使用屏幕!(參見(jiàn) 技巧 4)。
技巧 6:通過(guò) SSH 通道進(jìn)行遠程 VNC 會(huì )話(huà)
VNC 或虛擬網(wǎng)絡(luò )計算已經(jīng)存在很長(cháng)時(shí)間了。通常,當遠程服務(wù)器上的某類(lèi)圖形程序只能在此服務(wù)器上使用時(shí),我才需要 VNC。
例如,假設在 技巧 5 中,ginger 是一臺存儲服務(wù)器。許多設備都使用 GUI 程序來(lái)管理存儲控制器。這些 GUI 管理工具通常需要通過(guò)一個(gè)網(wǎng)絡(luò )直接連接到存儲服務(wù)器,而這個(gè)網(wǎng)絡(luò )有時(shí)保存在專(zhuān)用的子網(wǎng)絡(luò )中。因此,只能通過(guò) ginger 訪(fǎng)問(wèn)這個(gè) GUI。
可以嘗試使用 -X 選項通過(guò) SSH 連接到 ginger 并啟動(dòng)它,但這對帶寬要求很高,您需要忍受等待的痛苦。VNC 是一個(gè)網(wǎng)絡(luò )友好的工具,幾乎適用于所有操作系統。
假設設置與技巧 5 中的一樣,但希望 tech 能訪(fǎng)問(wèn) VNC 而不是 SSH。對于這種情況,需要進(jìn)行一些類(lèi)似的操作,不過(guò)轉發(fā)的是 VNC 端口。執行以下操作步驟:
在 ginger 上啟動(dòng)一個(gè) VNC 服務(wù)器會(huì )話(huà)。運行以下命令:
root@ginger:~# vncserver -geometry 1024x768 -depth 24 :99
這些選項指示啟動(dòng)服務(wù)器,分辨率為 1024x768,像素深度為每像素 24 位。如果使用較慢的連接設置,8 也許是更好的選項。使用 :99 指定可訪(fǎng)問(wèn) VNC 服務(wù)器的端口。VNC 協(xié)議在 5900 處啟動(dòng),因此:99 表示服務(wù)器可從端口 5999 訪(fǎng)問(wèn)。
啟動(dòng)該會(huì )話(huà)時(shí),要求您指定密碼。用戶(hù) ID 與啟動(dòng) VNC 服務(wù)器時(shí)的用戶(hù)相同(本例中就是根用戶(hù))。
從 ginger 連接到 blackbox.example.com 的 SSH 將 blackbox 上的端口 5999 轉發(fā)到 ginger。這通過(guò)運行以下命令在 ginger 中完成:
root@ginger:~# ssh -R 5999:localhost:5999 thedude@blackbox.example.com
運行此命令后,需要將此 SSH 會(huì )話(huà)保持為打開(kāi)狀態(tài),以便保留轉發(fā)到 ginger 的端口。此時(shí),如果在 blackbox 上,那么運行以下命令即可訪(fǎng)問(wèn) ginger 上的 VNC 會(huì )話(huà):
thedude@blackbox:~$ vncviewer localhost:99
這將通過(guò) SSH 將端口轉發(fā)給 ginger,但我們希望通過(guò) tech 讓 VNC 訪(fǎng)問(wèn) ginger。為此,需要另一個(gè)通道。
在 tech 中,打開(kāi)一個(gè)通道,通過(guò) SHH 將端口 5999 轉發(fā)到 blackbox 上的端口 5999。這通過(guò)運行以下命令完成:
root@tech:~# ssh -L 5999:localhost:5999 thedude@blackbox.example.com
這次使用的 SSH 標記為 -L,它不是將 5999 放到 blackbox,而是從中獲取。到達 blackbox 后,需要保持此會(huì )話(huà)為打開(kāi)狀態(tài),F在即可在 tech 中使用 VNC 了!
在 tech 中,運行以下命令使 VNC 連接到 ginger:
root@tech:~# vncviewer localhost:99.
Tech 現在將擁有一個(gè)直接到 ginger 的 VNC 會(huì )話(huà)。
設置雖然有點(diǎn)麻煩,但比為修復存儲陣列而四處奔波強多了。不過(guò)多實(shí)踐幾次這就變得容易了。
對此技巧我還要補充一點(diǎn):如果 tech 運行的是 Windows® 操作系統,并且沒(méi)有命令行 SSH 客戶(hù)端,那么 tech 可以運行 Putty。Putty 可以設置為通過(guò)查找側欄中的選項來(lái)轉發(fā) SSH 端口。如果端口是 5902 而不是本例中的 5999,則可以輸入圖 5 中的內容。
圖 5. Putty 可以轉發(fā)用作通道的 SSH
如果進(jìn)行了此設置,那么 tech 就可以使用 VNC 連接到 localhost:2,如同 tech 正在 Linux 操作系統上運行一樣。
技巧 7:檢查帶寬
設想:公司 A 有一個(gè)名為 ginger 的存儲服務(wù)器,并通過(guò)名為 beckham 的客戶(hù)端節點(diǎn)裝載 NFS。公司 A 確定他們需要從 ginger 得到更多的帶寬,因為有大量的節點(diǎn)需要 NFS 裝載 ginger 的共享文件系統。
實(shí)現此操作的最常用和最便宜的方式是將兩個(gè)吉比特以太網(wǎng) NIC 組合在一起。這是最便宜的,因為您通常會(huì )有一個(gè)額外的可用 NIC 和一個(gè)額外的端口。
所以采取此這個(gè)方法。不過(guò)現在的問(wèn)題是:到底需要多少帶寬?
吉比特以太網(wǎng)理論上的限制是 128MBit/s。這個(gè)數字從何而來(lái)?看看這些計算:
1Gb = 1024Mb;1024Mb/8 = 128MB;"b" = "bits,"、"B" = "bytes"
但實(shí)際看到的是什么呢,有什么好的測量方法呢?我推薦一個(gè)工具 iperf?梢园凑找韵路椒ǐ@得 iperf:
# wget http://dast.nlanr.net/Projects/Iperf2.0/iperf-2.0.2.tar.gz
需要在 ginger 和 beckham 均可見(jiàn)的共享文件系統上安裝此工具,或者在兩個(gè)節點(diǎn)上編譯并安裝。我將在兩個(gè)節點(diǎn)均可見(jiàn)的 bob 用戶(hù)的主目錄中編譯它:
tar zxvf iperf*gz
cd iperf-2.0.2
./configure -prefix=/home/bob/perf
make
make install
在 ginger 上,運行:
# /home/bob/perf/bin/iperf -s -f M
這臺機器將用作服務(wù)器并以 MBit/s 為單位輸出執行速度。
在 beckham 節點(diǎn)上,運行:
# /home/bob/perf/bin/iperf -c ginger -P 4 -f M -w 256k -t 60
兩個(gè)屏幕上的結果都指示了速度是多少。在使用吉比特適配器的普通服務(wù)器上,可能會(huì )看到速度約為 112MBit/s。這是 TCP 堆棧和物理電纜中的常用帶寬。通過(guò)以端到端的方式連接兩臺服務(wù)器,每臺服務(wù)器使用兩個(gè)聯(lián)結的以太網(wǎng)卡,我獲得了約 220MBit/s 的帶寬。
事實(shí)上,在聯(lián)結的網(wǎng)絡(luò )上看到的 NFS 約為 150-160MBit/s。這仍然表示帶寬可以達到預期效果。如果看到更小的值,則應該檢查是否有問(wèn)題。
我最近碰到一種情況,即通過(guò)連接驅動(dòng)程序連接兩個(gè)使用了不同驅動(dòng)程序的 NIC。這導致性能非常低,帶寬約為 20MBit/s,比不連接以太網(wǎng)卡時(shí)的帶寬還小!
技巧 8:命令行腳本和實(shí)用程序
Linux 系統管理員通過(guò)使用權威的命令行腳本會(huì )變得更高效。這包括巧妙使用循環(huán)和知道如何使用 awk、grep 和sed等的實(shí)用程序解析數據。通常這可以減少擊鍵次數,降低用戶(hù)出錯率。
例如,假設需要為即將安裝的 Linux 集群生成一個(gè)新的 /etc/hosts 文件。一般的做法是在 vi 或文本編輯器中添加 IP 地址。不過(guò),可以通過(guò)使用現有 /etc/hosts 文件并將以下內容追加到此文件來(lái)實(shí)現。在命令行上運行:
# P=1; for i in $(seq -w 200); do echo "192.168.99.$P n$i"; P=$(expr $P + 1);
done >>/etc/hosts
200 個(gè)主機名(n001 到 n200)將由 IP 地址(192.168.99.1 到 192.168.99.200)來(lái)創(chuàng )建。手動(dòng)填充這樣的文件有可能會(huì )創(chuàng )建重復的 IP 地址或主機名,因此這是使用內置命令行消除用戶(hù)錯誤的好例子。請注意,這是在 bash shell(大多數 Linux 發(fā)行版的默認值)內完成的。
再舉一個(gè)例子,假設要檢查 Linux 集群中的各個(gè)計算節點(diǎn)中的內存大小是否一樣。通常,擁有一個(gè)發(fā)行版或類(lèi)似的 shell 是最好的。但是為了演示,以下使用 SSH。
假設 SSH 設置為不使用密碼驗證。然后運行:
# for num in $(seq -w 200); do ssh n$num free -tm | grep Mem | awk '{print $2}';
done | sort | uniq
這樣的命令行相當簡(jiǎn)潔。(如果在其中放入正則表達式情況會(huì )更糟)。讓我們對它進(jìn)行細分,詳細討論各部分。
首先從 001 循環(huán)到 200。使用 seq 命令的 -w 選項在前面填充 0。然后替換 num 變量,創(chuàng )建通過(guò) SSH 連接的主機。有了目標主機后,向它發(fā)出命令。本例中是:
free -m | grep Mem | awk '{print $2}'
這個(gè)命令的意思是:
使用 free 命令獲取以兆字節為單位的內存大小。
獲取這個(gè)命令的結果,并使用 grep 獲取包含字符串 Mem 的行。
獲取那一行并使用 awk 輸出第二個(gè)字段,它是節點(diǎn)中的總內存。
在每個(gè)節點(diǎn)上執行這個(gè)操作。
在每個(gè)節點(diǎn)上執行命令后,200 個(gè)節點(diǎn)的整個(gè)輸出就傳送(|d)到 sort 命令,以對所有內存值進(jìn)行排序。
最后,使用 uniq 命令消除重復項。這個(gè)命令會(huì )導致以下情況中的一種:
如果所有節點(diǎn)(n001 到 n200)擁有相同的內存大小,則只顯示一個(gè)數字。這個(gè)數字就是每個(gè)操作系統看到的內存大小。
如果節點(diǎn)內存大小不同,將會(huì )看到幾個(gè)內存大小的值。
最后,如果某個(gè)節點(diǎn)上的 SSH 出現故障,則會(huì )看到一些錯誤消息。
這個(gè)命令并不是完美無(wú)缺的。如果發(fā)現與預期不同的內存值,您就不知道是哪一個(gè)節點(diǎn)出了問(wèn)題,或者有多少個(gè)節點(diǎn)。為此需要發(fā)出另一個(gè)命令。
這個(gè)技巧提供了一種查看某些內容的快速方式,而且如果發(fā)生錯誤,您可以立刻知道。其價(jià)值在于快速檢查。
技巧 9:控制臺偵察
有些軟件會(huì )向控制臺輸出錯誤消息,而控制臺不一定會(huì )顯示在 SHH 會(huì )話(huà)中。使用 vcs 設備可以進(jìn)行檢查。在 SSH 會(huì )話(huà)中,在遠程服務(wù)器 # cat /dev/vcs1 上運行以下命令。這將顯示第一個(gè)控制臺中的內容。也可以使用 2、3 等查看其他虛擬終端。如果某個(gè)用戶(hù)在遠程系統上輸入,您將看到他輸入的內容。
在大多數數據場(chǎng)中,使用遠程終端服務(wù)器、KVM 甚至 Serial Over LAN 是查看這類(lèi)信息的最好方式;它也提供了帶外查看功能的一些好處。使用 vcs 設備能夠提供一種快速帶內方法,這能節省去機房查看控制臺的時(shí)間。
技巧 10:隨機系統信息收集
在 8 中,介紹了一個(gè)使用命令行獲取有關(guān)系統中總內存信息的例子。在這個(gè)技巧中,我將介紹幾個(gè)其他方法,用于從需要進(jìn)行驗證、故障診斷或給予遠程支持的系統收集重要信息。
首先,收集關(guān)于處理器的信息。通過(guò)以下命令很容易實(shí)現:
# cat /proc/cpuinfo。
這個(gè)命令給出關(guān)于處理器的速度、數量和型號的信息。在許多情況下使用 grep 可以得到需要的值。
我經(jīng)常做的檢查是確定系統中處理器的數量。因此,如果我買(mǎi)了一臺帶雙核處理器的四核服務(wù)器,我可以運行以下命令:
# cat /proc/cpuinfo | grep processor | wc-l。
然后我看到值應該是 8。如果不是,我會(huì )打電話(huà)給供應商,讓他們給我派送另一臺處理器。
我需要的另一條信息是磁盤(pán)信息?梢允褂 df 命令獲得。我總是添加 -h 標記,以便看到以十億字節或兆字節為單位的輸出。# df -h 還會(huì )顯示磁盤(pán)的分區情況。
列表最后是查看系統固件的方式 —— 一個(gè)獲取 BIOS 級別和 NIC 上的固件信息的方法。
要檢查 BIOS 版本,可以運行 dmidecode 命令。遺憾的是,不能輕易使用 grep 獲取信息,所以這不是一個(gè)很有效的方法。對于我的 Lenovo T61 laptop,輸出如下:
#dmidecode | less
...
BIOS Information
Vendor: LENOVO
Version: 7LET52WW (1.22 )
Release Date: 08/27/2007
...
這比重啟機器并查看 POST 輸出有效得多。
要檢查以太網(wǎng)適配器的驅動(dòng)程序和固件版本,請運行 ethtool:
# ethtool -i eth0
driver: e1000
version: 7.3.20-k2-NAPI
firmware-version: 0.3-0
【Linux管理員必學(xué)技巧】相關(guān)文章:
Linux系統專(zhuān)家必學(xué)的20個(gè)命令06-14
必學(xué)的頭發(fā)護理技巧10-19
Excel必學(xué)技巧推薦09-06
Excel表格的必學(xué)技巧06-30
Linux認證操作技巧10-10
男模必學(xué)的胡須打理技巧09-12
必學(xué)的11個(gè)說(shuō)話(huà)技巧10-09
國慶出游拍攝技巧必學(xué)08-15
新手必學(xué)的乒乓球技巧09-10