Поиск по сайту:

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

Статьи по данной тематике