Перейти к основному содержимому

Популярные утилиты и примеры скриптов

Разработчику Архитектору

Play ITЗагрузка интерактивного демо…


Популярные утилиты и примеры скриптов

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

Использование сторонних утилит позволяет сократить время выполнения рутинных операций. Профессиональный специалист не пишет код с нуля для каждой новой задачи. Он выбирает проверенный инструмент из существующего арсенала, комбинирует его с другими программами через конвейеры и получает готовое решение за минуты.

Сторонние утилиты часто работают быстрее нативных команд благодаря оптимизации на языке C или Rust. Они поддерживают сложные регулярные выражения, параллельную обработку данных и интерактивные интерфейсы. Установка таких программ происходит через пакетные менеджеры операционной системы или вручную из исходного кода.

В экосистеме Linux и Unix существуют стандарты организации утилит. Большинство программ следует принципу "делай одну вещь и делай её хорошо". Это обеспечивает их совместимость и возможность комбинирования. Вывод одной утилиты становится входом для другой. Такой подход создает гибкую систему, где пользователь может собирать собственные рабочие процессы из отдельных блоков.


Как выбирать утилиту под задачу

Чтобы раздел не превращался в "список названий", используйте быстрый алгоритм выбора:

  • Нужен поиск текста в проекте -> rg (ripgrep) — обзор.
  • Нужен поиск файлов по имени/маске -> fd или find.
  • Нужна структурная обработка JSON/YAML -> jq и yq.
  • Нужна разовая диагностика ресурсов -> htop, ncdu, lsof.
  • Нужна автоматизация через HTTP API -> curl + jq.

Сначала выбирайте минимальный набор инструментов, который решает задачу надежно. Избыточный стек усложняет поддержку скрипта.


Утилиты для работы с текстом и данными

Текстовые данные являются основой большинства процессов в IT. Специализированные утилиты позволяют эффективно обрабатывать большие объемы информации.


jq — обработка JSON

Инструмент jq предназначен для парсинга, фильтрации и преобразования данных в формате JSON. Он работает как командная строка, принимая JSON-строку на вход и выдавая результат на экран.

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

cat users.json | jq '.[] | select(.age > 25) | {name, email}'

В этом примере скрипт читает файл users.json, выбирает пользователей старше 25 лет и выводит только их имена и адреса электронной почты. Результат представлен в удобном для чтения формате.

Утилита поддерживает функции для работы со строками, числами и массивами. Можно выполнять математические вычисления, менять регистр символов и формировать новые структуры данных. Инструмент идеально подходит для обработки ответов веб-сервисов и конфигурационных файлов.


yq — работа с YAML

Аналогичный инструмент для формата YAML называется yq. Он позволяет читать, писать и модифицировать файлы конфигурации, которые часто используются в DevOps и контейнеризации.

yq eval '.services.web.image = "nginx:latest"' docker-compose.yml

Эта команда изменяет образ контейнера в файле docker-compose.yml на новую версию Nginx. Утилита сохраняет структуру файла и комментарии, что делает её безопасной для использования в продакшене.

Инструмент поддерживает операции добавления новых секций, удаления старых и проверки валидности документа. Работает он быстро даже с большими файлами конфигурации.


fd — быстрый поиск файлов

Утилита fd является современной заменой команды find. Она написана на языке Rust и работает значительно быстрее аналогов. Интерфейс программы интуитивно понятен и не требует запоминания сложных флагов.

fd -t f "\.log$" /var/log

Команда ищет все файлы с расширением .log в директории /var/log. Синтаксис использует регулярные выражения по умолчанию. Программа автоматически игнорирует скрытые файлы и папки, если явно не указано иное.

Инструмент поддерживает цветовой вывод результатов и предварительный просмотр содержимого найденных файлов. Можно сортировать результаты по времени изменения или размеру.


ripgrep — интеллектуальный поиск текста

Инструмент ripgrep (сокращенно rg) выполняет поиск текста внутри файлов с учетом контекста. Вводная статья с grep, VS Code и Windows — поиск текста в файлах. Он учитывает структуру проекта и пропускает бинарные файлы, git-игнор и другие ненужные элементы.

rg "function.*init" --type rust

Поиск ищет строки, содержащие слово function и init в файлах с расширением .rs. Программа показывает имя файла, номер строки и сам текст совпадения.

Утилита поддерживает множественные режимы поиска, включая поиск в обратном направлении и поиск только имен файлов. Работает она очень быстро благодаря многопоточности и оптимизации.


Утилиты для мониторинга и анализа системы

Мониторинг состояния системы необходим для своевременного обнаружения проблем и оптимизации производительности.


htop — интерактивный монитор процессов

Программа htop представляет собой улучшенную версию стандартной утилиты top. Она предлагает графический интерфейс с возможностью прокрутки списка процессов, цветового кодирования и интерактивного управления.

