В чем смысл символа `|` в оболочке?

Cron требует, чтобы команда имела абсолютный путь /bin/mv.

Кроме того, поскольку вы запускаете эту команду при запуске, ~ также не будет работать, потому что это указывает на домашний каталог пользователя. Вместо этого используйте /home/user_name/Downloads и /home/user_name/Torrent-Backup/. Или запустите после входа в систему.

1
задан 1 December 2015 в 19:39

3 ответа

Он называется pipe. Он дает выход первой команды в качестве входа ко второй команде.

В вашем случае это означает: результат sudo ps -ef подается как вход grep processname

[d3 ] 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 May 2018 в 15:22
  • 1
    хорошо, что -v grep, что он делает. – Aamir 1 December 2015 в 16:17
  • 2
    Хорошее объяснение, но мне нужна помощь в том, как -v grep функционирует. – Aamir 1 December 2015 в 16:25
  • 3
    О, я понимаю, почему используется grep -v. Отфильтровать последнюю строку. – Pilot6 1 December 2015 в 16:25
  • 4
    @Aamir См. Мой ответ. grep -v фильтрует выходные линии, содержащие шаблон. – Pilot6 1 December 2015 в 16:26
  • 5
    Вы также можете добавить, что вы можете использовать несколько каналов. Например. echo "foobar" | grep foo | grep bar – Michael 1 December 2015 в 18:42

Я попытаюсь ответить на этот вопрос прямолинейным практическим ответом:

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

как насчет подсчета файлов в каталоге? simple:

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

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

cat someFile | wc -l

что, если я хочу что-то искать? «grep» может искать вхождения строк:

cat someFile | grep aRandomStringYouWantToSearchFor

вы просто перенаправляете вывод команды слева от трубы на команду справа от трубы.

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

cat someFile | grep aRandomStringYouWantToSearchFor | wc -l

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

fortune | cowsay

7
ответ дан 23 May 2018 в 15:22
  • 1
    Да, трубы забавные, +1, но, пожалуйста, измените примеры: UUOC . – kos 1 December 2015 в 20:11
  • 2
    Например: grep -c "aRandomStringYouWantToSearchFor" "someFile" ;-) – Sadi 1 December 2015 в 20:39
  • 3
    ОФК. но с целью простоты ... вопросник не кажется глубже в grep, например :) – Gewure 1 December 2015 в 21:22
  • 4
    Честно говоря, многим вашим примерам не нужны трубы. Вы слышали о демографизации? Вы используете cat и pipe, когда многие команды принимают файлы как параметры напрямую: например cat someFile | grep aRandomStringYouWantToSearchFor должен быть grep aRandomStringYouWantToSearchFor someFile – Captain Lepton 2 December 2015 в 21:39
  • 5
    ребята .. я знаю. если вы прочтете комментарии, капитан, вы бы прочитали мой ответ. Парень, который задавал вопросы, не понимает РЕАЛЬНЫХ приложений трубы - он даже не знает, что такое grep. так я дам ему этот пример? kill $(ps aux | awk '/someString/ { print $2}' | sed -n '1p') нет, потому что это не будет служить цели вообще. – Gewure 3 December 2015 в 13:02
Я использовал эту команду только для получения 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 May 2018 в 15:22
  • 1
    Не используйте kill -9, если вы специально не знаете, что никакой другой сигнал не будет работать. См. Также iki.fi/era/unix/award.html#kill – tripleee 1 December 2015 в 16:42
  • 2
    @ tripleee OP заявили, что хотят убить процесс. – kos 1 December 2015 в 16:44
  • 3
    Это то, что делает kill. Указание -9 является дополнительной и наиболее опасной дополнительной опцией. – tripleee 1 December 2015 в 16:44
  • 4
    @tripleee Я считаю, что путаница возникает из-за терминологии; мне kill = SIGKILL, а не SIGTERM. – kos 1 December 2015 в 16:49
  • 5
    Для большинства людей я ожидал бы "kill" означает kill, простой и простой. Любая терминология в стороне, ваш ответ не должен рекомендовать людям использовать опцию -9, если вы не станете мягким предостережением. – tripleee 1 December 2015 в 16:50

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

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