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

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

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

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

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

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

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

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


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

Текстовые данные являются основой большинства процессов в 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) выполняет поиск текста внутри файлов с учетом контекста. Он учитывает структуру проекта и пропускает бинарные файлы, 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

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

#!/bin/bash

CPU_THRESHOLD=80
MEM_THRESHOLD=90
LOG_FILE="/var/log/system_monitor.log"

check_load() {
local cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
local mem_usage=$(free | awk '/Mem:/ {printf "%.0f", $3/$2 * 100}')

echo "$(date '+%Y-%m-%d %H:%M:%S') - CPU: ${cpu_usage}%, Memory: ${mem_usage}%" >> "$LOG_FILE"

if (( $(echo "$cpu_usage > $CPU_THRESHOLD" | bc -l) )); then
echo "⚠️ Предупреждение: Загрузка процессора выше ${CPU_THRESHOLD}%" >> "$LOG_FILE"
fi

if (( $(echo "$mem_usage > $MEM_THRESHOLD" | bc -l) )); then
echo "⚠️ Предупреждение: Использование памяти выше ${MEM_THRESHOLD}%" >> "$LOG_FILE"
fi
}

while true; do
check_load
sleep 60
done

Скрипт использует команду 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

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

#!/bin/bash

URL="https://example.com"
MAX_RETRIES=3
DELAY=5
LOG_FILE="/var/log/service_check.log"

for i in $(seq 1 $MAX_RETRIES); do
STATUS_CODE=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 5 "$URL")

if [ "$STATUS_CODE" -eq 200 ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - Сервис доступен (HTTP $STATUS_CODE)" >> "$LOG_FILE"
exit 0
else
echo "$(date '+%Y-%m-%d %H:%M:%S') - Попытка $i: Сервис недоступен (HTTP $STATUS_CODE)" >> "$LOG_FILE"
sleep $DELAY
fi
done

echo "$(date '+%Y-%m-%d %H:%M:%S') - Сервис недоступен после $MAX_RETRIES попыток" >> "$LOG_FILE"
exit 1

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


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

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

#!/bin/bash

API_URL="https://api.github.com/repos/spirzen/it-knowledge-base"
OUTPUT_FILE="repo_stats.json"

response=$(curl -s "$API_URL")

stars=$(echo "$response" | jq '.stargazers_count')
forks=$(echo "$response" | jq '.forks_count')
language=$(echo "$response" | jq '.language')

cat > "$OUTPUT_FILE" << EOF
{
"repository": "spirzen/it-knowledge-base",
"stars": $stars,
"forks": $forks,
"primary_language": "$language",
"checked_at": "$(date -Iseconds)"
}
EOF

echo "Статистика сохранена в $OUTPUT_FILE"
cat "$OUTPUT_FILE"

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


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

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

#!/bin/bash

SEARCH_DIR="/home/user"
MIN_SIZE_MB=100

echo "Поиск файлов размером более ${MIN_SIZE_MB} МБ..."

fd -t f -g "*.*" "$SEARCH_DIR" | while read file; do
size_mb=$(du -sm "$file" | cut -f1)

if [ "$size_mb" -ge "$MIN_SIZE_MB" ]; then
echo "📦 $file (${size_mb} MB)"
fi
done

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


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

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

#!/bin/bash

SOURCE_DIR="/Данные/projects"
BACKUP_DIR="/backup/daily"
DATE=$(date +%Y-%m-%d)
LOG_FILE="/var/log/rsync_backup.log"

mkdir -p "$BACKUP_DIR"

rsync -avz --delete "$SOURCE_DIR/" "$BACKUP_DIR/${DATE}/" >> "$LOG_FILE" 2>&1

if [ $? -eq 0 ]; then
echo "✅ Резервное копирование завершено успешно" >> "$LOG_FILE"
else
echo "❌ Ошибка при резервном копировании" >> "$LOG_FILE"
fi

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


Скрипт проверки целостности данных с использованием 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"

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


См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).

Освоение главы0%