一个Java工程师的入门级Linux命令集
0、前言
网上介绍linux的命令的文章一大堆,但是大部分都是流于命令介绍,把命令的所有参数都介绍一遍,但是其实在真正的工作中,很多参数都不会用到。本文总结了我自己常用的一些命令,这些命令都比较简单,运维大神应该看不上,但是,作为一个开发工程师,这些命令往往是日常用的最频繁的,而且命令与命令之间往往是组合着使用的,根据不同场景组合都不同。
1、基础命令
1.1、ssh
我们要去线上机器,ssh命令一定绕不过,虽然现在有很多ssh命令客户端,但是知道一下原理也是有好处的,万一哪天就要你敲命令行呢?ssh用来连接到远程服务器,一般都是 ssh xxx@192.168.0.1 这种方式去连接,其中xxx是你登录机器的身份,一般是自己的用户名,或者时root,192.168.0.1则是需要登录的机器IP。除了一般的ssh用法,有些开发可能会使用私钥文件去连接,这时候就可以用ssh -i kesin.pem xxx@192.168.0.1,其中 kesin.pem是你的私钥。
1.2、cd/pwd
cd用来切换目录,最基础的命令,没啥好说的,注意使用的时候“.” 表示当前目录, “..” 表示上一个目录,“~”表示系统登录时的默认目录。pwd是用来显示当前目录的。
1.3、ls
ls是用来显示当前目录的文件的命令。我一般用ls -lk列出目录下所有文件,并且打印详细信息,其中文件大小用KB表示,也就是-k这个参数的作用。如果嫌麻烦,可以直接用ll,ll是ls -l的别名或者自己定义别名。有时候我需要找一个目录下的某些文件,这时候就会用 ls -l -R /xxx | grep "xxx" 去递归搜索。
1.4、mkdir/rm
mkdir用来创建一个文件夹。rm用来删文件,一般是rm xxx,如果要递归删除文件夹下的所有文件,则用 rm -r /xxx,切记不要在root权限下用rm -r /,会把整个Linux文件全部删掉的。
1.5、cp
cp用来在本机复制文件 一般用法是 cp a.txt /temp/b.txt 将a.txt拷贝到temp目录下并且命名为b.txt
1.6、scp
scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令是cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。一般用法是 scp a.txt root@11.189.78.21:/usr/local 作用是把a.txt拷贝到11.189.78.21机器上的/usr/local文件夹下。
2、文本处理命令
2.1、grep
一般在排查业务问题的时候,grep "xxx" biz.log 最常用,它的作用是在biz.log中查找所有含有XXX关键词的行。如果想知道关键词出现了多少次,那么就用grep -c "xxx" biz.log或者用grep "xxx" biz.log | wl -c 其中 wl -c就是用来统计次数的。有时候为了对日志异常做全局监控,我会用到grep -e "[a-Z]*Exception" *.log | sort | uniq -c ,它的作用是查询所有日志中带有Exception关键词的日志,并且去重后进行排序。grep其实是个非常强大的命令,可以通过管道和很多命令结合,开发出强大的脚本,大家可以结合实际场景慢慢摸索。
2.2、head/tail
有时候grep出来的日志比较多,你只想看前5行,那么你可以用 grep "xxx" biz.log | head -5,当你应用发布完成以后,你想看下新功能打印的日志有没有出现,以此来判断新功能是否正常,但又不想一直手工grep,你可以用到tail -f biz.log | grep "xxx",这个命令比较强大,只要日志一直在打印,它就一直读取日志文件最后一行同时去搜索关键词。
2.3、cat/more/less
cat比较简单,主要三个用法,cat filename 直接读取并显示整个文件,cat 1.txt 2.txt > 3.txt 将几个文件的内容合并到一个文件,cat > filename从键盘创建文件。
more filename会加载文件,但是和cat不一样的地方是,more是一行一行显示,你可以按空格键进行翻页,可以ctrl+B往前翻页,ctrl+F往后翻页,可以用/xxx进行全局匹配,找到第一次出现xxx的那一行.
less和more的用法差不多,区别在于less不会在一开始就加载整个文件,在一些大文件日志分析的时候,尽量用less。
2.4、awk
awk本身是一个很强大的工具,我们可以为awk工具传递一个字符串,该字符串的内容类似一种编程语言的语法,我们可以称其为Awk语言,而awk工具本身则可以看作是Awk语言的解析器。就好比python解析器与Python语言的关系。我们一般使用awk对文件中文本分列进行处理,所以如果一个文件中的每行都被特定的分隔符(常见的是空格)隔开,我们可以将这个文件看成是由很多列的文本组成,这样的文件最适合用awk进行处理。
一个完整的awk命令形式如下:
awk [options] 'BEGIN{ commands } pattern{ commands } END{ commands }' file
我一般常到的就两种:
1、awk '{print$1}' a.txt 意思是对a.txt文本进行处理,按照空格(默认就是空格)分割,然后打印出第一个字符串,比如a.txt的内容是aaa bbb ccc 经过上面的命令处理后输出的就是aaa
2、awk -F "," '{print$2}' a.txt 意思是对a.txt进行文本处理,按照","分割,然后打印出第二个字符串,比如a.txt的内容是
aaa,bbb,ccc 经过上面的命令处理后输出的就是bbb
其实awk在工作中很多时候被用来进行log分析的, 我们在打印业务日志的时候需要规范日志格式,比如:OrderService.create#param1,param2,param3#errorCode=xxx,errorMsg=yyy这样的日志,这时候如果要对errorCode进行监控,就只能靠awk了,脚本类似于:
cat biz.log | awk -F "#" '{print$3}' | awk -F "," '{print$1}' | awk -F "=" 'print{$2}'| sort | uniq -c| > errorCode.txt
脚本先加载 biz.log,然后按照"#"分割,取出第三个字符串 “errorCode=xxx,errorMsg=yyy”,然后通过管道再调用一次awk,按照“,”分割,取出第一个字符串“errorCode=xxx”,然后再用一次awk按照=分割,取出xxx,最后进行去重排序后写入errorCode.txt
上面只是一个例子而已,具体需要根据日志分析的需求去定制化脚本,如果想详细了解awk,推荐一本书《sed与awk》
2.5、sed
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作。我在工作中用到sed比较少,主要是用它做全局替换,比如上面用awk处理得到的errorCode.txt,假设它的原文如下:
1 P001
2 P009
13 P102
其中数字是该errorCode出现的次数,P001/P009这些就是具体的errorCode,如果这时候我需要将P替换成字符串ERROR,以便后续的处理,那么我就可以用sed "s/P/ERROR" errorCode.txt进行全局替换。
如果要深入学习sed,同样推荐看《sed与awk》这本书。
3、小结
Linux命令最好的学习方式不是看书,也不是死记硬背每个命令的参数,而是不断地使用,然后总结出一套属于自己的脚本,每个开发都应该维护好自己的一套脚本,不断地用脚本把一些可以自动化的工作用脚本代替,从而提高自己的工作效率!
========================================================
如果觉得还不错,请随意打赏