提高效率! Linux 管理員必用的10個關鍵技巧

好的系統管理員區分在效率上。若是一位高效的系統管理員能在 10 分鐘內完成一件他人須要 2 個小時才能完成的任務,那麼他應該受到獎勵(獲得更多報酬),由於他爲公司節約了時間,而時間就是金錢。如下這些技巧能夠節約時間 —— 即便沒有由於高效而獲得更多的報酬,但至少能夠有更多的自由支配時間。正則表達式

技巧 1:卸載無響應的 DVD 驅動器shell

網絡新手的經歷:按下服務器(運行基於 Redmond 的操做系統)DVD 驅動器上的 Eject 按鈕時,它會當即彈出。他而後抱怨說,在大多數企業 Linux 服務器中,若是在那個目錄中運行某個進程,彈出就不會發生。做爲一名長期的 Linux 管理員,我會重啓機器。若是我不清楚正在運行什麼,以及爲什麼不釋放 DVD 驅動器,我則會彈出磁盤。但這樣效率很低。編程

下面介紹如何找到保持 DVD 驅動器的進程,並輕鬆彈出 DVD 驅動器:首先進行模擬。在 DVD 驅動器中放入磁盤,打開一個終端,裝載 DVD 驅動器:bash

mount /media/cdrom

cd /media/cdrom

while [ 1 ]; do echo "All your drives are belong to us!"; sleep 30; done

如今打開第二個終端並試着彈出 DVD 驅動器:服務器

eject

將獲得如下消息:網絡

umount: /media/cdrom: device is busyless

在釋放該設備以前,讓咱們找出誰在使用它ssh

fuser /media/cdrom

進程正在運行,沒法彈出磁盤實際上是咱們的錯誤。如今,若是您是根用戶,能夠隨意終止進程:編輯器

fuser -k /media/cdrom

如今終於能夠卸載驅動器了:ide

eject

fuser 很正常。

技巧 2:恢復出現問題的屏幕

嘗試如下操做:

cat /bin/cat

注意!終端就想垃圾同樣。輸入的全部內容很是零亂。那麼該怎麼作呢?

輸入 reset。可是,輸入 reset 與 輸入 reboot 或 shutdown 太接近了。嚇得手心冒汗了吧 — 特別是在生產機器上執行這個操做時。

放心吧,在進行此操做時,機器不會重啓。繼續操做:

reset

如今屏幕恢復正常了。這比關閉窗口後再次登錄好多了,特別是必須通過 5 臺機器和 SSH 才能到達這臺機器時。

技巧 3:屏幕協做

來自產品工程的高級維護用戶 David 打電話說:「爲何我不能在您部署的這些新機器上編譯 supercode.c」。

您會問他:「您運行的是什麼機器?」

David 答道:「 Posh」。(這個虛夠的公司將它的 5 臺生產服務器以記念 Spice Girls 的方式命名)。這下您能夠大顯身手了,另外一臺機器由 David 操做:

su - david

轉到 posh:

ssh posh

到達以後,運行如下代碼:

screen -S foo

而後呼叫 David:「David,在終端運行命令 # screen -x foo」。

這時您和 David 的會話在 Linux shell 中聯接在一塊兒。您能夠輸入,他也能夠輸入,但彼此能夠看到對方所作的事情。這避免了進入其餘層次,並且雙方都有相同的控制權。這樣作的好處是 David 能夠觀察到您的故障診斷技巧,並能準確瞭解如何解決問題。

最後你們都能看到問題所在:David 的編譯腳本對一個不在此新服務器上的舊目錄進行了硬編碼。將它裝載後再次編譯便可解決問題,而後 David 繼續工做。您則能夠繼續以前的娛樂活動。

關於此技巧須要注意的一點是,雙方須要以同一用戶登陸。screen 命令還能夠:實現多個窗口和拆分屏幕。請閱讀手冊頁獲取更多相關信息。

對於 screen 會話,我還有最後一個技巧。要從中分離並讓它打開,請輸入

Ctrl-A D

