Perl скрипты для автоматизации в Linux
Коллекция полезных Perl скриптов для автоматизации задач в Linux. Каждый скрипт сопровождается подробным объяснением и примерами использования.
1. Управление системой
1.1 Мониторинг использования диска
#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
my $threshold = 90; # Процент использования диска
my $disk_usage = qx(df -h / | tail -1 | awk '{print \$5}' | sed 's/%//');
if ($disk_usage > $threshold) {
print "Внимание! Использование диска: $disk_usage%\n";
print "Начинаем поиск больших файлов...\n";
find({
wanted => sub {
my $size = -s $_;
print "$File::Find::name: $size байт\n" if $size > 100000000;
}
}, '/home');
}
Скрипт мониторит использование диска и находит большие файлы, если использование превышает заданный порог.
1.2 Мониторинг процессов
#!/usr/bin/perl
use strict;
use warnings;
use Proc::ProcessTable;
my $t = Proc::ProcessTable->new;
my $threshold = 50; # Процент использования CPU
foreach my $p (@{$t->table}) {
if ($p->pctcpu > $threshold) {
print "Процесс $p->{pid} ($p->{cmndline}) использует $p->{pctcpu}% CPU\n";
}
}
Скрипт отслеживает процессы, использующие более 50% CPU, и выводит информацию о них.
2. Управление файлами
2.1 Автоматическая очистка логов
#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
use POSIX qw(strftime);
my $log_dir = '/var/log';
my $days_to_keep = 30;
my $current_time = time;
find({
wanted => sub {
if (-f $_ and $_ =~ /\.log$/) {
my $mtime = -M $_;
if ($mtime > $days_to_keep) {
print "Удаление: $File::Find::name\n";
unlink $_;
}
}
}
}, $log_dir);
Скрипт удаляет лог-файлы старше 30 дней в указанной директории.
2.2 Резервное копирование файлов
#!/usr/bin/perl
use strict;
use warnings;
use File::Copy;
use POSIX qw(strftime);
my $source_dir = '/home/user/documents';
my $backup_dir = '/backup';
my $date = strftime "%Y-%m-%d", localtime;
my $backup_path = "$backup_dir/backup_$date";
mkdir $backup_path unless -d $backup_path;
opendir(my $dh, $source_dir) or die "Не могу открыть директорию: $!";
while (my $file = readdir($dh)) {
next if $file =~ /^\./;
my $source = "$source_dir/$file";
my $dest = "$backup_path/$file";
copy($source, $dest) or print "Ошибка копирования $file: $!\n";
}
closedir($dh);
Скрипт создает резервную копию файлов с датой в имени директории.
3. Сетевые задачи
3.1 Мониторинг сетевых соединений
#!/usr/bin/perl
use strict;
use warnings;
use Net::Ping;
my $p = Net::Ping->new("icmp");
my @hosts = qw(google.com yandex.ru github.com);
foreach my $host (@hosts) {
if ($p->ping($host)) {
print "$host доступен\n";
} else {
print "$host недоступен\n";
}
}
$p->close;
Скрипт проверяет доступность указанных хостов через ICMP пинг.
3.2 Мониторинг портов
#!/usr/bin/perl
use strict;
use warnings;
use IO::Socket::INET;
my @ports = (22, 80, 443);
my $host = 'localhost';
foreach my $port (@ports) {
my $socket = IO::Socket::INET->new(
PeerAddr => $host,
PeerPort => $port,
Proto => 'tcp',
Timeout => 2
);
if ($socket) {
print "Порт $port открыт\n";
close($socket);
} else {
print "Порт $port закрыт\n";
}
}
Скрипт проверяет доступность указанных портов на локальной машине.
4. Автоматизация системных задач
4.1 Автоматическое обновление системы
#!/usr/bin/perl
use strict;
use warnings;
my $update_cmd = 'apt-get update && apt-get upgrade -y';
my $log_file = '/var/log/system_update.log';
open(my $log, '>>', $log_file) or die "Не могу открыть лог-файл: $!";
print $log "Начало обновления: " . scalar(localtime) . "\n";
my $output = qx($update_cmd);
print $log "$output\n";
print $log "Обновление завершено: " . scalar(localtime) . "\n";
close($log);
Скрипт автоматически обновляет систему и записывает результаты в лог-файл.
4.2 Мониторинг сервисов
#!/usr/bin/perl
use strict;
use warnings;
my @services = qw(apache2 mysql nginx);
foreach my $service (@services) {
my $status = qx(systemctl is-active $service);
chomp($status);
if ($status ne "active") {
print "Сервис $service неактивен. Попытка перезапуска...\n";
system("systemctl restart $service");
} else {
print "Сервис $service работает нормально\n";
}
}
Скрипт проверяет статус указанных сервисов и перезапускает их при необходимости.
5. Управление пользователями
5.1 Создание пользователей из CSV
#!/usr/bin/perl
use strict;
use warnings;
use Text::CSV;
my $csv = Text::CSV->new({ binary => 1 });
open(my $fh, '<', 'users.csv') or die "Не могу открыть файл: $!";
while (my $row = $csv->getline($fh)) {
my ($username, $fullname, $group) = @$row;
system("useradd -m -c '$fullname' -G $group $username");
system("echo '$username:password123' | chpasswd");
print "Создан пользователь: $username\n";
}
close($fh);
Скрипт создает пользователей из CSV-файла с указанными параметрами.
5.2 Проверка прав доступа
#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
my $dir = '/home';
my $max_perms = 0755;
find({
wanted => sub {
if (-f $_) {
my $mode = (stat($_))[2] & 07777;
if ($mode > $max_perms) {
print "Найден файл с небезопасными правами: $File::Find::name\n";
print "Текущие права: $mode\n";
chmod $max_perms, $_;
}
}
}
}, $dir);
Скрипт проверяет права доступа к файлам и исправляет небезопасные настройки.
Заключение
Эти скрипты демонстрируют возможности Perl для автоматизации задач в Linux. Они могут быть использованы как основа для создания более сложных систем автоматизации. При использовании скриптов важно:
- Проверять права доступа перед выполнением
- Тестировать скрипты в безопасном окружении
- Добавлять обработку ошибок
- Вести логирование действий
Для дальнейшего изучения рекомендуется:
- Изучить документацию по используемым модулям
- Добавить обработку исключений
- Реализовать отправку уведомлений
- Создать конфигурационные файлы