我們是聰明地工作钓觉,而不是刻苦工作尺碰,但仍能把工作做好。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-- David Both
Linux 的系統(tǒng)管理員的工作總是復(fù)雜的,并且總是伴隨著各種陷阱和障礙。做每件事都沒有足夠時(shí)間凌摄,當(dāng)你想完成那個(gè)半禿頭老板(PHB)給的任務(wù)時(shí)羡蛾,他(只會)不停在你的后面盯著漓帅,而最核心的服務(wù)器總是在最不合時(shí)宜的時(shí)間點(diǎn)崩潰,問題和挑戰(zhàn)比比皆是痴怨。而我發(fā)現(xiàn)忙干,成為一名懶惰的系統(tǒng)管理員Lazy SysAdmin可以解決這一困境。
(LCTT 譯注:半禿頭老板Pointy-Haired Boss(PHB)浪藻,那是呆伯特漫畫中的角色捐迫,缺乏一般知識常識及其職位所應(yīng)具有的管理能力,愛說大話且富有向物理顯示挑戰(zhàn)的精神爱葵,大概長成下圖這樣施戴。)
真實(shí)生產(chǎn)力 vs. 虛假生產(chǎn)力
虛假生產(chǎn)力
在我工作的地方,半禿頭老板相信的管理風(fēng)格叫“走動(dòng)式管理management by walking around”萌丈。通過判斷某人在不在他的鍵盤上輸入東西赞哗,或者至少要看看他們顯示器上顯示的東西,來判斷他們的工作是否有效率辆雾。這是一個(gè)糟糕的工作場所肪笋。各部門間有道很高的行政墻,這會造就了許多的度迂、微小的溝通壁壘藤乙,大量無用的文書工作,以及獲得任何事情的許可都要等待漫長的時(shí)間惭墓。因?yàn)檫@樣坛梁、那樣的原因,不可能高效地做任何事情腊凶,如果真的是這樣划咐,那是非常低效。為了看起來很忙吭狡,我們都有自己的一套“看起來很忙”的工具包Look Busy Kits(LBK)尖殃,可能是一些短小的、用來顯示一些行為活動(dòng)的 Bash 腳本划煮,或者是top送丰、htop、iotop之類的程序弛秋,或者是一些持續(xù)顯示某些行為活動(dòng)的監(jiān)控工具器躏。這種工作場所的風(fēng)氣讓人不可能真正高效俐载,我討厭這種地方,也討厭那個(gè)幾乎不可能完成任何有價(jià)值的事情的事實(shí)登失。
這種糟糕場所對真實(shí)的系統(tǒng)管理員來講是場噩夢遏佣。沒有人會感到快樂。在那里花費(fèi)四五個(gè)月才能完成的事揽浙,在其他地方只需的一個(gè)早晨状婶。我們沒有什么實(shí)際工作要做,卻要花大量的時(shí)間干活來讓自己看起來很忙馅巷。我們在默默地競賽膛虫,看誰能創(chuàng)造最好的“看起來很忙”的工具包,這就是我們花費(fèi)最多時(shí)間的地方了钓猬。那份工作我只做了幾個(gè)月稍刀,但好像已經(jīng)耗費(fèi)了一生。如果你看到的這個(gè)監(jiān)獄的表面敞曹,你可能會說我們是很懶账月,因?yàn)槲覀冎煌瓿闪藥缀鯙?0 的實(shí)際工作。
這是個(gè)極端的例子澳迫,它完全與我所說的“我是一個(gè)懶惰的系統(tǒng)管理員”的意思相反局齿,而做一個(gè)懶惰的系統(tǒng)管理是件好事。
真實(shí)生產(chǎn)力
我很幸運(yùn)纲刀,曾為一些真正的管理者工作過 —— 他們明白项炼,系統(tǒng)管理員的生產(chǎn)力并不是以每天花多少小時(shí)敲鍵盤來衡量。畢竟示绊,即使一只猴子能敲擊他們的鍵盤锭部,但也不能說明結(jié)果的價(jià)值。
正如我書中所言:
“我是一個(gè)懶惰的系統(tǒng)管理員面褐,同時(shí)我也是一個(gè)高效的系統(tǒng)管理員拌禾。這兩者看似矛盾的說法不是相互排斥的,而是會以一種非常積極的方式相輔相成……
“系統(tǒng)管理員在思考的時(shí)候是最高效的 —— 思考關(guān)于如何解決現(xiàn)有問題和避免未來的問題展哭;思考怎樣監(jiān)控 Linux 計(jì)算機(jī)湃窍,以便找到預(yù)測和預(yù)示這些未來的問題的線索;思考如何讓他們的工作更有效率匪傍;思考如何自動(dòng)化所有這些要執(zhí)行的任務(wù)您市,無論是每天還是每年一次的任務(wù)。
“系統(tǒng)管理員冥思苦想的那一面是不會被非系統(tǒng)管理員所熟知的役衡,那些人包括很多管理著系統(tǒng)管理員的人茵休,比如那個(gè)半禿頭老板。系統(tǒng)管理員都會以不同的方式解決他們工作中苦思的部分。一些我認(rèn)識的系統(tǒng)管理員會在沙灘榕莺、騎自行車俐芯、參加馬拉松或者攀巖時(shí)找到最好的想法。另一些人會認(rèn)為靜坐或聽音樂的時(shí)候思考得最好钉鸯。還有一些會在閱讀小說吧史、學(xué)習(xí)不相關(guān)的學(xué)科、甚至在學(xué)習(xí) Linux 系統(tǒng)的時(shí)候可以最佳思考唠雕。關(guān)鍵是我們都有不同的方式激發(fā)我們的創(chuàng)造力贸营,而這些創(chuàng)造力的推進(jìn)器中很多并不涉及鍵盤上的任何一個(gè)按鍵。我們真正的生產(chǎn)力對于系統(tǒng)管理員周圍的人來說可能是完全看不見的及塘∶梗”
成為懶惰的系統(tǒng)管理員有一些簡單的秘訣 —— 系統(tǒng)管理員要完成一切需要完成的事锐极,而且更多的是笙僚,當(dāng)所有人都處于恐慌的狀態(tài)時(shí)要保持冷靜和鎮(zhèn)定。秘訣的一部分是高效工作灵再,另一部分是把預(yù)防問題放在首位肋层。
成為懶惰系統(tǒng)管理員的方法
多思考
我相信關(guān)于懶惰系統(tǒng)管理員最重要的秘訣在于思考。正如上面的摘錄所言翎迁,優(yōu)秀的系統(tǒng)管理員會花大量的時(shí)候思考這些事情栋猖,如何更有效率地工作,在異常成為問題前如何定位汪榔,更聰明地工作蒲拉,做其它事情的同時(shí)會考慮如何完成這些事情等等。
例如痴腌,除了撰寫本文之外雌团,我現(xiàn)在正在想一個(gè)項(xiàng)目,我打算在從亞馬遜和本地計(jì)算機(jī)商店采購的新部件到達(dá)時(shí)才開始士聪。我有一臺不太關(guān)鍵的計(jì)算機(jī)上的主板壞了锦援,最近它的崩潰更頻率。但我的一臺非常老的小服務(wù)器并沒有出現(xiàn)故障剥悟,它負(fù)責(zé)處理我的電子郵件和外部網(wǎng)站灵寺,以及為我的網(wǎng)絡(luò)的其余部分提供 DHCP 和 DNS 服務(wù),但需要解決由于各種外部攻擊而導(dǎo)致的間歇性過載区岗。
我一開始想略板,我只要替換故障設(shè)備的主板及其直接部件:內(nèi)存、CPU慈缔,可能還有電源叮称。但是在考慮了一段時(shí)間之后,我決定將新部件放到服務(wù)器中,并將舊的(但仍然可用的)部件從服務(wù)器移到故障設(shè)備中颅拦〉儆可以這樣做的,只需一距帅、兩個(gè)小時(shí)就可以從服務(wù)器上移除舊部件并安裝新的右锨。然后我就可以花時(shí)間更換出故障的電腦里的部件了。太好了碌秸,所以我開始在腦海中列出要完成的任務(wù)绍移。
然而,當(dāng)我查看這個(gè)任務(wù)列表時(shí)讥电,我意識到服務(wù)器中唯一不能替換的部件是機(jī)箱和硬盤驅(qū)動(dòng)器蹂窖,這兩臺計(jì)算機(jī)的機(jī)箱幾乎完全相同。在有了這個(gè)小小的發(fā)現(xiàn)之后恩敌,我開始考慮用新的部件替換出了故障的計(jì)算機(jī)的部件瞬测,并將之作為我的服務(wù)器。經(jīng)過一些測試之后纠炮,我只需從當(dāng)前的服務(wù)器移除硬盤月趟,并將它安裝到用了新組件的機(jī)箱中,改下網(wǎng)絡(luò)配置項(xiàng)恢口,再更改 KVM 交換機(jī)端口上的主機(jī)名孝宗,并更改機(jī)箱上的主機(jī)名標(biāo)簽,就可以了耕肩。這將大大減少服務(wù)器停機(jī)時(shí)間因妇,大大減少我的壓力。此外猿诸,如果出現(xiàn)故障婚被,我可以簡單地將硬盤移回原來的服務(wù)器,直到我可以用新服務(wù)器解決問題為止两芳。
所以摔寨,現(xiàn)在我在腦海中已經(jīng)創(chuàng)建了一個(gè)完成這項(xiàng)工作我所需要做的任務(wù)清單。而且怖辆,我希望你能仔細(xì)觀察是复,當(dāng)我腦子里想著這一切的時(shí)候,我的手指從來沒有碰過鍵盤竖螃。我新的心理行動(dòng)計(jì)劃風(fēng)險(xiǎn)很低淑廊,與我最初的計(jì)劃相比,涉及的服務(wù)器停機(jī)時(shí)間要少得多特咆。
當(dāng)我在 IBM 工作的時(shí)候季惩,我經(jīng)陈剂唬看到很多語言中都有寫著“思考”的標(biāo)語。思考可以節(jié)省時(shí)間和壓力画拾,是懶散的系統(tǒng)管理員的主要標(biāo)志啥繁。
做預(yù)防性維護(hù)
在 1970 年代中期,我被 IBM 聘為客戶工程師青抛,我的領(lǐng)地由相當(dāng)多的穿孔卡片設(shè)備組成旗闽。這也就是說,它們是處理打孔卡的重型機(jī)械設(shè)備蜜另,其中一些可以追溯到 20 世紀(jì) 30 年代适室。因?yàn)檫@些機(jī)器主要是機(jī)械的,所以它們的部件經(jīng)常磨損或失調(diào)举瑰。我的部分工作是在它們損壞時(shí)修復(fù)它們捣辆。我工作的主要部分,也是最重要的部分此迅,是首先要防止它們損壞汽畴。預(yù)防性維護(hù)的目的是在磨損部件損壞之前進(jìn)行更換,并對還在運(yùn)行的部件進(jìn)行潤滑和調(diào)整邮屁,以確保它們工作正常整袁。
正如我在《系統(tǒng)管理員的 Linux 哲學(xué)》中所言:
“我在 IBM 的經(jīng)理們明白這只是冰山一角;他們和我都知道佑吝,我的工作是讓顧客滿意。雖然這通常意味著修復(fù)損壞的硬件绳匀,但也意味著減少硬件損壞的次數(shù)芋忿。這對客戶來說是好事,因?yàn)樗麄兊臋C(jī)器在工作時(shí)工作效率更高疾棵。這對我有好處戈钢,因?yàn)槲覐哪切┛鞓返目蛻裟抢锝拥降碾娫捯俚枚唷N乙菜烁嗟挠X是尔,因?yàn)檫@樣做的結(jié)果是更少的非工作時(shí)間的緊急電話殉了。我是個(gè)懶惰的(客戶工程師)。通過提前做額外的工作拟枚,從長遠(yuǎn)來看薪铜,我需要做的工作要少得多。
“這一原則已成為系統(tǒng)管理員的 Linux 哲學(xué)的功能原則之一恩溅。作為系統(tǒng)管理員隔箍,我們的時(shí)間最好用在最大限度地減少未來工作量的任務(wù)上〗畔纾”
在 Linux 計(jì)算機(jī)中查找要解決的問題相當(dāng)于項(xiàng)目管理蜒滩。我檢查系統(tǒng)日志,尋找以后可能會變得非常危險(xiǎn)的問題的跡象。如果出現(xiàn)了一些小問題俯艰,或者我注意到我的工作站捡遍、服務(wù)器沒有做出該有的響應(yīng),或者如果日志顯示了一些不尋常的東西竹握,所有這些都可以暗示出潛在的問題稽莉,而對于用戶或半禿頭老板來說,這些問題并沒有產(chǎn)生明顯的癥狀涩搓。
我經(jīng)常檢查?/var/log/?中的文件污秆,特別是?messages?和?security?文件。我最常見的問題之一是許多腳本小子在我的防火墻系統(tǒng)上嘗試各種類型的攻擊昧甘。而且良拼,不,我不依賴 ISP 提供的調(diào)制解調(diào)器/路由器中的所謂的防火墻充边。這些日志包含了大量關(guān)于企圖攻擊來源的信息庸推,非常有價(jià)值。但是要掃描不同主機(jī)上的日志并將解決方案部署到位浇冰,需要做大量的工作贬媒,所以我轉(zhuǎn)向自動(dòng)化。
自動(dòng)化
我發(fā)現(xiàn)我的工作有很大一部分可以通過某種形式的自動(dòng)化來完成肘习。系統(tǒng)管理員的 Linux 哲學(xué)的原則之一是 “自動(dòng)化一切”际乘,這包括每天掃描日志文件等枯燥乏味的任務(wù)。
像是?Logwatch這類的程序能夠監(jiān)控你的日志文件中的異常條目漂佩,并在異常條目發(fā)生時(shí)通知您脖含。Logwatch 通常作為 cron 任務(wù)每天運(yùn)行一次,并向本地主機(jī)上的 root 用戶發(fā)送電子郵件投蝉。你可以從命令行運(yùn)行Logwatch养葵,并立即在顯示器上查看結(jié)果。現(xiàn)在我只需要每天查看 Logwatch 的電子郵件通知瘩缆。
但現(xiàn)實(shí)是关拒,僅僅收到通知是不夠的,因?yàn)槲覀儾荒茏源龜烙褂椤S袝r(shí)需要立即作出反應(yīng)着绊。我喜歡的另一個(gè)程序是——它能為我做所有事(看,這就是懶惰的管理員)——它就是?Fail2ban涌韩。Fail2Ban會掃描指定的日志文件畔柔,查找各種類型的黑客攻擊和入侵嘗試,如果它發(fā)現(xiàn)某個(gè) IP 地址在持續(xù)做特定類型的活動(dòng)臣樱,它會向防火墻添加一個(gè)條目靶擦,在指定的時(shí)間內(nèi)阻止來自該 IP 地址的任何進(jìn)一步的黑客嘗試腮考。默認(rèn)值通常在 10 分鐘左右,但我喜歡為大多數(shù)類型的攻擊指定為 12 或 24 小時(shí)玄捕。每種類型的黑客攻擊都是單獨(dú)配置的踩蔚,例如嘗試通過 SSH 登錄和那些 Web 服務(wù)器的攻擊智蝠。
寫腳本
自動(dòng)化是這種哲學(xué)的關(guān)鍵組成部分之一隙姿。一切可以自動(dòng)化的東西都應(yīng)該自動(dòng)化的,其余的盡可能地自動(dòng)化熙参。所以馍迄,我也寫了很多腳本來解決問題福也,也就是說我編寫了腳本來完成我的大部分工作。
我的腳本幫我節(jié)省了大量時(shí)間攀圈,因?yàn)樗鼈儼瑘?zhí)行特定任務(wù)的命令暴凑,這大大減少了我需要輸入的數(shù)量。例如赘来,我經(jīng)常重新啟動(dòng)我的電子郵件服務(wù)器和垃圾郵件過濾軟件(當(dāng)修改 SpamAssassin 的local.cf配置文件時(shí)现喳,就需要重啟)。必須按特定順序停止并重新啟動(dòng)這些服務(wù)犬辰。因此嗦篱,我用幾個(gè)命令編寫了一個(gè)簡短的腳本,并將其存儲在可訪問的/usr/local/bin中』戏欤現(xiàn)在灸促,不用鍵入幾個(gè)命令并等待每個(gè)命令都完成,然后再鍵入下一個(gè)命令狮腿,更不用記住正確的命令順序和每個(gè)命令的正確語法腿宰,我輸入一個(gè)三個(gè)字符的命令,其余的留給我的腳本來完成缘厢。
簡化鍵入
另一種成為懶惰的系統(tǒng)管理員的方法是減少我們需要鍵入的數(shù)量。而且甩挫,我的打字技巧真的很糟糕(也就是說贴硫,我一點(diǎn)也沒有,頂多是幾個(gè)笨拙的手指)伊者。導(dǎo)致錯(cuò)誤的一個(gè)可能原因是我糟糕的打字技巧英遭,所以我會盡量少打字。
絕大多數(shù) GNU 和 Linux 核心實(shí)用程序都有非常短的名稱亦渗。然而挖诸,它們都是有意義的名字。諸如用于更改目錄的cd法精、用于列出目錄內(nèi)容的ls和用于磁盤轉(zhuǎn)儲的dd等工具都一目了然多律。短名字意味著更少的打字和更少的產(chǎn)生錯(cuò)誤機(jī)會痴突。我認(rèn)為短的名字通常更容易記住。
當(dāng)我編寫 shell 腳本時(shí)狼荞,我喜歡保持名稱簡短而意義(至少對我來說是)辽装,比如用于 rsync 備份的rsbu(LCTT 譯注,Rsync Backup 的簡寫)相味。但在某些情況下拾积,我喜歡使用更長的名稱,比如doUpdates來執(zhí)行系統(tǒng)更新丰涉。在后一種情況下拓巧,更長一點(diǎn)的名字讓腳本的目的更明顯。這可以節(jié)省時(shí)間一死,因?yàn)楹苋菀子涀∧_本的名稱肛度。
其他減少鍵入的方法包括命令行別名、歷史命令調(diào)回和編輯摘符。別名只是你在 Bash shell 鍵入命令時(shí)才做的替換贤斜。鍵入alias命令會看到默認(rèn)配置的別名列表。例如逛裤,當(dāng)你輸入命令ls時(shí)瘩绒,會被條目alias ls='ls –color=auto'替成較長的命令,因此你只需鍵入 2 個(gè)字符而不是 14 個(gè)字符即可獲得帶有顏色的文件列表带族。還可以使用alias命令添加你自己定義的別名锁荔。
歷史命令調(diào)回允許你使用鍵盤的向上和向下箭頭鍵滾動(dòng)瀏覽命令歷史記錄。如果需要再次使用相同的命令蝙砌,只需在找到所需的命令時(shí)按回車鍵即可阳堕。如果在找到命令后需要更改該命令,則可以使用標(biāo)準(zhǔn)命令行編輯功能進(jìn)行更改择克。
結(jié)束語
一名懶惰的系統(tǒng)管理員實(shí)際上也有很多的工作恬总。但我們是聰明地工作,而不是刻苦工作肚邢。早在一堆小問題匯聚成大問題之前壹堰,我們就花時(shí)間探索我們負(fù)責(zé)的主機(jī),并處理好所有的小問題骡湖。我們花了很多時(shí)間思考解決問題的最佳方法贱纠,我們也花了很多時(shí)間來發(fā)現(xiàn)新的方法,讓自己更聰明地工作响蕴,成為懶惰的系統(tǒng)管理員谆焊。
除了這里描述的少數(shù)方法外,還有許多其他的方式可以成為懶惰的系統(tǒng)管理員浦夷。我相信你也有一些自己的方式辖试;請?jiān)谠u論中和我們分享辜王。
作者:David Both 選題:lujun9972 譯者:zgj1024 校對:wxy