Что такое конвейер в Linux

Обновлено: 03.07.2024

Команда pipe используется как в операционных системах UNIX, так и в Linux. Конвейеры помогают объединить две или более команд и используются в качестве концепций ввода/вывода в команде. В операционной системе Linux мы используем более одного канала в команде, поэтому вывод одной команды перед каналом действует как ввод для другой команды после канала. В этой статье мы обсудили множество примеров, чтобы понять основные функции каналов.

Предпосылки

Чтобы применять команды канала в Linux, в вашей системе должна быть среда Linux. Это можно сделать, загрузив виртуальный ящик и настроив на нем файл Ubuntu. Пользователи должны иметь права доступа к необходимым приложениям.

Синтаксис

Команда 1 | команда 2 | команда 3 | ……

Сортировать список с помощью вертикальной черты

Канал имеет множество функций, используемых для фильтрации, сортировки и отображения текста в списке. Один из распространенных примеров описан здесь. Предположим, у нас есть файл с именем file1.txt, содержащий имена студентов. Мы использовали команду cat, чтобы получить запись этого файла.


Данные в этом файле неупорядочены. Итак, чтобы отсортировать данные, нам нужно следовать фрагменту кода здесь.


В соответствующем выводе видно, что имена учащихся расположены в алфавитном порядке в порядке от a до z.

Помимо этого. Предположим, мы хотим получить вывод в отсортированном виде, убрав избыточность. Мы будем использовать ту же команду и ключевое слово «uniq» в дополнение к команде по умолчанию. Давайте рассмотрим файл с именем file2.txt, содержащий имена субъектов. Эта же команда используется для получения данных.


Теперь мы воспользуемся командой для удаления всех дублирующихся слов в файле.


Вывод показывает, что элементы организованы и расположены в алфавитном порядке. При этом удаляются все слова, которые были дублированы. Приведенная выше команда будет отображать только выходные данные, но мы будем использовать приведенную ниже команду для их сохранения.

Вывод будет сохранен в другом файле с тем же расширением.

Отображать данные файла соответствующего диапазона

Очень раздражает, когда вы хотите получить какие-то данные только с самого начала, но команда выдает вам все совпадающие элементы в вашей системе. Вы можете использовать ключевое слово «голова». Это помогает ограничить ваш вывод относительно некоторого диапазона. т. е. в этом примере мы объявили диапазон до 4. Значит данные будут из первых 4-х строк файла. Рассмотрим тот же файл file2.txt, что и в примере выше.


Подобно голове, мы также можем использовать опцию хвоста. Это ограничит вывод последними строками в соответствии с заданным диапазоном.

Канал и другие команды

При использовании команды more все выходные данные одновременно отображаются на экране. Канал действует как контейнер и отображает все выходные данные как ввод ls-l. Потому что на выходе получается длинный список файлов.


Ls используется для отображения всех возможных данных соответствующей команды. Сначала отображается общее количество данных, связанных с соответствующим запросом.

Подсчитать количество файлов

Часто необходимо знать количество имеющихся файлов. И нет необходимости использовать команду grep или cat для получения данных всех типов. Мы можем использовать pipe и в этом случае. Используемая команда записывается как:


Принимая во внимание, что wc — это «количество слов», используемое для подсчета присутствующих файлов.

Идентификация процесса

Многие сложные задачи также выполняются с помощью канала в наших командах. Команда, которую мы сейчас обсуждаем, используется для отображения идентификаторов процессов systemd.

Команда awk $2 отображает данные $2, которые являются вторым столбцом.

Получить подкаталоги с помощью канала

Одной из команд конвейера, которые мы использовали для получения всех существующих подкаталогов в текущем каталоге, является один из запросов канала в используемых нами командах конвейера. Здесь мы использовали команду grep. Grep работает только для отображения данных, начинающихся с «d». Канал поможет получить соответствующие данные всех каталогов. Здесь используется ‘^d’.


Получить файлы с помощью конвейера

Чтобы получить файлы из системы соответствующих расширений, мы можем получить это, используя канал в наших командах. Первый пример — поиск java-файлов в системе. «locate» и «grep» помогают получить файлы соответствующих расширений.


«*» используется для получения всех файлов в системе. В настоящее время у нас есть один файл, присутствующий в нашей системе. Второй пример — получить файлы с расширением text. Вся команда такая же, только расширение файла изменено.


Использовать несколько каналов в одной команде

В этом примере, в отличие от предыдущих, мы использовали более одного конвейера в одной команде для уточнения ее функциональности. Рассмотрим файл с именем file3.txt.


