前言

通过这篇文章你将收获:netstat、grep、awk、sed、wc 五个命令的简单使用

查看进程

在重启服务前,需要查看当前服务的进程,假设进程的端口号为6666

#统计某端口正在监听的进程数
netstat -lntp | grep 6666 | awk '{print $7} '| sed -e 's/\/java//g' |wc -l

下面,简单看看这条命令做了什么(若想了解更多,可点击绿色小标题):

netstat

netstat(英文全拼:net status ):查看Linux网络状态

#查看Linux当前正在监控的tcp协议,并将域名使用ip显示,显示相应的程序id和名字
netstat -lntp

常用选项:

-l(-listening) 显示监控中的服务器的Socket

-n(-numeric) 直接使用IP地址,而不通过域名服务器

-t(-tcp) 显示TCP传输协议的连线状况

-u(-udp) 显示UDP传输协议的连线状况

-p(-programs) 显示正在使用Socket的程序识别码和程序名称

grep

grep :查找符合条件的信息。

#1.查看Linux当前正在监控的tcp协议,并将域名使用ip显示,显示相应的程序id和名字
#2.筛选出包含'6666'的行
netstat -lntp|grep 6666

常用选项:

-n (-line-number):行号,即在显示前先标示出该行的编号

-i (-ignore-case):忽略, 忽略字符大小写

-v (-invert-match):反转,即显示不包含匹配文本的所有行。

-c (-count):计算,计算符合样式的行数。

-E (-extended-regexp):拓展,将样式为延伸的正则表达式来使用。(等效egrep)

--color :上色,将匹配上的部分着色显示,两个-

awk

awk主要用于格式化输出;常用来筛选列。

#输出文本中的第7列
 awk '{print $7}' 
# 什么参数也不加,默认按 “空格或TAB” 分割;print:输出 $7:第7列,注意''和{}

常用选项

-F (-field separator fs)指定分隔符,即分隔符fs是一个字符串或者是一个正则表达式,用它去拆分列。

 # 使用","分割,输出log.txt文本中的第1,第2列
 awk -F, '{print $1,$2}'  log.txt

更多语法

# 语法格式
# awk   -可选项 ‘模式{操作语句}’ 文件
awk [option] 'PATTERN{ACTION STATEMENTS}' FILE
#awk按照行来读取文档,根据输入分隔符切分成小部分($0,$1,$2等),$0表示显示整行。
#用ACTION STATEMENTS来处理该行文本。

sed

sed全称为Stream EDitor,sed是一个流编辑器,在处理行内容时功能十分强大。主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

#将'/java'替换成‘’后输出
sed -e 's/\/java//g'
# 思路:
# sed 's/要被取代的字串/新的字串/g'  替换
# -e 使用正则,因为/java的‘/’需要转义‘\/’

语法

# sed -h 帮助 -V版本 -n 安静(silent)模式 -e'多点编辑脚本' -f'脚本文件'
sed [-hnV][-e][-f][文本文件]

常用参数

-e(-expression=):以选项中指定的script来处理输入的文本文件。

-f(-file= ):以选项中指定的script文件来处理输入的文本文件。

-n(-quiet-silent ):仅显示script处理后的结果。

常用动作(script脚本里):

查:

-p (print):打印,亦即将某个选择的数据印出。通常 sed -n 'p'

# 如果不加n,会先输出匹配行,再输出所有行;加了n只输出匹配行,效果等同grep;(OS:安静的美男子不想多说)
#显示文件内的第 5-7 行
sed -n '5,7p'
#显示有root关键字的行
sed -n '/root/p'
#查询日志-1点的日志
sed -n '/ 01:00*/p' catalina.out
#查询某个时间段的日志
sed -n '/starttime/,/endtime/p' catalina.out

改:

-s(substitute) :取代,将匹配值替换为新值,sed -e 's/原先值/新值/g',通常s 的动作可以搭配正规表示法。

替换标记:

g 行内全局替换
p 显示替换成功的行
w /PATH/TO/SOMEFILE 将替换成功的行保存至文件中

-c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行

增:

-a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)

-i (insert):插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);

删:

-d (delete):删除,因为是删除啊,所以 d 后面通常不接任何咚咚;

wc

wc(wrod count)命令用于计算数目。

#统计有多少满足条件的行
wc -l
#常用语法:
#wc [-lwc][--help][--version][文件...]
#如果什么参数都不加,按行数、字数、bety数依次显示

利用wc指令我们可以计算文件的Byte数、字数、行数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。

常用参数

-l(-lines)行数, 即只显示匹配的行数

-w(-words )字数,只显示匹配的单词数。

-c(-bytes -chars) 字节数,即只显示Bytes数、字节数。

简单总结

   假装总结一波:今天用一行查看进程的命令,认识了五个shell命令(记住多个命令间需带''|'')

1.通过netstat命令,先查出网络状态,netstat -lntp

2.用grep筛选端口号匹配的行,grep 端口号

3.再用awk筛选进程号那一列,awk ‘{print,$列号}’

4.用sed将结果替换成想要的部分内容,sed -e 's/要被取代的字串/新的字串/g'

5.最后用wc统计行数;wc -l

   希望能让您先初步地认识到Linux三剑客的威力!如果想让这把剑变得更锋利,我们需要进一步了解其他参数以及正则表达式的使用。推荐博客:Linux三剑客