shell 中的 `|` 符号是什么意思?

shell 中的 `|` 符号是什么意思?

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

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

答案1

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

在你的情况下,它的意思是:
的结果sudo ps -ef作为的输入grep processname

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

grep processname
因此,这个进程列表被输入到 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

答案2

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

答案3

我将尝试用一个直接实用的答案来回答这个问题:

管道|可以让你在 shell 中完成很多很棒的事情!这是我认为最有用、最强大的操作符。

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

ls | wc -l..将输出重定向lswcwit-l参数

或者计算文件中的行数?

cat someFile | wc -l

如果我想搜索某些东西怎么办?'grep' 可以搜索字符串的出现位置:

cat someFile | grep aRandomStringYouWantToSearchFor

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

再高一个层次:某个事物在文件中出现的频率是多少?

cat someFile | grep aRandomStringYouWantToSearchFor | wc -l

你几乎可以在所有事情中使用 | :)

fortune | cowsay

在此处输入图片描述

答案4

我仅使用此命令来获取 PID 并终止该进程

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

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

除此之外,只需使用它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

相关内容