在Linux中,ps(Process Status)用于列出系统中当前运行的进程(process)的状态,ps命令列出的是当前那些进程的快照。如果要动态的显示进程信息,需要使用top命令。使用ps命令可以确定当前有哪些进程正在运行中与运行的状态、进程是否结束、进程是否僵死、哪些进程占用过多资源等。
进程的五种状态:
语法:
参数:(常用)
- -e 显示所有进程,环境变量
- -f 全格式
- -h 不显示标题
- -l 长格式
- -A 列出所有进程,包括其他用户的进程
- -w 显示加宽可以显示加多的咨询
- -r 只显示正在运行的进程
- -x 显示没有控制终端的进程
- -u 亿用户为主的格式来显示进程状态
- au 显示较详细的咨询
- -aux 显示所有包含其他使用者的进程
- -C<命令> 列出指定命令的状态
- –lines<行数> 每页显示的行数
- –width<字符数> 每页显示的字符数
- –help 显示帮助信息
- –version 显示版本显示
ps -ef 与 ps aux:
在Linux下显示进程最常用的命令:
- ps -ef :标准的格式显示进程
- ps aux:BSD的格式来显示:
netstat是一款命令行工具,可用于列出系统上所有的网络套接字连接情况,包括tcp、udp以及unix套接字,另外他还能列出处于监听状态(即等待接入)的套接字。如果想确认系统上的web服务有没有起来,可以使用netstat查看。
- -a(all) 显示所有选项,默认不显示LISTEN相关
- -t(TCP):仅显示tcp相关的选项
- -u(udp):仅显示udp相关的选项
- -n:拒绝显示别名,能显示数字的全部转化为数字
- -l:仅列出有在LISTEN(监听)的服务状态
- -p:显示建立相关连接的程序名
- -r:显示路由信息,路由表
- -e:显示扩展信息,例如uid等
- -s:按各个协议进行统计
10.-c:每隔一个固定时间,执行该netstat命令
LISTEN和LISTENING的状态只有用-a或者-l才能看到
常用命令:
1、列出当前所有的连接。
2、列出所有tcp连接:
3、列出所有udp连接
5、禁用反向域名解析,加快查询速度(TCP连接)
使用-n选项禁用解析功能
6、只列出所有监听端口:
7、只列出所有监听tcp端口:
8、只列出所有udp监听端口:
9、只列出监听uninx端口:
10、显示所有端口的统计信息:
11、显示tcp端口或udp端口的统计信息:
12、输出中显示pid和名称名称
13、netstat 输出中不显示主机,端口和用户名(host、port、user),使用:netstat -n;将会使用数字代替那些名称
同样可以加速输出,因为不用进行比对查询
如果只是不想让某一个被现实,可以使用下面命令:
14、持续输出netstat信息:
15、查看链接某服务端口最多的ip地址(前20个)
16、TCP各种状态列表
统计数量
排序
17、直接统计tcp数量监听的数量
经常用来监听linux的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况。
语法:
- -d:number代表秒数,表示top命令显示的页面更新一次的间隔。默认是5秒。
- -b:以批次的方式执行top.
- -n:与-b配合使用,表示需要进行几次top命令的输出结果。
- -p:指定特定的pid进程号进行观察
在top命令显示的页面还可以输入一下按键执行相应功能(区分大小写):
- ?:显示在top当中可以输入的命令
- P:以CPU的使用资源排序显示
- M:以内存的使用资源排序显示
- N:以pid排序显示
- T:由进程使用的时间累积排序显示
- k:给某一个pid一个信号。可以用来杀死进程
- r:给某个pid重新订制一个nice值(优先级)
- q:退出top(Ctrl+c也可以退出)
xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令道额一个工具。它可以将标准输入或管道中的数据转换成特特定命令的命令行参数,也可以将单行或多行文本输入为其他格式的数据,比如将单行变多行或者多行变单行。xargs的默认命令是echo,默认分隔符是空格。通过xargs的处理,换行和空白都会被替换为空格。
实例:
- -n:指定列数,并多行输出
- -d:制定一个域分隔符,将特定列打散,并制定格式输出
- -I:使用-I选项制定一个替换字符串,这个字符串在xargs进行扩展时会被替换掉,每个参数命令都会被执行一次
- -0:将‘0’作为定界符
AWK:是一种处理文本文件的语言,是一个强大的文本分析工具
相比较屏幕处理的优点,在处理庞大文件时***不会出现内存溢出或是处理缓慢***的问题,通常用来***格式化文本信息***
语法:
选项与参数
- -F fs or --file-separator fs
指定输入文本拆分隔符,fs是一个字符串或者是一个正则表达式。如-F - -v var=value or --asign var=value
赋值一个用户定义变量 - -f scripfile or --file scriptfile
从脚本文件中读取awk命令 - -mf nnn and -mr nnn
对nnn值设置内在限制,-mf选项限制分配给nnn的最大快数目;-mr选项限制记录的最大数目。这两个功能是扩展功能,在标准的awk中不适用 - -W compact or --compat, -W traditional or --traditional
在兼容模式下运行awk。所以gawk的行为与标准和awk是完全一样的,所有的awk扩展都被忽略。 - -W copyleft or --copyleft, -W copyright or --copyright
打印简短的版权信息 - -W help or --help, -W usage or --usage
打印全部的awk选项和每个选项的简短说明 - -W lint or --lint
打印不能向传统unix平台移植的结构的警告 - -W lint-old or --lint-old
打印关于不能向传统unix平台移植的结构的警告 - -W posix
打开兼容模式。但有限制:不识别:/x、函数关键字、func、换吗序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符和=不能代替和=;fflush无效。 - -W re-interval or --re-inerval
允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。 - -W source program-text or --source program-text
使用program-text作为源代码,可与-f命令混合 - -W version or --version
打印bug报告信息的版本
awk处理过程:依次对每一行进行处理,然后输出
awk命令形式:
awk [-F|-f|-v] ‘BEGIN{} //{command1;command2} END{}’ file
[-F|-f|-v] 大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value
‘ ’ 引用代码块
BEGIN 初始化代码块,在对每一行进行处理前,初始化代码,主要是引用全局变量,设置FS分隔符。
// 匹配代码块,可以是字符串或正则表达式
{} 命令代码块,包含一条或多条命令
; 多条命令使用的分隔符
END 结尾代码块,在对每一块进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息。
特殊要点:
- $0 表示整个当前行
- $1 每一行第一个字段
- NF 字段数量变量
- NR 每行的记录号,多文件记录递增
- FNR 与NF类似,不过多文件记录不递增,每个文件都从1开始
- 制表符
- 换行符
- FS BEGIN时定义分隔符
- RS 输入的记录分隔符,默认为换行符(即文本是安一行一行输入)
- ~ 匹配,与==相比不是精确比较
- !~ 不匹配,不精确比较
- == 等于,必须全部相等,精确比较
- != 不等于,精确比较
- && 逻辑与
- || 逻辑或
-
- /[0-9][0-9]+/ 两个或两个以上数字
- /[0-9][0-9]*/ 一个或一个以上数字
- FILENAME 文件名
- OFS 输出字段分隔符,默认也是空格,可以改为制表符等
- ORS 输出的记录分隔符。默认为换行符,即处理结果也是一行一行输出到屏幕
- -F’[:#/]’ 定义三个分隔符
print & $0
print 是awk打印指定内容的主要命令
awk ‘{print}’ /etc/passwd == awk ‘{print $0}’ /etc/passwd
awk ‘{print " "}’ /etc/passwd //不输出passwd的内容,而是输出相同个数的空行,进一步解释了awk是一行一行处理文本
awk ‘{print “a”}’ /etc/passwd //输出相同个数的a行,一行只有一个a字母
awk -F: ‘{print $1; print $2}’ /etc/passwd //将每一行的前二个字段,分行输出,进一步理解一行一行处理文本
awk -F: ‘{print $1,$3,$6}’ OFS=" " /etc/passwd //输出字段1,3,6,以制表符作为分隔符
-f指定脚本文件
awk -f script.awk file
BEGIN{
FS=":"
}
{print $1} //效果与awk -F":" '{print $1}'相同,只是分隔符使用FS在代码自身中指定
awk ‘BEGIN{X=0} /^$/{ X+=1 } END{print “I find”,X,“blank lines.”}’ test
I find 4 blank lines.
ls -l|awk ‘BEGIN{sum=0} !/^d/{sum+=$5} END{print “total size is”,sum}’ //计算文件大小
total size is 17487
-F指定分隔符
$1 指指定分隔符后,第一个字段,$3第三个字段, 是制表符
一个或多个连续的空格或制表符看做一个定界符,即多个空格看做一个空格
awk -F":" ‘{print $1 $3}’ /etc/passwd //$1与$3相连输出,不分隔
awk -F":" ‘{print $1,$3}’ /etc/passwd //多了一个逗号,$1与$3使用空格分隔
awk -F":" ‘{print $1 " " $3}’ /etc/passwd //$1与$3之间手动添加空格分隔
awk -F":" ‘{print “Username:” $1 “ Uid:” $3 }’ /etc/passwd //自定义输出
awk -F: ‘{print NF}’ /etc/passwd //显示每行有多少字段
awk -F: ‘{print $NF}’ /etc/passwd //将每行第NF个字段的值打印出来
awk -F: ‘NF==4 {print }’ /etc/passwd //显示只有4个字段的行
awk -F: ‘NF>2{print $0}’ /etc/passwd //显示每行字段数量大于2的行
awk ‘{print NR,$0}’ /etc/passwd //输出每行的行号
awk -F: ‘{print NR,NF,$NF," ",$0}’ /etc/passwd //依次打印行号,字段数,最后字段值,制表符,每行内容
awk -F: ‘NR==5{print}’ /etc/passwd //显示第5行
awk -F: ‘NR5 || NR6{print}’ /etc/passwd //显示第5行和第6行
route -n|awk ‘NR!=1{print}’ //不显示第一行
//匹配代码块
//纯字符匹配 !//纯字符不匹配 ~//字段值匹配 !~//字段值不匹配 ~/a1|a2/字段值匹配a1或a2
awk ‘/mysql/’ /etc/passwd
awk ‘/mysql/{print }’ /etc/passwd
awk ‘/mysql/{print $0}’ /etc/passwd //三条指令结果一样
awk ‘!/mysql/{print $0}’ /etc/passwd //输出不匹配mysql的行
awk ‘/mysql|mail/{print}’ /etc/passwd
awk ‘!/mysql|mail/{print}’ /etc/passwd
awk -F: ‘/mail/,/mysql/{print}’ /etc/passwd //区间匹配
awk ‘/[2][7][7]*/{print $0}’ /etc/passwd //匹配包含27为数字开头的行,如27,277,2777…
awk -F: ‘$1~/mail/{print $1}’ /etc/passwd //$1匹配指定内容才显示
awk -F: ‘{if($1~/mail/) print $1}’ /etc/passwd //与上面相同
awk -F: ‘$1!~/mail/{print $1}’ /etc/passwd //不匹配
awk -F: ‘$1!~/mail|mysql/{print $1}’ /etc/passwd
必须用在{}中,且比较内容用()扩起来
awk -F: ‘{if($1~/mail/) print $1}’ /etc/passwd //简写
awk -F: ‘{if($1~/mail/) {print $1}}’ /etc/passwd //全写
awk -F: ‘{if($1~/mail/) {print $1} else {print $2}}’ /etc/passwd //if…else…
条件表达式
== != > >=
awk -F":" ‘$1==“mysql”{print $3}’ /etc/passwd
awk -F":" ‘{if($1==“mysql”) print $3}’ /etc/passwd //与上面相同
awk -F":" ‘$1!=“mysql”{print $3}’ /etc/passwd //不等于
awk -F":" ‘$3>1000{print $3}’ /etc/passwd //大于
awk -F":" ‘$3>=100{print $3}’ /etc/passwd //大于等于
awk -F":" ‘$3<1{print $3}’ /etc/passwd //小于
awk -F":" ‘$3<=1{print $3}’ /etc/passwd //小于等于
逻辑运算符
&& ||
awk -F: ‘$1~/mail/ && $3>8 {print }’ /etc/passwd //逻辑与,$1匹配mail,并且$3>8
awk -F: ‘{if($1~/mail/ && $3>8) print }’ /etc/passwd
awk -F: ‘$1~/mail/ || $3>1000 {print }’ /etc/passwd //逻辑或
awk -F: ‘{if($1~/mail/ || $3>1000) print }’ /etc/passwd
数值运算
awk -F: ‘$3 > 100’ /etc/passwd
awk -F: ‘$3 > 100 || $3 < 5’ /etc/passwd
awk -F: ‘$3+$4 > 200’ /etc/passwd
awk -F: ‘/mysql|mail/{print $3+10}’ /etc/passwd //第三个字段加10打印
awk -F: ‘/mysql/{print $3-$4}’ /etc/passwd //减法
awk -F: ‘/mysql/{print $3*$4}’ /etc/passwd //求乘积
awk ‘/MemFree/{print $2/1024}’ /proc/meminfo //除法
awk ‘/MemFree/{print int($2/1024)}’ /proc/meminfo //取整
输出分隔符OFS
awk ‘$6 ~ /FIN/ || NR==1 {print NR,$4,$5,$6}’ OFS=" " netstat.txt
awk ‘$6 ~ /WAIT/ || NR==1 {print NR,$4,$5,$6}’ OFS=" " netstat.txt
//输出字段6匹配WAIT的行,其中输出每行行号,字段4,5,6,并使用制表符分割字段
输出处理结果到文件
①在命令代码块中直接输出 route -n|awk ‘NR!=1{print > “https://blog.csdn.net/weixin_41092139/article/details/fs”}’
②使用重定向进行输出 route -n|awk ‘NR!=1{print}’ > https://blog.csdn.net/weixin_41092139/article/details/fs
格式化输出
netstat -anp|awk ‘{printf “%-8s %-8s %-10s
printf表示格式输出
%格式化输出分隔符
-8长度为8个字符
s表示字符串类型
打印每行前三个字段,指定第一个字段输出字符串类型(长度为8),第二个字段输出字符串类型(长度为8),
第三个字段输出字符串类型(长度为10)
netstat -anp|awk ‘$6==“LISTEN” || NR==1 {printf “%-10s %-10s %-10s
netstat -anp|awk ‘$6==“LISTEN” || NR==1 {printf “%-3s %-10s %-10s %-10s ”,NR,$1,$2,$3}’
awk -F: ‘{if($3>100) print “large”; else print “small”}’ /etc/passwd
large
awk -F: ‘BEGIN{A=0;B=0} {if($3>100) {A++; print “large”} else {B++; print “small”}} END{print A," ",B}’ /etc/passwd
awk -F: ‘{if($3<100) next; else print}’ /etc/passwd //小于100跳过,否则显示
awk -F: ‘BEGIN{i=1} {if(i<NF) print NR,NF,i++ }’ /etc/passwd
awk -F: ‘BEGIN{i=1} {if(i<NF) {print NR,NF} i++ }’ /etc/passwd
另一种形式
awk -F: ‘{print ($3>100 ? “yes”:“no”)}’ /etc/passwd
awk -F: ‘{print ($3>100 ? $3": yes":$3": no")}’ /etc/passwd
while语句
awk -F: ‘BEGIN{i=1} {while(i<NF) print NF,$i,i++}’ /etc/passwd
7 root 1
7 x 2
7 0 3
7 0 4
7 root 5
7 /root 6
数组
netstat -anp|awk ‘NR!=1{a[$6]++} END{for (i in a) print i," ",a[i]}’
netstat -anp|awk ‘NR!=1{a[$6]++} END{for (i in a) printf “%-20s %-10s %-5s ”, i," ",a[i]}’
9523 1
9929 1
LISTEN 6
7903 1
3038/cupsd 1
7913 1
10837 1
9833 1
应用1
awk -F: ‘{print NF}’ helloworld.sh //输出文件每行有多少字段
awk -F: ‘{print $1,$2,$3,$4,$5}’ helloworld.sh //输出前5个字段
awk -F: ‘{print $1,$2,$3,$4,$5}’ OFS=’ ’ helloworld.sh //输出前5个字段并使用制表符分隔输出
awk -F: ‘{print NR,$1,$2,$3,$4,$5}’ OFS=’ ’ helloworld.sh //制表符分隔输出前5个字段,并打印行号
应用2
awk -F’[:#]’ ‘{print NF}’ helloworld.sh //指定多个分隔符: #,输出每行多少字段
awk -F’[:#]’ ‘{print $1,$2,$3,$4,$5,$6,$7}’ OFS=’ ’ helloworld.sh //制表符分隔输出多字段
应用3
awk -F’[:#/]’ ‘{print NF}’ helloworld.sh //指定三个分隔符,并输出每行字段数
awk -F’[:#/]’ ‘{print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12}’ helloworld.sh //制表符分隔输出多字段
应用4
计算/home目录下,普通文件的大小,使用KB作为单位
ls -l|awk ‘BEGIN{sum=0} !/^d/{sum+=$5} END{print “total size is:”,sum/1024,“KB”}’
ls -l|awk ‘BEGIN{sum=0} !/^d/{sum+=$5} END{print “total size is:”,int(sum/1024),“KB”}’ //int是取整的意思
应用5
统计netstat -anp 状态为LISTEN和CONNECT的连接数量分别是多少
netstat -anp|awk ‘$6~/LISTEN|CONNECTED/{sum[$6]++} END{for (i in sum) printf “%-10s %-6s %-3s ”, i," ",sum[i]}’
应用6
统计/home目录下不同用户的普通文件的总数是多少?
ls -l|awk ‘NR!=1 && !/^d/{sum[$3]++} END{for (i in sum) printf “%-6s %-5s %-3s ”,i," ",sum[i]}’
mysql 199
root 374
统计/home目录下不同用户的普通文件的大小总size是多少?
ls -l|awk ‘NR!=1 && !/^d/{sum[$3]+=$5} END{for (i in sum) printf “%-6s %-5s %-3s %-2s ”,i," ",sum[i]/1024/1024,“MB”}’
应用7
输出成绩表
awk ‘BEGIN{math=0;eng=0;com=0;printf “Lineno. Name No. Math English Computer Total ”;printf “------------------------------------------------------------ ”}{math+=$3; eng+=$4; com+=$5;printf “%-8s %-7s %-7s %-7s %-9s %-10s %-7s ”,NR,$1,$2,$3,$4,$5,$3+$4+$5} END{printf “------------------------------------------------------------ ”;printf “%-24s %-7s %-9s %-20s ”,“Total:”,math,eng,com;printf “%-24s %-7s %-9s %-20s ”,“Avg:”,math/NR,eng/NR,com/NR}’ test0
[root@localhost home]# cat test0
Marry 2143 78 84 77
Jack 2321 66 78 45
Tom 2122 48 77 71
以上就是本篇文章【Linux ps、netstat、awk】的全部内容了,欢迎阅览 ! 文章地址:http://dfvalve.xrbh.cn/quote/1985.html 行业 资讯 企业新闻 行情 企业黄页 同类资讯 网站地图 返回首页 迅博思语资讯移动站 http://keant.xrbh.cn/ , 查看更多