htop

Запуск программы открывает окно с текущим состоянием системы. Пользователь видит список процессов, нагрузку на процессор и использование памяти. Клавиши F1–F9 позволяют управлять процессами: убивать, менять приоритет или фильтровать вывод.

Инструмент отображает дерево процессов, показывая родительские и дочерние связи. Это помогает понять структуру работы приложений. Можно сортировать процессы по разным критериям: потреблению CPU, памяти или времени выполнения.


ncdu — анализ дискового пространства

Утилита ncdu (NCurses Disk Usage) визуализирует использование дискового пространства в виде дерева. Она помогает быстро найти файлы, занимающие больше всего места.

ncdu /home/user

Программа сканирует указанную директорию и строит иерархическое представление. Каждый элемент можно открыть для просмотра содержимого. Управление осуществляется клавиатурой — стрелки для навигации, Enter для входа, Backspace для выхода.

Инструмент поддерживает удаление выбранных файлов прямо из интерфейса. Это удобно для очистки временных директорий и логов. Скорость работы высокая благодаря использованию локального сканирования.


iotop — мониторинг ввода-вывода

Программа iotop показывает активность ввода-вывода на уровне процессов. Она помогает выявить приложения, которые сильно нагружают диск.

sudo iotop

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

Инструмент работает в реальном времени, обновляя данные каждые несколько секунд. Можно фильтровать вывод по конкретным процессам или устройствам.


lsof — список открытых файлов

Утилита lsof (List Open Files) показывает все открытые файлы и сокеты в системе. Она связывает идентификаторы процессов с используемыми ресурсами.

lsof -i :80

Команда выводит список процессов, использующих порт 80. Это полезно для диагностики проблем с веб-серверами. Можно искать файлы по имени, пользователю или типу.

Инструмент работает с различными типами файлов — обычные файлы, директории, блокировочные устройства, сокеты сети и IPC. Данные выводятся в табличном виде с подробной информацией о каждом процессе.


Утилиты для сетевого взаимодействия

Сетевые утилиты позволяют анализировать трафик, проверять доступность сервисов и настраивать соединения.


curl — передача данных по сети

Программа curl (Client URL) используется для передачи данных с серверов и получения ответов. Она поддерживает множество протоколов — HTTP, HTTPS, FTP, SMTP и другие.

curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' https://api.example.com/endpoint

Команда отправляет POST-запрос с заголовком и телом в формате JSON. Ответ сервера выводится в консоль. Можно сохранять ответ в файл или использовать его в скриптах.

Инструмент поддерживает авторизацию, заголовки, таймауты и проверку сертификатов. Широко применяется для тестирования API и автоматизации взаимодействия с внешними сервисами.


wget — загрузка файлов

Утилита wget предназначена для загрузки файлов из интернета. Она работает в фоновом режиме и поддерживает возобновление прерванных загрузок.

wget -c https://example.com/large_file.iso

Флаг -c активирует режим продолжения загрузки. Если соединение прервалось, скачивание начнется с того места, где остановилось. Программа также умеет загружать целые сайты рекурсивно.

Инструмент поддерживает прокси, аутентификацию и ограничение скорости. Используется для резервного копирования и автоматической установки пакетов.


nmap — сканер сети

Программа nmap (Сеть Mapper) сканирует сеть для обнаружения активных хостов и открытых портов. Она помогает аудитору безопасности оценить состояние сети.

nmap -sV -O 192.168.1.1

Команда определяет версии сервисов на целевом хосте и пытается определить операционную систему. Результат содержит список открытых портов и информацию о службах.

Инструмент поддерживает различные типы сканирования — TCP, UDP, SYN и другие. Можно сканировать диапазоны IP-адресов или доменные имена.


tcpdump — перехват сетевого трафика

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

sudo tcpdump -i eth0 port 80

Команда перехватывает пакеты на интерфейсе eth0, направленные на порт 80. Вывод показывает заголовки пакетов и полезную нагрузку.

Инструмент поддерживает сохранение трафика в файл для последующего анализа. Можно фильтровать пакеты по адресу, порту или протоколу.


Утилиты для архивации и сжатия

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


tar — создание архивов

Программа tar объединяет множество файлов в один архив. Она поддерживает различные алгоритмы сжатия — gzip, bzip2, xz.

tar -czvf archive.tar.gz folder_to_compress

Флаги указывают на создание (c),verbose вывод (v), сжатие gzip (z) и имя архива (f). Команда создает сжатый архив из указанной директории.

Для распаковки используется флаг -x:

tar -xzvf archive.tar.gz

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


pigz — параллельное сжатие

Утилита pigz (Parallel GNU Zip) является ускоренной версией gzip. Она использует несколько ядер процессора для сжатия данных.

pigz -p 4 file.txt

