Библиотека сайта rus-linux.net
Дополнительные инструменты системного администратора из пакета Moreutils
Оригинал: Moreutils For Your Linux Shell Tool Set
Автор: Paul Brown
Дата публикации: 4 октября 2016 г.
Перевод: А.Панин
Дата перевода: 16 января 2017 г.
Пакет Moreutils содержит новые инструменты, которые не входят в комплект поставки дистрибутивов Linux, но, скорее всего, заслуживают этого.
У меня есть испаноязычный вариант полезной книги Стивена Коффина под названием
Исходя из всего вышесказанного, вы можете подумать, что интерфейс командной строки *NIX практически не изменялся с начала 1990-х годов. Это не совсем верно.
В качестве примера можно рассмотреть
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 постоянно эволюционирует; время от времени разработчики добавляют в него новые инструменты. Лично мне интересно следить за тем, какие инструменты будут добавлены в этот пакет в будущем.