懶惰” Linux 管理員的 10 個關鍵技巧

來源:互聯網
上載者:User

2008 年 8 月 11 日

學會這 10 個技巧後,您將成為世界上最強大的 Linux 系統管理員,整個世界是有點誇張,但要在一個大團隊中工作,這些技巧是十分必要的。學習 SHH 通道、VNC、密碼恢複、控制台偵察等等。各個技巧都附有例子,可以將這些例子複製到自己的系統中。

好的系統管理員區分在效率上。如果一位高效的系統管理員能在 10 分鐘內完成一件他人需要 2 個小時才能完成的任務,那麼他應該受到獎勵(得到更多報酬),因為他為公司節約了時間,而時間就是金錢,不是嗎?

技巧是為了提高管理效率。雖然本文不打算對所有 技巧進行討論,但是我會介紹 “懶惰” 管理員所用的 10 個基本法寶。這些技巧可以節約時間 —— 即使沒有因為高效而得到更多的報酬,但至少可以有更多的時間去玩。

技巧 1:卸載無響應的 DVD 磁碟機

網 絡新手的經曆:按下伺服器(運行基於 Redmond 的作業系統)DVD 磁碟機上的 Eject 按鈕時,它會立即彈出。他然後抱怨說,在大多數企業 Linux 伺服器中,如果在那個目錄中運行某個進程,彈出就不會發生。作為一名長期的 Linux 管理員,我會重啟機器。如果我不清楚正在運行什麼,以及為何不釋放 DVD 磁碟機,我則會彈出磁碟。但這樣效率很低。

下面介紹如何找到保持 DVD 磁碟機的進程,並輕鬆彈出 DVD 磁碟機:首先進行類比。在 DVD 磁碟機中放入磁碟,開啟一個終端,裝載 DVD 磁碟機:

# 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 busy

在釋放該裝置之前,讓我們找出誰在使用它。

# fuser /media/cdrom

進程正在運行,無法彈出磁碟其實是我們的錯誤。

現在,如果您是根使用者,可以隨意終止進程:

# fuser -k /media/cdrom

現在終於可以卸載磁碟機了:

# eject

fuser 很正常。



回頁首

技巧 2:恢複出現問題的螢幕

嘗試以下操作:

# cat /bin/cat

注意!終端就想垃圾一樣。輸入的所有內容非常零亂。那麼該怎麼做呢?

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

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

# 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

然後按 EnterB,核心會啟動到單一使用者模式。然後運行 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. 在防火牆上砸一個洞

以下是操作步驟:

  1. 檢查什麼是允許做的,但要確保您問對了人。大多數人都擔心您開啟了防火牆,但他們不明白這是完全加密的。而且,必須破解外部機器才能進入公司內部。不過,您可能屬於 “敢作敢為” 型的人物。自己進行判斷應該選擇的方式,但不如意時不抱怨別人。

  2. 使用 -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

    使機器保持忙碌狀態。然後已最小化的視窗。

  3. 現在指示 tech 上的朋友使用 SSH 串連到 blackbox,而不需要使用任何特殊的 SSH 標記。但必須把密碼給他們:

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

  4. tech 位於 blackbox 上後,可以使用以下命令從 SSH 串連到 ginger:

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

  5. Tech 將提示輸入密碼。應該輸入 ginger 的根密碼。
  6. 現在您和來自 tech 的支援可以一起工作並解決問題。甚至需要一起使用螢幕!(參見 技巧 4)。



回頁首

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

VNC 或虛擬網路計算已經存在很長時間了。通常,當遠程伺服器上的某類圖形程式只能在此伺服器上使用時,我才需要 VNC。

例如,假設在 技巧 5 中,ginger 是一台儲存伺服器。許多裝置都使用 GUI 程式來管理儲存控制器。這些 GUI 管理工具通常需要通過一個網路直接連接到儲存伺服器,而這個網路有時儲存在專用的子網路中。因此,只能通過 ginger 訪問這個 GUI。

可以嘗試使用 -X 選項通過 SSH 串連到 ginger 並啟動它,但這對頻寬要求很高,您需要忍受等待的痛苦。VNC 是一個網路友好的工具,幾乎適用於所有作業系統。

假設設定與技巧 5 中的一樣,但希望 tech 能訪問 VNC 而不是 SSH。對於這種情況,需要進行一些類似的操作,不過轉寄的是 VNC 連接埠。執行以下操作步驟:

  1. 在 ginger 上啟動一個 VNC 伺服器會話。運行以下命令:

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

    這些選項指示啟動伺服器,解析度為 1024x768,像素深度為每像素 24 位。如果使用較慢的串連設定,8 也許是更好的選項。使用 :99 指定可訪問 VNC 伺服器的連接埠。VNC 協議在 5900 處啟動,因此 :99 表示伺服器可從連接埠 5999 訪問。

    啟動該會話時,要求您指定密碼。使用者識別碼 與啟動 VNC 伺服器時的使用者相同(本例中就是根使用者)。

  2. 從 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。為此,需要另一個通道。

  3. 在 tech 中,開啟一個通道,通過 SHH 將連接埠 5999 轉寄到 blackbox 上的連接埠 5999。這通過運行以下命令完成:

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

    這次使用的 SSH 標記為 -L,它不是將 5999 放到 blackbox,而是從中擷取。到達 blackbox 後,需要保持此會話為開啟狀態。現在即可在 tech 中使用 VNC 了!

  4. 在 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 = 1024Mb1024Mb/8 = 128MB;"b" = "bits,"、"B" = "bytes"

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