Флаг -p 4 указывает на использование четырех потоков. Сжатие выполняется в разы быстрее стандартного gzip на многоядерных системах.

Инструмент полностью совместим с gzip. Созданные им архивы можно распаковать обычной утилитой gunzip.


7z — универсальный архиватор

Программа 7-zip поддерживает множество форматов архивов — 7z, ZIP, RAR, TAR, GZIP. Она обеспечивает высокое соотношение сжатия.

7z a -t7z -m0=lzma2 -mx=9 archive.7z folder

Команда создает архив формата 7z с максимальным уровнем сжатия. Поддерживается шифрование паролями и разделение на тома.

Инструмент работает как в графическом, так и в консольном режиме. Имеет встроенный файловый менеджер.


Примеры скриптов Bash с использованием сторонних утилит

Скрипты Bash становятся мощными инструментами при использовании сторонних утилит. Ниже приведены примеры автоматизации реальных задач.


Скрипт мониторинга нагрузки с использованием htop и vmstat

Этот скрипт анализирует нагрузку на систему и отправляет уведомление при превышении порога.

Код ITЗагрузка примера кода…

Скрипт использует команду top для получения данных о загрузке процессора и free для памяти. Значения сравниваются с заданными порогами. При превышении в лог записывается предупреждение. Цикл повторяется каждую минуту.


Скрипт очистки логов с использованием find и logrotate

Инструмент удаляет старые логи, сохраняя только последние записи.

#!/bin/bash

LOG_DIR="/var/log/myapp"
RETENTION_DAYS=7
COMPRESS_AFTER=1

find "$LOG_DIR" -name "*.log" -mtime +$RETENTION_DAYS -delete

find "$LOG_DIR" -name "*.log" -mtime +$COMPRESS_AFTER -exec gzip {} \;

echo "Очистка завершена: $(date)"

Скрипт сначала удаляет файлы старше указанного количества дней. Затем сжимает остальные логи с помощью gzip. Это экономит место на диске и упрощает хранение истории.


Скрипт проверки доступности сервиса с использованием curl

Программа проверяет работоспособность веб-ресурса и логирует статус.

Код ITЗагрузка примера кода…

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

Для production-сценария к такому скрипту обычно добавляют:

  • список URL, а не один адрес;
  • контроль таймаута и jitter между ретраями;
  • отдельный лог ошибок и отдельный лог успешных проверок;
  • отправку алерта в чат или почту при N неудачных циклах подряд.

Дальше этот скрипт удобно запускать по расписанию через cron или systemd timer (см. экосистема и автоматизация и файлы, процессы и cron). Учебные однострочники и мини-скрипты с таблицами разбора — галерея Lab.


Скрипт анализа JSON с использованием jq

Инструмент извлекает данные из ответа API и формирует отчет.

Код ITЗагрузка примера кода…

Скрипт делает запрос к GitHub API, извлекает количество звезд, форков и основной язык. Данные записываются в новый JSON-файл с меткой времени. Форматирование выполнено с помощью jq для корректной обработки значений.


Скрипт поиска больших файлов с использованием fd и du

Инструмент находит файлы, занимающие много места, и выводит их размер.

Код ITЗагрузка примера кода…

Скрипт использует fd для быстрого перебора файлов и du для определения размера. Результаты выводятся только для файлов, превышающих заданный порог. Это позволяет быстро найти объекты, требующие очистки.


Скрипт резервного копирования с использованием rsync

Программа синхронизирует данные между источниками и назначением.

Код ITЗагрузка примера кода…

Флаги -avz обеспечивают архивный режим, сохранение прав доступа и сжатие данных. Флаг --delete удаляет файлы из резервной копии, которых нет в источнике. Это гарантирует полную синхронизацию.

Перед первым запуском с --delete делайте dry-run:

rsync -avzn --delete "$SOURCE_DIR/" "$BACKUP_DIR/${DATE}/"

Так вы увидите, какие файлы будут удалены или перезаписаны, и избежите потери данных из-за неверного пути.


Скрипт проверки целостности данных с использованием sha256sum

Инструмент вычисляет контрольные суммы файлов для проверки их целостности.

#!/bin/bash

FILE_PATH="/etc/config.conf"
CHECKSUM_FILE="/tmp/checksums.sha256"

sha256sum "$FILE_PATH" > "$CHECKSUM_FILE"

echo "Контрольная сумма создана:"
cat "$CHECKSUM_FILE"

# Проверка
sha256sum -c "$CHECKSUM_FILE"

Скрипт генерирует хеш файла и сохраняет его. Последняя команда проверяет, соответствует ли текущее содержимое файла сохраненному хешу. Изменение любого байта приведет к несоответствию.


Основа по протоколу

Базовый разбор HTTP и HTTPS находится в отдельной статье — HTTP как основа веб-интеграций.

Содержание