Скрипт конфигурации DHCP

Допустим в конфигурационный файл DHCP сервера нужно добавить много подсетей, например от 172.16.1.0 до 172.16.100.0, в этом случае поможет данный скрипт.
Скачать можно отсюда.

Скрипт необходимо сделать выполняемым и запустить из linux:

chmod 755 script_dhcp_conf.php
./script_dhcp_conf.php

Результат скопировать в буфер обмена и вставить в файл конфигурации DHCP (в putty копирование выполняется комбинацией клавиш Ctrl+Ins).

Пример скрипта:

#!/usr/bin/php

<?php

for($i=1; $i<=100; $i++)
{
print
("
subnet 172.16.$i.0 netmask 255.255.255.0 {
       option routers 172.16.$i.1;
       option domain-name-servers  8.8.8.8, 8.8.4.4;
       option subnet-mask 255.255.255.0;
       default-lease-time 86400;
       max-lease-time 86400;
       next-server 172.16.$i.1;

{#172.16.$i.2-254#}
}
");
}

?>

Резервное копирование конфигурации Cisco Catalyst 6500

Для теста набросал скрипт автоматического резервного копирования конфигурации Cisco Catalyst 6509-E.

Собственно сам скрипт:

#!/bin/bash
# Backup CISCO config
(
sleep 5
echo "user"
sleep 4
echo "password"
sleep 4
echo "copy running-config tftp:"
sleep 2
echo "192.168.1.4"
sleep 2
echo "cisco.cfg"
sleep 6

echo "exit"
) | telnet 192.168.1.5
mv /srv/tftp/cisco.cfg /backups/devices/cisco/`date +%Y-%m-%d`_cisco.cfg

find /backups/devices/cisco/ -type f -mtime +30 -exec rm {} \;

Содержимое скрипта добавим например в файл backup_cisco.sh и добавим его в cron, добавив указанную ниже строку в файл /etc/crontab:

0 2 * * * root /backups/scripts/backup_cisco.sh > /dev/null 2>&1

Файл можно открыть например в текстовом редакторе nano (Ctrl+X для выхода, y/n для сохранения или отмены изменений):

sudo nano /etc/crontab

Скрипт выполняет подключение по telnet к 192.168.1.5 и копирует конфигурацию на tftp сервер 192.168.1.4, потом файл перемещается в удобную директорию для хранения.
Последняя строчка в скрипте удаляет файлы старее 30 дней.
Как запустить tftp сервер смотрите в моих статьях: Установка и настройка TFTP сервера в Ubuntu или Запуск TFTP сервера на Windows.
Смотрите также: Использование и настройка CRON.

Скрипт архивирования файлов за прошлый месяц

Понадобилось как-то написать скрипт который должен был каждого первого числа архивировать из одной папки только файлы с датой прошлого месяца, помещать архив в отдельную директорию и удалять файлы которые архивировались.

Вот собственно сам скрипт:

zip -rm -tt $(date +%Y-%m-01) -t $(date +%Y-%m-01 -d 'last month') "/srv/samba/archive/$(date +%Y-%m-%d)" /srv/samba/dir/

Пример добавления в /etc/crontab для автоматического запуска каждого первого числа месяца в 9 часов 30 минут:

30 9 1 * * root /backups/scripts/ktb/zip_checks.sh > /dev/null 2>&1

Скрипт резервного копирования конфигурации DOCSIS ARRIS Cadant C3 CMTS

Собственно вот мой скрипт:

#!/bin/bash
# Backup DOCSIS CADANTS config
(
sleep 5
echo "user"
sleep 5
echo "password"
sleep 5
echo "enable"
sleep 2
echo "password"
sleep 2
echo "copy startup-configuration tftp://192.168.0.1/cadant1.xml"
sleep 5
echo "exit"
) | telnet 192.168.0.50
mv /srv/tftp/cadant1.xml /backups/devices/docsis/`date +%Y-%m-%d`_cadant1.xml

Где 192.168.0.50 — cadant, 192.168.0.1 — tftp сервер.

Вы можете добавить скрипт в /etc/crontab для автоматического выполнения (например, каждый день в час ночи):

0 1 * * * root /path/to/script/backup_cadants.sh > /dev/null 2>&1

Выполнение SQL запроса из скрипта в Linux

Понадобилось недавно написать скрипт выполняющий sql запрос в базу MySQL.
Пример содержимого:

# Описание, тут я написал для других что скрипт добавлен в crontab, дабы его не переместили
mysql -u ПОЛЬЗОВАТЕЛЬ -pПАРОЛЬ -h 127.0.0.1 -e "UPDATE nika_system.abon SET otkl=0 WHERE depozit > '10' AND (otkl='-1' OR otkl='-2');";

Чтобы скрипт выполнялся автоматически, откроем в любом текстовом редакторе файл crontab (в редакторе nano CTRL+X для выхода и y/n для сохранения или отмены изменений):

sudo nano /etc/crontab

Добавим в него следующую строку:

0 9 * * * root /home/nika/scripts/reset_credit_nika.sh > /dev/null 2>&1

Теперь ежедневно в 9 утра скрипт будет выполняться.

Приведу пример ежедневного автоматического вывода данных из sql таблицы в текстовый файл:

#!/bin/bash
mysql -u ПОЛЬЗОВАТЕЛЬ -pПАРОЛЬ -h 192.168.1.1 -s -N -e "SELECT id FROM nika_system.abon WHERE tarif=109;";

В /etc/crontab добавим:

0 8 * * * root /scripts/freektb.sh > /srv/samba/dir/mirazh/$(date +%Y-%m-%d).txt

В целях безопасности лучше не указывать пароль в скриптах, смотрите мою статью — Подключение к MySQL из localhost без ввода пароля

Как преобразовать список IP-адресов в DNS-имена

В Linux преобразовать список IP-адресов в DNS-имена можно например простеньким скриптом.

Для этого создадим пустой файл с расширением .sh, сделаем его исполняемым и добавим в него содержимое:

#!/bin/sh
while read ip traf ; do
    name=`host $ip|awk '{print $NF}'`
    echo -e "$name\t$ip\t$traf"
done >name_ip_traf.lst <ip_traf.lst

Где ip_traf.lst — файл со списком IP-адресов которые необходимо преобразовать в DNS-имена.

Исполняемым его можно сделать командой:

chmod +rwx file.sh

Запускать скрипт необходимо находясь в директории где он находится командой:

./file.sh

Или запустить указав полный путь:

/dir/file.sh

После запуска необходимо подождать некоторое время либо оборвать выполнение комбинацией клавиш CTRL+C.

Bash скрипт перезагрузки оборудования через telnet

Заметил что некоторое дешевое управляемое оборудование, может через несколько дней или недель начать некорректно работать, поэтому возникла идея написать скрипт перезагрузки и добавить его в cron.

Содержимое скрипта:

#!/bin/bash
(
sleep 5
echo "admin"
sleep 5
echo "password"
sleep 5
echo "reboot"
sleep 5
echo "y"
sleep 5
echo "quit"
) | telnet 192.168.1.10

sleep 5 означает паузу в 5 секунд после каждой команды, это значение оптимально для долго думающего оборудования. К примеру для клиентских коммутаторов D-Link DES-3200 паузу можно вовсе убрать или выставить 1.

Смотрите также:
Использование и настройка CRON

Скрипт удаления старых файлов

Недавно делал что-то типа частного файлообменника, и чтобы не контролировать что пользователи закачивают, добавил скрипт в cron чтобы файлы которым больше 3 дней удалялись автоматически.

Пример команды для удаления файлов которым больше N дней:

find /var/www/share/ -type f -mtime +N -exec rm {} \;

Если нужно удалять директории и все что в них есть, тогда этой командой:

find /var/www/share/ -type d -mtime +N -exec rm -rfv {} \;

Вместо удаления можно проверить какие данные будут удалены командой:

find /var/www/share/ -type d -mtime +N -print

Пишем команду в файл и ложим в желаемую директорию, например /home/user/share.sh
Добавляем ссылку на этот файл в /etc/crontab. Планировщик будет выполнять его каждый день в 4 утра от имени пользователя «www-data» и тем самым будут удаляться файлы которые хранятся больше N дней:

0 4 * * * www-data /home/user/share.sh > /dev/null 2>&1

Как вытащить данные из одного столбца mysql таблицы

Чтобы увидеть данные из одно столбца, достаточно выполнить SQL запрос (где «abcd» — имя столбца в таблице):

SELECT abcd FROM table;

Для экспорта в файл достаточно выполнить команду в Linux:

mysql -u root -e "SELECT abcd FROM database;" -s -N > file.txt

Приведу пример экспорта email адресов из mysql таблицы на http страницу используя PHP.
Мысль сразу пришла такого плана (создаем php файл и открываем его через браузер):

<?php
// Соединяемся с mysql сервером
mysql_connect("localhost", "USER", "PASSWORD") or die (mysql_error ());
// Выбираем базу данных
mysql_select_db("users") or die(mysql_error());
// SQL-запрос
$rows = "SELECT * FROM account";
// Выполняем этот SQL-запрос
$d = mysql_query($rows);
// Каждый ряд становится массивом ($row) с помощью функции mysql_fetch_array
while($row = mysql_fetch_array($d)) {
// Выводим значения столбца email
echo $row['email'] . "<br />";
}
// Закрываем соединение с базой данных
mysql_close();
?>

Вариант резервного копирования в Windows (winrar+bat)

Вариант резервного копирования файлов с помощью winrar в Windows:

Создадим файл с расширением *.bat и добавам в него содержимое:

set rar_path="C:\Program Files\WinRAR\rar.exe"
set backup_path=D:\Backup\
set archive_name=backup-file_all -ag_DD.MM.YYYY
%rar_path% a -r -m2 -dh -ow -ppassword %backup_path%%archive_name% D:\files\*.*

Или можно указать список файлов и категорий для архивирования в текстовом файле:

set rar_path="C:\Program Files\WinRAR\rar.exe"
set backup_path=D:\Backup\
set archive_name=backup-file_all -ag_DD.MM.YYYY
set backup_list=@D:\Backup\backuplist.txt
%rar_path% a -r -m2 -dh -ow -ppassword %backup_path%%backup_list%%archive_name%

Ключи winrar:
-ac Снять атрибут «архивный» после архивации или извлечения
-ad Добавить к пути назначения имя архива
-af Указать формат архива
-ag[формат] Добавить к имени архива текущую дату и время
-ao Добавить файлы с установленным атрибутом «архивный»
-ap Установить путь внутри архива
-as Синхронизировать содержимое архива
-av Добавить электронную подпись
-av- Запретить добавление/проверку электронной подписи
-cfg- Игнорировать профиль по умолчанию и переменную окружения
-cl Преобразовать имена файлов в нижний регистр
-cu Преобразовать имена файлов в верхний регистр
-df Удалить файлы после архивации
-dh Открывать совместно используемые файлы
-ds Не сортировать файлы при архивации
-ed Не добавлять пустые папки
-en Не добавлять блок «конец архива»
-ep Исключить пути из имён
-ep1 Исключить из пути базовую папку
-ep2 Сохранять полные пути файлов
-ep3 Сохранять полные пути, включая букву диска
-e[+] Задать исключение или включение файлов из/в обработку по маске атрибутов
-f Освежить имеющиеся файлы
-hp[пароль] Шифровать и данные, и заголовки файлов
-iadm Запрашивать административный доступ для SFX-архива
-ibck Запустить WinRAR как фоновый процесс в системном лотке
-ieml[.][адрес] Отправить архив по электронной почте
-iicon<имя > Указать значок для SFX-модуля
-iimg Указать логотип для SFX-модуля
-ilog[имя] Записывать протокол ошибок в файл
-inul Не выводить сообщения об ошибках
-ioff Выключить компьютер
-k Заблокировать архив
-kb Сохранять на диске файлы, извлечённые с ошибками
-m Установить метод сжатия
-mc Указать дополнительные параметры сжатия
-md Установить размер словаря
-ms[список] Указать типы файлов для архивирования без сжатия
-mt Установить число потоков
-n Включить в обработку только указанный файл
-n@ Включить в обработку только файлы, указанные в файле-списке
-oc Установить NTFS-атрибут «сжатый»
-or Переименовывать файлы автоматически
-os Сохранить потоки NTFS
-ow Обработать информацию о правах доступа к файлам
-o+ Перезаписывать существующие файлы
-o- Не перезаписывать существующие файлы
-p[пароль] Установить пароль
-r Обрабатывать вложенные папки
-r0 Обрабатывать вложенные папки по шаблону
-ri Установить приоритет и время простоя
-rr[N] Добавить информацию для восстановления
-rv[N] Создать тома для восстановления
-s Создать непрерывный архив
-sc[объекты] Указать набор символов (и объекты)
-se Создать непрерывные группы, используя расширения файлов
-sfx[имя] Создать самораспаковывающийся архив
-sl Обрабатывать файлы размером меньше указанного
-sm Обрабатывать файлы размером больше указанного
-sv Создать независимые непрерывные тома
-sv- Создать зависимые непрерывные тома
-s- Запретить создание непрерывных архивов
-t Протестировать файлы после архивирования
-ta Обрабатывать файлы, изменённые после указанной даты
-tb Обрабатывать файлы, изменённые до указанной даты
-tk Сохранять исходное время архива
-tl Установить время архива по самому новому файлу
-tn Обрабатывать файлы не старее, чем указанный период времени
-to Обрабатывать файлы более старые, чем указанный период времени
-ts Сохранить/восстановить время файлов (модификации, создания, последнего доступа)
-u Обновить файлы
-v[k |b|f|m|M|g|G] Создать многотомный архив
-vd Очищать сменный диск перед архивацией на него
-ver[n] Управление версиями файлов
-vn Использовать старую схему именования томов
-vp Делать паузу перед каждым томом
-x<файл > Не обрабатывать указанный файл
-x@<файл-список > Не обрабатывать файлы, указанные в файле-списке
-y Подразумевать ответ «Да» на все запросы
-z Прочитать комментарий архива из файла
— Прервать дальнейший поиск ключей в командной строке