Популярные утилиты и примеры скриптов
Популярные утилиты и примеры скриптов
Оболочка 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"
Скрипт генерирует хеш файла и сохраняет его. Последняя команда проверяет, соответствует ли текущее содержимое файла сохраненному хешу. Изменение любого байта приведет к несоответствию.
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). История развития оболочек представляет собой непрерывный процесс эволюции технологий. Каждая новая версия решала конкретные проблемы своих предшественников и добавляла новые возможности. Стандартные утилиты командной строки включают — Файловые операции — ls, cd, mkdir, rm, cp, mv, chmod, chown, Текстовая обработка — cat, grep, sed, awk, sort, uniq, cut, head, tail, Системная… Примеры переменных окружения — HOME — домашняя директория пользователя, PATH — список директорий для поиска исполняемых файлов, USER — имя текущего пользователя, PWD — текущая рабочая директория Кавычки, точки, запятые, скобки и прочие знаки препинания. Язык Bash предоставляет богатый набор средств для управления логикой выполнения скрипта. Эти конструкции позволяют принимать решения на основе условий и повторять действия многократно. Оболочка… Встроенная команда — это функция, реализованная непосредственно внутри процесса интерпретатора командной строки. Оболочка выполняет такие команды без создания отдельного дочернего процесса. Код… Подстановка значений — это механизм, при котором оболочка заменяет имя переменной на её фактическое значение перед выполнением команды. Существует несколько способов расширения переменных, каждый из… Bash — это язык командной оболочки, который обеспечивает взаимодействие пользователя с операционной системой. Его главная сила заключается не только в выполнении отдельных команд, но и в возможности… Локальная переменная в Bash — это переменная, чья область видимости ограничена телом функции. Такая переменная не влияет на глобальные переменные с тем же именем, существующие вне функции.… Файловая система — это метод организации хранения данных на носителе информации, обеспечивающий упорядоченное размещение файлов и каталогов. Обработка ошибок в Bash базируется на нескольких основных подходах. Выбор метода зависит от контекста задачи и требований к надежности скрипта. Гайд по установке и настройке с написанием первой программы и её запуском.История оболочки Bash
Экосистема скриптов и автоматизации на Bash
Основы языка Bash
Синтаксис и специальные символы в Bash
Ключевые слова и зарезервированные конструкции
Встроенные команды и функции оболочки
Переменные и подстановка значений
Условные операторы и циклы в Bash
Функции и локальные переменные
Работа с файлами, каталогами и процессами
Обработка ошибок и коды возврата
Первая программа на Bash