Linux中grep -v grep命令的作用

今天在shell脚本中遇到了ps aux | head -1 && ps aux | grep proc | grep -v grep这个命令,我查阅了资料,终于搞懂了这个命令。各子命令其作用如下:

  • ps aux:显示所有的进程。
  • head -1:打印标头。
  • grep proc:显示proc进程。
  • grep -v:反向查询,显示不含-v参数后指定字符的信息。
  • grep -v grep:显示不包含grep的进程。

整条指令的作用就是,显示包含"proc"关键字的进程。这里很多人不理解grep -v grep的作用到底是什么。

为什么需要grep -v grep?

因为上面的命令带有指定参数grep proc,查找包含"proc"关键字的进程,该命令执行时,查找进程的"grep proc"的调用本身也是一个进程,那么它也会显示grep proc这个进程。

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

  • 先执行ps aux统计所有进程信息。
  • 再执行grep proc这个命令过滤进程,该命令本身就是一个进程且带关键字"proc",所以最后会在输出信息当中。但我们要的是proc进程,显然我们需要过滤掉grep proc进程。

所以我们用grep做关键字,反向查询,查询不含grep关键字的进程即grep proc进程。

你可能感兴趣的:(Linux,linux,服务器,运维)