Поиск по сайту:

Команда канала Linux


Эта команда «трубы» легко доступна на платформах UNIX/Linux. Эта команда передает вывод предыдущей команды следующей команде. Есть буквально МНОЖЕСТВО ситуаций, когда этот метод предлагает серьезную ценность. Прежде чем прыгнуть глубже, есть кое-что, что нужно знать. Каждая отдельная программа в системе UNIX/Linux имеет 3 встроенных потока данных.

  • STDIN (0) – Стандартный ввод

  • STDOUT (1) – стандартный вывод

  • STDERR (2) — Стандартная ошибка

Когда мы собираемся работать с приемами «pipe», «pipe» возьмет STDOUT команды и передаст его в STDIN следующей команды.

Давайте рассмотрим некоторые из наиболее распространенных способов включения команды «pipe» в повседневное использование.

Команда трубы

Основное использование

Метод работы «трубы» лучше подробно рассказать на живом примере, не так ли? Давайте начнем. Следующая команда сообщит «pacman», менеджеру пакетов по умолчанию для Arch и всех дистрибутивов на основе Arch, распечатать все установленные пакеты в системе.

pacman -Qqe

Это действительно ДЛИННЫЙ список пакетов. Как насчет того, чтобы подобрать всего несколько компонентов? Мы могли бы использовать «grep». Но как? Одним из способов может быть сброс вывода во временный файл, «grep» нужный вывод и удаление файла. Эта серия заданий сама по себе может быть превращена в сценарий. Но мы только сценарии для очень больших вещей. Для этой задачи давайте призовем силу «трубы»!

pacman -Qqe | grep <target>

Потрясающе, не так ли? «| » — это вызов команды «pipe». Он захватывает STDOUT из левого раздела и передает его в STDIN правого раздела.

В вышеупомянутом примере команда «pipe» фактически передала вывод в конце части «grep». Вот как это происходит.

pacman -Qqe > ~/Desktop/pacman_package.txt
grep python ~/Desktop/pacman_package.txt

Несколько конвейеров

По сути, в расширенном использовании команды «pipe» нет ничего особенного. Это полностью зависит от вас, как его использовать.

Например, давайте начнем с укладки нескольких труб.

pacman -Qqe | grep p | grep t | grep py

Вывод команды pacman все дальше и дальше фильтруется «grep» через ряд каналов.

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

cat demo.txt | grep -n 1 | grep -n 2

Управление списком файлов и каталогов

Что делать, когда вы имеете дело с каталогом, в котором содержится ТОННА файлов? Довольно неприятно пролистывать весь список. Конечно, почему бы не сделать это более терпимым с помощью трубы? В этом примере давайте проверим список всех файлов в папке «/usr/bin».

ls -l <target_dir> | more

Здесь «ls» выводит все файлы и их информацию. Затем «pipe» передает его «more» для работы с ним. Если вы не знали, «больше» — это инструмент, который превращает тексты в одно экранное представление за раз. Тем не менее, это старый инструмент, и, согласно официальной документации, более рекомендуется «меньше».

ls -l /usr/bin | less

Сортировка вывода

Есть встроенный инструмент «сортировка», который будет принимать введенный текст и сортировать его. Этот инструмент — настоящая жемчужина, если вы работаете с чем-то действительно грязным. Например, я получил этот файл, полный случайных строк.

cat demo.txt

Просто направьте его на «сортировку».

cat demo.txt | sort

Так-то лучше!

Печать совпадений определенного шаблона

ls -l | find ./ -type f -name "*.txt" -exec grep 00110011 {} \;

Это довольно запутанная команда, верно? Сначала «ls» выводит список всех файлов в каталоге. Инструмент «найти» берет выходные данные, ищет файлы «.txt» и вызывает «grep» для поиска «00110011». Эта команда проверит каждый текстовый файл в каталоге с расширением TXT и найдет совпадения.

Печать содержимого файла определенного диапазона

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

cat <file> | head -6

cat <file> | tail -6

Уникальные значения

При работе с повторяющимися выходами это может быть довольно раздражающим. Иногда дублирование ввода может вызвать серьезные проблемы. В этом примере давайте приведем «uniq» к потоку текста и сохраним его в отдельный файл.

Например, вот текстовый файл, содержащий большой список чисел, состоящий из двух цифр. Здесь определенно дублируется контент, верно?

cat duplicate.txt | sort

Теперь давайте выполним процесс фильтрации.

cat duplicate.txt | sort | uniq > unique.txt

Проверьте вывод.

bat unique.txt

Выглядит лучше!

Каналы ошибок

Это интересный метод плетения. Этот метод используется для перенаправления STDERR на STDOUT и продолжения передачи по конвейеру. Обозначается символом «|&» (без кавычек). Например, давайте создадим ошибку и отправим вывод в какой-нибудь другой инструмент. В этом примере я просто набрал какую-то случайную команду и передал ошибку «grep».

adsfds |& grep n

Заключительные мысли

Хотя сама по себе «труба» довольно проста по своей природе, то, как она работает, предлагает очень универсальный способ использования метода бесконечными способами. Если вы используете сценарии Bash, то это намного полезнее. Иногда вы можете просто делать сумасшедшие вещи! Узнайте больше о сценариях Bash.

Статьи по данной тематике: