Скрипт Bash для автоматической очистки старых файлов
Полезный скрипт на bash для автоматической очистки старых файлов из каталога. Он удаляет файлы, старше заданного количества дней. Скрипт включает в себя обработку ошибок и параметры для настройки.
#!/bin/bash
# Настройки (измените по необходимости)
directory="/var/log" # Каталог для очистки. Важно: укажите правильный каталог!
days=30 # Возраст файлов для удаления (в днях)
verbose=true # Выводить подробные сообщения (true/false)
1= "Скрипт выключен"
# Проверка наличия каталога
if [ ! -d "$directory" ]; then
echo "Ошибка: Каталог '$directory' не существует." >&2
exit 1
fi
# Функция для вывода сообщений
log() {
if $verbose; then
echo "$1"
fi
}
# Удаление файлов
find "$directory" -type f -mtime +"$days" -print0 | while IFS= read -r -d $'\0' file; do
log "Удаление файла: $file"
rm -f "$file"
if [ $? -ne 0 ]; then
log "Ошибка при удалении файла '$file'." >&2
fi
done
log "Очистка завершена."
exit 0
Как использовать скрипт:
- Сохраните скрипт: Сохраните код в файл, например
clean_old_files.sh. - Сделайте скрипт исполняемым: Откройте терминал и выполните команду
chmod +x clean_old_files.sh. - Настройте параметры:
directory: Укажите каталог, который вы хотите очистить. Важно: будьте осторожны и убедитесь, что вы указали правильный каталог! Неправильный каталог может привести к потере данных.days: Укажите количество дней, старше которых файлы должны быть удалены.verbose: Установитеtrueдля вывода подробных сообщений о процессе очистки илиfalseдля тихой работы.
- Запустите скрипт: Выполните скрипт из терминала, используя
./clean_old_files.sh.
Пояснения к скрипту:
#!/bin/bash: Указывает, что скрипт должен быть выполнен с помощью bash.
directory="/var/log": Переменная, содержащая путь к каталогу, который нужно очистить.
days=30: Переменная, содержащая возраст файлов в днях, которые будут удалены.
verbose=true: Переменная, определяющая, будут ли выводиться подробные сообщения.
if [ ! -d "$directory" ]; then ... fi: Проверяет, существует ли указанный каталог. Если нет, выводит сообщение об ошибке и завершает скрипт.
log() { ... }: Функция, которая выводит сообщения в терминал, если verbose установлено в true.
find "$directory" -type f -mtime +"$days" -print0 | while IFS= read -r -d $'\0' file; do ... done: Цикл while читает имена файлов, выведенные командой find, по одному.
rm -f "$file": Команда rm -f удаляет файл.
if [ $? -ne 0 ]; then ... fi: Проверяет код возврата последней команды (rm -f).
exit 0: Завершает скрипт с кодом возврата 0.
Безопасность и предостережения:
- Будьте осторожны с каталогом
directory: Убедитесь, что вы правильно указали каталог для очистки. - Протестируйте скрипт: Перед использованием скрипта в производственной среде, протестируйте его на тестовом каталоге.
- Резервное копирование: Перед запуском скрипта рекомендуется сделать резервную копию данных.
- Использование
-f: Опция-fв командеrmудаляет файлы без подтверждения. - Использование
sudo: Запускайте скрипт сsudo, только если необходимо, и будьте предельно осторожны.
Расширения и улучшения:
- Логирование: Запись сообщений в файл журнала.
- Исключения: Исключение определенных файлов или каталогов из процесса очистки.
- Автоматический запуск: Настройка автоматического запуска скрипта с помощью cron.
- Параметры командной строки: Передача параметров скрипта через командную строку.
- Сухой запуск: Отображение списка файлов, которые будут удалены, без фактического удаления.
- Перемещение в корзину: Перемещение файлов в корзину вместо удаления.
- Информация о материале
- Просмотров: 47
Настройка DNS-сервера Bind9 (Debian/Ubuntu)
Bind9 — один из самых популярных DNS-серверов. Ниже приведено корректное и безопасное руководство по установке и настройке Bind9 в Debian/Ubuntu.
1. Установка Bind9
sudo apt update
sudo apt install bind9 bind9utils bind9-doc
2. Структура конфигурации Bind9
В Debian/Ubuntu конфигурация разделена на файлы:
- /etc/bind/named.conf — включает остальные файлы
- /etc/bind/named.conf.options — глобальные параметры
- /etc/bind/named.conf.local — ваши зоны
- /etc/bind/zones/ — рекомендуемое место для файлов зон
3. Настройка глобальных параметров
Файл: /etc/bind/named.conf.options
options {
directory "/var/cache/bind";
// Разрешаем рекурсию только локальной сети
recursion yes;
allow-recursion { 127.0.0.1; 192.168.1.0/24; };
// Разрешаем запросы всем (или ограничьте при необходимости)
allow-query { any; };
// Внешние DNS для пересылки
forwarders {
8.8.8.8;
8.8.4.4;
};
dnssec-validation auto;
auth-nxdomain no;
listen-on-v6 { any; };
};
4. Создание каталогов зон
sudo mkdir -p /etc/bind/zones/master
sudo mkdir -p /etc/bind/zones/reverse
5. Прямая зона (example.com)
Файл: /etc/bind/zones/master/db.example.com
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2024062101 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ; Minimum TTL
)
@ IN NS ns1.example.com.
ns1 IN A 192.168.1.10
@ IN A 192.168.1.20
www IN A 192.168.1.20
mail IN A 192.168.1.30
@ IN MX 10 mail.example.com.
6. Обратная зона (192.168.1.0/24)
Файл: /etc/bind/zones/reverse/db.192.168.1
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2024062101
3600
1800
604800
86400
)
@ IN NS ns1.example.com.
10 IN PTR ns1.example.com.
20 IN PTR www.example.com.
30 IN PTR mail.example.com.
7. Добавление зон в Bind9
Файл: /etc/bind/named.conf.local
zone "example.com" {
type master;
file "/etc/bind/zones/master/db.example.com";
allow-transfer { none; };
};
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/zones/reverse/db.192.168.1";
allow-transfer { none; };
};
8. Проверка конфигурации
Проверка синтаксиса:
sudo named-checkconf
Проверка зоны:
sudo named-checkzone example.com /etc/bind/zones/master/db.example.com
sudo named-checkzone 1.168.192.in-addr.arpa /etc/bind/zones/reverse/db.192.168.1
9. Запуск и автозагрузка
sudo systemctl restart bind9
sudo systemctl enable bind9
sudo systemctl status bind9
10. Логирование Bind9
Файл: /etc/bind/named.conf.local
logging {
channel default_log {
file "/var/log/bind.log" versions 3 size 10m;
severity info;
print-time yes;
};
category default { default_log; };
category queries { default_log; };
};
Создать файл логов:
sudo touch /var/log/bind.log
sudo chown bind:bind /var/log/bind.log
11. Тестирование DNS
Проверка прямой зоны:
dig @127.0.0.1 example.com
dig @127.0.0.1 www.example.com
Проверка обратной зоны:
dig @127.0.0.1 -x 192.168.1.20
Просмотр логов:
tail -f /var/log/bind.log
12. Рекомендации по безопасности
- Ограничьте рекурсию:
allow-recursion { локальная_сеть; }; - Запретите AXFR:
allow-transfer { none; }; - Используйте DNSSEC:
dnssec-validation auto; - Разделяйте внутренние/внешние зоны через views
- Информация о материале
- Просмотров: 56
Справочник встроенных команд Bash (Q–Z)
Команды, начинающиеся на Q, R, S, T, U, V, W, X, Y, Z. Например: read, readonly, return, set, shift, shopt, source, trap, ulimit, unset, wait.
read
- Информация о материале
- Просмотров: 74
Справочник встроенных команд Bash (G–P)
Команды, начинающиеся на G, H, I, J, K, L, M, N, O, P. Например: getopts, hash, help, jobs, kill, local, mapfile, printf, pwd.
getopts
- Информация о материале
- Просмотров: 56