06.命令的组合使用

命令的组合使用

1.查询当前整个系统每个进程的线程数

我们经常遇到这样的问题,比如某台服务器的CPU 使用率飙升,通过top命令查看是某个程序(例如java)占用的cpu比较大,现在需要查询java各个进程下的线程数情况。可以通这一个命令组合实现:

for pid in $(ps -ef|grep -v grep|grep "java"|awk '{print $2}');do echo ${pid} > /tmp/a.txt ;cat /proc/${pid}/status|grep Threads > /tmp/b.txt ; paste /tmp/a.txt /tmp/b.txt;done|sort -k3 –rn

先解释下这个脚本:

#这部分是获取${pid}变量为 java 进程的 pid 号。
for pid in $(ps -ef|grep -v grep|grep java |awk '{print $2}')

这部分是将 java 进程的 pid 号都打印到/tmp/a.txt 文件中。
echo ${pid} > /tmp/a.txt

这部分是将各个 pid 进程号下的线程信息打印到/tmp/b.txt 文件中。
cat /proc/${pid}/status|grep Threads > /tmp/b.txt

这部分是以列的形式展示a.txt和b.txt文件中的信息。
paste /tmp/a.txt /tmp/b.txt

这部分是对输出的信息进行排序,其中,-k3 表示以第三列进行排序,“-rn”表示降序排列。
sort -k3 -rn

将上面命令组合放入系统执行完毕后,输入内容如下:
在这里插入图片描述

从输出可以看出,第一列显示的是 java 的进程号,最后一列显示的每个 java 进程对应的线程数量。这个例子是一个for循环加上ps命令和sort命令综合应用的实例。

2.如何检测系统中的僵尸进程并kill掉

要查找系统中的僵尸进程,有多种方法,这里给出一种命令行探测僵尸进程的方法:

[root@qu ~]# ps -e -o stat,ppid,pid,cmd | egrep '^[Zz]'
Z	10808 10812 [java] <defunct>

介绍下用到的几个参数:

  • -e:参数用于列出所有的进程
  • -o:参数用于设定输出格式,这里只输出进程的 stat(状态信息)、ppid(父进程 pid)、pid(当前进程的 pid),cmd(即进程的可执行文件。
  • egrep:是 linux 下的正则表达式工具
  • ‘[Zz]’:这是正则表达式,表示第一个字符的位置,[Zz],表示小写 z或者大写的Z字母,即表示第一个字符为Z或者z开头的进程数据,只所以这样是因为僵尸进程的状态信息以Z 或者z字母开头。

找到僵尸进程的 pid 后,直接通过”kill -9 pid“命令杀掉即可,但是如果僵尸进程很多的话,就会很繁琐,因此,还需要一个批量删除僵尸进程的办法:

ps -e -o stat,ppid,pid,cmd | grep -e '^[Zz]' | awk '{print $2}' | xargs kill -9

这是个命令组合,通过管道实现命令的组合应用。“grep -e”相当于 egrep命令。“awk ‘{print $2}’ ”是将前面命令的输出信息进行过滤,仅仅输出第二列的值,而第二列就是进程的 ppid。“xargs kill -9”这是将得到的 ppid 传给“kill -9”作为参数,也就是kill 掉这些ppid。xargs命令可以将标准输入转成各种格式化的参数,这里是将管道的输出内容作为参数传递给kill命令。

其实这个命令组合是将僵尸进程的父进程杀掉,进而关闭僵尸进程的,为什么要这么做呢,其实一般僵尸进程很难直接用kill 杀死,因为僵尸进程已经是死掉的进程,它不能再接收任何信号。所以,需要通过 kill 僵尸进程的父进程,这样父进程杀掉后,僵尸进程就成了”孤儿进程”,而所有的孤儿进程都会交给系统的 1 号进程(init 或 systemd)收养,1 号进程会周期性地去调用wait系统调用来清除这些僵尸进程。因此,我们可以发现,父进程杀掉之后,僵尸进程也跟着消失,其实是1号进程作用的结果!

3.如何查看当前占用CPU 或内存最多的几个进程

这个应用需求在服务器的问题排查和故障处理上使用率非常高,要获取这些信息,只需要一些命令组合即可实现,可以说非常简单。

1)获取当前系统占用CPU最高的前10个进程最简单的方式是通过ps命令组合实现,例如:

[root@qu ~]# ps aux|head -1;ps aux|sort -rn -k3|head -10

该命令组合主要分为两个部分:

  • ps aux|head -1
  • ps aux|sort -rn -k3|head -10

