В прошлом материале мы познакомились с работой программы cat, которая обычно идет вначале длинной цепочки переадресации ввода-вывода между программами. Но на текущий момент наши цепочки состояли максимум из трех команд, из которых только одна выполняла обработку информации. Ведь мы пока не знакомы с множеством полезных инструментов.
В Linux инструменты обработки информации, которые часто используются в цепочках переадресации ввода-вывода, называются фильтрами. Они считывают информации из стандартного вывода, обрабатывают ее и выводят результат в стандартный вывод. Ввод обычно перенаправляется на вывод предыдущей программы, а вывод либо на вводе следующей программы, либо в файл для сохранения конечного результата. Таким образом, объединив несколько простых инструментов, можно легко выполнить существенное преобразовании информации и получить результат в удобном виде 🙂
Познакомимся с наиболее часто используемыми фильтрами. Более подробно с некоторыми из них мы познакомимся с ними в материалах программирования и разработки скриптов для Linux Shell. Рекомендую самостоятельно ознакомиться со справочной информацией по каждой из описанных программ.
- sort
- Сортирует строки и выводит их в упорядоченном виде. Мы уже знакомы с этим фильтром 🙂
- uniq
- Фильтрует повторы соседних строк, выводя каждую строку не более одного раза. Обычно применяется для отсортированного списка через sort, чтобы вырезать все повторы строк из текста.
- grep
- Просматривает информацию и фильтрует ее по указанному шаблону.
- fmt
- Считывает текст и выводит его строки в отформатированном виде, удобном для чтения.
- pr
- Подготавливает информацию к распечатке на бумаге путем разбивки ее на страницы и вставки верхнего и нижнего колонтитула.
- head
- Выводит только несколько первых строк. Обычно применяется для ознакомления с заголовками файлов.
- tail
- Выводит только несколько последних строк. Обычно применяется для ознакомления с последними записями журнальных файлов. В составных цепочках используется после фильтрации информации.
- tr
- Выполняет преобразование символов. Используется для преобразования регистра и типов переноса строк (в различных ОС, концы строк кодируются разными символами).
- sed
- Редактирует информацию по заданным правилам в процессе ее считывания и сразу выводит результат. Предназначен для более сложных преобразований, которые не может выполнить программа tr. Обработка информации происходит в процессе получения информации без ожидания указателя конца ввода.
- awk
- Выводит преобразованную информацию по заданным правилам. Достаточно могущественный и сложный инструмент.
- wc
- Подсчитывает и выводит число строк, слов и символов. Часто употребляется с ключом -l в цепочках, чтобы вывести только одно число — количество строк.
А теперь посмотрим использование некоторых инструментов на примере. Во время путешествия по файлам и директориям Linux мы посещали директорию /var/log, в которой хранятся журнальные файлы. Там хранится файл boot.log, содержащий информацию о последней загрузке системы. Откровенно говоря, я выбрал этот файл для текущего примера только из-за того, что он не требует прав суперпользователя для чтения 😉 Откроем его в программе less, быстро ознакомимся с его содержимым и закроем.
1 2 3 |
Заметили странные начала строк? Так less выводит специальные символы, которые не предназначены для прямого отображения на экране (например, перенос страницы). Здесь данные спецсимволы распознаются терминальной программой и используются для выделения слова OK зеленым цветом при выводе в терминале. Но less заменил их на видимые, чтобы отобразить нам их присутствие в тексте. Но сейчас мы это исследовать не будем.
Если приглядеться, то можно заметить, что в файле есть строки, содержащие «Reached target». Они обозначают начала выполнения группы действий. Мы хотим ознакомиться со списком из первых пяти этих групп в алфавитном порядке. Но как это сделать? Искать в less строку «Reached target» мы умеем, но это не очень удобно. Лучше отфильтруем содержимое файла boot.log, оставим в нем лишь строки, которые содержат «Reached target». Отсортируем список по алфавиту и выведем только первые 5 строк.
1 2 3 4 5 6 7 8 9 |
[[email protected] test]$ cat /var/log/boot.log | grep "Reached target" | sort | head -n 5 [ OK ] Reached target Basic System. [ OK ] Reached target Basic System. [ OK ] Reached target Bluetooth. [ OK ] Reached target Encrypted Volumes. [ OK ] Reached target Initrd Default Target. [[email protected] test]$ |
С виду сложная задача для решения в графическом интерфейсе была легко решена в командной строке Linux Shell. Теперь, я надеюсь, смысл и удобства цепочек команд понятен всем. А еще мы увидели как выглядит этот таинственно закодированный зеленый цвет 🙂