Moreutils — коллекция более полезных утилит Unix
Мы все знаем о основных утилитах GNU, которые предустановлены во всех Linux и Unix-подобных операционных системах. Это основные утилиты для работы с файлами, оболочками и текстом операционной системы GNU. Утилиты ядра GNU содержат такие команды, как cat, ls, rm, mkdir, rmdir, touch, Tail, wc и многие другие, для выполнения повседневных операций. Среди этих утилит есть и другие полезные утилиты Unix, которые по умолчанию не включены в Unix-подобные операционные системы. Встречайте moreutilis — постоянно растущую коллекцию полезных утилит Unix. Дополнительные утилиты можно установить в GNU/Linux и различные версии Unix, такие как FreeBSD, openBSD и Mac OS.
Список доступных утилит в Moreutils
На момент написания этого руководства Moreutils предоставлял следующие утилиты:
- хронический — выполняет команду тихо, если она не дает сбоя.
- объединить — объединить строки в два файла с помощью логических операций.
- errno — поиск названий и описаний ошибок.
- ifdata — получение информации о сетевом интерфейсе без анализа вывода ifconfig.
- ifne — запустить программу, если стандартный ввод не пуст.
- isutf8 – проверьте, имеет ли файл или стандартный ввод формат utf-8.
- lckdo — выполнить программу с удержанной блокировкой.
- mispipe — передать две команды, возвращая статус завершения первой.
- параллельно – одновременное выполнение нескольких заданий.
- pee — стандартный ввод в каналы.
- губка — впитывает стандартный ввод и записывает в файл.
- ts — стандартный ввод временной метки.
- vidir — отредактируйте каталог в текстовом редакторе.
- vipe — вставьте текстовый редактор в канал.
- zrun — автоматически распаковывать аргументы команды.
Установите дополнительные утилиты в Linux
Программа moreutils входит в состав многих дистрибутивов Linux, поэтому вы можете установить ее с помощью менеджера пакетов дистрибутива.
В Arch Linux и его производных, таких как Antergos, Manjaro Linux, выполните следующую команду, чтобы установить moreutils.
sudo pacman -S moreutils
В Fedora:
sudo dnf install moreutils
В RHEL, CentOS, Scientific Linux:
sudo yum install epel-release
sudo yum install moreutils
В Debian, Ubuntu, Linux Mint:
sudo apt-get install moreutils
Moreutils предлагает больше полезных утилит Unix
Давайте посмотрим детали использования некоторых инструментов moreutils.
Утилита «Объединить»
Как следует из названия, утилита Объединить объединяет наборы строк из двух файлов с помощью логических операций, таких как «и», «не», «или», «исключающее ИЛИ».
- and — выводит строки, находящиеся в файле1, если они также присутствуют в файле2.
- not — выводит строки, которые есть в файле 1, но отсутствуют в файле 2.
- or — выводит строки, находящиеся в файле file1 или file2.
- xor — выводит строки, находящиеся либо в файле1, либо в файле2, но не в обоих файлах.
Позвольте мне показать вам пример, чтобы вы поняли, что именно будет делать эта утилита. У меня есть два файла: file1 и file2. Вот содержимое этих двух файлов.
$ cat file1
is
was
were
where
there
$ cat file2
is
were
there
Теперь позвольте мне объединить их, используя логическую операцию «и».
$ combine file1 and file2
is
were
there
Как вы видите в приведенном выше примере, логический оператор «и» выводит строки, которые находятся в файле1, если они также присутствуют в файле2. Проще говоря, он отображает общие строки (например, есть, были, там), которые присутствуют в обоих файлах.
Давайте теперь воспользуемся оператором «не» и посмотрим результат.
$ combine file1 not file2
was
where
Как видно из приведенного выше вывода, оператор not отображает строки, которые есть только в файле 1, но не в файле 2.
Утилита «ifdata»
Утилита «ifdata» может использоваться для проверки существования сетевого интерфейса, чтобы получить информацию о сетевом интерфейсе, например его IP-адрес. В отличие от встроенных команд, таких как «ifconfig» или «ip», ifdata имеет простой для анализа вывод, который предназначен для легкого использования сценарием оболочки.
Чтобы отобразить сведения об IP-адресе сетевого интерфейса, скажем, wlp9s0, выполните:
$ ifdata -p wlp9s0
192.168.43.192 255.255.255.0 192.168.43.255 1500
Чтобы отобразить только маску сети, выполните:
$ ifdata -pn wlp9s0
255.255.255.0
Чтобы проверить аппаратный адрес сетевой карты:
$ ifdata -ph wlp9s0
A0:15:46:90:12:3E
Чтобы проверить, существует ли сетевой адаптер или нет, используйте флаг «-pe».
$ ifdata -pe wlp9s0
yes
Команда «Пи»
Это чем-то похоже на команду «tee».
Давайте посмотрим пример использования команды «tee».
$ echo "Welcome to OSTechNIx" | tee file1 file2
Welcome to OSTechNIx
Приведенная выше команда создаст два файла, а именно file1 и file2. Затем добавьте строку «Добро пожаловать в OSTechNix» в оба файла. И, наконец, печатает сообщение «Добро пожаловать в OSTechNix» в вашем терминале.
Команда «Пи» выполняет аналогичную функцию, но немного отличается от команды «Ти». Посмотрите на следующую команду:
$ echo "Welcome to OSTechNIx" | pee cat cat
Welcome to OSTechNIx
Welcome to OSTechNIx
Как вы видите на приведенном выше выводе, два экземпляра команды «cat» получают выходные данные команды «echo» и дважды отображают их в терминале.
Утилита «Губка»
Это еще одна полезная утилита из пакета moreutils. Sponge считывает стандартный ввод и записывает его в указанный файл. В отличие от перенаправления оболочки, губка впитывает все введенные данные перед записью выходного файла.
Посмотрите на содержимое следующего текстового файла.
$ cat file1
I
You
Me
We
Us
Как видите, файл содержит несколько случайных строк, в частности «не» в алфавитном порядке. Вы хотите отсортировать содержимое в алфавитном порядке. Что бы вы сделали?
sort file1 > file1_sorted
Правильно, не так ли? Конечно! Как вы видите в приведенной выше команде, я отсортировал содержимое file1 в алфавитном порядке и сохранил его в новом файле с именем "file1_sorted". Но вы можете сделать то же самое, не создавая новый файл (например, file1_sorted), используя команду «губка», как показано ниже.
sort file1 | sponge file1
Теперь проверьте, отсортировано ли содержимое в алфавитном порядке.
$ cat file1
I
Me
Us
We
You
Видеть? нам не нужно создавать новый файл. Это очень полезно при написании сценариев. И хорошо, что sponge сохраняет разрешения выходного файла, если он уже существует.
Утилита «ts»
Утилита «ts» печатает временную метку в начале каждой строки вывода любой команды Linux.
Посмотрите на вывод следующей команды:
$ ping -c 2 localhost
PING localhost(localhost.localdomain (::1)) 56 data bytes
64 bytes from localhost.localdomain (::1): icmp_seq=1 ttl=64 time=0.055 ms
64 bytes from localhost.localdomain (::1): icmp_seq=2 ttl=64 time=0.079 ms
--- localhost ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1018ms
rtt min/avg/max/mdev = 0.055/0.067/0.079/0.012 ms
Теперь запустите ту же команду с утилитой «ts», как показано ниже.
$ ping -c 2 localhost | ts
Aug 21 13:32:28 PING localhost(localhost (::1)) 56 data bytes
Aug 21 13:32:28 64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.063 ms
Aug 21 13:32:28 64 bytes from localhost (::1): icmp_seq=2 ttl=64 time=0.113 ms
Aug 21 13:32:28
Aug 21 13:32:28 --- localhost ping statistics ---
Aug 21 13:32:28 2 packets transmitted, 2 received, 0% packet loss, time 4ms
Aug 21 13:32:28 rtt min/avg/max/mdev = 0.063/0.088/0.113/0.025 ms
Как вы видите в приведенном выше выводе, ts добавляет метку времени в начале каждой строки. Вот еще один пример.
$ ls -l | ts
Aug 21 13:34:25 total 120
Aug 21 13:34:25 drwxr-xr-x 2 sk users 12288 Aug 20 20:05 Desktop
Aug 21 13:34:25 drwxr-xr-x 2 sk users 4096 Aug 10 18:44 Documents
Aug 21 13:34:25 drwxr-xr-x 24 sk users 12288 Aug 21 13:06 Downloads
[...]
Утилита «Видир»
Утилита «Vidir» позволяет редактировать содержимое указанного каталога в редакторе vi (или в любом другом редакторе $EDITOR). Если каталог не указан, он будет редактировать ваш текущий рабочий каталог.
Следующая команда редактирует содержимое каталога под названием «Рабочий стол».
vidir Desktop/
Отредактируйте содержимое каталога с помощью vidir
Приведенная выше команда откроет указанный каталог в вашем редакторе vi. Каждый элемент в каталоге редактирования будет содержать номер. Теперь вы можете редактировать файлы так же, как в редакторе vi. Скажем, например, удалите строки, чтобы удалить файлы из каталога, или отредактируйте имена файлов, чтобы переименовать файлы.
Вы также можете редактировать подкаталоги. Следующая команда редактирует текущий рабочий каталог вместе с его подкаталогами.
find | vidir -
Обратите внимание на «-» в конце команды. Если в качестве каталога для редактирования указано «-», он считывает список имен файлов из стандартного ввода и отображает их для редактирования.
Если вы хотите редактировать только файлы в текущем рабочем каталоге, вы можете использовать следующую команду:
find -type f | vidir -
Хотите редактировать файлы определенного типа, например файлы .PNG? тогда вы бы использовали:
vidir *.png
Эта команда редактирует только файлы .png в текущем каталоге.
Утилита «Вайп»
Команда «vipe» позволяет вам запустить редактор по умолчанию в середине конвейера Unix и редактировать данные, которые передаются между программами.
Следующая команда открывает редактор vi (конечно, редактор по умолчанию) и позволяет редактировать ввод команды «echo» (т. е. «Добро пожаловать в OSTechNix») и отображает окончательный результат.
$ echo "Welcome to OSTechNIx" | vipe
Hello World
Как вы видите в приведенном выше выводе, я передал входные данные «Добро пожаловать в OSTechNix» в редактор vi, отредактировал их как «Hello World» и отобразил окончательный результат.
Заключение
И это все на данный момент. Я рассмотрел лишь несколько утилит. В «moreutils» есть более полезные утилиты. Я уже упоминал утилиты, включенные в пакет moreutils во вводном разделе. Вы можете прочитать man-страницы для получения более подробной информации о приведенных выше командах. Скажем, чтобы узнать больше о команде «vidir», выполните:
man vidir
Надеюсь это поможет.
Ресурсы:
- Основные утилиты GNU
- Веб-сайт Moreutils