其中,第一句主要是为了获取标题(USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND)信息。而“head:-N”可以指定显示的行数,默认显示 10 行。

第二个命令是一个输出加排序组合,ps 参数的 a 指代 all,表示所有的进程,u 指代 user id,就是执行该进程的用户
id,x
指代显示所有程序,不以终端机来区分。

接下来是 sort 命令,其中:

  • r 指代 reverse,这里是指反向比较结果,输出时默认从小到大,反向后从大到小。
  • n 指代 numberic sort,根据其数值排序。
  • k 代表根据哪一列进行排序,后面的数字 3 表示按照第 3 列排序。本例中,可以看到%CPU 在第 3 个位置,因此k3 表示根据%CPU 的数值进行由大到小的排序。

接下来的“|”为管道符号,将查询出的结果导到下面的命令中进行下一步的操作。最后的“head -10”命令获取默认前 10 行数据。

2)获取当前系统占用内存最高的前10个进程

同理,要获取系统占用内存最高的前10个进程,方法与获取cpu方法一致,命令组合修改为如下即可:

[root@qu ~]# ps aux|head -1;ps aux|sort -rn -k4|head -10

这里仅仅修改了k3位k4,4代表第4列排序。本例中,可以看到%MEM在第4个位置,因此k4表示根据% MEM的数值进行由大到小的排序。

4.如何对文件进行连接、合并、排序、去重

4.1.文件连接命令 join

join 命令用于将两个文件中,指定列中内容相同的行连接起来。找出两个文件中,指定列内容相同的行,并加以合并,再输出到标准输出设备。

常用的参数以及含义如下表所示:

参数

含义

-t

join 默认以空格符分隔数据,并且比对第一个字段的数据,如果两个文件相同,则将两笔数据联成一行,且第一个字段放在行首

-i

忽略大小写的差异

-1

这个是数字的 1 ,代表第一个文件要用哪个字段来分析的意思

-2

代表第二个文件要用哪个字段来分析的意思

看一个例子:file1 文件的内容:

[root@localhost ~]# cat file1.txt 
root:x:0:0:root:/root:/bin/bash 
bin:x:1:1:bin:/bin:/sbin/nologin 
daemon:x:2:2:daemon:/sbin:/sbin/nologin 
adm:x:3:4:adm:/var/adm:/sbin/nologin 
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 
sync:x:5:0:sync:/sbin:/bin/sync 
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

file2文件的内容:

[root@localhost ~]# cat file2.txt 
root:x:0:
bin:x:1: 
daemon:x:2: 
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:

要从 file1.txt 和 file2.txt 中可以看出,file1.txt 中以“:“分割的第三列和 file2.txt 中以“:“分割的第三列内容相同,因此这两个文件可以合并整合在一起,看下面这个操作:

[root@localhost ~]#join -t ':' -1 3 file1.txt -2 3  file2.txt 
0:root:x:0:root:/root:/bin/bash:root:x: 
1:bin:x:1:bin:/bin:/sbin/nologin:bin:x: 
2:daemon:x:2:daemon:/sbin:/sbin/nologin:daemon:x: 
3:adm:x:4:adm:/var/adm:/sbin/nologin:sys:x: 
4:lp:x:7:lp:/var/spool/lpd:/sbin/nologin:adm:x: 
5:sync:x:0:sync:/sbin:/bin/sync:tty:x:
6:shutdown:x:0:shutdown:/sbin:/sbin/shutdown:disk:x:

可以看出,通过-t选项指定了分隔符后,输出的内容是将file1.txt文件的第三列和file2.txt 文件的第三列进行整合的结果,两个文件合并后,相同的字段部分被移动到每行最前面了。

4.2.合并文件列命令paste

paste 命令用于合并文件的列。它会把每个文件以列对列的方式,一列列地加以合并。paste 比join 简单很多,它其实就是直接将两个文件中相同的两行贴在一起,且中间以 [tab]键隔开而已。

例如对上面的 file1.txt 和file2.txt 进行 paste 合并,执行结果如下:

[root@qu ~]# paste file1.txt file2.txt 
root:x:0:0:root:/root:/bin/bash 	root:x:0:
bin:x:1:1:bin:/bin:/sbin/nologin 	bin:x:1: 
daemon:x:2:2:daemon:/sbin:/sbin/nologin 	daemon:x:2: 
adm:x:3:4:adm:/var/adm:/sbin/nologin 	sys:x:3:
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 	adm:x:4:
sync:x:5:0:sync:/sbin:/bin/sync 	tty:x:5:
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown	disk:x:6:
halt:x:7:0:halt:/sbin:/sbin/halt	lp:x:7:
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin	mem:x:8:

