#!/usr/bin/bash
# Скрипт системного обслуживания Linux Debian
# Выполняет обновление системы, очистку, проверку дискового пространства и резервное копирование конфигураций
# Параметры резервного копирования
BACKUP_DIR="$HOME/system_backup_$(date +%Y-%m-%d_%H-%M-%S)"  # Создает имя папки с текущей датой и временем для резервных копий
CONFIG_FILES=(                                               # Массив с путями к важным конфигурационным файлам
    "/etc/fstab"
    "/etc/hosts"
    "/etc/passwd"
    "/etc/group"
    "/etc/sudoers"
)
# Функция вывода заголовка
function print_header() {
    echo                                                    # Печатает пустую строку для визуального разделения
    echo "=============================="                  # Печатает строку-разделитель
    echo "$1"                                               # Печатает заголовок раздела
    echo "=============================="                  # Печатает строку-разделитель
}
# Проверка запуска от root
if [ "$EUID" -ne 0 ]; then                                 # Проверяет, запущен ли скрипт с правами суперпользователя
    echo "Пожалуйста, запустите скрипт от имени root (sudo)."  # Выводит сообщение об ошибке, если нет прав root
    exit 1                                                 # Завершает работу скрипта с ошибкой
fi
# Обновление системы
print_header "Обновление системы"                          # Выводит заголовок раздела обновления
apt update && apt upgrade -y                               # Обновляет список пакетов и устанавливает все доступные обновления
# Очистка системы
print_header "Очистка системы"                             # Выводит заголовок раздела очистки
apt autoremove -y                                          # Удаляет неиспользуемые пакеты и зависимости
apt clean                                                 # Очищает кеш скачанных пакетов
rm -rf /tmp/*                                             # Удаляет все файлы из временной папки /tmp
# Проверка дискового пространства
print_header "Проверка дискового пространства"            # Выводит заголовок раздела проверки диска
df -h /                                                   # Показывает использование дискового пространства на корневом разделе в удобочитаемом формате
# Создание директории для резервных копий
print_header "Создание резервной копии конфигурационных файлов"  # Выводит заголовок раздела резервного копирования
mkdir -p "$BACKUP_DIR"                                     # Создает папку для резервных копий, если её нет
for file in "${CONFIG_FILES[@]}"; do                       # Запускает цикл по списку файлов конфигурации
    if [ -f "$file" ]; then                                # Проверяет, существует ли файл
        cp "$file" "$BACKUP_DIR"                           # Копирует файл в папку резервных копий
        echo "Скопирован: $file"                           # Сообщает об успешном копировании
    else
        echo "Файл не найден: $file"                       # Сообщает, если файл не найден
    fi
done
echo "Резервное копирование завершено. Файлы сохранены в: $BACKUP_DIR"  # Итоговое сообщение о завершении резервного копирования
# Вывод статистики использования памяти
print_header "Статистика использования памяти"             # Выводит заголовок раздела памяти
free -h                                                    # Показывает использование оперативной памяти в удобочитаемом формате
# Проверка активных служб
print_header "Проверка активных служб"                     # Выводит заголовок раздела активных служб
systemctl list-units --type=service --state=running | head -20  # Показывает первые 20 запущенных служб
echo                                                      # Печатает пустую строку для отделения
echo "Системное обслуживание завершено."                 # Выводит финальное сообщение о завершении работы скрипта
