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命令最好的学习方式不是看书,也不是死记硬背每个命令的参数,而是不断地使用,然后总结出一套属于自己的脚本,每个开发都应该维护好自己的一套脚本,不断地用脚本把一些可以自动化的工作用脚本代替,从而提高自己的工作效率!
 

========================================================

如果觉得还不错,请随意打赏

一个Java工程师的入门级Linux命令集的更多相关文章

  1. 每天一个linux命令集

    linux命令汇总,装载来自: http://www.cnblogs.com/peida/category/309012.html

  2. 如何在java程序中调用linux命令或者shell脚本

    转自:http://blog.sina.com.cn/s/blog_6433391301019bpn.html 在java程序中如何调用linux的命令?如何调用shell脚本呢? 这里不得不提到ja ...

  3. Java代码中执行Linux命令,亲测可用

    前提需要知道怎么在linux怎么新建java文件和怎么编译,否则请先学其他知识!! import java.io.*;public class Test{ public static void mai ...

  4. java程序猿常用Linux命令

    1.查找文件 find / -name filename.txt 根据名称查找/目录下的filename.txt文件. find . -name "*.xml" 递归查找所有的xm ...

  5. java开发掌握的Linux命令

    linux命令是对Linux系统进行管理的命令.对于Linux系统来说,无论是中央处理器.内存.磁盘驱动器.键盘.鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命 ...

  6. 写一段java程序来执行linux命令

    摘要 在日常开发中,程序员需要经常查询服务器日志来排查问题和调试程序.如果是本地调试还好,但项目一旦发布到服务器上,每次查日志就很麻烦,而且日志量巨大,有时我们无法找到我们需要的信息.经常需要借助第三 ...

  7. java项目部署常用linux命令

    1.显示当前所有java进程pid的命令:jps2.查找文件或文件夹目录查找目录:find /(查找范围) -name '查找关键字' -type d查找文件:find /(查找范围) -name 查 ...

  8. 蘑菇街工程师常用的Linux命令!

    一.查看日志 线上出现了问题,登上线上的机器查日志是非常常见的操作了.我第一次登上线上机器查日志的时候,我还只记得以下的几个命令(假设现在我们的日志文件叫做service.log): cat serv ...

  9. 开发人员需要掌握的日常Linux命令集

    本文整理了开发人员日常用到的linux相关命令,供参考. 文件相关 cd # 进入某个目录,不接参数进入当前用户目录(等同于cd ~)如/home/devuser,可接绝对路径或相对路径(../..表 ...

随机推荐

  1. php对象和数组的相互转换(还是可以去找没有没php的高阶课程看看看)(要不别人分析一下重点要点,要不自己来,不然 效果真的不好)

    php对象和数组的相互转换(还是可以去找没有没php的高阶课程看看看)(要不别人分析一下重点要点,要不自己来,不然 效果真的不好) 一.总结 都是自己实现的函数 算法: 1.先判断类型,gettype ...

  2. Latex表格制作记录

    Latex表格制作记录 主要功能 合并表格的行列 长表格的使用 makecell例程借鉴 效果图 参考代码 \documentclass{ctexart} \usepackage{indentfirs ...

  3. UI 06 ScrollView 的手动循环播放 与 自己主动循环播放

    假设想要循环播放的话, scrollView的照片前要加上最后一张图片, 最后要加上第一张图片. - (void)viewDidLoad { [super viewDidLoad]; // Do an ...

  4. 在vue中使用babel-polyfill

    在 Vue.js项目中使用Vuex,Vuex 依赖 Promise,所以如果你的浏览器没有实现 Promise (比如 IE),那么就需要使用一个 polyfill 的库 我们可以通过babel-pr ...

  5. 解决gvim 8.1中zip插件打开zip文件内容时,而文件路径带有空格的问题。

    解决gvim 8.1中zip插件打开zip文件内容时,而文件路径带有空格的问题. 现象是只能打开一次,第二次打开就显示为空了. 通过 lcd切换工作目录.使得命令行操作中不再有带空格的路径 vim81 ...

  6. (四)RabbitMQ消息队列-服务详细配置与日常监控管理

    原文:(四)RabbitMQ消息队列-服务详细配置与日常监控管理 RabbitMQ服务管理 启动服务:rabbitmq-server -detached[ /usr/local/rabbitmq/sb ...

  7. java开发SSM框架的搭建(SpringMVC+Spring+MyBatis)

    因为某些原因,重装系统,java-web开发尽管顺手,但烦人的一点是开发环境的搭建.几乎相同折腾了一整天,笔者在这里把SSM开发环境的搭建又一次清理一遍,以飨读者.也供自己以后參考.善于总结,是做好每 ...

  8. 多线程之线程通信条件Condition二

    接上一篇,实现Condition三个条件,有这样一个应用: 1. 有三个进程,第一个进程运行1次,第二个进程运行2次,第三个进程运行3次: 2. 先运行第二个进程,然后第一个,然后第三个: 3.  依 ...

  9. bash 提示用户输入 choice

    read -p "Continue (y/n)?" choice case "$choice" in y|Y ) echo "yes";; ...

  10. Java编程思想第四版 *第五章 个人练习

    练习3:(1)创建一个带默认构造器(即无參构造器)的类.在构造器中打印一条消息.为这个类创建一个对象.P116 public class Test{ public Test(){ System.out ...