接着,再看一个组合例子:

[root@qu ~]# cat /etc/group|paste /etc/passwd /etc/shadow -|head -n 3
root:x:0:0:root:/root:/bin/bash	root:$6$itBvz.u4iA5xf22B$LIlL6/QaOUOlEk8THDtlVYv0jU9ByBDIqyaKqaXBvpLbKnez359YtwnrRaXkHdkY9t/lhPe5xzvmfGaprwFEh/::0:99999:7:::	root:x:0:
bin:x:1:1:bin:/bin:/sbin/nologin	bin:*:18353:0:99999:7:::	bin:x:1:
daemon:x:2:2:daemon:/sbin:/sbin/nologin	daemon:*:18353:0:99999:7:::	daemon:x:2:

这个例子的重点在那个“-”的使用,那玩意代表标准输入,在这里会接收/etc/group 的内容,因为通过“cat /etc/group”将此文件内容送到了标准输入,而“-”刚好接收了这个内容。因此,这个组合其实是三部分文件内容的合并,分别是/etc/passwd、/etc/shadow和/etc/group三个文件内容合并的结果,而每行内容中通过默认的[tab]键隔开。

4.3.文本内容排序命令sort

sort 这个命令很好用,主要用做排序,基本使用格式为:

sort [-t 分隔符] [-kn1,n2] [-nru]

参数含义如下表所示:


参数

含义

-n

使用纯数字进行排序,默认是以字母顺序来排序的

-r

反向排序

-u

就是 uniq ,相同的数据中,仅出现一行代表

-t

分隔符,默认是用 [tab] 键来分隔

-k

以那个区间(field)来进行排序的意思

先看最简单的一个例子:

[root@qu ~]# cat /etc/passwd | sort | head 
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin

这是最简单的一个sort排序,没指定任何参数,所以默认以英文字母顺序进行排序, head是默认显示前10行数据,要显示指定行数据,可以通过“head -N”实现。

继续看下面这个例子:

[root@qu ~]# cat /etc/passwd | sort -t ':' -k3 -n | head
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

这个例子是通过指定分隔符’:‘,然后对指定的列进行排序,k3表示以’:'作为分隔符的第三列,也就是以第三列为准进行排序,由于第三列都是数字,所以还需要“-n”参数。


4.4.检查并删除文件中的重复行命令uniq

uniq主要用于检查及删除文本文件中重复出现的行,一般与sort命令结合使用,常用参数如下表所示:

参数

含义

-c 或–count

在每列旁边显示该行重复出现的次数

-d:或–repeated

仅显示重复出现的行列

看下面例子:这是ixdbafile1 文件的内容:

[root@qu ~]# cat ixdbafile1
server 188
server 188
server 188
jenkins 66
jenkins 66
oracle 90
oracle 90
oracle 90
saybye 122
saybye 122
saybye 122
saybye 122

可以看到有重复行,并且重复行都是相邻的,要删除重复行,uniq 就派上用场了,看下面例子:

[root@qu ~]# uniq ixdbafile1
server 188
jenkins 66
oracle 90
saybye 122

可以看到,已经删除了重复行。如果要统计重复行出现的次数,加上“-c”参数即可,看下面这个例子:

[root@qu ~]# uniq ixdbafile1 -c
3 server 188
2 jenkins 66
3 oracle 90
4 saybye 122

上面的 ixdbafile1 文件有些特殊,因为实际使用中,重复行不可能都是相邻在一起的,那继续来看另一个文件内容:

[root@qu ~]# cat ixdbafile2
server 188
saybye 122
jenkins 66
server 188
saybye 122
jenkins 66
server 188
saybye 122
jenkins 66
oracle 90
redis 126

这是个重复行不相邻的文件,实际环境中,很多都是类似这样的文件,再通过uniq看看是否能够删除重复行,执行如下操作:

[root@qu ~]# uniq ixdbafile2
server 188
saybye 122
jenkins 66
server 188
saybye 122
jenkins 66
server 188
saybye 122
jenkins 66
oracle 90
redis 126

可以看到,文件原样输出了,也就是说 uniq 对这些重复行不相邻的内容无能为力了,怎么办呢,现在是时候该sort出场了,sort 我们知道是排序用的,那就先把这个文件进行排序,这样,重复行不就自动相邻了吗,看下面操作:

