Пример 1 — Мониторинг дискового пространства
Скрипт проверяет, не превышен ли порог использования диска. Если превышен — показывает самые большие файлы и директории.
# disk_monitor.sh
#!/bin/bash
# Пороговое значение для занятого дискового пространства (в процентах)
threshold=70
# Получаем процент занятого дискового пространства корневого раздела
disk_usage=$(df / | awk '{print $5}' | sed 's/%//')
if [ "$disk_usage" -gt "$threshold" ]; then
echo "Disk usage exceeds $threshold% threshold. Searching for largest directories and files..."
echo "Largest directories and files:"
du -ah / | sort -rh | head -n 10
else
echo "Disk usage on the root partition is $disk_usage% (within threshold of $threshold%)."
fi
Как запустить
chmod +x disk_monitor.sh
./disk_monitor.sh
Разбор ключевых строк
df / | awk '{print $5}'— получить 5-ю колонку (Use%) вывода dfsed 's/%//'— убрать символ%, чтобы осталось чистое число[ "$disk_usage" -gt "$threshold" ]— числовое сравнение (greater than)du -ah / | sort -rh | head -n 10— найти 10 самых больших объектов в /
Пример 2 — Системный отчёт
Скрипт собирает полный отчёт о состоянии системы.
# system_report.sh
#!/bin/bash
# Версия операционной системы
os_version=$(cat /etc/os-release | grep "PRETTY_NAME" | cut -d '"' -f 2)
# Дата и время
current_date=$(date "+%Y-%m-%d")
current_time=$(date "+%H:%M:%S")
# Время работы системы
uptime_info=$(uptime -p)
# Загруженность системы
system_load=$(uptime | awk -F'[a-z]:' '{ print $2 }')
# Занятое дисковое пространство
disk_usage=$(df / | awk '{print $5}' | sed 's/%//')
# Топ процессы по использованию памяти
top_processes=$(ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 6)
# Количество процессов
process_count=$(ps -ef | wc -l)
# Количество пользователей
user_count=$(who | wc -l)
# Выводим отчет
echo "System Report"
echo "OS Version: $os_version"
echo "Date: $current_date"
echo "Time: $current_time"
echo "System Uptime: $uptime_info"
echo "System Load: $system_load"
echo "Disk Usage: $disk_usage%"
echo "Top processes by memory usage:"
echo "$top_processes"
echo "Number of processes: $process_count"
echo "Number of logged-in users: $user_count"
Ключевые моменты
uptime -p— удобный вывод: «up 2 hours, 15 minutes»uptime | awk -F'[a-z]:' '{ print $2 }'— разделитель = любая строчная буква + двоеточие;$2— то, что идёт после «load average:»ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 6— заголовок + 5 процессовwho | wc -l— количество строк = количество вошедших пользователей
Пример 3 — Cron-бекап с ротацией архивов
⚠️ Предупреждение: find … -mtime +21 -delete
Эта команда безвозвратно удаляет файлы. Перед первым запуском проверьте корректность переменной
Эта команда безвозвратно удаляет файлы. Перед первым запуском проверьте корректность переменной
$backup_location и замените -delete на -print для тестового прогона.
# backup_script.sh
#!/bin/bash
# Директории для резервного копирования
backup_dirs=("/opt" "/home/ec2-user")
# Директория для хранения архивов
backup_location="/backup"
# Максимальное количество хранимых архивов
max_backup_count=3
# Создаём каталог для хранения бекапов, если он не существует
mkdir -p "$backup_location"
# Проходимся по каждой директории и создаём архив
for dir in "${backup_dirs[@]}"; do
backup_file="$backup_location/$(basename "$dir")_backup_$(date +%Y-%m-%d).tar.gz"
tar -czf "$backup_file" "$dir"
done
# Удаляем старые архивы
# Задание выполняется раз в неделю, поэтому -mtime +21 = старше 3 недель
find "$backup_location" -maxdepth 1 -type f -name "*.tar.gz" -mtime +21 -delete
Настройка cron
crontab -e
# Добавить строку (еженедельно в воскресенье в 2:00):
0 2 * * 0 /home/ec2-user/backup_script.sh >> /home/ec2-user/backup.log 2>&1
Пример 4 — Мониторинг ошибок в логах
# log_monitor.sh
#!/bin/bash
# Директория с логами
log_directory="/var/log"
# Файл для сохранения отчёта
report_file="/tmp/error_report.txt"
# Шаблон для поиска ошибок
error_patterns="(error|Error|ERROR|warning|Warning|WARNING)"
# Поиск ошибок в логах и подсчёт их количества
grep -E -r "$error_patterns" "$log_directory" \
| awk -F ':' '{print $2}' \
| sort \
| uniq -c \
| sort -nr > "$report_file"
# Вывод отчёта в консоль
echo "Error report for logs in $log_directory:"
cat "$report_file"
# Топ-5 наиболее частых ошибок
echo ""
echo "Top 5 most frequent errors:"
head -n 5 "$report_file"
Как запустить
chmod +x log_monitor.sh
./log_monitor.sh