Приготовьтесь к путешествию в “кроличью нору” бинарных файлов 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
.
Читайте также:
- Создание общей библиотеки Linux
- 13 Горячих клавиш, которые должен знать каждый пользователь Ubuntu 18.10
- Как установить Linux Mint рядом с Windows 10 [инструкция для чайников]
Читайте нас в Telegram, VK и Дзен
Перевод статьи Tate Galbraith: 6 More Unique Linux Utilities You Forgot About