What is the meaning of the '|' symbol in the shell?

What does the | symbol они мочатся in sudo ps -ef | grep processname command?

Also хан anyone please explain this command? I have used this command only for getting the PID and killing that process, but I also saw sudo ps -ef | grep processname | grep -v grep and I am under the impression that -v grep is like killing the previous generated PID for grep. If that's so how does it work?

16
задан 1 December 2015 в 08:39

4 ответа

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.

13
ответ дан 23 November 2019 в 02:26

Это называется 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
35
ответ дан 23 November 2019 в 02:26

Im, собирающийся пытаться ответить на это с простым ответом practial:

канал | позволяет Вам сделать потрясающий материал в оболочке! Это - один единственный оператор, что я рассматриваю самое полезное и могущественное.

как насчет того, чтобы считать файлы в каталоге? простой:

ls | wc -l.. перенаправьте вывод ls к wc параметр остроумия -l для строк

или подсчет строк в файле?

cat someFile | wc -l

, что, если я хочу искать что-то? 'grep' может искать происшествия строк:

cat someFile | grep aRandomStringYouWantToSearchFor

Вы просто перенаправляете вывод команды, оставленной Канала праву команды на канал.

еще один уровень: как часто делает что-то occure в файле?

cat someFile | grep aRandomStringYouWantToSearchFor | wc -l

можно использовать | почти для всего:)

fortune | cowsay

enter image description here

7
ответ дан 23 November 2019 в 02:26

Я использовал эту команду только для того, чтобы получить 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
4
ответ дан 23 November 2019 в 02:26

Другие вопросы по тегам:

Похожие вопросы: