Изучите основы этой мощной, но элегантной функции

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

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

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

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

Давайте начнем легко

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

cat countries

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

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

cat countries | less

Это приводит к выводу команды cat, которая передается второй команде, то есть less.

Less - это программа-пейджер терминала, которая позволяет перемещаться по результатам с помощью клавиш со стрелками. Для выхода нажмите q.

Вместо less можно также использовать more. More позволяет просматривать содержимое текстового файла по одному экрану за раз.

Чтобы перемещаться по файлу построчно, при использовании more нажмите Enter . Чтобы перемещаться по одной странице за раз, нажмите Spacebar, где страница соответствует размеру экрана вашего текущего терминала. Для выхода из команды просто нажмите q.

Но вы можете сделать больше

С помощью каналов вы можете делать гораздо больше, чем просто просматривать содержимое файлов.

Например, если вы хотите узнать, сколько стран находится в файле, вы можете использовать команду wc, что является сокращением от количества слов. Параметр -l печатает количество строк.

cat countries | wc -l

Эта команда возвращает 196, что означает, что в этом файле 196 стран.

Как было сказано ранее, можно комбинировать больше, чем две команды:

cat countries | head -10 | tail -3

Эта команда принимает выходные данные cat и использует их в качестве входных данных для команды head. Команда head выводит список из первых десяти стран с тех пор, как мы сказали ей это делать.

Затем эти десять стран будут использоваться в качестве входных данных для команды tail. Поскольку вывод head используется для следующей команды. Команда tail вернет последние три страны.

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

Searching

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

Лучшим и, вероятно, более быстрым вариантом является использование команды grep. Команда grep используется для поиска текста.

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

Начнем с очень простой команды grep, где мы ищем слово Netherlands в списке стран. Обратите внимание, что по умолчанию grep чувствителен к регистру. Если вы хотите искать без учета регистра, добавьте параметр -i.

grep "Netherlands" countries

Эта команда вернет Netherlands, что означает, что эта строка однажды встречалась в списке стран. Если мы сделаем опечатку и введем вместо этого Metherlands, ничего не вернется.

Сама по себе эта команда довольно молчалива. Если вы хотите узнать, сколько вхождений строки находится в файле, вы также можете использовать параметр -c.

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

В качестве альтернативы вы можете использовать параметр -C, который предоставляет строки контекста.

Как это работает с трубопроводами?

Давайте перейдем к более практическому примеру, где мы хотим проверить, посещал ли определенный IP-адрес наш веб-сайт за последние пять минут. Мы можем сделать это эффективно, используя grep в журнале доступа к веб-сайту.

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

cat /path/to/access/log | tail -100 | grep -ic "ip: 127.0.0.1"

Мы будем искать наш целевой IP-адрес, равный 127.0.0.1, в последних сотнях строк этого файла в случае необходимости. В результате количество вхождений будет напечатано на экране.

Заключение

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

Мы рассмотрели основы трубопроводов, используя less, more, wc и grep. Некоторые из этих команд могут помочь вам более эффективно извлекать информацию, которую вы ищете.

Если у вас есть какие-либо вопросы, просто дайте мне знать в разделе комментариев. Я с удовольствием отвечу на ваши вопросы.