运维高手一:工作累积的最常用 Shell 命令合集及使用技巧

本文主要讲解 Shell 命令合集,以及对控制台的使用技巧。在这之前你需要掌握如下三部分的知识内容:

  • 需要熟悉掌握 Linux;
  • 需要了解一些 Shell 基础,课时中会介绍一些常见的 Shell 命令合集;
  • 需要了解 TCP 三次握手原理,这个课时的 Shell 命令合集包含对计算机进行网络分析。

控制台使用技巧
首先,掌握控制台的使用技巧后可以帮助我们熟练快速地操作控制台,提高工作效率;还可以通过快捷键方式避免大量的命令输入,减少出错产生的概率。那么都有哪些快捷键供我们使用呢,基于我的运维工作经验汇总如下:

  • 操作快捷键

Ctrl + r:可以快速查找历史命令;
Ctrl + l:可以清理控制台屏幕;
Ctrl + a \ Ctrl + e:移动光标到命令行首\行尾;
Ctrl + w \ Ctrl + k:删除光标之前\之后的内容。

  • VIM文件编辑快捷键

快捷键ZZ:文件保存并退出。

  • 进程操作快捷键

Ctrl + c:强制终止程序的执行;
Ctrl + z:挂起一个进程;
Ctrl + d:终端中输入 exit 后回车。

  • linux命令中快捷键(top)

Shift + p:根据 CPU 使用率排序;
Shift + m:根据内存占用排序。

Shell 命令合集

需要注意的是这里的 Shell 命令合集不是简单的单一命令使用,而是 Shell 命令组合的使用,它们的适用场景虽然平时可能很少用到,但通过加强记忆你能够在遇到此类场景时能够得心应手,而不必临时查找或根据经验拼凑,同时期望通过这些组合命令的学习后你对基础命令的理解可以得到进一步的提升。

首先,我们需要对 Shell 命令合集做一个分类。

  • 空间分析

场景1:磁盘空间不足,需快速定位日志目录;
场景2:系统产生很多碎片文件,导致 inode 资源不足。

  • 指定文件操作

场景1:批量查找文件作内容替换;
场景2:批量查找文件作拷贝打包。

  • 链接状态分析

场景:想了解用户请求所建立的网络连接状态分析

  • IP 信息提取

场景:shell 脚本中希望快速提取到本机 IP。

空间分析-场景1

该场景主要应用于当磁盘空间不足,需要快速定位或者对文件使用率进行排序,需要查看哪一些文件目录或者文件占用的空间比较多,就需要如下组合命令。

du -x --max-depth=1 / |sort -k1 -nr

这一个命令组合由两个 Shell 命令组成,前面的 du 命令进行磁盘统计,第二个 sort 命令对统计后的数据进行排序,中间通过 | 管道符来传递数据。管道符 | 的作用是将前一个命令的输出传递到下一个命令的输入。

du 命令中 -x 参数表示跳过其他文件系统,也就是只分析本文件系统里的文件,它可以帮助我们排除一些非本文件系统的统计信息,这样执行速度会更快也不容易出现一些额外的干扰项。--max-depth参数设置为 1,这样就可以统计出根目录下第一级目录中的所有文件的大小。第二个命令sort中 -k 参数指明具体按照哪一列进行排序,-n 参数表示只对数值进行排序,而 -r 参数表示反向排序,那整体分析sort 这一段命令的意思就是指定第一列并按照数据大小做反序排序。

空间分析-场景2

场景 2 适用于系统上产生很多碎片文件时,随之产生大量的 Inode , Inode 用于存放着文件系统中文件的源数据,Inode过渡的使用会导致系统 Inode 资源不足。这种情况是不正常的,这个时候分析如果通过du 命令指能具体展示出磁盘空间的使用情况,但并不能分析出具体目录下产生了多少碎片文件,我们就需要如下的命令组合来对文件进行统计分析。

find -type f|awk -F/ -v OFS=/ '{$NF="";dir[$0]++}END{for(i in dir)print dir[i]""i}'|sort -k1 -nr|head

基于管道可以将这个命令组合切割成四部分,分别是 find、awk、sort、head 命令。

其中 find 命令通过 -type f 参数查找指定文件类型的文件,然后将查找结果通过管道传递给 awk,它可以把文本内容按行进行格式化输出并展示,-F / 指定处理文件时字符串之间以 / 进行分割,-v OFS=/ 表示文件显示结果时以 / 进行分割展示。对于awk命令整体规则而言有一个 {} END {} 格式,前面的 {} 表示行处理操作,END{} 表示行处理后需要进行整体结果出。在行处理操作逻辑中,设置$NF 为空表示将每一行的文件名信息去除,从而只保留目录路径,dir 是一个自增数组,用于统计结果。最后通过 for 循环进行遍历输出dir关联数组中所有行信息。

因为这个命令组合比较复杂,我们在控制台中来看具体的演示,首先在控制台中输入这一串命令组合。