[root@qu ~]# sort ixdbafile2
jenkins 66
jenkins 66
jenkins 66
oracle 90
redis 126
saybye 122
saybye 122
saybye 122
server 188
server 188
server 188

经过 sort 排序后,重复行相邻了,接着通过管道后面接 uniq 命令即可过滤删除重复行了,看下面操作:

[root@qu ~]# sort ixdbafile2|uniq
jenkins 66
oracle 90
redis 126
saybye 122
server 188

果然,经过sort排序后,uniq又可以正常工作了,这也是为什么sort经常和uniq一起使用的原因了。

下面这个是使用了 uniq 的“-d”参数,也就是显示重复行有哪些:

[root@qu ~]# sort ixdbafile2|uniq -d
jenkins 66
saybye 122
server 188

几个简单例子,发现 uniq 很简单。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/9377.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jsp 实验12 servlet

一、实验目的 掌握怎样在JSP中使用javabean 二、实验项目内容&#xff08;实验题目&#xff09; 编写代码&#xff0c;掌握servlet的用法。【参考课本 上机实验1 】 三、源代码以及执行结果截图&#xff1a; 源代碼&#xff1a; inputVertex.jsp&#xff1a; <% page lang…

MacOS下载安装JDK8

一、前言 今天给苹果电脑安装JDK环境&#xff0c;后续打算把Mac系统也用起来&#xff0c;也体验一把用苹果系统开发。 JDK就不过多介绍了&#xff0c;大家都是JAVA开发&#xff0c;JDK就是JAVA开发的必要环境。目前已经更新到JDK20了&#xff0c;不过我是不会更新的&#xff0…

Linux|了解如何使用 awk 内置变量

引言 当我们揭开 Awk 功能部分时&#xff0c;我们将介绍 Awk 中内置变量的概念。您可以在 Awk 中使用两种类型的变量&#xff1a;用户定义的变量和内置变量。 内置变量的值已经在 Awk 中定义&#xff0c;但我们也可以仔细更改这些值&#xff0c;内置变量包括&#xff1a; FILEN…

LeNet-5上手敲代码

LeNet-5 LeNet-5由Yann LeCun在1998年提出&#xff0c;旨在解决手写数字识别问题&#xff0c;被认为是卷积神经网络的开创性工作之一。该网络是第一个被广泛应用于数字图像识别的神经网络之一&#xff0c;也是深度学习领域的里程碑之一。 LeNet-5的整体架构&#xff1a; 总体…

免费思维13招之四:主副型思维

免费思维13招之四:主副型思维 本节,给你分享一下产品型思维的第二种子思维:主副型思维 什么是主副型思维呢?传统的主副型思维是指对企业的核心、利润最高的产品进行收费,一些附加品、延伸产品进行让利,赠送给客户。 但是这早已过时了,现在升级之后的产品型思维,就是将…

VisualGDB:Linux静态库项目创建、编译及库的使用

接上篇《VisualGDB&#xff1a;Linux动态库项目创建、编译及库的使用》&#xff0c;静态库的创建和使用与动态库基本无差别&#xff0c;唯一需要做的就是指定项目生成静态库。 一、指定项目生成静态库 二、重新构建和编译项目 这里注意&#xff0c;同样要copy一个libxxx.so格式…

Linux 无名信号量(Semaphore)的使用

目录 一、无名信号量的概念二、无名信号量相关函数三、信号量的使用步骤四、应用场景五、测试代码 一、无名信号量的概念 Linux无名信号量&#xff08;Semaphore&#xff09;   在Linux操作系统中&#xff0c;信号量&#xff08;Semaphore&#xff09;是一种用于进程间或线程…

内网穿透速度慢

内网穿透速度慢原因及优化策略 在计算机网络应用中&#xff0c;内网穿透是一个常见的需求&#xff0c;它允许外部网络访问位于内部网络&#xff08;如企业局域网或家庭网络&#xff09;中的设备或服务。然而&#xff0c;有时用户在进行内网穿透时会遇到速度慢的问题&#xff0…

AI视频教程下载:给企业管理层和商业精英的ChatGpt课程

课程内容大纲&#xff1a; 1-引言 2-面向初学者的生成性人工智能 3-与ChatGPT一起学习提示101 详细介绍了如何使用ChatGPT的六种沟通模式&#xff0c;并提供了各种实际应用场景和示例&#xff1a; **Q&A模式&#xff08;问题与答案模式&#xff09;**&#xff1a; - 这…

打印机处于脱机状态如何恢复到正常状态?最简单!

