Магия консоли. Подбираем полезные утилиты для работы в терминале. Часть 1
«Это что, матрица?!» — воскликнет кто‑то из знакомых, глядя через твое плечо на экран ноутбука. Нет, не матрица, просто ты что‑то судорожно печатаешь в терминале. В этой статье я покажу тебе больше двух десятков утилит, которые помогут работать с командной строкой Linux более эффективно, приятно и даже красиво.
СИСТЕМА
Pueue
Утилита Pueue — интересная штука для запуска долгих задач и для работы с созданной очередью задач в системе, конечно. Нужна для тех, кому вполне очевидных для таких случаев jobs
/fg
/bg
/screen
/tmux
по какой‑то причине оказывается недостаточно.
Как пишут сами разработчики, Pueue нужен, когда задачи очень долгие либо их нужно выполнять параллельно, имея при этом полный контроль над ними. Лично мне утилита показалась намного более дружелюбной, чем штатный bg
/fg
.
INFO
Crongo — еще одна попытка создать удобный инструмент для работы с cron. Утилита делает примерно то же самое, что Pueue, так что может в некотором смысле быть альтернативой.
NQ
Nq — еще одна простая утилита, которая позволяет запускать очереди из заданий в системе. Не то чтобы без нее было невозможно жить, но порой очень сильно помогает. Выглядит куда менее привлекательно, чем Pueue, но и в работе проще.
Она настолько простая, что для ее использования достаточно просто увидеть пример:
% mkdir -p /tmp/downloads
% alias qget='NQDIR=/tmp/downloads nq wget'
% alias qwait='NQDIR=/tmp/downloads fq -q'
window1% qget http://mymirror/big1.iso
window2% qget http://mymirror/big2.iso
window3% qget http://mymirror/big3.iso
% qwait
... wait for all downloads to finish ...
Vizex
Если ты работаешь в терминале дольше недели, ты, конечно, знаешь о df
и его сухом выводе. Давай разукрасим его и сделаем ближе к людям!
Vizex и vizexdf — это апгрейд df
, который выполняет свою задачу куда нагляднее и приятнее внешне.
bashtop
В фильмах о хакерах люди видят огромные сводные таблицы с информацией о системе и графиками, а у тебя их до сих пор нет? Не беда! Лови bashtop — это как раз такой дашборд. Если у тебя вдруг есть свободный монитор, на который его можно повесить, — ты знаешь, как добавить +1000 к своей гиканутости в глазах посетителей.
Bashtop умеет показывать не только общую информацию, но и детали по каждому процессу. Позволяет эти процессы сортировать по различным параметрам и легко конфигурируется.
А еще есть реализация этого красавца на Python — bpytop. Выглядит не менее эффектно, да и по возможностям не отстает.
Rhit
Занятная консольная утилита для анализа логов nginx. Встречай Rhit — это, конечно, не GoAccess, но выглядит тоже интересно.
Умеет рисовать графики частоты запросов прямо в консоли.
Есть анализ трендов в запросах и удобный графический вывод этого в консоль.
Конечно же, все можно фильтровать, чтобы отслеживать только необходимое.
Lnav
Lnav — это анализатор логов, который умеет работать не только с nginx, в отличие от Rhit. Вот список его достоинств:
- может сводить все требуемые логи на один экран. Ты можешь задать мониторинг логов сразу нескольких сервисов, и он покажет все сразу;
- умеет подсвечивать текст по формату. Имеется десять встроенных форматов, в том числе один «общий», то есть подходящий почти к любому логу;
- автоматически определяет сжатые логи в форматах gzip и bzip2 и разжимает их на лету;
- умеет фильтровать на основе регулярных выражений. Если выводишь много логов сразу — можно отфильтровать лишнее;
- может строить гистограммы сообщений по времени;
- красиво выводит XML и JSON. Просто нажми Shift+P;
- к логам можно обращаться как к виртуальной SQLite БД, которая обновляется вместе с логами в реальном времени;
- lnav поддерживает разные темы оформления своего интерфейса;
- при вводе команд также есть подсветка синтаксиса и автодополнение.
Прямо на сайте есть готовые бинарники под Linux и macOS: видимо, это на случай, если твой сервер — старый макбук.
Butterfly Backup
Butterfly Backup — это такая интересная обертка вокруг rsync, которая умеет создавать и восстанавливать бэкапы. Список умений действительно внушительный:
- поддержка тихого бэкапа;
- все бэкапы аккуратно рассортированы;
- просмотр сведений о конкретном бэкапе;
- поддержка разных режимов копирования;
- можно бэкапить сразу несколько компов, причем параллельно;
- можно восстанавливать копию даже не на том компьютере, где она была создана. Теоретически, это может быть полезно при миграции на новое оборудование. Более того, можно восстановить бэкап даже на другой операционной системе;
- поддерживаются политики относительно старых бэкапов: их можно удалять по достижении лимита занятого хранилища;
- экспорт бэкапов для удобной перевозки сторонними средствами.
Установить Butterfly Backup можно всего в три команды:
git clone https://github.com/MatteoGuadrini/Butterfly-Backup.git
cd Butterfly-Backup
sudo python3 setup.py
Пример использования от автора утилиты:
# Полная копия
bb backup --computer pc1 --destination /nas/mybackup --data User Config --type MacOS --mode Full
# Инкрементальная копия
bb backup --computer pc1 --destination /nas/mybackup --data User Config --type MacOS
Если просмотреть список копий командой bb list --catalog /nas/mybackup
, то можно увидеть краткое описание каждого снятого бэкапа.
BUTTERFLY BACKUP CATALOG
Backup id: f65e5afe-9734-11e8-b0bb-005056a664e0
Hostname or ip: pc1
Timestamp: 2018-08-03 17:50:36
Backup id: 4f2b5f6e-9939-11e8-9ab6-005056a664e0
Hostname or ip: pc1
Timestamp: 2018-08-06 07:26:46
Backup id: cc6e2744-9944-11e8-b82a-005056a664e0
Hostname or ip: pc1
Timestamp: 2018-08-06 08:49:00
Тут отсутствуют некоторые важные детали, так что давай посмотрим на один из них поближе.
bb list --catalog /nas/mybackup --backup-id f65e5afe-9734-11e8-b0bb-005056a664e0
Backup id: f65e5afe-9734-11e8-b0bb-005056a664e0
Hostname or ip: pc1
Type: Full
Timestamp: 2018-08-03 17:50:36
Start: 2018-08-03 17:50:36
Finish: 2018-08-03 18:02:32
OS: MacOS
ExitCode: 0
Path: /nas/mybackup/pc1/2018_08_03__17_50
List: etc
Users
И наконец, восстановление:
bb restore --computer pc1 --catalog /nas/mybackup --backup-id f65e5afe-9734-11e8-b0bb-005056a664e0
СКРИПТЫ
Bash Bible
Для начинающих и продолжающих жильцов консоли существует сервис Bash Bible (и его родной брат sh bible): там представлены примеры реализации разных задач в скриптах, написанных исключительно на чистом Bash (или sh).
Чтобы далеко не ходить — вот тебе парочка примеров обхода всех файлов и папок в директории на чистом Bash без использования ls
.
# Greedy example. for file in *; do printf '%s\n' "$file" done # PNG files in dir. for file in ~/Pictures/*.png; do printf '%s\n' "$file" done # Iterate over directories. for dir in ~/Downloads/*/; do printf '%s\n' "$dir" done # Brace Expansion. for file in /path/to/parentdir/{file1,file2,subdir/file3}; do printf '%s\n' "$file" done # Iterate recursively. shopt -s globstar for file in ~/Pictures/**/*; do printf '%s\n' "$file" done shopt -u globstar
INFO
Было бы неправильно не упомянуть священный zsh с плагином oh-my-zsh и кастомными темами. Ничего удобнее для терминала так и не придумали.
Полезные однострочники
У меня в закладках лежит интересный ресурс с разнообразными однострочниками — этакая библиотека команд на все случаи жизни.
Вот, например, как смонтировать NTFS раздел из виртуального диска VirtualBox (VDI):
$ mount -t ntfs-3g -o ro,loop,uid=user,gid=group,umask=0007,fmask=0117,offset=0x$(hd -n 1000000 IMAGE.vdi | grep "eb 52 90 4e 54 46 53" | cut -c 1-8) IMAGE.vdi /mnt/vdi-ntfs
Conty
Если ты постоянно работаешь в терминале — порой тебе бывают нужны изолированные песочницы. Некоторые делают их через Docker, создавая контейнер с ОС и копируя туда‑сюда файлы программы; другие создают chroot-окружение и работают в нем. Оба способа требуют большого количества шагов и наличия root, так что применять их неудобно.
Выход есть! Инструмент Conty делает запуск песочницы легким и быстрым. Для запуска контейнера не требуется root, а файлы после выхода из песочницы сохраняются.
Преимуществ можно выделить несколько:
- всего один исполняемый файл. Никакой обвязки — скачал и работаешь;
- собран на базе Arch Linux, то есть сразу содержит актуальные версии драйверов;
- не требует root-прав для запуска;
- содержит Vulkan и OpenGL, то есть подходит для игр;
- работает без оверхеда — это тебе не виртуальная машина;
- изолирует ФС хоста, но обеспечивает удобное взаимодействие песочницы с хостом.
Для работы необходимо всего ничего: tar
, fuse2
, coreutils
и bash
.
Пример запуска от автора:
./conty.sh steam ./conty.sh lutris ./conty.sh playonlinux ./conty.sh wine app.exe
СЕТЬ
SX Network Scanner
По заверениям разработчиков, SX Scanner — это чуть ли не на голову лучшая альтернатива Nmap. Вот список предлагаемых фич:
- в 30 раз быстрее Nmap;
- ARP-сканирование для поиска живых хостов в локальных сетях;
- ICMP-сканирование для детекта правил файрвола;
- классическое TCP SYN сканирование (сканирование с помощью полуоткрытых соединений) для поиска портов;
- сканирование для обхода некоторых файрволов с использованием TCP FIN, NULL и Xmas пакетов. То же самое умеет и Nmap, как ты помнишь;
- можно вручную установить какие угодно флаги в пакетах сканирования, а в отчете получить флаги ответов. Довольно интересная фича, которую я больше нигде не встречал, но и ни разу в ней не нуждался, если честно;
- поиск даже UDP-портов. Надежность поиска, само собой, оставляет желать лучшего, но использование ICMP для уточнения результата — однозначный плюс;
- сканирование некоторых приложений: сюда входит Docker, Elasticsearch и Socks5. Для Docker ищется открытый Docker API, через который читается информация о ноде; для Elasticsearch выгружается информация о кластере и его индексах. С Socks5 все совсем просто — sx сообщает только факт работы Socks5 без каких‑либо подробностей;
- результаты выводит в JSON — все как у людей! Конечно, и для автоматической обработки это куда удобнее.
Sx работает из терминала (как, впрочем, большинство рассмотренных сегодня программ) и полностью написан на Go, чем можно объяснить его быстродействие.
Продолжение следует…