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. js实现第一次打开网页弹出指定窗口(常用功能封装很好用)

    js实现第一次打开网页弹出指定窗口(常用功能封装很好用) 一.总结 1.常用功能封装:之前封装的cookie的操作函数非常好用,我自己也可以这么搞 二.js实现第一次打开网页弹出指定窗口 练习1:第一 ...

  2. 组合搜索(combinatorial search)在算法求解中的应用

    1. 分治.动态规划的局限性 没有合适的分割方式时,就不能使用分治法: 没有合适的子问题或占用内存空间太大时,就不能用动态规划: 此时还需要回到最基本的穷举搜索算法. 穷举搜索(exhaustive ...

  3. HDU 1406 完数 因子的和

    http://acm.hdu.edu.cn/showproblem.php?pid=1406 完数的定义:如果一个大于1的正整数的所有因子之和等于它的本身,则称这个数是完数,比如6,28都是完数:6= ...

  4. 机器学习算法笔记1_2:分类和逻辑回归(Classification and Logistic regression)

    形式: 採用sigmoid函数: g(z)=11+e−z 其导数为g′(z)=(1−g(z))g(z) 如果: 即: 若有m个样本,则似然函数形式是: 对数形式: 採用梯度上升法求其最大值 求导: 更 ...

  5. Python——管理属性(2)

    __getattr__和__getattribute__ 眼下已经介绍了特性property和描写叙述符来管理特定属性[參考这里],而__getattr__和__getattribute__操作符重载 ...

  6. POJ 2185 Milking Grid KMP循环节周期

    题目来源:id=2185" target="_blank">POJ 2185 Milking Grid 题意:至少要多少大的子矩阵 能够覆盖全图 比如例子 能够用一 ...

  7. 在vue中使用nprogress

    NProgress的官网:http://ricostacruz.com/nprogress/        源码地址:https://github.com/rstacruz/nprogress 1.安 ...

  8. JAVA 中无锁的线程安全整数 AtomicInteger介绍和使用

    Java 中无锁的线程安全整数 AtomicInteger,一个提供原子操作的Integer的类.在Java语言中,++i和i++操作并不是线程安全的,在使用的时候, 不可避免的会用到synchron ...

  9. 【C++竞赛 E】xxx和yyy的旅行

    时间限制:1s 内存限制:32MB 问题描述 有n个城市和m条双向铁路.对于任意两个不同的城市x和城市y,两个城市之间有双向铁路,否则有双向公路,通过任意一条直达公(铁)路花费一小时.城市x与城市y存 ...

  10. 【机器学习实战】第3章 决策树(Decision Tree)

    第3章 决策树 <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/ ...