moreutils: Коллекция полезных инструментов для командной строки
Оригинальная статья: John Beisley
Перевод: Соломин
Евгений
Moreutils содержит набор утилит для пользователей командной строки.
Написанные многими разработчиками программы, весьма скромны, и
возможно слишком ограничены в возможностях, чтобы существовать в
отдельном пакете, но вместе они формируют полезное сопровождение к
существующим консольным инструментам.
Далее следуют несколько примеров утилит из moreutils, и то, как они могут
быть использованы.
Sponge - Корректное перенаправление файлового потока.
Многие пользователи командной строки допускают ошибку вида:
$ grep -v someuser /etc/passwd > /etc/passwd
Как только командный интерпретатор запустит эту команду, он
непосредственно усечет читающий поток файл, и уже только после этого
запустится команда grep. Результатом будет пустой файл, это, конечно, не то,
что хотелось получить. Осознавая свою ошибку, пользователь мог
бы вместо этого перенаправить вывод во временной файл, а затем уже
переместить временной по верх оригинала:
$ grep -v someuser /etc/passwd > /etc/passwd.tmp
$ mv /etc/passwd.tmp /etc/passwd
Sponge это простая, но удобная команда, которая существует для того,
чтобы свернуть весь этот процесс в один шаг:
$ grep -v someuser /etc/passwd | sponge /etc/passwd
Sponge словно "впитывает" данные через стандартный поток ввода,
при этом, ожидает окончания работы команды grep перед записью в указанный
файл. В этом случае, результат будет тот, который и ожидается, без
потребности работать с временными файлами.
Vipe - Интерекативный редактор каналов
Иногда есть необходимость посмотреть состояние в середине канала,
обрабатывающего некоторые данные, где можно будет наиболее быстро и
просто редактировать содержимое канала, а не создавать сложные
фильтры с помощью sed и другими аналогичными программами. Быть
может, содержимое канала будет неизвестно, возможно это будет
список файлов, которые пользователь хотел бы вручную отфильтровать.
Скажем что Вы хотели бы просмотреть все файлы в текущей директории,
но хотели бы сделать это выборочно, тогда Вы можете сделать
следующее:
ls | vipe | xargs -d ‘\n’ touch
В этом примере выдастся список открытых в Вашем редакторе (как
установлено в переменных окружения EDITOR или VISUAL), файлов,
который Вы можете отредактировать. Когда необходимые изменения
внесены, Вы можете сохранить файл и выйти из редактора, после чего
vipe выведет редактируемые данные в стандартный поток вывода,
причем те файлы, которые были отредактированы в редакторе.
Combine - Логические операции (операции выполняемые с
множествами) с текстовыми файлами
Выполнение логических (или операций над множествами) так же могут
быть полезны. Эта утилита может пригодиться в случае когда
необходимо узнать файлы с одинаковыми именами содержащиеся
в двух разных директориях, например:
Директория с именем foo содержит файлы:
tom и harry
Директория с именем bar содержит файлы:
tom и dick
Список этих файлов может быть записан в два файла для дальнейшей
работой с утилитой combine, следующей командой:
ls /path/to/foo > foo_list && ls /path/to/bar > bar_list
Процедура поиска файла, который содержится в обеих директориях
вызывает трудности, и тогда combine приходит на помощь:
$ combine foo_list and bar_list
tom
А как насчет файлов, которые содержаться в foo, но не содержаться в
bar?
$ combine foo_list not bar_list
harry
Замечание: Однако, использование 'or' может использоваться для того,
что бы найти полный список файлов, но эффект от нее несколько нечеткий, а
именно, перечисляются файлы, относящиеся к обеим директориям,
дважды:
$ combine foo_list or bar_list
harry
tom
dick
tom
Такую операцию лучше проделывать при помощи стандартной команды
sort:
$ cat foo_list bar_list | sort -u
dick
harry
tom
Резюме
Данное введение в moreutils коснулось только некоторых команд. Стоит
поэкспериментировать так же и с другими, очень кратко здесь
описанными:
isutf8
Проверяет файлы на формат utf-8
ts
Переводит стандартный ввод на стандартный вывод с timestamp
приставкой - хорошо подходит для ведения системного журнала.
vdir
Позволяет пользователю "редактировать" директорию текстовым
редактором. Таким образом, можно удобно удалять и переименовывать
файлы.
ifdata
Выводит запрошенную информацию об определенном сетевом
интерфейсе без необходимости разбора (парсинга) вывода команды ifconfig.
pee
Похож на tee, но вместо выводов стандартного потока вывода и файлов,
использует каналы.
zrun
Автоматически определяет сжатый файл, полученный на входе в
качестве аргумента некоторой команды, заменяя в этой команде оригинальный
сжатый файл, предварительно разжатым.
mispipe
Подключает две команды через конвейер command1 | command2, но на
выходе возвращает значение первой команды, если она выполнилась
быстрее чем вторая.
Moreutils доступен в Debian testing и unstable, так же в Ubuntu от Edgy и
выше.