当打印机一直处于脱机状态但打印机重启了好几遍仍然无效果时&#xff0c;尝试以下方法或许会成功&#xff01; 1.打开设置&#xff0c;在主页界面会有它的推荐设置&#xff0c;如上图&#xff0c;此时只需要点击“打印机和扫描仪”这个方框即可 2.但也并不是每次都会有推荐设置…

从零开始!学习绘制3D表情的详细指南

在2020 年的苹果全球开发者大会(WWDC)&#xff0c;苹果发布了新的 macOS 11(又名 Big Sur)。其中在UI视觉方面macOS Big Sur 系统最大的变化就是图标上&#xff0c; Big Sur更新了很多新设计风格的 3D应用图标&#xff0c;3D设计的确可以提升UI整体的视觉氛围&#xff0c;并且现…

wsl2安装rancher并导入和创建k8s集群

环境准备 安装wsl2点击此文]ubuntu20.04安装docker 点击此文,安装完成后docker镜像仓库改成阿里云镜像加速地址.如果不熟请点击此文 docker 安装rancher 启动wsl,根据官方文档以root身份执行 sudo docker run -d --restartunless-stopped -p 80:80 -p 443:443 --privileged …

《基于GNU-Radio和USRP的雷达通信系统的实现》文献阅读

文章目录 前言一、摘要二、引言三、联合系统实施1、基本原理2、实验方案 四、软件设置1、发射机2、接收机 五、实验结果1、实验设置2、波形3、室内外对比4、不同参数的结果 六、结论七、参考文献八、论文自取九、阅读收获 前言 本文记录《基于GNU-Radio和USRP的雷达通信系统的实…

2024粤港澳青少年信息学创新大赛C++知识点汇总和真题训练

2024粤港澳青少年信息学创新大赛C知识点汇总和真题训练 知识汇总 真题训练 程序设计语言C是一种解释性语言。 A.正确 B.错误 Python是一种编译型语言。 A.正确 B.错误 误 RAM&#xff08;随机存取存储器&#xff09;是一种易失性存储设备。 A.正确 B.错误 Java…

Docker-harbor

一、搭建本地私有仓库 1.1 下载Registry镜像 1.2 添加本地私有仓库配置 1.3 重启服务并运行Registry容器 1.4.容器的操作 1.4.1 拉取Nginx镜像并为镜像打标签 1.4.2 上传到私有仓库 1.4.3 列出私有仓库所有镜像 1.4.4 列出私有仓库的镜像的所有标签 1.4.5 先删除原有…

基于鸢尾花数据集实施自组织神经网络聚类分析

基于鸢尾花数据集实施自组织神经网络聚类分析 1. 自组织神经网络的基础知识2. 鸢尾花数据集的自组织分类3. SOM的无监督聚类 1. 自组织神经网络的基础知识 自组织神经网络也称自组织映射&#xff08;SOM&#xff09;或自组织特征映射&#xff08;SOFM&#xff09;&#xff0c;…

Coze扣子开发指南:用免费API自己创建插件

虽然Coze扣子现在插件商店已经有几百个插件了&#xff0c;但相对于海量人群的众多差异化需求&#xff0c;还是远远不够的。如果插件商店没有合适的插件&#xff0c;其实完成可以自己创建&#xff0c;过程也很简单&#xff0c;不需要编写任何代码。 首先打开个人空间&#xff0…

AcWing 835:Trie字符串统计 ← 字典树(Trie树)模板题

【题目来源】https://www.acwing.com/problem/content/837/【题目描述】 维护一个字符串集合&#xff0c;支持两种操作&#xff1a; ● I x 向集合中插入一个字符串 x&#xff1b; ● Q x 询问一个字符串在集合中出现了多少次。 共有 N 个操作&#xff0c;所有输入的字符…

Linux sudo 指令

sudo命令 概念&#xff1a; sudo是linux下常用的允许普通用户使用超级用户权限的工具&#xff0c;允许系统管理员让普通用户执行一些或者全部的root命令&#xff0c;如halt&#xff0c;reboot&#xff0c;su等。这样不仅减少了root用户的登录和管理时间&#xff0c;同样也提高…

22、Flink 背压下的 Checkpoint处理

1.概述 通常&#xff0c;对齐 Checkpoint 的时长主要受 Checkpointing 过程中的同步和异步两个部分的影响&#xff1b;但当 Flink 作业正运行在严重的背压下时&#xff0c;Checkpoint 端到端延迟的主要影响因子将会是传递 Checkpoint Barrier 到 所有的算子/子任务的时间&…