(即按住 Ctrl 鍵並點擊 A 鍵。而後按 D 鍵)。而後經過再次運行 screen -x foo 命令能夠從新拼接起來。

技巧 4:找回根密碼

若是忘記根密碼,就必須從新安裝整臺機器。更慘的是,許多人都會這樣作。可是啓動機器並更改密碼卻十分簡單。這並不是在全部狀況下都適用(好比設置了一個 GRUB 密碼,但也忘記了),但這裏介紹一個 Cent OS Linux 示例,說明通常狀況下的操做。

首先重啓系統。重啓時會跳出如圖 1 所示的 GRUB 屏幕。移動箭頭鍵,這樣能夠保留在此屏幕上,而不是進入正常啓動。

圖 1. 重啓後的 GRUB 屏幕

而後,使用箭頭鍵選擇要啓動的內核,並輸入 E 編輯內核行。而後即可看到如圖 2 所示的屏幕:

圖 2:準備編輯內核行

再次使用箭頭鍵突出顯示以 kernel 開始的行,按 E 編輯內核參數。到達如圖 3 所示的屏幕時,在圖 3 中所示的參數後追加數字 1 便可:

圖 3. 在參數後追加數字 1

而後按 Enter 和 B,內核會啓動到單用戶模式。而後運行 passwd 命令,更改用戶根密碼:

sh-3.00# passwd
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully

如今能夠重啓了,機器將使用新密碼啓動。

技巧 5:SSH 後門

有不少次,我所在的站點須要某人的遠程支持,而他卻被公司防火強阻擋在外。不多有人意識到,若是能經過防火牆到達外部,那麼也能輕鬆實現讓外部的信息進來。從本意講,這稱爲 「在防火牆上砸一個洞」。我稱之爲 SSH 後門。爲了使用它,必須有一臺做爲中介的鏈接到 Internet 的機器。在本例中,將這樣臺機器稱爲 blackbox.example.com。公司防火牆後面的機器稱爲 ginger。此技術支持的機器稱爲 tech。圖 4 解釋了設置過程。

圖 4. 在防火牆上砸一個洞

如下是操做步驟:

檢查什麼是容許作的,但要確保您問對了人。大多數人都擔憂您打開了防火牆,但他們不明白這是徹底加密的。並且,必須破解外部機器才能進入公司內部。不過,您可能屬於 「敢做敢爲」 型的人物。本身進行判斷應該選擇的方式,但不如意時不抱怨別人。

使用 -R 標記經過 SSH 從 ginger 鏈接到 blackbox.example.com。假設您是 ginger 上的根用戶,tech 須要根用戶 ID 來幫助使用系統。使用 -R 標記將 blackbox 上端口 2222 的說明轉發到 ginger 的端口 22 上。這就設置了 SSH 通道。注意,只有 SSH 通訊能夠進入 ginger:您不會將 ginger 放在無保護的 Internet 上。可使用如下語法實現此操做:

~# ssh -R 2222:localhost:22 thedude@blackbox.example.com

進入 blackbox 後,只需一直保持登陸狀態。我老是輸入如下命令:

thedude@blackbox:~$ while [ 1 ]; do date; sleep 300; done

使機器保持忙碌狀態。而後最小化窗口。

如今指示 tech 上的朋友使用 SSH 鏈接到 blackbox,而不須要使用任何特殊的 SSH 標記。但必須把密碼給他們:

root@tech:~# ssh thedude@blackbox.example.com

tech 位於 blackbox 上後,可使用如下命令從 SSH 鏈接到 ginger:

thedude@blackbox:~$: ssh -p 2222 root@localhost

Tech 將提示輸入密碼。應該輸入 ginger 的根密碼。如今您和來自 tech 的支持能夠一塊兒工做並解決問題。甚至須要一塊兒使用屏幕!(參見 技巧 4)。

技巧 6:經過 SSH 通道進行遠程 VNC 會話

VNC 或虛擬網絡計算已經存在很長時間了。一般,當遠程服務器上的某類圖形程序只能在此服務器上使用時,我才須要 VNC。