# wget http://dast.nlanr.net/Projects/Iperf2.0/iperf-2.0.2.tar.gz

需要在 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 系統管理員通過使用權威的命令列指令碼會變得更高效。這包括巧妙使用迴圈和知道如何使用 awkgrepsed 等的公用程式解析資料。通常這可以減少擊鍵次數,降低使用者出錯率。

例如,假設需要為即將安裝的 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

這樣的命令列相當簡潔。(如果在其中放入Regex情況會更糟)。讓我們對它進行細分,詳細討論各部分。

首先從 001 迴圈到 200。使用 seq 命令的 -w 選項在前面填充 0。 然後替換 num 變數,建立通過 SSH 串連的主機。有了目標主機後,向它發出命令。本例中是:

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

這個命令的意思是:

  • 使用 free 命令擷取以MB為單位的記憶體大小。
  • 擷取這個命令的結果,並使用 grep 擷取包含字串 Mem 的行。
  • 擷取那一行並使用 awk 輸出第二個欄位,它是節點中的總記憶體。

在每個節點上執行這個操作。

在每個節點上執行命令後,200 個節點的整個輸出就傳送(|d)到 sort 命令,以對所有記憶體值進行排序。

最後,使用 uniq 命令消除重複項。這個命令會導致以下情況中的一種:

  • 如果所有節點(n001 到 n200)擁有相同的記憶體大小,則只顯示一個數字。這個數字就是每個作業系統看到的記憶體大小。
  • 如果節點記憶體大小不同,將會看到幾個記憶體大小的值。
  • 最後,如果某個節點上的 SSH 出現故障,則會看到一些錯誤訊息。

這個命令並不是完美無缺的。如果發現與預期不同的記憶體值,您就不知道是哪一個節點出了問題,或者有多少個節點。為此需要發出另一個命令。

這個技巧提供了一種查看某些內容的快速方式,而且如果發生錯誤,您可以立刻知道。其價值在於快速檢查。



回頁首

技巧 9:控制台偵察

有些軟體會向控制台輸出錯誤訊息,而控制台不一定會顯示在 SHH 會話中。使用 vcs 裝置可以進行檢查。在 SSH 會話中,在遠程伺服器 # cat /dev/vcs1 上運行以下命令。這將顯示第一個控制台中的內容。也可以使用 2、3 等查看其他虛擬終端。如果某個使用者在遠程系統上輸入,您將看到他輸入的內容。

在大多數資料場中,使用遠程終端伺服器、KVM 甚至 Serial Over LAN 是查看這類資訊的最好方式;它也提供了帶外查看功能的一些好處。使用 vcs 裝置能夠提供一種快速帶內方法,這能節省去機房查看控制台的時間。



回頁首

技巧 10:隨機系統資訊收集

在 技巧 8 中,介紹了一個使用命令列擷取有關係統中總記憶體資訊的例子。在這個技巧中,我將介紹幾個其他方法,用於從需要進行驗證、故障診斷或給予遠程支援的系統收集重要訊息。

首先,收集關於處理器的資訊。通過以下命令很容易實現:

# cat /proc/cpuinfo

這個命令給出關於處理器的速度、數量和型號的資訊。在許多情況下使用 grep 可以得到需要的值。

我經常做的檢查是確定系統中處理器的數量。因此,如果我買了一台帶雙核處理器的四核伺服器,我可以運行以下命令:

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

然後我看到值應該是 8。如果不是,我會打電話給供應商,讓他們給我派送另一台處理器。

我需要的另一條資訊是磁碟資訊。可以使用 df 命令獲得。我總是添加 -h 標記,以便看到以十億位元組或MB為單位的輸出。# 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 進行網路編程。
  • 解決問題。作為系統管理員,總是要解決問題,不管是您還是其他人引起的問題。這就是經驗,經驗可以使您更優秀、更高效。

我 希望至少有一個技巧能協助您學習到您不知道的知識。像這樣的基本技巧可以使您更高效,並且能增長經驗,但最重要的是,技巧可以讓您有更多的空閑時間去做自 己感興趣的事情,比如玩電子遊戲。最好的管理員比較悠閑,因為他們不喜歡工作。他們能找到完成任務的最快方法,並且能快速完成任務,從而保持休閑的生活。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.