Команды общих фильтров

Kate

Administrator
Команда форума
Любые корректные команды, которые считывают входные данные из канала STDIN и записывают результаты в канал STDOUT, могут быть использованы в качестве филь тра (т.е. компонента конвейера) для обработки данных. В этом разделе мы кратко рассмотрим некоторые из часто используемых команд фильтрации (хотя их полный список практически бесконечен). Команды фильтрации отличаются настолько сильным “кол лективизмом”, что порой даже трудно продемонстрировать их идивидуальное исполь зование.

Большая часть команд фильтрации принимает в командной строке одно или не сколько имен файлов. И только в том случае, если вы не можете задать соответствую щие файлы, указывайте в качестве источника считываемой информации стандартный входной поток.​

Команда cut: разбивка строк на поля

Команда cut выводит выбранные части входных строк. Чаще всего эта команда используется для извлечения полей (ограниченных некоторыми разделителями), как в приведенном выше примере, который для удобства читателей повторим еще раз.​

$ cut -d: -f7 < /etc/passwd | sort -u

Команда cut также может возвращать сегменты, определенные границами столбцов текста. В качестве стандартного разделителя служит символ <Таb>, но с помощью ключа

-d разделители можно изменить. Ключ -f позволяет указать, какие поля нужно вклю чить в результат.

Еще один пример использования команды cut показан в разделе, посвященном ко манде uniq (см. ниже).

Команда sort: сортировка строк

Команда sort сортирует входные строки. Звучит просто, да? Хотя на самом деле не все так безоблачно: существуют потенциальные нюансы, связанные с точно заданными частями сортируемых строк (т.е. с использованием сортировочного ключа) и порядком сортировки. Наиболее распространенные варианты применения этой команды показа ны в табл. 2.1, в отношении же остальных случаев обратитесь к соответствующей man- странице.​

Таблица 2.1. Ключи команды sort

Ключ команды Значение

-b Игнорировать ведущие пробельные символы

-f Сортировать независимо от регистра букв

-k Указать столбцы, которые формируют сортировочный ключ

-n Сравнивать поля как целые числа

-r Изменить порядок сортировки на противоположный

-t Установить разделитель полей (по умолчанию — пробельный символ)

-u Выводить только уникальные записи

На примерах приведенных ниже команд демонстрируется различие между число вой и лексикографической сортировкой (последняя действует по умолчанию). В обеих командах используются ключи -t: и -к3,3 для сортировки файла /etc/group по его третьему полю (в качестве разделителя используется двоеточие), содержащему иденти фикатор (ID) группы. Первая команда реализует числовую сортировку, а вторая — лек сикографическую (в алфавитном порядке).


$ sort -t: -k3,3 -n /etc/group1

root:х:0:

bin:х:1:daemon daemon:x:2:



$ sort -t: -k3,3 /etc/group

root:x:0:

bin:x:1:daemon users:x:100:



Команда uniq: вывод уникальных строк

Команда uniq по существу подобна команде sort -u, но у нее есть некоторые по лезные ключи, которые команда sort не эмулирует. Так, ключ -с используется для под счета количества экземпляров каждой строки, ключ -d — для отображения только строк, имеющих дубликаты, а ключ -u — для отображения только строк, не имеющих дубли каты. При этом входные данные должны быть предварительно отсортированы, обычно путем “пропускания” через команду sort.

Например, по результатам выполнения следующей команды видно, что у 20 пользо вателей поле login shell (стартовая оболочка) содержит значение /bin/bash и у 12 —

/bin/false. (Последний результат характерен либо для псевдопользователей, либо для пользователей, учетные записи которых были заблокированы.)​

$ cut -d: -f7 /etc/passwd | sort | uniq -с

20 /bin/bash

12 /bin/false



Команда wc: подсчет строк, слов и символов

Подсчет количества строк, слов и символов в файле — еще одна распространенная операция, удобным средством реализации которой и является команда wc (word count). Выполненная без каких-либо ключей, она выведет все три результата подсчета.​