例如,假設在 技巧 5 中,ginger 是一臺存儲服務器。許多設備都使用 GUI 程序來管理存儲控制器。這些 GUI 管理工具一般須要經過一個網絡直接鏈接到存儲服務器,而這個網絡有時保存在專用的子網絡中。所以,只能經過 ginger 訪問這個 GUI。

能夠嘗試使用 -X 選項經過 SSH 鏈接到 ginger 並啓動它,但這對帶寬要求很高,您須要忍受等待的痛苦。VNC 是一個網絡友好的工具,幾乎適用於全部操做系統。

假設設置與技巧 5 中的同樣,但但願 tech 能訪問 VNC 而不是 SSH。對於這種狀況,須要進行一些相似的操做,不過轉發的是 VNC 端口。執行如下操做步驟:

在 ginger 上啓動一個 VNC 服務器會話。運行如下命令:

root@ginger:~# vncserver -geometry 1024x768 -depth 24 :99

這些選項指示啓動服務器,分辨率爲 1024×768,像素深度爲每像素 24 位。若是使用較慢的鏈接設置,8 也許是更好的選項。使用 :99 指定可訪問 VNC 服務器的端口。VNC 協議在 5900 處啓動,所以 :99 表示服務器可從端口 5999 訪問。

啓動該會話時,要求您指定密碼。用戶 ID 與啓動 VNC 服務器時的用戶相同(本例中就是根用戶)。

從 ginger 鏈接到 blackbox.example.com 的 SSH 將 blackbox 上的端口 5999 轉發到 ginger。這經過運行如下命令在 ginger 中完成:

root@ginger:~# ssh -R 5999:localhost:5999 thedude@blackbox.example.com

運行此命令後,須要將此 SSH 會話保持爲打開狀態,以便保留轉發到 ginger 的端口。此時,若是在 blackbox 上,那麼運行如下命令便可訪問 ginger 上的 VNC 會話:

thedude@blackbox:~$ vncviewer localhost:99

這將經過 SSH 將端口轉發給 ginger,但咱們但願經過 tech 讓 VNC 訪問 ginger。爲此,須要另外一個通道。在 tech 中,打開一個通道,經過 SHH 將端口 5999 轉發到 blackbox 上的端口 5999。這經過運行如下命令完成:

root@tech:~# ssh -L 5999:localhost:5999 thedude@blackbox.example.com

此次使用的 SSH 標記爲 -L,它不是將 5999 放到 blackbox,而是從中獲取。到達 blackbox 後,須要保持此會話爲打開狀態。如今便可在 tech 中使用 VNC 了!

在 tech 中,運行如下命令使 VNC 鏈接到 ginger:

root@tech:~# vncviewer localhost:99

Tech 如今將擁有一個直接到 ginger 的 VNC 會話。設置雖然有點麻煩,但比爲修復存儲陣列而四處奔波強多了。不過多實踐幾回這就變得容易了。

對此技巧我還要補充一點:若是 tech 運行的是 Windows® 操做系統,而且沒有命令行 SSH 客戶端,那麼 tech 能夠運行 Putty。Putty 能夠設置爲經過查找側欄中的選項來轉發 SSH 端口。若是端口是 5902 而不是本例中的 5999,則能夠輸入圖 5 中的內容。

圖 5. Putty 能夠轉發用做通道的 SSH

若是進行了此設置,那麼 tech 就可使用 VNC 鏈接到 localhost:2,如同 tech 正在 Linux 操做系統上運行同樣。

技巧 7:檢查帶寬

設想:公司 A 有一個名爲 ginger 的存儲服務器,並經過名爲 beckham 的客戶端節點裝載 NFS。公司 A 肯定他們須要從 ginger 獲得更多的帶寬,由於有大量的節點須要 NFS 裝載 ginger 的共享文件系統。

實現此操做的最經常使用和最便宜的方式是將兩個吉比特以太網 NIC 組合在一塊兒。這是最便宜的,由於您一般會有一個額外的可用 NIC 和一個額外的端口。

因此採起此這個方法。不過如今的問題是:到底須要多少帶寬?

