我對Linux非常的精通,尤其是腳本語言比如 sed awk python
、
等,用起來更是爐火純青。我把它作為自己一個非常特立獨行的技能,一個和其他普通程式員差別開來的技能。是以在我寫腳本的時候,我都會自豪的擡高我的頭,鼻孔朝天冥思精悍的code。
比如,看到别人一遍遍的翻文檔安裝
elasticsearch
這個軟體, xjjdog
就渾身難受,就寫了腳本來加快這個過程。 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
這種腳本能夠讓我快速知曉軟體安裝的要點,不需要再讀那些冗長的文檔。像這樣的事情,我總是在做,久而久之,搞的自己好像很閑一樣。來看看我以前分享的指令行吧。
最常用的一套“Vim“技巧
最常用的一套“Sed“技巧
最常用的一套“AWK“技巧
這幾天看到小王一直在那裡搗鼓
excel
,這些資料他已經處理了好幾天時間了。客戶需要從其他平台遷移到我們的平台,導出了一堆爛七八糟的資料,大概有三四十MB的樣子。不知道怎麼回事,清洗資料這個活兒,就落在了小王身上。
檔案很大,公司的電腦很爛。小王打開之後,電腦的風扇就呼呼直轉。他每次都需要使用
ctrl+f
找到不太正常的資料,然後把它麼拷貝到另外一個檔案中。資料多工期緊,昨天晚上,小王就加班幹到23點多,直到夜的盡頭。
總監對此專門進行了表揚。
我坐在小王的旁邊,自然不能對此坐視不理。常年養成的習慣,讓我對低效的事情無法忍受,就如同一隻常年奔跑的兔子忍受不了緩慢爬行的蝸牛。
隻掃了一眼小王的需求,我就判定這個工期三天的任務,使用腳本隻需要2個小時就能完成。我并不是樂于助人,實在是我非常的喜歡寫這種腳本,還有腳本帶來的這種速度差異的快感。
一個小時之後,我把調試好的
python
腳本交給小王。shell裡一運作,正确的檔案就出來了。好爽的感覺。
小王自然對我拜服,逢人便吹xjjdog如何牛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了,我認識采購的人。”
我微笑着點頭,不置可否,但虛心受教。
我灰溜溜回到自己的工位,長歎一聲,删光了公司所有的人。