如何成為一名懶惰的系統管理員
Linux 的系統管理員的工作總是複雜的,並且總是伴隨著各種陷阱和障礙。做每件事都沒有足夠時間,當你想完成那個半禿頭老闆(PHB)給的任務時,他(只會)不停在你的後面盯著,而最核心的伺服器總是在最不合時宜的時間點崩潰,問題和挑戰比比皆是。而我發現,成為一名 懶惰的系統管理員 可以解決這一困境。
(LCTT 譯註: 半禿頭老闆 (PHB),那是呆伯特漫畫中的角色,缺乏一般知識常識及其職位所應具有的管理能力,愛說大話且富有向物理顯示挑戰的精神,大概長成下圖這樣。)
我在即將在 Apress 出版的新書 《The Linux Philosophy for SysAdmins》(LCTT 譯註:暫譯《系統管理員的 Linux 哲學》)中更詳細地討論如何成為一個懶惰的系統管理員,那書預計會在 9 月出版(LCTT 譯註:已於 2018 年 8 月出版)。這本的部分內容摘錄自該書,特別是第九章,「成為一名懶惰的系統管理員」。在我們討論如何做到這點前,讓我們簡單了解一下成為一個名懶惰的系統管理員意味著什麼。
真實生產力 vs. 虛假生產力
虛假生產力
在我工作的地方,半禿頭老闆相信的管理風格叫「 走動式管理 」。通過判斷某人在不在他的鍵盤上輸入東西,或者至少要看看他們顯示器上顯示的東西,來判斷他們的工作是否有效率。這是一個糟糕的工作場所。各部門間有道很高的行政牆,這會造就了許多的、微小的溝通壁壘,大量無用的文書工作,以及獲得任何事情的許可都要等待漫長的時間。因為這樣、那樣的原因,不可能高效地做任何事情,如果真的是這樣,那是非常低效。為了看起來很忙,我們都有自己的一套 「看起來很忙」的工具包 (LBK),可能是一些短小的、用來顯示一些行為活動的 Bash 腳本,或者是 top
、htop
、iotop
之類的程序,或者是一些持續顯示某些行為活動的監控工具。這種工作場所的風氣讓人不可能真正高效,我討厭這種地方,也討厭那個幾乎不可能完成任何有價值的事情的事實。
這種糟糕場所對真實的系統管理員來講是場噩夢。沒有人會感到快樂。在那裡花費四五個月才能完成的事,在其他地方只需的一個早晨。我們沒有什麼實際工作要做,卻要花大量的時間幹活來讓自己看起來很忙。我們在默默地競賽,看誰能創造最好的「看起來很忙」的工具包,這就是我們花費最多時間的地方了。那份工作我只做了幾個月,但好像已經耗費了一生。如果你看到的這個監獄的表面,你可能會說我們是很懶,因為我們只完成了幾乎為 0 的實際工作。
這是個極端的例子,它完全與我所說的「我是一個懶惰的系統管理員」的意思相反,而做一個懶惰的系統管理是件好事。
真實生產力
我很幸運,曾為一些真正的管理者工作過 —— 他們明白,系統管理員的生產力並不是以每天花多少小時敲鍵盤來衡量。畢竟,即使一隻猴子能敲擊他們的鍵盤,但也不能說明結果的價值。
正如我書中所言:
「我是一個懶惰的系統管理員,同時我也是一個高效的系統管理員。這兩者看似矛盾的說法不是相互排斥的,而是會以一種非常積極的方式相輔相成……
「系統管理員在思考的時候是最高效的 —— 思考關於如何解決現有問題和避免未來的問題;思考怎樣監控 Linux 計算機,以便找到預測和預示這些未來的問題的線索;思考如何讓他們的工作更有效率;思考如何自動化所有這些要執行的任務,無論是每天還是每年一次的任務。
「系統管理員冥思苦想的那一面是不會被非系統管理員所熟知的,那些人包括很多管理著系統管理員的人,比如那個半禿頭老闆。系統管理員都會以不同的方式解決他們工作中苦思的部分。一些我認識的系統管理員會在沙灘、騎自行車、參加馬拉松或者攀岩時找到最好的想法。另一些人會認為靜坐或聽音樂的時候思考得最好。還有一些會在閱讀小說、學習不相關的學科、甚至在學習 Linux 系統的時候可以最佳思考。關鍵是我們都有不同的方式激發我們的創造力,而這些創造力的推進器中很多並不涉及鍵盤上的任何一個按鍵。我們真正的生產力對於系統管理員周圍的人來說可能是完全看不見的。」
成為懶惰的系統管理員有一些簡單的秘訣 —— 系統管理員要完成一切需要完成的事,而且更多的是,當所有人都處於恐慌的狀態時要保持冷靜和鎮定。秘訣的一部分是高效工作,另一部分是把預防問題放在首位。
成為懶惰系統管理員的方法
多思考
我相信關於懶惰系統管理員最重要的秘訣在於思考。正如上面的摘錄所言,優秀的系統管理員會花大量的時候思考這些事情,如何更有效率地工作,在異常成為問題前如何定位,更聰明地工作,做其它事情的同時會考慮如何完成這些事情等等。
例如,除了撰寫本文之外,我現在正在想一個項目,我打算在從亞馬遜和本地計算機商店採購的新部件到達時才開始。我有一台不太關鍵的計算機上的主板壞了,最近它的崩潰更頻率。但我的一台非常老的小伺服器並沒有出現故障,它負責處理我的電子郵件和外部網站,以及為我的網路的其餘部分提供 DHCP 和 DNS 服務,但需要解決由於各種外部攻擊而導致的間歇性過載。
我一開始想,我只要替換故障設備的主板及其直接部件:內存、CPU,可能還有電源。但是在考慮了一段時間之後,我決定將新部件放到伺服器中,並將舊的(但仍然可用的)部件從伺服器移到故障設備中。可以這樣做的,只需一、兩個小時就可以從伺服器上移除舊部件並安裝新的。然後我就可以花時間更換出故障的電腦里的部件了。太好了,所以我開始在腦海中列出要完成的任務。
然而,當我查看這個任務列表時,我意識到伺服器中唯一不能替換的部件是機箱和硬碟驅動器,這兩台計算機的機箱幾乎完全相同。在有了這個小小的發現之後,我開始考慮用新的部件替換出了故障的計算機的部件,並將之作為我的伺服器。經過一些測試之後,我只需從當前的伺服器移除硬碟,並將它安裝到用了新組件的機箱中,改下網路配置項,再更改 KVM 交換機埠上的主機名,並更改機箱上的主機名標籤,就可以了。這將大大減少伺服器停機時間,大大減少我的壓力。此外,如果出現故障,我可以簡單地將硬碟移回原來的伺服器,直到我可以用新伺服器解決問題為止。
所以,現在我在腦海中已經創建了一個完成這項工作我所需要做的任務清單。而且,我希望你能仔細觀察,當我腦子裡想著這一切的時候,我的手指從來沒有碰過鍵盤。我新的心理行動計劃風險很低,與我最初的計劃相比,涉及的伺服器停機時間要少得多。
當我在 IBM 工作的時候,我經常看到很多語言中都有寫著「思考」的標語。思考可以節省時間和壓力,是懶散的系統管理員的主要標誌。
做預防性維護
在 1970 年代中期,我被 IBM 聘為客戶工程師,我的領地由相當多的穿孔卡片設備組成。這也就是說,它們是處理打孔卡的重型機械設備,其中一些可以追溯到 20 世紀 30 年代。因為這些機器主要是機械的,所以它們的部件經常磨損或失調。我的部分工作是在它們損壞時修復它們。我工作的主要部分,也是最重要的部分,是首先要防止它們損壞。預防性維護的目的是在磨損部件損壞之前進行更換,並對還在運行的部件進行潤滑和調整,以確保它們工作正常。
正如我在《系統管理員的 Linux 哲學》中所言:
「我在 IBM 的經理們明白這只是冰山一角;他們和我都知道,我的工作是讓顧客滿意。雖然這通常意味著修復損壞的硬體,但也意味著減少硬體損壞的次數。這對客戶來說是好事,因為他們的機器在工作時工作效率更高。這對我有好處,因為我從那些快樂的客戶那裡接到的電話要少得多。我也睡了更多的覺,因為這樣做的結果是更少的非工作時間的緊急電話。我是個懶惰的(客戶工程師)。通過提前做額外的工作,從長遠來看,我需要做的工作要少得多。
「這一原則已成為系統管理員的 Linux 哲學的功能原則之一。作為系統管理員,我們的時間最好用在最大限度地減少未來工作量的任務上。」
在 Linux 計算機中查找要解決的問題相當於項目管理。我檢查系統日誌,尋找以後可能會變得非常危險的問題的跡象。如果出現了一些小問題,或者我注意到我的工作站、伺服器沒有做出該有的響應,或者如果日誌顯示了一些不尋常的東西,所有這些都可以暗示出潛在的問題,而對於用戶或半禿頭老闆來說,這些問題並沒有產生明顯的癥狀。
我經常檢查 /var/log/
中的文件,特別是 messages
和 security
文件。我最常見的問題之一是許多腳本小子在我的防火牆系統上嘗試各種類型的攻擊。而且,不,我不依賴 ISP 提供的數據機/路由器中的所謂的防火牆。這些日誌包含了大量關於企圖攻擊來源的信息,非常有價值。但是要掃描不同主機上的日誌並將解決方案部署到位,需要做大量的工作,所以我轉向自動化。
自動化
我發現我的工作有很大一部分可以通過某種形式的自動化來完成。系統管理員的 Linux 哲學的原則之一是 「自動化一切」,這包括每天掃描日誌文件等枯燥乏味的任務。
像是 Logwatch 這類的程序能夠監控你的日誌文件中的異常條目,並在異常條目發生時通知您。Logwatch 通常作為 cron 任務每天運行一次,並向本地主機上的 root 用戶發送電子郵件。你可以從命令行運行 Logwatch,並立即在顯示器上查看結果。現在我只需要每天查看 Logwatch 的電子郵件通知。
但現實是,僅僅收到通知是不夠的,因為我們不能坐以待斃。有時需要立即作出反應。我喜歡的另一個程序是——它能為我做所有事(看,這就是懶惰的管理員)——它就是 Fail2ban。Fail2Ban 會掃描指定的日誌文件,查找各種類型的黑客攻擊和入侵嘗試,如果它發現某個 IP 地址在持續做特定類型的活動,它會向防火牆添加一個條目,在指定的時間內阻止來自該 IP 地址的任何進一步的黑客嘗試。默認值通常在 10 分鐘左右,但我喜歡為大多數類型的攻擊指定為 12 或 24 小時。每種類型的黑客攻擊都是單獨配置的,例如嘗試通過 SSH 登錄和那些 Web 伺服器的攻擊。
寫腳本
自動化是這種哲學的關鍵組成部分之一。一切可以自動化的東西都應該自動化的,其餘的儘可能地自動化。所以,我也寫了很多腳本來解決問題,也就是說我編寫了腳本來完成我的大部分工作。
我的腳本幫我節省了大量時間,因為它們包含執行特定任務的命令,這大大減少了我需要輸入的數量。例如,我經常重新啟動我的電子郵件伺服器和垃圾郵件過濾軟體(當修改 SpamAssassin 的 local.cf
配置文件時,就需要重啟)。必須按特定順序停止並重新啟動這些服務。因此,我用幾個命令編寫了一個簡短的腳本,並將其存儲在可訪問的 /usr/local/bin
中。現在,不用鍵入幾個命令並等待每個命令都完成,然後再鍵入下一個命令,更不用記住正確的命令順序和每個命令的正確語法,我輸入一個三個字元的命令,其餘的留給我的腳本來完成。
簡化鍵入
另一種成為懶惰的系統管理員的方法是減少我們需要鍵入的數量。而且,我的打字技巧真的很糟糕(也就是說,我一點也沒有,頂多是幾個笨拙的手指)。導致錯誤的一個可能原因是我糟糕的打字技巧,所以我會盡量少打字。
絕大多數 GNU 和 Linux 核心實用程序都有非常短的名稱。然而,它們都是有意義的名字。諸如用於更改目錄的 cd
、用於列出目錄內容的 ls
和用於磁碟轉儲的 dd
等工具都一目了然。短名字意味著更少的打字和更少的產生錯誤機會。我認為短的名字通常更容易記住。
當我編寫 shell 腳本時,我喜歡保持名稱簡短而意義(至少對我來說是),比如用於 rsync 備份的 rsbu
(LCTT 譯註,Rsync Backup 的簡寫)。但在某些情況下,我喜歡使用更長的名稱,比如 doUpdates
來執行系統更新。在後一種情況下,更長一點的名字讓腳本的目的更明顯。這可以節省時間,因為很容易記住腳本的名稱。
其他減少鍵入的方法包括命令行別名、歷史命令調回和編輯。別名只是你在 Bash shell 鍵入命令時才做的替換。鍵入 alias
命令會看到默認配置的別名列表。例如,當你輸入命令 ls
時,會被條目 alias ls='ls –color=auto'
替成較長的命令,因此你只需鍵入 2 個字元而不是 14 個字元即可獲得帶有顏色的文件列表。還可以使用 alias
命令添加你自己定義的別名。
歷史命令調回允許你使用鍵盤的向上和向下箭頭鍵滾動瀏覽命令歷史記錄。如果需要再次使用相同的命令,只需在找到所需的命令時按回車鍵即可。如果在找到命令後需要更改該命令,則可以使用標準命令行編輯功能進行更改。
結束語
一名懶惰的系統管理員實際上也有很多的工作。但我們是聰明地工作,而不是刻苦工作。早在一堆小問題匯聚成大問題之前,我們就花時間探索我們負責的主機,並處理好所有的小問題。我們花了很多時間思考解決問題的最佳方法,我們也花了很多時間來發現新的方法,讓自己更聰明地工作,成為懶惰的系統管理員。
除了這裡描述的少數方法外,還有許多其他的方式可以成為懶惰的系統管理員。我相信你也有一些自己的方式;請在評論中和我們分享。
via: https://opensource.com/article/18/7/how-be-lazy-sysadmin
作者:David Both 選題:lujun9972 譯者:zgj1024 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive