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

- 每天一个linux命令集
linux命令汇总,装载来自: http://www.cnblogs.com/peida/category/309012.html
- 如何在java程序中调用linux命令或者shell脚本
转自:http://blog.sina.com.cn/s/blog_6433391301019bpn.html 在java程序中如何调用linux的命令?如何调用shell脚本呢? 这里不得不提到ja ...
- Java代码中执行Linux命令,亲测可用
前提需要知道怎么在linux怎么新建java文件和怎么编译,否则请先学其他知识!! import java.io.*;public class Test{ public static void mai ...
- java程序猿常用Linux命令
1.查找文件 find / -name filename.txt 根据名称查找/目录下的filename.txt文件. find . -name "*.xml" 递归查找所有的xm ...
- java开发掌握的Linux命令
linux命令是对Linux系统进行管理的命令.对于Linux系统来说,无论是中央处理器.内存.磁盘驱动器.键盘.鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命 ...
- 写一段java程序来执行linux命令
摘要 在日常开发中,程序员需要经常查询服务器日志来排查问题和调试程序.如果是本地调试还好,但项目一旦发布到服务器上,每次查日志就很麻烦,而且日志量巨大,有时我们无法找到我们需要的信息.经常需要借助第三 ...
- java项目部署常用linux命令
1.显示当前所有java进程pid的命令:jps2.查找文件或文件夹目录查找目录:find /(查找范围) -name '查找关键字' -type d查找文件:find /(查找范围) -name 查 ...
- 蘑菇街工程师常用的Linux命令!
一.查看日志 线上出现了问题,登上线上的机器查日志是非常常见的操作了.我第一次登上线上机器查日志的时候,我还只记得以下的几个命令(假设现在我们的日志文件叫做service.log): cat serv ...
- 开发人员需要掌握的日常Linux命令集
本文整理了开发人员日常用到的linux相关命令,供参考. 文件相关 cd # 进入某个目录,不接参数进入当前用户目录(等同于cd ~)如/home/devuser,可接绝对路径或相对路径(../..表 ...
随机推荐
- 【转载】zookeeper数据模型
[转载请注明作者和原文链接, 如有谬误, 欢迎在评论中指正. ] ZooKeeper的数据结构, 与普通的文件系统极为类似. 见下图: 图片引用自developerworks 图中的每个节点称为一个 ...
- 18、x264编码在zedboard上的实现(软编码)
一.x264开源包获取 x264-snapshot提供了开源x264源代码,已经在X86和ARM架构下均已实现.linux下可以使用git获得最新的代码包 git clone git://git.vi ...
- 10、V4L2摄像头获取单幅图片测试程序(MMAP模式)
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h> ...
- swift入门之TableView
IOS8更新了,oc还将继续但新增了swift语言,能够代替oc编写ios应用,本文将使用swift作为编写语言,为大家提供step by step的教程. 工具 ios每次更新都须要更新xcode, ...
- URL validation failed. The error could have been caused through the use of the browser's navigation
URL validation failed. The error could have been caused through the use of the browser's navigation ...
- jquery formcheck.js
demo下载链接http://pan.baidu.com/s/1hrDCC3y /* Jquery 表单验证插件 janchie 2010.1 janchie@163.com 1.01版 */ ...
- xml传参
前端调用后端方法时要传递多个参数,在前端js中拼接xml形式的字符串: var args = "<?xml version='1.0' encoding='utf-8' ?>&q ...
- php实现二叉树遍历
php实现二叉树遍历 一.总结 关注输入输出 二.php实现二叉树遍历 题目描述 编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储). 例如如下的先序遍历字符串 ...
- 【u006】海战
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 在峰会期间,武装部队得处于高度戒备.警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞 ...
- USACO--2.1The Castle
思路:这个题目难在建图,開始的时候我想把每一个房间没有墙的面求出来,然后再和他邻近的房间加上一条边进行建图,后面发现要通过题目给定的条件求出房间那个面没有墙是十分困难的:后面參考了别人的思路,我们记录 ...