我對 Linux 很是的精通,尤爲是腳本語言好比 sed、awk、python 等,用起來更是爐火純青。html
圖片來自 Pexelspython
我把它做爲本身一個很是特立獨行的技能,一個和其餘普通程序員區別開來的技能。
程序員
因此在我寫腳本的時候,我都會自豪的擡高個人頭,鼻孔朝天冥思精悍的 code。
web
好比,看到別人一遍遍的翻文檔安裝 Elasticsearch 這個軟件,我就渾身難受,寫了腳原本加快這個過程:
docker
mkdir /data
useradd es -d /data/es
chown -R es:es /data
cat > /etc/security/limits.conf <<EOF
* soft nofile 65536
* hard nofile 65536
* soft noproc 65536
* hard noproc 65536
es soft memlock unlimited
es hard memlock unlimited
EOF
cat > /etc/sysctl.conf <<EOF
vm.swappiness = 0
vm.max_map_count = 262144
EOF
sysctl -p
chown -R es:es /opt/elasticsearch
這種腳本可以讓我快速知曉軟件安裝的要點,不須要再讀那些冗長的文檔。像這樣的事情,我老是在作,長此以往,搞的本身好像很閒同樣。
數據庫
這幾天看到小王一直在那裏搗鼓 Excel,這些數據他已經處理了好幾天時間了。
api
客戶須要從其餘平臺遷移到咱們的平臺,導出了一堆爛七八糟的數據,大概有三四十 MB 的樣子。不知道怎麼回事,清洗數據這個活兒,就落在了小王身上。
緩存
文件很大,公司的電腦很爛。小王打開以後,電腦的風扇就呼呼直轉。他每次都須要使用 ctrl+f 找到不太正常的數據,而後把它麼拷貝到另一個文件中。
安全
數據多,工期緊,昨天晚上,小王就加班幹到 23 點多,直到夜的盡頭。
服務器
總監對此專門進行了表揚。
我坐在小王的旁邊,天然不能對此坐視不理。常年養成的習慣,讓我對低效的事情沒法忍受,就如同一隻常年奔跑的兔子忍受不了緩慢爬行的蝸牛。
只掃了一眼小王的需求,我就斷定這個工期三天的任務,使用腳本只須要 2 個小時就能完成。
我並非樂於助人,實在是我很是的喜歡寫這種腳本,還有腳本帶來的這種速度差別的快感。
一個小時以後,我把調試好的 Python 腳本交給小王。Shell 裏一運行,正確的文件就出來了。好爽的感受。
小王天然對我拜服,逢人便吹我如何牛 X。
這個事情不知怎麼就被總監給知道了,我被叫進了寬大的辦公室。看到總監一臉陰沉的臉,我知道事情不妙,但並不知道癥結所在。
我剛入職這家公司,應該沒有在不經意間觸碰了不應逾越的底線,個人心中充滿了迷茫。
「據說你幫小王解決了個問題「 。總監說, 「之後少寫這樣的東西」。
「爲何?「 我彷彿不太相信本身的耳朵, 「腳本能顯著的增長工做效率」。
「就知道你會有這樣的疑問。」總監嚴肅的臉緩和了下來,和我講了一個架構師的故事。
小宋曾經是這家公司的架構師。有不少三腳貓的架構師並不寫代碼,因此小宋成爲了能碼字的稀缺架構師。他的一個絕活就是寫腳本,就像我如今乾的事情同樣。
腳本能增長效率,這是我多年的經驗。但效率這兩個字自己,就根本沒法衡量。
因此效率這兩個字,沒法被量化。即便你把工期從 3 天縮減到 2 個小時,那也不見得你的效率高,由於這只是零散的雜事中的一個小插曲,你省下的時間仍是去摸魚。
你的這些效率,打破了正常的研發週期,也斷送了想要拼搏的同窗的夢想。因此,增長效率 ,這種有實際功效的作法並不能登上大雅之堂,只能在小圈子裏樂呵一下,最後只會變成一個口號。
小宋的腳本第一次是用在一個線上事故的處理上。當時,程序有一個 Bug,數據庫和緩存中一部分數據錯亂,產生了不一致的狀況。因爲緩存分佈在 20 多臺機器上,就不能使用把全部緩存給清掉的方式。
業務經理很着急,通過討論以後,決定開發定時任務,掃描全部的緩存和數據庫中全部的記錄,而後修正數據。數據量很大,程序也須要驗證,估計修復時間至少須要兩天。
小宋說,沒那麼麻煩。你只須要把問題發生期間,全部的業務日誌給我就能夠了。
接下來的三個小時,小宋從日誌裏過濾出了問題發生過程當中全部被更新過的 Key。
略一思索,就使用腳本完成了對這一批 Key 的緩存刪除操做,很是完美的解決了問題。
這件事以後,小宋就常常被請去寫一些腳原本幫助處理疑難問題。他來者不拒,樂此不疲。一切像是向着良性的方向發展,直到一次線上的故障。
公司的幾百臺機器,都是在 AWS 平臺上的 EC2 服務。使用 EC2 提供的 API,能夠作不少事情。
但 EC2 的命令實在是太難以理解,因此小宋作了封裝:
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html
使用這個腳本,能夠對部分、或者全部的機器,進行批量管理(好比加個分組,開個權限等),就不用登錄到後臺作一些管理工做。每當小宋看到黑屏幕上流淌的字符,他就想,這就是效率的魅力。
腳本很是好用,因而獲得了分發。有一個運維拿到了這個腳本,鬼使神差的想要在線上驗證一把。
他向全部的機器發送了關閉命令。公司立馬就炸了鍋,扯皮的事是不免的。但最後的矛頭指向了小宋。
腳本是他寫的,但他首先是一個架構師。一個架構師,能夠不寫代碼,能夠不出成績,但必需要有風險意識。
可這些命令,並非我提供的。這是 AWS 平臺提供的東西,我對此什麼都沒有作。去測試這些命令,和用不用這個腳本沒有關係。小宋爭辯。
但命令確實是經過這個腳本發送出去的,也確實形成了後果。背後那些千迴百轉的曲折關係,沒人會去研究,也沒人會關心。
那些日常享受小宋腳本的同窗,此時也是默不做聲,由於這種責任問題,如同效率問題同樣,都是虛張聲勢,並無明確的結果。
這種事情,小宋也是體驗過的。好比提供了 Redis 腳本,有人就喜歡運行 FLUSHALL 命令;提供了 Docker 命令,有人就喜歡調用 docker purge 去作清理。這根本控制不住。
他認爲,這是使用者的水平問題,而不是他的腳本問題。與總監吵了幾架以後,小宋最後一氣之下,憤而離職。
他直接刪掉了這家公司全部人的好友,消失了。
「因此,我是對你好,纔會和你提這樣的要求。比起風險來,這點效率帶來的提高,真的是微不足道」。
講到這裏,總監意味深長的看着我。「我如今就是及時的制止你的行爲,免的步小宋的後塵」。
我點點頭,這個道理我懂。以前有家公司,就由於以爲 Linux 的學習成本大,命令危險,就選擇了 Window 系統作服務器。
寧肯難受、付錢買受權、當 2B,也不敢越雷池一步。拿着風險兩個字掛在嘴邊,這些道理都是同樣的。
我忽然以爲,這麼多年個人信仰就要崩潰了。花了那麼大的力氣,把命令行學精,到最後落到個學無所用,真是悲哀。
「總監,很差了......正在我想要表達些什麼的時候,有個小夥子闖了進來, 「線上有人使用 Ansible 練手,把根目錄的權限所有改爲 000 了!」
個人腦子裏立馬出現了這樣的命令,此次鍋是 linus torvalds 的了。
chmod -R 000 /
誰知道總監笑了。「你剛來,不瞭解這裏的狀況。這個月已經發生好幾回這樣的事了。是時候換安全可靠的 Windows 了,我認識採購的人。」
我微笑着點頭,不置能否,但虛心受教。我灰溜溜回到本身的工位,長嘆一聲,刪光了公司全部的人。
今天就提交辭呈吧,畢竟,公司是找不到 linus torvalds 的,但能找到我。畢竟,Ansible 這個工具,是我前幾天剛給推薦的。
因此,若是架構師是你,你會留下什麼腳本呢?