Теперь мы хотим получить запись слова, совпадающего с именем, которое мы указали в команде. Здесь команда cat используется для извлечения данных из определенного файла. Grep используется для выбора этого конкретного слова из файла. «tee» используется для сохранения результата в другом файле. И wc для подсчета результирующих данных. Итак, результат показан ниже.


Слову соответствует 2 содержания. Мы можем отобразить данные из нового файла образца, чтобы отобразить весь результат, где он хранится.

Получить определенные данные с помощью каналов

В этом примере мы хотим получить данные из файла, в содержимом которого есть «h».


Результат показывает, что полученные данные соответствуют поиску по команде «h». Переходим к следующему примеру. Здесь мы хотим получить элементы файла, содержащие «s», но мы применили условие чувствительности к регистру. Будут выбраны как прописные, так и строчные буквы алфавита.


Результат показан на изображении. Затем мы отобразим имена студентов, в которых в слове объединены буквы «а» и «т». Результат показан на приведенном ниже изображении.


Заключение

В статье рассказывается об универсальности конвейера в командах Linux. Тем не менее, это довольно просто, но работает таким образом, чтобы разрешать многие сложные запросы. Эта утилита командной строки легко реализуема и совместима с операционными системами UNIX и Linux.

Об авторе

Акса Ясин

Я целеустремленный профессионал в области информационных технологий и обожаю писать. Я технический писатель и люблю писать для всех разновидностей Linux и Windows.

Канал — это форма перенаправления (перенос стандартного вывода в другое место назначения), которая используется в Linux и других Unix-подобных операционных системах для отправки вывода одной команды/программы/процесса другой команде/программе/процессу. для дальнейшей обработки. Системы Unix/Linux позволяют подключать стандартный вывод команды к стандартному выводу другой команды. Это можно сделать с помощью вертикальной черты «|».

Конвейер используется для объединения двух или более команд, и в этом случае вывод одной команды выступает в качестве ввода для другой команды, а вывод этой команды может выступать в качестве ввода для следующей команды и так далее. Его также можно представить как временное соединение между двумя или более командами/программами/процессами. Программы командной строки, выполняющие дальнейшую обработку, называются фильтрами.

Эта прямая связь между командами/программами/процессами позволяет им работать одновременно и позволяет непрерывно передавать данные между ними, а не передавать их через временные текстовые файлы или через экран дисплея.
Конвейеры являются однонаправленными, т. е. данные проходят слева направо по конвейеру.

Синтаксис:

Пример:
1. Список всех файлов и каталогов и его ввод в команду more.

Вывод:


Команда more использует вывод $ ls -l в качестве входных данных. Чистый эффект этой команды заключается в том, что вывод ls -l отображается по одному экрану за раз. Канал действует как контейнер, который принимает вывод ls -l и передает его больше в качестве ввода. Эта команда не использует диск для подключения стандартного вывода ls -l к стандартному вводу more, потому что канал реализован в основной памяти.
С точки зрения операторов перенаправления ввода/вывода приведенная выше команда эквивалентна следующей последовательности команд.

Вывод:


Выход двух вышеуказанных команд одинаков.

<р>2. Используйте команду sort и uniq для сортировки файла и печати уникальных значений.

Это отсортирует данный файл и напечатает только уникальные значения.
Вывод:


<р>3. Используйте head и tail для печати строк в определенном диапазоне в файле.

Эта команда выбирает первые 7 строк с помощью команды (head -7), и они будут вводиться в команду (tail -5), которая, наконец, напечатает последние 5 строк из этих 7 строк.
Вывод:


<р>4. Используйте ls и find для вывода списка и печати всех строк, соответствующих определенному шаблону в соответствующих файлах.

Эта команда выбирает файлы с расширением .txt в заданном каталоге и ищет шаблон, такой как «программа» в приведенном выше примере, и печатает те, в которых есть программа.
Вывод:


<р>5. Используйте команды cat, grep, tee и wc, чтобы прочитать конкретную запись от пользователя и сохранить ее в файле, а также распечатать количество строк.

Эта команда выбирает Раджат Дуа и сохраняет их в файле 2.txt и печатает общее количество строк, соответствующих Раджат Дуа
Вывод:


Конвейер — это команда в Linux, которая позволяет использовать две или более команд, так что вывод одной команды служит вводом для следующей. Короче говоря, вывод каждого процесса непосредственно в качестве ввода для следующего, как конвейер. Символ «|» обозначает трубу.