吉比特以太網理論上的限制是 128MBit/s。這個數字從何而來?看看這些計算:

1Gb = 1024Mb;1024Mb/8 = 128MB;」b」 = 「bits,」、」B」 = 「bytes」

但實際看到的是什麼呢,有什麼好的測量方法呢?我推薦一個工具 iperf。能夠按照如下方法得到 iperf:

wget http://dast.nlanr.net/Project...

須要在 ginger 和 beckham 都可見的共享文件系統上安裝此工具,或者在兩個節點上編譯並安裝。我將在兩個節點都可見的 bob 用戶的主目錄中編譯它:

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

這臺機器將用做服務器並以 MBit/s 爲單位輸出執行速度。

在 beckham 節點上,運行:

/home/bob/perf/bin/iperf -c ginger -P 4 -f M -w 256k -t 60

兩個屏幕上的結果都指示了速度是多少。在使用吉比特適配器的普通服務器上,可能會看到速度約爲 112MBit/s。這是 TCP 堆棧和物理電纜中的經常使用帶寬。經過以端到端的方式鏈接兩臺服務器,每臺服務器使用兩個聯結的以太網卡,我得到了約 220MBit/s 的帶寬。

事實上,在聯結的網絡上看到的 NFS 約爲 150-160MBit/s。這仍然表示帶寬能夠達到預期效果。若是看到更小的值,則應該檢查是否有問題。

我最近碰到一種狀況,即經過鏈接驅動程序鏈接兩個使用了不一樣驅動程序的 NIC。這致使性能很是低,帶寬約爲 20MBit/s,比不鏈接以太網卡時的帶寬還小!

技巧 8:命令行腳本和實用程序

Linux 系統管理員經過使用權威的命令行腳本會變得更高效。這包括巧妙使用循環和知道如何使用 awk、grep 和 sed 等的實用程序解析數據。一般這能夠減小擊鍵次數,下降用戶出錯率。

例如,假設須要爲即將安裝的 Linux 集羣生成一個新的 /etc/hosts 文件。通常的作法是在 vi 或文本編輯器中添加 IP 地址。不過,能夠經過使用現有 /etc/hosts 文件並將如下內容追加到此文件來實現。在命令行上運行:

# P=1; for i in $(seq -w 200); do echo "192.168.99.$P n$i"; P=$(expr $P + 1);
done >>/etc/hosts

200 個主機名(n001 到 n200)將由 IP 地址(192.168.99.1 到 192.168.99.200)來建立。手動填充這樣的文件有可能會建立重複的 IP 地址或主機名,所以這是使用內置命令行消除用戶錯誤的好例子。請注意,這是在 bash shell(大多數 Linux 發行版的默認值)內完成的。

再舉一個例子,假設要檢查 Linux 集羣中的各個計算節點中的內存大小是否同樣。一般,擁有一個發行版或相似的 shell 是最好的。可是爲了演示,如下使用 SSH。假設 SSH 設置爲不使用密碼驗證。而後運行:

# for num in $(seq -w 200); do ssh n$num free -tm | grep Mem | awk '{print $2}';
done | sort | uniq

這樣的命令行至關簡潔。(若是在其中放入正則表達式狀況會更糟)。讓咱們對它進行細分,詳細討論各部分。

首先從 001 循環到 200。使用 seq 命令的 -w 選項在前面填充 0。而後替換 num 變量,建立經過 SSH 鏈接的主機。有了目標主機後,向它發出命令。本例中是:

free -m | grep Mem | awk '{print $2}'

一、這個命令的意思是:使用 free 命令獲取以兆字節爲單位的內存大小。

二、獲取這個命令的結果,並使用 grep 獲取包含字符串 Mem 的行。

三、獲取那一行並使用 awk 輸出第二個字段,它是節點中的總內存,在每一個節點上執行這個操做。

在每一個節點上執行命令後,200 個節點的整個輸出就傳送(|d)到 sort 命令,以對全部內存值進行排序。最後,使用 uniq 命令消除重複項。這個命令會致使如下狀況中的一種:

