【Linux】“grep -v grep”命令的作用 + 为什么需要使用该命令

本文详细解析了Shell脚本中使用ps-ef|greptest_server|grep-vgrep|wc-l命令的原理,解释了为何需要反向过滤包含grep的项,以及如何正确地过滤并统计包含特定关键字的进程个数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简介

我们经常会在shell脚本中见到如下命令:"ps -ef | grep test_sever | grep -v grep | wc -l",各子命令其作用如下

  • ps -ef 指令用来查询所有进程;
  • grep test_server 通过管道来过滤指定 test_server 进程;
  • grep -v 是反向查询的意思,即过滤出不包含 -v 参数后指定字符的信息;
  • grep -v grep 的作用是即反向过滤除结果集中包含 grep 的项;
  • wc -l 是统计结果的行数

整条指令的作用就是,过滤并统计包含 "test_server" 关键字的进程个数。那么这里会有很多人不太理解为什么需要去除包含 grep 的项,什么是包含 grep 的项???请继续往下看...

二、为什么需要"grep -v grep"

上面的指令在查找包含 "test_server" 关键字的相关进程时用到了 "grep" 命令,该命令执行的时候带有指定查找的进程参数即 "grep test_server",而查找进程的 "grep test_server" 调用本身也是一个进程,不太理解??继续往下看:

例如 这条命令前面的两个子部分:ps -ef | grep test_server 其实是分两步执行的

  • 先执行 ps -ef 统计所有进程信息,"-e" 参数代表显示所有进程,"-f" 参数代表全格式;
  • 再执行 grep test_server 这个命令过滤进程,该命令本身执行的时候也是一个进程,并也带有 test_server 关键字,所以其会出现在最后输出的进程信息里;
  • 但是我们要查找的是 test_server 进程,显然上面的 grep test_server 进程并不是我们要找的进程,所以我们需要把 grep test_server 这个进程过滤掉,才是最后的结果;

怎么过滤呢,肯定不能再用 test_server 做关键字,而是要用 grep 做关键字进行反向过滤,即查找 test_server 进程的话需要按如下格式书写:

ps -ef | grep test_server | grep -v grep
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值