Каналы позволяют объединить две или более команд одновременно и выполнять их последовательно. Вы можете использовать мощные команды, которые могут выполнять сложные задачи в один миг.

Поясним это на примере.

Когда вы используете команду «cat» для просмотра файла, состоящего из нескольких страниц, подсказка быстро переходит к последней странице файла, и вы не видите содержимое в середине.

Чтобы избежать этого, вы можете направить вывод команды «cat» на «less», что будет показывать вам только одну длину прокрутки контента за раз.

Иллюстрация прояснит ситуацию.

Linux/Unix Pipes, Grep & Sort Command

Нажмите здесь, если видео недоступно

команды «pg» и «more»

Вместо «меньше» вы также можете использовать.

Кроме того, вы можете просматривать файл в удобоваримых битах и ​​прокручивать вниз, просто нажимая клавишу ввода.

Linux/Unix Pipes, Grep & Sort Command

Команда grep

Предположим, вы хотите найти конкретную информацию по почтовому индексу из текстового файла.

Вы можете самостоятельно просмотреть содержимое вручную, чтобы отследить информацию. Лучшим вариантом является использование команды grep. Он отсканирует документ на наличие нужной информации и представит результат в нужном формате.

Синтаксис:

Давайте посмотрим на это в действии –

Linux/Unix Pipes, Grep & Sort Command

Здесь команда grep выполнила поиск в файле «sample» строки «Apple» и «Eat».

С этой командой можно использовать следующие параметры.

< td>-n
Опция Функция
-v Показывает все строки, не соответствующие искомой строке
-c Показывает только количество совпадающих строк
Показывает совпадающую строку и ее номер
-i Соответствует обоим (верхним и нижним) регистрам< /td>
-l Показывает только имя файла со строкой

Давайте попробуем первую опцию ‘-i’ для того же файла, что и выше –

Используя параметр «i», grep отфильтровал строку «a» (без учета регистра) из всех строк.

Linux/Unix Pipes, Grep & Sort Command

Команда «сортировка»

Эта команда помогает отсортировать содержимое файла по алфавиту.

Синтаксис этой команды:

Рассмотрите содержимое файла.

Linux/Unix Pipes, Grep & Sort Command

Использование команды сортировки

Linux/Unix Pipes, Grep & Sort Command

У этой команды также есть расширения, и они перечислены ниже.

Опция Функция
-r Сортировка в обратном порядке< /td>
-n Сортировка по числам
-f Сортировка без учета регистра

В приведенном ниже примере показана обратная сортировка содержимого в файле 'abc'.

Ширина

Linux/Unix Pipes, Grep & Sort Command

Что такое фильтр?

В Linux есть множество команд фильтрации, таких как awk, grep, sed, Spell и wc. Фильтр получает входные данные от одной команды, выполняет некоторую обработку и выдает выходные данные.

При передаче двух команд «отфильтрованный» вывод первой команды передается следующей.

Linux/Unix Pipes, Grep & Sort Command

Давайте разберемся с этим на примере.

У нас есть следующий файл «пример»

Linux/Unix Pipes, Grep & Sort Command

Мы хотим выделить только те строки, которые не содержат символ «а», но результат должен быть в обратном порядке.

Для этого можно использовать следующий синтаксис.

Давайте посмотрим на результат.

Linux/Unix Pipes, Grep & Sort Command

Обзор:

  • Каналы «|» отправляют выходные данные одной команды в качестве входных данных другой команды.
  • Фильтр получает входные данные от одной команды, выполняет некоторую обработку и выдает результат.
  • Команду grep можно использовать для поиска строк и значений в текстовом документе.
  • Передача через grep должна быть одним из наиболее распространенных способов использования
  • команда sort сортирует содержимое файла по алфавиту
  • команды less ,pg и more используются для разделения длинного файла на читаемые биты

Компания Acunetix, разработчик сверхточных сканеров безопасности веб-приложений, спонсировала проект Guru99, помогая точно и с максимальной скоростью сканировать более 4500 веб-уязвимостей.

Пересечение труб.

В Linux команда pipe позволяет отправлять вывод одной команды другой. Конвейер, как следует из этого термина, может перенаправлять стандартный вывод, ввод или ошибку одного процесса другому для дальнейшей обработки.

Синтаксис команды pipe или безымянного канала: | символ между любыми двумя командами:

Команда-1 | Команда-2 | …| Command-N

Здесь канал не может быть доступен через другой сеанс; он создается временно для выполнения команды Command-1 и перенаправления стандартного вывода. Он удаляется после успешного выполнения.