$ wc /etc/passwd

32 77 2003 /etc/passwd

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

Команда tee: копирование входного потока в два места

Командный конвейер, как правило, действует прямолинейно, но зачастую полез- но распараллелить поток данных, т.е. “перехватить” его и отправить копию в файл или окно терминала. Это можно сделать с помощью команды tee, которая отправляет свой стандартный входной поток как в стандартный выходной канал, так и в файл, указан ный в командной строке. Представьте действие этой команды в виде тройника в трубо проводе (перев. с англ. tee — тройник).

Устройство /dev/tty можно считать синонимом для текущего терминала.

Например, команда

$ find / -name core | tee /dev/tty | wc -l

выводит найденные путевые имена файлов core и результат подсчета их количества.

Часто работа конвейера с командой tee, выводящей результаты и в файл, и в окно терминала (для проверки), занимает много времени. Вы можете понаблюдать за первы ми результатами, чтобы убедиться в том, что все работает как надо, а затем смело уходи те: ведь результаты же сохранятся в файле.

Команды head и tail: чтение файла с начала или с конца

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

Для интерактивного использования команда head уже несколько устарела, и вместо нее (в этом контексте) часто используется команда less, которая разбивает файлы для отображения по страницам. Но команду head можно успешно применять в сценариях и с другой целью. С командой tail используется ключ -f, который чрезвычайно полезен для системных администраторов. Вместо немедленного завершения (после вывода тре буемого количества строк) команда tail -f ожидает “прибытия” новых строк, которые (как только они появятся “на горизонте”) будут добавлены в конец файла, а затем выве дены по назначению, что очень удобно для мониторинга журналов регистрации. Однако следует иметь в виду, что программа, которая реализует запись данных в файл, может буферизировать свои выходные данные. Даже если строки будут добавляться регулярно (с точки зрения логики), они могут стать видимыми только фрагментами объемом 1 или 4 Кбайт (KiB).2

Для остановки процесса мониторинга нажмите комбинацию клавиш <Ctrl+C>.

Команда grep: поиск текста

При выполнении команды grep по мере просмотра входного текста выводятся стро ки, которые совпадают с заданным образцом (шаблоном). Свое название эта команда получила “в наследство” от команды g/regular_expression/p) из старого (и ныне действующего) редактора ed, используемого в самых первых версиях UNIX.

“Регулярные выражения” (regular expressions) — это шаблоны предназначенные для поиска совпадающего с ними текста и написанные на стандартном языке шаблонов. Они представляют собой универсальный стандарт, используемый большинством про грамм при поиске по совпадению с шаблоном, хотя и с небольшими различиями в реа лизациях. Странное имя команды уходит своими корнями в оригинальные изыскания соответствующих разделов теории вычислений. Более детально синтаксис регулярных выражений рассматривается в разделе 2.3.

Подобно большинству фильтров, команда grep имеет множество ключей. Например, ключ -с позволяет выводить количество совпавших строк, ключ -i служит для игнори рования регистра букв при сопоставлении, а ключ -v предназначен для вывода отли чающихся (а не совпавших) строк. Очень полезным является ключ -l (прописная бук ва “L”), который заставляет команду grep выводить только имена файлов, содержащие совпавшие с шаблоном строки, а не все совпавшие строки.

Например, выполнение команды​


$ sudo grep -l mdadm /var/log/*

/var/log/auth.log

/var/log/syslog.0

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

Команду grep можно считать классической реализацией базового механизма ис пользования регулярных выражений, но в некоторых версиях предлагается выбор других диалектов. Например, Linux-команда grep -р служит для поиска выражений в стиле языка Perl, хотя в справочных страницах можно найти неопределенное предупреждение о том, что такой вариант носит “экспериментальный характер”. Для полной уверенно сти в своих сценариях просто используйте язык Perl или Python.​

Источник: Источник: Unix и Linux: руководство системного администратора | Немет Эви, Снайдер Гарт 5-е издание
 
Сверху