Если бы вы помогали кому-то узнать концепцию каналов в командной строке, какой пример вы бы использовали? Пример, который на самом деле появился, был следующим:
cat whatever.txt | less
Я чувствую, что это не лучший пример, а именно потому, что есть только один шаг. Что хорошего, но основополагающего использования |
?
В идеале в примере, который я приведу, будут использоваться программы, которые сами имеют выходы, которые можно запускать независимо, а затем показывать по конвейеру.
command-line
pipe
Мэтью
источник
источник
cat
для этого, так какless whatever.txt
работает просто отлично.Ответы:
Я собираюсь показать вам несколько сложный пример, основанный на сценарии из реальной жизни.
проблема
Допустим, команда
conky
перестала отвечать на моем рабочем столе, и я хочу убить ее вручную. Я немного знаю Unix, поэтому я знаю, что мне нужно выполнить командуkill <PID>
. Для того , чтобы извлечь PID, я могу использоватьps
илиtop
или любой другой инструмент , мое распределение Unix дал мне. Но как я могу сделать это в одной команде?Ответ
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Эта команда работает только в определенных случаях. Не копируйте / вставляйте его в свой терминал и не начинайте его использовать, это может привести к непредсказуемому завершению процессов. Скорее научитесь его строить .
Как это работает
1-
ps aux
Эта команда выведет список запущенных процессов и некоторую информацию о них. Интересная информация заключается в том, что он выведет PID каждого процесса во втором столбце. Вот выдержка из вывода команды на моем ящике:
2-
grep conky
Меня интересует только один процесс, поэтому я использую,
grep
чтобы найти запись, соответствующую моей программеconky
.3-
grep -v grep
Как вы можете видеть на шаге 2, команда
ps
выводитgrep conky
процесс в своем списке (в конце концов, это запущенный процесс). Для того, чтобы отфильтровать его, я могу запуститьgrep -v grep
. Опция-v
говорит,grep
чтобы соответствовать всем строкам, за исключением тех, которые содержат шаблон.NB: Я хотел бы знать, как выполнить шаги 2 и 3 за один
grep
звонок.4-
awk '{print $2}'
Теперь, когда я изолировал свой целевой процесс. Я хочу получить его PID. Другими словами, я хочу получить 2-е слово вывода. К счастью для меня, большинство (все?) Современных систем предоставляют какую-то версию языка
awk
сценариев, который творит чудеса с табличными данными. Наша задача становится такой же простой, какprint $2
.5-
xargs kill
У меня есть PID. Все, что мне нужно, это передать его
kill
. Для этого я буду использоватьxargs
.xargs kill
будет читать из ввода (в нашем случае из канала), сформировать команду, состоящую изkill <items>
(<items>
независимо от того, будет ли она читать из ввода), а затем выполнить созданную команду. В нашем случае это выполнитсяkill 1948
. Миссия выполнена.Заключительные слова
Обратите внимание, что в зависимости от того, какую версию unix вы используете, некоторые программы могут вести себя немного по-разному (например,
ps
может выводить PID в столбце $ 3). Если что-то кажется неправильным или другим, прочитайте документацию вашего поставщика (или, лучше,man
страницы). Также будьте осторожны, так как длинные трубы могут быть опасны. Не делайте никаких предположений, особенно при использовании таких команд, какkill
илиrm
. Например, если был другой пользователь с именем 'conky' (или 'Aconkyous'), моя команда может также убить все его запущенные процессы!То, что я говорю, будьте осторожны, особенно для длинных труб. Всегда лучше построить это интерактивно, как мы делали здесь, чем делать предположения и сожалеть позже.
источник
kill $(pgrep conky)
pkill conky
grep
звонок.grep [c]onky
это то, что вы ищете.Мой любимый вот этот:
youtube-dl $1 -q -o - | ffmpeg -i - $2
загружает видео с заданного URL-адреса YouTube и передает
$1
его в виде файла, указанного$2
. Обратите внимание, как файл тихо-q
выводится в STDOUT-o -
, передается в ffmpeg и используется как вход для него-i -
.Особенно для новичков в Linux это может быть практическим примером того, почему командная строка может быть полезна и упрощает работу, чем использование инструментов с графическим интерфейсом. Я не уверен, сколько времени потребуется, чтобы скачать видео с YouTube и преобразовать его звук в mp3. Приведенная выше строка может сделать это за несколько секунд.
источник
youtube-dl --extract-audio --audio-format mp3 -a -
. Все еще классный пример, но есть более простые способы сделать это. (Он вызывает ffmpeg внутри.)youtube-dl $1 -q -o - | mplayer -
непосредственно проигрывает видео внутри mplayer. Я использую эту команду на своем ноутбуке, чтобы сообщить моему серверу (который подключен к телевизору) воспроизводить видео. Я должен добавить,-display :0.0 -geometry 400x300+1200+200
чтобы окно mplayer появилось на правильном экране.Общее использование (читай: как я использую его в большинстве случаев) - это когда по какой-то причине мне приходится прогонять некоторые данные через несколько инструментов для выполнения различных задач обработки.
Так что я бы сказал, что использование труб - это клей для сборки нескольких строительных блоков (разных инструментов UNIX). Как Ульрих сказал,
sort
иuniq
является общей строфой.В зависимости от аудитории, если вы хотите выделить такое использование каналов, вы можете, например, начать с: «эй, этот учебный план содержит ссылки на несколько интересных PDF-файлов с бумагами и примечаниями к лекциям, но некоторые из них повторяются. как-нибудь автоматизировать это?
Затем вы можете показать, как
lynx --dump --listonly
получить список ссылок, какgrep
отфильтровать ссылки, оканчивающиеся на.pdf
, какcolrm
илиsed
можно избавиться от чисел,lynx
оставленных для каждого URL-адреса, какsort
и какuniq
избавиться от дубликатов, и, наконец, какwget -i -
можно использовать для получения файлы (используя,--wait
чтобы быть нежным на сервере, конечно).Боюсь, это сложный пример. С другой стороны, это может помочь показать мощность каналов, когда вы просто создаете канал и запускаете оболочку сразу.
источник
sort -u
в GNU coreutils .Я не знаю точно, что хорошего, но прокачка
grep
должна быть одним из самых распространенных видов использования, за которым может последоватьwc -l
. (Да,grep
имеет малоизвестный-c
переключатель.)Еще одна распространенная строфа -
| sort | uniq
хотя бы потому, чтоuniq
требует сортировки входных данных.источник
... | sort -u
если доступно!Не то, что вам нужно для этого примера, но:
... изменение порядка greps сохраняет окраску, но НАМНОГО менее эффективно. по-видимому, в больших списках цвет не имеет значения.
Кроме того, эта веб-страница предлагает:
https://stackoverflow.com/questions/9375711/more-elegant-ps-aux-grep-v-grep
... но это не сработает, если вы ищете одну букву (например, процесс «X»).
источник
Наконец-то я могу поделиться этим беспорядком, сделанным мной около полутора лет назад ...
Это...
Бьюсь об заклад, это можно было бы сделать намного лучше с одним скриптом Python.
источник
Это первое, что пришло мне в голову ...
mysqldump
консольное приложение, которое отправляет данные, схемы и необязательные процедуры и функции на стандартный вывод Обычно он перенаправляется в файл для резервного копирования.mysqldump <options> > mydb.dump
Это даст вам несжатый скрипт SQL. Чтобы сэкономить место, вы можете сжать его с помощью bzip2.
bzip2 mydb.dump
В качестве альтернативы, вы можете сделать оба за один шаг:
mysqldump <options> | bzip2 > mydb.dump.bz2
В этом примере выше stdout from
mysqldump
передается по каналу bzip2, который затем перенаправляет свой вывод в файл.источник
bzcat mydb.dump.bz2 | mysql <options>
.Вот пример, который я использую в своей работе с несколькими каналами в одной команде. Это использует gawk для поиска в общем журнале запросов MySQL ($ OFILE) и поиска любых запрещенных входов в систему. Затем он сортирует этот список по имени, передает этот список в uniq, который подсчитывает вхождения, а затем передает его в последний раз, чтобы отсортировать подсчитанный список численно ...
источник
Трубы лучше всего работают с фильтрами и переводчиками
Таким образом, данные могут передаваться из одной программы в следующую, а в любой момент все данные должны быть в памяти одновременно.
источник
cat filename | less
ужасное использование трубопроводов, так как вы можете просто сделатьless filename
Вот пример пипсов, которые я использую каждый день (но также может быть плохим примером):
ls -la | more -c
Скотт Хоффман и NJSG ответы являются лучшими примерами.
источник
Как насчет: поиска по шаблону и отображения последнего найденного шаблона?
Показывает , как использовать
tail
,sed
иgrep
в контексте трубы , которая может быть построена шаг за шагом.источник
выполните это в любом каталоге, который вы хотите, чтобы отсортированный анализ размера папки (затем прокрутите вниз кнопкой END):
Sortiert nach Ordnergrösse
источник
Вот пример, который я использовал для установки переменной DISPLAY, когда xauth не был опцией ...
Первая команда получает необходимые данные, например, имя хоста или IP. Вторая команда получает только эти данные (последнее поле). Наконец, последняя команда удаляет скобки из данных.
источник
Командный конвейер вы можете использовать везде, где вы чувствуете, что выходные данные первой команды могут подаваться как входные данные для следующей.
Примеры.
пример кошки TXT | grep {some_line} | awk {some_command}
Это просто концепция, что если вы чувствуете, что вывод команды, которую вы выполнили, может быть вводом другой команды, вы можете передать их по конвейеру.
источник