Pipe — файл Contexts.txt

Дополнительные ресурсы по Linux

В приведенном выше примере файлcontents.txt содержит список всех файлов в определенном каталоге, а именно вывод команды ls -al. Сначала мы собираем имена файлов с ключевым словом «файл» из содержимого.txt по конвейеру (как показано), поэтому выходные данные команды cat предоставляются в качестве входных данных для команды grep. Затем мы добавляем конвейер для выполнения команды awk, которая отображает 9-й столбец из отфильтрованного вывода команды grep. Мы также можем подсчитать количество строк в файле content.txt с помощью команды wc -l.

Именованный канал может существовать до тех пор, пока система запущена и работает, или до тех пор, пока он не будет удален. Это специальный файл, работающий по принципу FIFO (первый пришел, первый вышел). Его можно использовать как обычный файл; т. е. вы можете писать в него, читать из него и открывать или закрывать его. Чтобы создать именованный канал, выполните следующую команду:

При этом создается файл именованного канала, который можно использовать даже в нескольких сеансах оболочки.

Еще один способ создать именованный канал FIFO — использовать следующую команду:

Чтобы перенаправить стандартный вывод любой команды другому процессу, используйте символ >. Чтобы перенаправить стандартный ввод любой команды, используйте символ.

Каналы — перенаправление вывода

Как показано выше, вывод команды ls -al перенаправляется в файлcontents.txt и вставляется в файл. Точно так же входные данные для команды tail предоставляются в виде содержимого.txt через символ.

создание my-named-pipe.jpg

проверить вывод команды ls al .jpg

Здесь мы создали именованный канал my-named-pipe и перенаправили вывод команды ls -al в именованный канал. Мы можем открыть новый сеанс оболочки и просмотреть содержимое именованного канала, который показывает вывод команды ls -al, как указано ранее. Обратите внимание, что размер именованного канала равен нулю и имеет обозначение "p".

Итак, в следующий раз, когда вы будете работать с командами в терминале Linux и обнаружите, что перемещаете данные между командами, мы надеемся, что канал сделает этот процесс быстрым и легким.

Конвейер — это последовательность одной или нескольких команд, разделенных одним из операторов управления ‘ | ’ или ‘ |& ’.

Формат конвейера:

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

Если используется ‘ |& ’, стандартная ошибка команды1, в дополнение к ее стандартному выводу, соединяется со стандартным вводом команды2 через канал; это сокращение от 2>&1 | . Это неявное перенаправление стандартной ошибки на стандартный вывод выполняется после любых перенаправлений, указанных командой.

Зарезервированное слово time приводит к печати статистики времени для конвейера после его завершения. В настоящее время статистика состоит из прошедшего (настенные часы) времени, а также пользовательского и системного времени, затраченного на выполнение команды. Опция -p изменяет формат вывода на формат, указанный в POSIX. Когда оболочка находится в режиме POSIX (см. Режим Bash POSIX), она не распознает время как зарезервированное слово, если следующий токен начинается с «-». Для переменной TIMEFORMAT может быть задана строка формата, указывающая, как должна отображаться информация о времени. См. Переменные Bash для описания доступных форматов. Использование time в качестве зарезервированного слова позволяет синхронизировать встроенные функции оболочки, функции оболочки и конвейеры. Внешняя команда времени не может легко синхронизировать их.

Когда оболочка находится в режиме POSIX (см. Режим Bash POSIX), за временем может следовать новая строка. В этом случае оболочка отображает общее время пользователя и системы, затраченное оболочкой и ее дочерними элементами. Переменная TIMEFORMAT может использоваться для указания формата информации о времени.

Если конвейер не выполняется асинхронно (см. Списки), оболочка ожидает завершения всех команд в конвейере.

Каждая команда в конвейере выполняется в собственной подоболочке, которая является отдельным процессом (см. Среда выполнения команд). Если опция lastpipe включена с помощью встроенной функции shopt (см. Встроенная функция Shopt), последний элемент конвейера может запускаться процессом оболочки.

Статус выхода конвейера — это статус выхода последней команды в конвейере, если не включена опция pipefail (см. встроенный набор). Если pipefail включен, статус возврата конвейера — это значение последней (самой правой) команды для выхода с ненулевым статусом или ноль, если все команды завершились успешно. Если зарезервированное слово ‘ ! ’ предшествует конвейеру, статус выхода является логическим отрицанием статуса выхода, как описано выше. Оболочка ожидает завершения всех команд в конвейере, прежде чем вернуть значение.

Читайте также: