本人Linux非常精通,尤其是sed、awk、python等脚本语言,熟练使用。图片来自Pexels。我把它看作是一种非常独特的技能,一种使我区别于其他普通程序员的技能。所以我在写脚本的时候,会骄傲的仰起头,鼻孔朝天,冥想着强大的代码。比如看到别人一遍又一遍的翻文档,安装Elasticsearch软件,我就觉得不舒服。我写了一个脚本来加速这个过程:mkdir/datauseraddes-d/data/eschown-Res:es/datacat>/etc/security/limits.conf<这个脚本可以让我快速知道软件安装的要点无需阅读那些冗长的文档。我总是这样做,时间一长,我就觉得自己很闲。这几天,小王一直在摆弄Excel,处理这些数据已经好几天了。客户需要从其他平台迁移到我们的平台,导出一堆乱七八糟的数据,大约30到40MB。不知为何,清洗数据的工作落在了小王身上。文件很大,公司电脑很烂。小王打开电脑后,电脑的风扇开始呼呼作响。他每次都需要用ctrl+f找出异常的数据,然后复制到另一个文件中。资料多,工期紧。昨晚,小王加班到23:00,一直到深夜。导演特别表扬了这一点。我坐在小王身边,自然不能置之不理。多年来养成的习惯让我对低效的事情无法容忍,就像终年奔跑的兔子无法忍受行动迟缓的蜗牛。看了一下小王的要求,我判断这个工期三天的任务,用脚本只需要2个小时就可以完成。我不是在帮忙,我真的很喜欢写这种脚本,以及脚本带来的这种速度差异带来的快感。一个小时后,我把调试好的Python脚本交给了小王。只要在shell中运行,就会出现正确的文件。这是一种很棒的感觉。小王自然是佩服我,对着大家吹嘘我牛逼。这件事不知何故被主任知道了,我被叫进了宽敞的办公室。看导演阴沉的脸色,我知道不对劲,却不知道症结所在。我才刚进这家公司,不经意间触及了不该触及的底线,心里百思不得其解。“听说你帮小王解决了一个难题。”导演说:“以后别写这种东西了。”“为什么?”我似乎不相信自己的耳朵,“脚本可以显着提高工作效率。”“我就知道你会有这样的问题。”导演严肃的脸色缓和下来,给我讲了一个建筑师的故事。小松曾经是这家公司的架构师。不写代码的三足猫架构师很多,所以小松成了少有的会写代码的架构师。他的专长之一是写剧本,就像我现在所做的那样。脚本可以提高效率,这是我多年的经验。但是效率这个词本身是根本无法衡量的。因此,效率这个词是无法量化的。即使你把工期从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命令,有些人喜欢调用dockerpurge来清理。它只是失控了。他认为这是用户水平的问题,而不是他的脚本。和导演吵了几句,小宋终于生气了,一怒之下辞职了。他直接把这家公司所有人的好友都删了,然后消失了。“所以才跟你提出这样的要求,是因为我对你有好感,与风险相比,这带来的效率提升,实在是微不足道。”说到这里,导演意味深长地看了我一眼。“我现在就及时制止你的行为,免得重蹈萧颂的覆辙。”我点点头,这个道理我明白。以前有公司选择Windows系统作为服务器,是因为觉得Linux的学习成本高,而且命令危险。宁愿自己不自在,花钱办执照,当个2B,也不愿更进一步。风险这个词挂在嘴边,这些原因都是一样的。我忽然觉得,这么多年过去了,我的信仰快要崩溃了。真的很悲哀,费了那么大劲才掌握了命令行,最后还是白搭了。“主任,不好了……我刚想表达什么,一个小伙子插了进来,”网上有人在用Ansible练习,把根目录的权限全部改成了000!我马上就出现了这个命令在我看来,这回怪LinusTorvalds了。chmod-R000/谁知道导演笑了。这种情况本月发生了好几次。是时候切换到安全可靠的Windows了,我认识购买它的人。”我笑着点头,不置可否,但虚心受教。无奈回到办公桌前,叹了口气,把公司里的人都删了。今天递交辞呈,毕竟公司找不到LinusTorvalds,但可以找我吧。毕竟Ansible是我前几天刚推荐的工具。那么,如果你是架构师,你会留下什么脚本呢?公众号谁走了弯路。专注于基础架构和Linux。十年架构,每日百亿流量,与你探讨高并发世界,给你不一样的滋味
