Скрипт быстрой настройки IPTables

Иногда нужно например удалить все правила IPTables и прописать только нужное, так вот для удобства можно указать их в скрипте, после чего выполнить его.

Читать далее «Скрипт быстрой настройки IPTables»

Резервное копирование конфигурации 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.

Резервное копирование на Yandex диск

Приведу пример скрипта для создания резервных копий на Yandex диск.

Читать далее «Резервное копирование на Yandex диск»

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

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

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

Скрипт резервного копирования конфигурации 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 дней удалялись автоматически.

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

Как вытащить данные из одного столбца 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();
?>