14.png

你可以看到在当前目录路径通过执行命令,结果中已经把每一个产生文件的路径都展示出来了,并且前面还会显示在每一个路径下一共包含了多少文件,如果我们系统 提示inode 使用率问题,需要分析出哪个路径下的文件数最多,这时就可以通过 这个组合命令来进行分析。

文件操作-场景1

文件操作的场景主要有两个,第一个场是批量文件内容需要进行替换,也就是当我们在一个文件目录下面有多级子目录,并且子目录中有大量的文件,而我们需要对目录下的某一个名称的文件批量的查找替换内容。面对这种场景我们可以使用如下的组合命令:

find ./ -type f -name test.txt -exec sed -i "s/aaaaaa/bbbbbb/g" {} \;

我们通过 find + 路径 的方式查找需要批量修改的指定的文件名,比如命令中的 test.txt 文件,查找到文件后通过 find 自带的参数 exec 将结果传递给另外一条命令 sed 来进行下一步命令的处理。

find 命令中,-name 参数指定查找的文件名,-exec 参数将查找到的内容传递给下一个命令去继续执行相关逻辑,sed 命令主要对文件内容进行替换,这里会将 consumer 文件中的 aaaaaa 替换成bbbbbb,这就是一个批量查找替换的操作。

文件操作-场景2

文件操作的第二种场景是我们需要对文件进行批量的打包、拷贝,你可以使用下面这样的一个组合命令:

(find . -name "*.txt"|xargs tar -cvf test.tar) && cp -f test.tar /home/.

首先括号中包含两条命令,它们使用管道符进行连接,括号外通过"&&"符号与第三条命令进行连接,也就是我们首先需要执行括号中的组合命令,先查找所有.txt文件,然后将结果传递给 xargs 命令进行打包,如果打包成功后才将压缩包传递给 cp 命令进行拷贝。

网络连接状态分析

对于网络连接状态分析是运维工程师经常需要做的事情,因为我们经常需要了解系统对外提供的网络服务是否正常,并了解它们的连接状态,这时就可以通过如下的命令组合进行操作:

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

这个命令组合的构成,整体上来说它由两个命令构成,第一个命令是netstat -n,这个命令负责查看主机上的所有 TCP、UDP 连接信息,而awk 命令则负责对这些信息进行进一步的处理,awk 后有一个用两个 "斜杠" 括起来的正则表达式,主要用来匹配以 tcp 开头的每一行信息,所以这里的正则表达式起到了一个过滤的作用(只分析tcp的连接),后面则是对信息过滤后进行具体的统计和输出。

IP信息提取

而另外一个场景就是提取主机上的 IP 信息,这里推荐使用如下的命令组合:

ip a|grep "global"|awk '{print $2}'|awk -F/ '{print $1}'

它的结构组成也比较简单,分别是由四个命令组合而成,前面的 ip a 负责查看主机上所有网卡的信息,然后通过 grep 进行条件过滤,再通过 awk 实现第二列内容输出,最后通过 awk 以指定 / 作为分隔符来打印第一列的信息。

常见问题答疑

最后,分享一下 对Shell 常有的几个疑问。
问题一:Shell 适不适合作多并发任务?
答案:不适合,在 Shell 中一般需要通过 nohup 方式将需要并发执行的命令放入后台,但这样操作存在一些问题,包括:

  • 进程的状态不好控制;
  • 进程间信息共享一般以文件方式。

等等,所以我们当需要进行大的自动化工程任务需要作并发任务时 建议选择 Python Go PHP等语言。

问题二:Shell 的远程执行命令方式是什么?
答案:当Shell进行远程执行命令时,通常通过ssh xx@xxx.xxx.xxx.xxx /home/xx/test.sh参数的方式,但如果是批量主机任务,建议选择ansible、saltstack 这样成熟且专业的工具实现。
问题三:Shell 适合用在什么场景中?
答案:Shell 适合用在追求运维高效(非性能高效)要求的简单场景中,如日志切割、进程分析、系统初始化等。

<center>未完待续,敬请期待!</center>
文章优先发布于公众号运维大师兄,更多精彩等你!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,392评论 0 5
  • 1、文件和目录: # cd /home 进入 '/home' 目录 # cd .. ...
    XDgbh阅读 2,010评论 0 1
  • 第 2 章 SHELL 基础知识2.1 shell脚本我们在上面简单介绍了一下什么是shell脚本,现在我们来进一...
    LiWei_9e4b阅读 1,574评论 0 0
  • 1. 硬链接和软连接区别 硬连接-------指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区...
    杰伦哎呦哎呦阅读 2,260评论 0 2
  • 命令行的艺术 前言 基础 日常使用 文件及数据处理 系统调试 单行脚本 冷门但有用 仅限 OS X 系统 仅限 W...
    进击的诺基亚阅读 3,850评论 0 19