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 и выше.