Библиотека сайта rus-linux.net
Дополнительные инструменты системного администратора из пакета Moreutils
Оригинал: Moreutils For Your Linux Shell Tool Set
Автор: Paul Brown
Дата публикации: 4 октября 2016 г.
Перевод: А.Панин
Дата перевода: 16 января 2017 г.
Пакет Moreutils содержит новые инструменты, которые не входят в комплект поставки дистрибутивов Linux, но, скорее всего, заслуживают этого.
У меня есть испаноязычный вариант полезной книги Стивена Коффина под названием . Я могу поспорить на последний доллар, что если вы откроете любую из ее 700+ страниц и попробуете исполнить приведенные на ней команды в современном дистрибутиве Linux, они будут корректно работать. Ну, конечно же, исключением будут команды, предназначенные для работы с телетайпами и ленточными накопителями.
Исходя из всего вышесказанного, вы можете подумать, что интерфейс командной строки *NIX практически не изменялся с начала 1990-х годов. Это не совсем верно.
В качестве примера можно рассмотреть . Вы можете установить ее в большинстве дистрибутивов Linux с помощью стандартного менеджера пакетов программного обеспечения. В дистрибутиве Ubuntu, а также основанных на Ubuntu дистрибутивах для этого достаточно выполнить команду:
sudo apt install moreutils
В дистрибутиве Debian для этой цели лучше использовать следующую последовательность команд:
su apt-get install moreutils
В дистрибутиве Fedora может использоваться следующая команда:
yum install moreutils
В случае использования дистрибутива OpenSUSE необходимо сначала подключить к системе определенный репозиторий или воспользоваться и функцией установки пакета программного обеспечения в один клик.
Новые инструменты
Пакет Moreutils предоставляет в ваше распоряжение набор новых инструментов, которые не входят в комплект поставки дистрибутивов Linux, но, скорее всего, заслуживают этого. К примеру, утилита vidir позволяет редактировать содержимое директорий и переименовывать файлы с помощью интерфейса текстового редактора. Несмотря на название, утилита vidir позволяет работать с любым выбранным пользователем текстовым редактором, поэтому в том случае, если вы выбрали vi(m), то, она, конечно же, предложит использовать интерфейс vim (Рисунок 1); но если вы выбрали nano или emacs, она предложит использовать интерфейс nano или emacs (Рисунок 2).
Рисунок 1. Утилита vidir предлагает использовать интерфейс выбранного пользователем текстового редактора, будь то vim(m)...
Рисунок 2: ...или nano или любой другой текстовый редактор
Вы можете изменить содержимое директории с помощью команды:
vidir ИМЯ_ДИРЕКТОРИИ
Или изменить имена файлов из определенного набора с помощью аналогичной команды:
find Pictures -iname "*.png" | vidir -
Обратите внимание на символ "-". Он сообщает утилите vidir о том, что следует читать входные данные из программного канала.
Вы можете использовать обычные комбинации клавиш текстового редактора для модификации содержимого директорий и переименования файлов. Если вы работаете с интерфейсом текстового редактора vi, вы можете использовать клавишу i для изменения имен файлов или директорий; команду d[номер_файла]d для удаления файлов или директорий - при этом вы должны помнить о том, что vidir имеет встроенный механизм защиты, не позволяющий удалять непустые директории; клавишу u для отмены изменений и так далее.
Чтение всех данных: sponge
В соответствии со страницей руководства, утилита sponge читает данные из стандартного потока ввода и записывает их файл с заданным именем. В отличие от механизма перенаправления потоков данных командной оболочки, утилита sponge читает все переданные посредством стандартного потока ввода данные перед их записью в выходной файл.
Да, это довольно полезная утилита. Для того, чтобы по достоинству оценить ее, я предлагаю выполнить следующие действия: создайте текстовый файл с именами рыцарей круглого стола, названиями дней недели или любыми другими строками. По сути, подойдет любой текстовый файл со строками, расположенными не в алфавитном порядке:
Вы должны сохранить его под именем knights.txt.
Что бы вы сделали, если бы вам понадобилось отсортировать строки из файла в алфавитном порядке? Вы наверняка попытались бы воспользоваться аналогичной командой:
sort knights.txt > knights_sorted.txt; rm knights.txt; mv knights_sorted.txt knights.txt
Ведь если бы вы использовали следующую команду:
sort knights.txt > knights.txt
вы осуществили бы перезапись содержимого исходного файла перед завершением операции чтения данных из него, уничтожив тем самым часть исходных данных. По этой причине и приходится задействовать промежуточный файл с именем knights_sorted.txt. Также вам придется сохранять исходный файл и удалять его лишь перед самым переименованием результирующего файла, что еще больше усложнит команду. Однако, благодаря существованию утилиты sponge, вы можете воспользоваться следующей командой:
sort knights.txt | sponge knight.txt
Обратите внимание: здесь вообще не используется промежуточный файл!
Благодаря существованию утилиты sponge вы можете читать содержимое текстового файла и осуществлять обработку его содержимого с помощью цепочки таких утилит, как sort, unique, sed, grep и tr. Утилита sponge будет самостоятельно читать все данные из файла, дожидаться окончания процесса их обработки, после чего записывать все результирующие данные обратно в файл.
В ходе разговора о данной утилите просто нельзя не упомянуть об утилите pee. Несмотря на ее имя, она не имеет ничего общего с биологическими жидкостями. Фактически ее имя является комбинацией слов pipe (программный канал, использующийся для передачи вывода одной команды на вход другой в системах *NIX) и tee ().
В отличие от утилиты tee, перенаправляющей вывод команд в файлы (команда cat knights.txt | tee k1 k2 k3 позволяет создать файлы с именами k1, k2 и k3, содержащие данные из файла knights.txt), утилита pee организует программные каналы для передачи данных на входы команд из переданного списка:
В приведенном выше примере оригинальное неупорядоченное содержимое файла knights.txt передается сначала утилите sort для упорядочивания, после чего утилите wc (word count), которая при использовании параметра -l осуществляет подсчет количества строк (13) и, наконец, утилите grep, которая использует простое регулярное выражение для вывода лишь тех строк, которые начинаются с заглавной буквы "G".
Программные каналы
Если вы хотите вернуться к текстовым редакторам и при этом использовать программные каналы для передачи данных туда и обратно, вам следует обратить внимание на утилиту vipe. И снова, данная утилита будет использовать выбранный вами текстовый редактор с интерфейсом командной строки. Поместите данную утилиту в конвейер и выполните получившуюся команду; в результате откроется текстовый редактор с выводом предыдущих команд, который может быть отредактирован в соответствии с вашими предпочтениями. Например, при исполнении команды:
cat knights.txt | pee sort "wc -l" "grep - -e ^G.*" | vipe | unique
вы увидите вывод из предыдущего примера в текстовом редакторе, которым (в моем случае) является vi. Теперь вы можете отредактировать этот вывод в соответствии со своими предпочтениями, добавляя, удаляя и модифицируя строки. После того, как вы закончите редактирование вывода, сохраните изменения и закроете текстовый редактор, отредактированный вывод будет передан следующей команде в конвейере.
Круто, не так ли?
Пакет Moreutils содержит много других полезных инструментов...
В пакете Moreutils находится огромное количество других полезных инструментов. Утилита combine объединяет строки из двух файлов в соответствии с указанной логической операцией; ts добавляет переданную пользователем, читаемую человеком метку времени к каждой строке файла; ifdata максимально упрощает получение данных от сетевого интерфейса, что очень удобно для создания сценариев и так далее. Обратитесь к и страницам руководств каждой из утилит для того, чтобы разобраться, как они работают.
Хотя и сложно поспорить с тем, что поведение рассматриваемых утилит может повторяться путем создания сложных команд, такие инструменты, как sponge, pee и vipe значительно упрощают работу с командной оболочкой и делают ее более приятной.
Пакет Moreutils постоянно эволюционирует; время от времени разработчики добавляют в него новые инструменты. Лично мне интересно следить за тем, какие инструменты будут добавлены в этот пакет в будущем.
