Приготовьтесь к путешествию в “кроличью нору” бинарных файлов Linux. Мы заглянем в самые потаенные уголки /usr/bin и исследуем уникальные и интересные программы, смахнув с них пыль времен как с затерянных драгоценных камней. На первый взгляд они могут показаться устаревшими, однако это не так. Они все еще представляют собой весьма полезный инструмент для программиста. 

Откроем же для себя еще больше удивительных утилит, которые таит Linux.

1. fold

Начнем обзор с небольшой лаконичной утилиты, позволяющей свертывать строки ввода до определенной длины. Длина задается в байтах или пробелах. С помощью утилиты fold вы быстро найдете подход к файлам с разной длиной строк.

Допустим, у нас есть строка длиной в 6 символов. Ограничим каждую строку до 5 символов, а остаток перенесем. Используя fold, решаем эту задачу следующей командой:

echo "123456" | fold -w 5

Получаем результат:

12345
6

fold позволяет быстро привести текст в соответствие с установленными ограничениями длины. С этой утилитой удобно разбивать длинные потоки текста и применять ограничения длины строки в коде и других конфигурационных файлах.

С дополнительной информацией по fold можно ознакомиться по ссылке.

2. column

Переходим к рассмотрению следующей суперэффективной утилиты форматирования  —  column. Она создает столбцы в текстовом выводе и даже генерирует целые таблицы  —  и все это из командной строки. 

Такой же результат дают и другие утилиты, например awk, но column заточена именно под это конкретное использование, что упрощает работу с ней и запоминание синтаксиса. 

Построим простую таблицу на основе нескольких строк ввода. Для этого выполняем команду: 

echo -e "one two three\n1 2 3\n111111 222222 333322" | column -t

Получаем результат:

one     two     three
1 2 3
111111 222222 333322

Как видно, вывод автоматически форматируется в аккуратно выровненные столбцы. На выходе создается небольшая таблица, а также автоматически меняется размер в зависимости от длины каждой входной строки.

Если вы работаете с удлиненными наборами неструктурированных данных в командной строке и намерены быстро упорядочить их в виде таблицы, то утилита column станет незаменимым помощником.

На странице руководства Linux в разделе column описаны дополнительные детали применения утилиты и уникальные способы обработки разных входных данных.

3. sg

Вы наверняка слышали о команде newgrp, которая выполняет команды от имени других групп. Однако для этой же цели существует более простая утилита  —  sg. Она позволяет напрямую выполнять команды, используя права доступа другой заданной группы. Не нужно ничего передавать или менять существующие группы оболочки: вы просто указываете группу и команду.

Для выполнения ls из группы admin делаем так:

sg admin ls

Таким образом мы переключаем команду ls на выполнение с правами доступа группы admin. По завершению ее действия возвращаемся к обычным правам группы до выполнения.

Команда sg помогает проверять новые права доступа группы и быстро переключать контексты для запуска программы из другой группы.

На странице руководства Linux содержится дополнительная полезная информация по команде sg.

4. xxd

Утилита xxd  —  один из многочисленных способов выполнения шестнадцатеричных дампов в Linux. В распоряжении программистов есть масса утилит с похожими функциональностями, но программа xxd немного отличается. Ее дополнительное преимущество в том, что она позволяет создавать шестнадцатеричный код и преобразовывать его обратно в исходный бинарный формат. Кроме того, предоставляется множество флагов конфигурации и возможность применять патчи для бинарных файлов.

Попробуем получить шестнадцатеричный дамп файла с именем foo:

1234
5678

Все, что нужно сделать,  —  предоставить входные данные, и xxd автоматически закодирует файл в stdout (полезная функциональность по умолчанию для коротких входных файлов):

xxd foo

00000000: 3132 3334 0a35 3637 380a 1234.5678.

Вы также можете напрямую вывести данные в файл дампа, передавая дополнительный параметр имени файла (англ. filename):

xxd foo bar

Данная команда отправляет шестнадцатеричный дамп в файл с именем bar.

Ссылка на страницу руководства Linux по xxd.

5. pwdx

Эта небольшая удобная утилита родом из того же семейства, что и всеми любимая и ценимая утилита ps. pwdx определяет текущую рабочую директорию запущенного процесса. Вы просто передаете ей идентификатор PID, и она сообщает, где именно выполняется рабочий процесс.

Узнаем, в какой директории на компьютере работает процесс cron. Сначала определяем PID, выполняя поиск командой ps:

ps aux | grep cron

> root 612 0.0 0.0 7260 2708 ? Ss May06 0:11 /usr/sbin/cron -f

Как видно, PID процесса cron  —  612. Теперь определяем рабочую директорию этого процесса, передавая найденный PID в pwdx:

sudo pwdx 612

> 612: /var/spool/cron

Поскольку cron является системным процессом, для получения о нем информации потребуется команда sudo. После ее выполнения мы узнаём текущую рабочую директорию cron, а именно /var/spool/cron.

Данная утилита может стать эффективным инструментом поиска и устранения ошибок, особенно в случае проблем с областью видимости директории. Вы проводите быструю проверку с помощью pwdx и определяете, из какой именно директории, по расчетам процесса, он должен быть запущен.

Ссылка на страницу руководства Linux по pwdx.

6. write

Возможно, сразу и не угадаешь, что делает эта команда. Она уже давно доступна в Linux, с 6-ой версии Unix 1975 года.

Утилита write позволяет отправлять сообщения другим пользователям в той же системе. Вы выбираете любого пользователя, вошедшего в систему, и отправляете ему сообщение. Указываете имя пользователя, переходите в интерактивную оболочку и пишите предназначенный для него текст. Все, что вы вводите, включая переходы на новые строки, появляется в консоли этого пользователя.

Пример:

write <username>

Эта команда переводит в интерактивную консоль для отправки сообщений соответствующему пользователю. Имейте в виду, что такой способ отправки сообщений носит принудительный характер. Пользователи сразу же начинают получать набираемый вами текст в своей консоли. Не появляется никакого предупреждения или диалогового окна с сообщением, предлагающего принять этот текст. Возникает ощущение, что терминал заколдовали. Кроме того, пользователи не могут ответить на сообщение из-за одностороннего формата взаимодействия.

Конечно же, в настоящее время есть более эффективные способы обработки межпользовательских сообщений. Однако эта утилита важна как часть истории разработки компьютерных систем. Уверен, что и сейчас ей можно найти как продуктивное, так и злонамеренное применение.

Ссылка на страницу руководства Linux по write.

Читайте также:

Читайте нас в TelegramVK и Дзен


Перевод статьи Tate Galbraith: 6 More Unique Linux Utilities You Forgot About

Предыдущая статьяИнтеграция Google Maps в приложение Jetpack Compose 
Следующая статьяСовместное использование кода в микросервисах и микрофронтендах: в чем разница