Скрипт — это небольшая программа, которая содержит последовательность действий, созданных для автоматического выполнения задачи.
Задача 1 — Мониторинг дискового пространства
Создать скрипт, который будет мониторить занятое дисковое пространство. Если в корневом разделе файловой системы занято больше 70%, то найти самые большие директории и файлы.
Алгоритм
- Получить процент занятого пространства корневого раздела через
df /. - Выделить число с помощью
awk '{print $5}'(5-я колонка — Use%). - Убрать знак
%командойsed 's/%//'. - Сравнить с порогом:
[ "$disk_usage" -gt "$threshold" ]. - Если превышен — найти 10 самых больших объектов:
du -ah / | sort -rh | head -n 10.
Ключевые команды
# Получить процент использования диска
disk_usage=$(df / | awk '{print $5}' | sed 's/%//')
# Сравнение с порогом
if [ "$disk_usage" -gt "$threshold" ]; then
echo "Disk usage exceeds threshold"
fi
# Найти самые большие объекты
du -ah / | sort -rh | head -n 10
Задача 2 — Системный отчёт
Создать скрипт, который готовит отчёт о системе: версия ОС, дата и время, время работы, загруженность, дисковое пространство, топ процессов, количество пользователей.
Новые команды
Показывает время работы системы, количество пользователей и среднюю нагрузку.
uptime -p — вывод в читаемом формате: up 2 hours, 15 minutesuptime | awk -F'[a-z]:' '{ print $2 }' — извлечь только данные о нагрузке
Показывает список авторизованных пользователей.
who | wc -l — подсчитать количество активных пользователей
Алгоритм
# Версия операционной системы
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/%//')
# Топ процессы по использованию памяти (первые 6 строк = заголовок + 5 процессов)
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)
Объяснение флагов ps
-e— все процессы (эквивалент-A)-o pid,ppid,cmd,%mem,%cpu— выбрать конкретные поля для вывода--sort=-%mem— сортировка по убыванию использования памятиhead -n 6— первые 6 строк (заголовок + 5 самых «тяжёлых» процессов)
Задача 3 — Cron-бекап
Создать задание, которое раз в неделю (каждую неделю в воскресенье в 2 часа ночи) бекапит /opt и /home/ec2-user, создавая архивы. Хранить не более 3 копий.
Расписание cron
# Каждую неделю в воскресенье в 2:00 ночи
0 2 * * 0 /полный/путь/к/backup_script.sh >> /полный/путь/к/backup.log 2>&1
#| | | | |
#| | | | день недели: 0 = воскресенье
#| | | месяц: * = любой
#| | день месяца: * = любой
#| час: 2 = 2:00 ночи
#минуты: 0
Логика ротации архивов
Задание выполняется раз в неделю. Чтобы хранить не более 3 копий — удалять архивы старше 21 дня (3 недели × 7 дней):
# Удалить архивы старше 21 дня
find "$backup_location" -maxdepth 1 -type f -name "*.tar.gz" -mtime +21 -delete
Флаг
-delete безвозвратно удаляет файлы. Перед запуском обязательно проверьте правильность переменной $backup_location и значение -mtime. Для проверки без удаления замените -delete на -print.
Параметры скрипта
backup_dirs=("/opt" "/home/ec2-user")
backup_location="/backup"
max_backup_count=3
Задача 4 — Мониторинг логов
Создать скрипт, который проверяет наличие ошибок в логах директории /var/log и готовит отчёт об их количестве и самых частых ошибках.
Шаблон для поиска ошибок
# Шаблон: искать error/Error/ERROR/warning/Warning/WARNING
error_patterns="(error|Error|ERROR|warning|Warning|WARNING)"
Алгоритм
- Рекурсивно искать по шаблону в директории:
grep -E -r "$error_patterns" "$log_directory" - Выделить только текст ошибки:
awk -F ':' '{print $2}' - Отсортировать строки:
sort - Посчитать уникальные + отсортировать по частоте:
uniq -c | sort -nr
# Поиск и подсчёт ошибок
grep -E -r "$error_patterns" "$log_directory" \
| awk -F ':' '{print $2}' \
| sort \
| uniq -c \
| sort -nr > "$report_file"
# Топ-5 ошибок
head -n 5 "$report_file"
Объяснение флагов
grep -E— расширенные регулярные выражения (ERE)grep -r— рекурсивный поиск по поддиректориямuniq -c— подсчитать количество одинаковых строк (нужна предварительная сортировка)sort -nr— числовая сортировка в порядке убывания