5

为什么程序猿都应该学点linux命令?

 2 years ago
source link: https://zxs.io/article/1847
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

大家好,我是xindoo,今天和大家分享下一个我的观点——程序猿都应该学点Linux命令!这也是这两年我做后端开发的切身体会。认识我的人可能都知道,我职业生涯比较“特殊”,我毕业后先是干的运维,然后再转的Java开发。 运维的经历苦不堪言,但积累下来的运维相关经验却让我在转开发后受益匪浅,其中一项就是熟悉大部分常用的Linux命令。 我已经记不清多少次只用几行命令搞定别人半天都没搞定的事儿,然后拂袖离去,深藏功与名……

学好linux命令有啥用?

用linux命令日常提效的例子数不胜数,我说一些对我的明显作用。

快速排查和定位问题

举个很简单的场景,早上去上班,刚坐下突然收到服务器的报警,CPU使用率98%!登陆服务器top命令可以快速定位到是哪个进程或者线程,sar命令定位出问题发生时间点,用cat、grep等命令快速找到出问题时的日志……,分分钟解决问题。当高手泡杯茶的功夫解决问题时,新手还不知所措。

关于性能问题定位的命令,我之前翻译过篇文章10行命令60秒快速定位性能瓶颈有兴趣可以了解下。

数据清洗和统计

数据清洗和统计的方法很多,就比如用excel就可以完成很多类型的统计工作,但针对一些简单的统计,我自己写个shell脚本也能分分钟搞定,尤其是当需要被统计的数据是直接在服务器上时。比如这台机器上服务今天员工报过多少次error。还有从日志中解析出某个接口今天所有请求的平均、最大、最小耗时…… 像这种简单的数据清洗和统计,我用grep、awk也能分分钟完成。

印象比较深的一个经历,有次我们在排查某个问题时,从两个系统中导出了两份用户数据,想对比下每个用户在两个系统里的数据差异,当时数据量还是挺多的。这种问题你会怎么办? 从服务器上拉到本地,然后用excel的vlookup好像也行。当服务器上数据不允许下载呢?

这两份数据如果是数据库里的两个表,很明显就是将两个表直接join起来(当时也有同事提出先将数据入库)。但在linux上用awk命令可以很容易实现这个功能,后来我也把具体方法写了一篇博客awk实现类sql的join操作

辅助开发的事就数不胜数了,比如我用wget命令下载文件,用curl命令调试接口,用dig、ping、nc测试网络,用wrk压测接口……

这个就不多说了,在控制台各种敲,很geek。

如何学习Linux命令

以上说了好多学好linux命令的优点,我相信你肯定按捺不住想要学了,这里我分享一些我的学习方法。

多练习,但没必要太刻意练习

这个也算是老生常谈了,如何东西想要熟练,都需要大量的刻意练习,学习linux命令也不例外。 但我这里给一个忠告,就是没必要一次性花太多的时间去熟练掌握某个linux命令,尤其是有些比较冷门的命令。 很多命令确实很不常用,如果你执着于一次性掌握其所有参数,但长期不使用肯定还是会忘记,到时候还是得重新学,投入产出比太低。

比如我之前学习过tcpdump的使用,当时大部分的参数基本都会用了,但tcpdump在日常工作中使用的太少了,而且也涉及到大量网络的知识,我已经很长时间没有用过了, 已经忘记怎么使用了。 像这种工作中不太涉及,也不常用的命令,了解下就可以了,知道它能干什么足以,等真正有需求的时候再去学。

先知道有什么样的命令,再考虑怎么去用

Linux命令及其参数不能用浩如烟海来描述,但也算是数不胜数了,索性大部分的命令及参数是不会用到的,但也推荐大家稍微记录下。 就比如我今天早上遇到一凌晨OOM的问题,我想去追溯那段时间机器的负载情况,最简单的方式就是用sar命令,方便快捷,虽然我早已忘记具体的参数,但man或者搜索下立马就知道了。

所以我的建议是先知道有什么样的命令,然后再按需求去了解具体命令的使用方式。初学者应该从最简单最常用的命令开始学起,比如下图中的命令。
在这里插入图片描述
网上有很多常用命令的参考指南,我之前也写过一篇博客我常用的Linux命令

善用man和搜索引擎

在linux中,所有命令的使用方式都可以通过man命令来查询,包括详细的示意,各种参数的作用都有,都是命令的开发者提供了,肯定保证准确无误,不过缺点是都是英文的,而且有些篇幅较长,对像我这种英文不太好的人不是很友好。

另外,搜索引擎也是了解一个linux如何使用的好工具,网上有各种相关博客,有些入门网站(比如菜鸟教程)也有比较体系化的教学内容,甚至有时候还可以找到你问题的解决方案。这种方式对新手比较友好,但这种方式的缺点是内容质量参差不齐,自己要做好信息的辨别和筛选。

对于我不熟悉的linux命令,我日常是两种方法都使用,比较倾向于第二种,但在第二种无法解决我问题时我会去看man收藏,去寻找更专业的资料。

收藏代码片段

我可能比较偏实用主义,学linux命令大多数情况都是为了解决具体的问题,而我遇到的问题各式各样,使用的方法也不一样,可能时隔好久才会重复出现,等出现时之前用的解决方案早就忘记了。为避免这种问题,我开始用snippetsLab记录一些常用的代码片段,将自己写的稍微复杂且不是很常用的代码片段保存起来,加上描述和标签方便检索,等之后如果再用到可以快速找回。

比如像上文中awk实现join的功能,稍微有点复杂,每次让我重新写也不是写不出来,但还是需要花点时间调试的。 这种与其每次都调,还不如记录下来下次贴过来直接使用。 这两年我已经在snippetsLab中记录了数百条代码片段了。
在这里插入图片描述

说真的,虽然我不推荐做运维这个工作,尤其是在国内,但我非常建议大家了解下运维相关的技能,尤其是各种常用的linux命令,不管你是前端还是后端、不过是java还是go程序猿,都应该了解常用的linux命令。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK