当前位置: 首页>>技术教程>>正文


shell中‘|’符号的含义是什么?

, ,

问题描述

sudo ps -ef | grep processname 命令中的 | 符号是什么意思?

还有谁能解释一下这个命令吗?我仅使用此命令来获取 PID 并终止该进程,但我也看到了 sudo ps -ef | grep processname | grep -v grep 并且我的印象是 -v grep 就像终止了先前为 grep 生成的 PID 一样。如果是这样的话,它是如何运作的?

最佳方案

它称为 pipe 。它将第一个命令的输出作为第二个命令的输入。

在您的情况下,这意味着:\nsudo ps -ef 的结果作为 grep processname 的输入

sudo ps -ef :\n这列出了所有正在运行的进程。在终端中输入 man ps 了解更多信息。

grep processname \n因此,该进程列表被输入到 grep 中,后者仅搜索 programname 定义的程序。

例子

在我的终端中输入 sudo ps -ef | grep firefox 返回:

parto     6501  3081 30 09:12 ?        01:52:11 /usr/lib/firefox/firefox
parto     8295  3081  4 15:14 ?        00:00:00 /usr/bin/python3 /usr/share/unity-scopes/scope-runner-dbus.py -s web/firefoxbookmarks.scope
parto     8360  8139  0 15:14 pts/24   00:00:00 grep --color=auto firefox

次佳方案

ps -ef | grep processname

它首先运行 sudo ps -ef 并将输出传递给第二个命令。

第二个命令过滤包含单词 “processname” 的所有行。

ps -ef | grep processname | grep -v grep 列出包含 processname 且不包含 grep 的所有行。

根据man grep

-v, --invert-match
              Invert the sense of matching, to select non-matching lines.  (-v
              is specified by POSIX.)

根据man ps

ps displays information about a selection of the active processes.

-e     Select all processes.  Identical to -A.

-f     Do full-format listing. This option can be combined with many
          other UNIX-style options to add additional columns.  It also
          causes the command arguments to be printed.  When used with -L,
          the NLWP (number of threads) and LWP (thread ID) columns will be
          added.  See the c option, the format keyword args, and the
          format keyword comm.

您可以组合参数 -ef ,其含义与 -e -f 相同。

实际上 ps -ef | grep processname 列出了名为 processname 的进程的所有出现。

第三种方案

我将尝试用 straight-forward 实际答案来回答这个问题:

管道 | 让您可以在 shell 中做一些很棒的事情!这是我认为最有用、最强大的一个操作符。

如何计算目录中的文件数?简单的:

ls | wc -l ..将 ls 的输出重定向到 wc(行参数为 -l)

或计算文件中的行数?

cat someFile | wc -l

如果我想搜索一些东西怎么办? ‘grep’ 可以搜索字符串的出现:

cat someFile | grep aRandomStringYouWantToSearchFor

您只需将管道左侧命令的输出重定向到管道右侧的命令即可。

又一层:文件中某件事发生的频率是多少?

cat someFile | grep aRandomStringYouWantToSearchFor | wc -l

您可以使用 |几乎所有的事情:)

fortune | cowsay

第四种方案

\\n

I have used this command only for getting the PID and killing that process

\\n

其他答案已经回答了您的主要问题,但我也想解决这个问题;

一般来说,终止一个进程通常是一种过度杀伤,并使进程分配的资源处于混乱状态,您通常可以终止它;

除此之外,只需使用 pkill 来终止/终止进程即可。 pkill 支持指定确切的进程名称或正则表达式:

pkill -x foo # Terminates process foo
pkill ^foo$ # Terminates process foo
pkill -9 -x foo # Kills process foo
pkill -9 ^foo$ # Kills process foo

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/14425.html,未经允许,请勿转载。