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. C#实现人脸识别

    C#实现基于ffmpeg加虹软的人脸识别 关于人脸识别 目前的人脸识别已经相对成熟,有各种收费免费的商业方案和开源方案,其中OpenCV很早就支持了人脸识别,在我选择人脸识别开发库时,也横向对比了三种 ...

  2. ZYNQ7000 LVDS接口输出配置

    xilinx 7系列芯片不再支持LVDS33电平,在VCCO电压为3.3V的情况下无法使用LVDS25接口. 有些设计者想通过在软件中配置为LVDS25,实际供电3.3V来实现LVDS33也是无效的, ...

  3. [疯狂Java]JDBC:事务管理、中间点、批量更新

    1. 数据库事务的概念:     1) 事务的目的就是为了保证数据库中数据的完整性.     2) 设想一个银行转账的过程,假设分两步,第一步是A的账户-1000,第二步是B的账户+1000.这两个动 ...

  4. Normal Equation of Computing Parameters Analytically

    Normal Equation Note: [8:00 to 8:44 - The design matrix X (in the bottom right side of the slide) gi ...

  5. mysql 查询字段名所在的表

    select * from (select * from information_schema.COLUMNS where table_schema = '数据库名') temp where colu ...

  6. Vue源码--深入模板渲染

    原文链接:https://geniuspeng.github.io/2018/02/07/vue-compile/ 之前整理了vue的响应式原理,在这里有一点是一直很模糊的,就是何时去new一个wat ...

  7. 特征点提取之Harris角点提取法

    1. 特征点提取的意义 2.角点 3. Harris角点检測的基本原理 4.Harris角点检測算法的步骤 5.Harris角点提取算法设计 <span style="font-siz ...

  8. static,const,extern,以及全局常量

    1:全局常量的定义:1:创建Header头文件,再创建与Header头文件类名相同的空文件作为.m文件,.h文件引用文件,.m文件负责定义常量 #import <UIKit/UIKit.h> ...

  9. sourceinsight4

    转载 http://bbs.pediy.com/thread-215669.htm 如果你觉得软件有用,请购买正版.发布这个纯属娱乐. 转载请注明出处,谢谢! 仅修改了程序中用于License签名验证 ...

  10. Tomcat生产中优化JVM的配置实例

    root 1208 1 0 11月25 ? 00:15:32 /home/root/jvm/jdk1.7.0_79/bin/java -Djava.util.logging.config.file=/ ...