一、若是全部節點(n001 到 n200)擁有相同的內存大小,則只顯示一個數字。這個數字就是每一個操做系統看到的內存大小。

二、若是節點內存大小不一樣,將會看到幾個內存大小的值。

三、最後,若是某個節點上的 SSH 出現故障,則會看到一些錯誤消息。

這個命令並非天衣無縫的。若是發現與預期不一樣的內存值,您就不知道是哪個節點出了問題,或者有多少個節點。爲此須要發出另外一個命令。

這個技巧提供了一種查看某些內容的快速方式,並且若是發生錯誤,您能夠馬上知道。其價值在於快速檢查。

技巧 9:控制檯偵察

有些軟件會向控制檯輸出錯誤消息,而控制檯不必定會顯示在 SHH 會話中。使用 vcs 設備能夠進行檢查。在 SSH 會話中,在遠程服務器 # cat /dev/vcs1 上運行如下命令。這將顯示第一個控制檯中的內容。也可使用 二、3 等查看其餘虛擬終端。若是某個用戶在遠程系統上輸入,您將看到他輸入的內容。

在大多數數據場中,使用遠程終端服務器、KVM 甚至 Serial Over LAN 是查看這類信息的最好方式;它也提供了帶外查看功能的一些好處。使用 vcs 設備可以提供一種快速帶內方法,這能節省去機房查看控制檯的時間。

技巧 10:隨機系統信息收集

在 技巧 8 中,介紹了一個使用命令行獲取有關係統中總內存信息的例子。在這個技巧中,我將介紹幾個其餘方法,用於從須要進行驗證、故障診斷或給予遠程支持的系統收集重要信息。

首先,收集關於處理器的信息。經過如下命令很容易實現:

cat /proc/cpuinfo

這個命令給出關於處理器的速度、數量和型號的信息。在許多狀況下使用 grep 能夠獲得須要的值。我常常作的檢查是肯定系統中處理器的數量。所以,若是我買了一臺帶雙核處理器的四核服務器,我能夠運行如下命令:

cat /proc/cpuinfo | grep processor | wc -l

而後我看到值應該是 8。若是不是,我會打電話給供應商,讓他們給我派送另外一臺處理器。

我須要的另外一條信息是磁盤信息。可使用 df 命令得到。我老是添加 -h 標記,以便看到以十億字節或兆字節爲單位的輸出。# df -h 還會顯示磁盤的分區狀況。

列表最後是查看系統固件的方式 —— 一個獲取 BIOS 級別和 NIC 上的固件信息的方法。

要檢查 BIOS 版本,能夠運行 dmidecode 命令。遺憾的是,不能輕易使用 grep 獲取信息,因此這不是一個頗有效的方法。對於個人 Lenovo T61 laptop,輸出以下:

dmidecode | less

...

BIOS Information

Vendor: LENOVO

Version: 7LET52WW (1.22 )

Release Date: 08/27/2007

...

這比重啓機器並查看 POST 輸出有效得多。要檢查以太網適配器的驅動程序和固件版本,請運行 ethtool:

ethtool -i eth0

driver: e1000

version: 7.3.20-k2-NAPI

firmware-version: 0.3-0

結束語

能夠從精通命令行的人那裏學習不少技巧。最好的學習方式是:

一、與其餘人一塊兒工做。共享屏幕會話並觀察其餘人是如何工做的 —— 您會發現新的作事方法。可能須要謙虛一點,讓其餘人引導,不過一般能夠學到不少東西。

二、閱讀手冊頁。認真閱讀手冊頁,即便是熟知的命令,也能得到更深的看法。例如,您之前可能根本不知道可使用 awk 進行網絡編程。

三、解決問題。做爲系統管理員,老是要解決問題,無論是您仍是其餘人引發的問題。這就是經驗,經驗可使您更優秀、更高效。

最好的管理員比較清閒,由於他們能找到完成任務的最快方法,而且能快速完成任務,從而保持休閒的生活。(來源:ibm.com)

相關文章
相關標籤/搜索