06.命令的组合使用

news2025/1/18 3:28:54

命令的组合使用

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.coloradmin.cn/o/1658801.html

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

相关文章

各种依赖注入和分层解耦

分层解耦 三层架构 controller:控制层&#xff0c;接收前端发送的请求&#xff0c;对请求进行处理&#xff0c;并响应数据 service:业务逻辑层&#xff0c;处理具体业务的逻辑 dao:数据访问&#xff0c;负责数据访问操作&#xff0c;包括数据的增、删、改、查 流程为&…

初阶C语言(8) - 实用的调试技巧

1. 什么是bug? bug 是计算机领域专业术语&#xff0c;是计算机在硬件、软件、协议和系统安全策略上存在的缺陷&#xff0c;攻击者能够在未授权情况下访问的危害&#xff0c;世界最早的一批程序设计师之一&#xff0c;美国的葛丽丝霍波在调试设备时出现故障&#xff0c;拆开继电…

MySQL——变量的定义与使用

新建链接&#xff0c;自带world数据库&#xff0c;里面自带city表格。 DQL # MySQL变量的定义与使用 #1、不允许数字作为开头 #2、只能用_或$符号&#xff0c;不允许使用其他符号 #3、不允许使用关键字或保留字 set userName小可爱; select userName; #标识符只影响当前查询#…

python3.12.0 在Linux 制作镜像包 部署到docker 全过程

项目结构&#xff1a; 比如&#xff0c;在pycharm里需要运行 themain.py 1、上传Linux的目录结构&#xff1a; Dockerfile 文件需要制作&#xff1a; 这里是关键&#xff1a; #基于的基础镜像 FROM python:3.12.0 #代码添加到code文件夹 ADD ./EF_NFCS /code #设置code文…

多客陪玩系统源码APP小程序H5陪玩开发伴游源码游戏陪玩平台源码陪玩平台开发约单源码线下陪玩接单平台app小程序H5源码游戏陪玩app小程序H5开发

出售成品陪玩app小程序H5源码&#xff0c;免费搭建部署和售后服务&#xff0c;并提供源码二开、定制开发等相关服务。 一、陪玩app源码的功能介绍 1、语音聊天: 陪玩app小程序H5源码用户随时创建语音聊天室&#xff0c;实现多用户上麦功能&#xff0c;提高互动聊天体验。 2、游…

说句心里话,别轻易把RFM模型写进简历!

大家好&#xff0c;我是阿粥 我看过很多分析师的简历。 这么多年过去了&#xff0c;简历项目经历里&#xff0c;仍然有不少提到用SQL或者Python进行RFM建模。 项目细节描述各有千秋&#xff0c;但核心逻辑大体绕不开“基于Python对用户数据进行RFM建模&#xff0c;分成x类人群以…

Elasticsearch 索引、类型、文档、分片与副本等核心概念介绍

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《洞察之眼&#xff1a;ELK监控与可视化》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Elasticsearch简介 2、分布式搜索引擎的工作原理…

深入探索数据链路层:网络通信的基石

⭐小白苦学IT的博客主页⭐ ⭐初学者必看&#xff1a;Linux操作系统入门⭐ ⭐代码仓库&#xff1a;Linux代码仓库⭐ ❤关注我一起讨论和学习Linux系统❤ 前言 在网络通信的宏伟世界中&#xff0c;数据链路层扮演着至关重要的角色。它位于物理层和网络层之间&#xff0c;不仅直接…

126.删除链表的倒数第N个节点(力扣)

题目描述 代码解决&#xff08;双指针&#xff09; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, Li…

深入探讨利用大型语言模型的力量的策略 (LLMs)

Note: 提示词工程是一门融合了艺术和科学的学科——它既是对技术的理解&#xff0c;也是对创造力和战略思维的理解。 本文为对LLMS策略分享内容学习后的整理&#xff0c;尝试抛开网上广泛讨论和记录的传统提示词工程技术&#xff0c;展示通过实验学到的新见解&#xff0c;以及…

片冰机工作原理

片冰机工作原理 1、制冰用的水需要加盐(行话叫做加药)至于多少量。看制冰量多少调制泵(柱塞泵)自动调整。 2、制冰机主体分两腔体外腔体内盘的一定密度的铜管。专业术语叫(蒸发腔)就是俗话讲的制冷的东西。 3、外腔体内是一个很规则的圆不锈钢腔体&#xff0c;中心有一三叶刮…

【LAMMPS学习】八、基础知识(6.2)LAMMPS GitHub 教程

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

springcloud服务间调用 feign 的使用

引入依赖包 <!-- 服务调用feign --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>创建调用外部服务的接口 需要使用的地方注入 使用 启动类增…

CTF-密码学基础

概述 密码学(Cryptolopy)&#xff1a;是研究信息系统安全保密的科学 密码学研究的两个方向&#xff1a; 密码编码学(Cryptography)&#xff1a;主要研究对信息进行编码&#xff0c;实现对信息的隐蔽密码分析学(Cryptanalytics)&#xff1a;主要研究加密信息的破译或消息的伪造…

05.网络维护与管理命令

网络维护与管理命令 ifconfig 命令 功能说明 ifconfig 命令用来配置网络或显示当前网络接口状态。类似于 Windows下的ipconfig 命令&#xff0c;同时ifconfig命令必须以root用户来执行。其格式如下&#xff1a; ifconfig [选项] [interface] [inet|up|down|netmask|addr|broad…

论文笔记:DeepMove: Predicting Human Mobility with Attentional Recurrent Networks

WWW 2018 1 Intro 根据对百万级用户群的研究&#xff0c;93%的人类移动是可预测的。 早期的mobility预测方法大多基于模式的。 首先从轨迹中发现预定义的移动模式(顺序模式、周期模式)然后基于这些提取的模式预测未来位置。最近的发展转向基于模型的方法进行流动性预测。 利用…

Spark云计算平台Databricks使用,SQL

创建workspace&#xff1a;Spark云计算平台Databricks使用&#xff0c;创建workspace和Compute计算集群&#xff08;Spark集群&#xff09;-CSDN博客 1 创建schema 选择Calalog&#xff0c;点击Create schema 输入名字&#xff0c;Storage location选择workspace&#xff0c;数…

如何使用IdeaJ2023创建一个JavaWeb项目

开篇 简单整理一下创建JavaWeb项目的步骤&#xff0c;希望能对您有所帮助。 步骤图解 步骤一: 创建项目 此时得到的项目是如图所示的普通Java项目&#xff1a; 步骤二: 在项目中增加web文件夹 点击File -> Project Structure 点击Project Setting -> Modules -> …

2024北京市人工智能大模型行业应用分析报告

来源&#xff1a;北京市科学技术委员会 方向一为基于AIGC技术的智能审计合规研究&#xff0c;由北京银行提出&#xff0c;以 提高审计工作效率和准确性为核心目标&#xff0c;需要参赛企业针对检查内容&#xff0c; 利用大模型技术寻找并给出相关现象涉及的制度名称及相关原文…

2024年去除视频水印的5种方法

如果你从事电影剪辑或者视频编辑工作&#xff0c;你经常需要从优酷、抖音、TikTok下载各种视频片段……。 通常这些视频带有水印和字幕。一些免费软件如CapCut、canva、Filmora也会给你制作的视频打上水印&#xff0c;这些水印嵌入在视频内部。 2024年去除视频水印的5种方法 …