Вы здесь

Bash

Полезные скрипты на bash

Перенос файлов в Linux по сети

Перенести большой объем данных по сети с одного сервера Linux на другой отлично помогает связка утилит tar, ssh и pv.
На исходном хосте (назовем его host1) сжимаем данные с помощью tar и передаем их по ssh на принимающий хост (host2) и там "на лету", распаковываем.
pv - сокращение от pipeviewer, то есть просмотрщик пайпов (конвееров) в Linux. Данная утилита будет показывать нам скорость обработки данных. По умолчанию в состав дистрибутива pv не входит, поэтому устанавливаем сами:

Поиск по содержимому файла в Linux

Часто возникают ситуации, что нужно найти какой-либо текст, но вы не помните, в каком файле/файлах он содержится. В этом случае для поиска по содержимому файлов в каталоге можно использовать утилиту grep:

  1. grep -r -n «text» /path

где:
-n показывает строку, где был найден фрагмент;
-r осуществляет поиск рекурсивно, в файлах в самом каталоге /path и в его подкаталогах;

Также можно добавить опцию -C 3, чтобы видеть +- 3 строки вокруг (выше и ниже от найденной).

Скрипт замены IP в конфиге OpenVPN на Debian

Немного усовершенствовал свой скрипт отправки IP на email. Если у вас на сервере поднят OpenVPN, то в случае изменения внешнего IP, новый адрес будет отправлен вам на e-mail, и в конфиге /etc/openvpn/server.conf в первой строке будет указан также новый IP - адрес.

  1. #!/bin/bash
  2. # парсим текущий IP
  3. ip=`/sbin/ifconfig ppp0 | egrep -io "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" | head -1`
  4. ip2=`cat < /home/user/ip.txt`
  5. if [ "$ip" != "$ip2" ] # сравниваем 2 IP, и если они не равны
  6. then
  7.  
  8. echo "$ip" > /home/fess/ip.txt # записываем IP в файл
  9. # удаляем первую строку в /etc/openvpn/server.conf (в ней содержится IP)
  10. sed -i '1d' /etc/openvpn/server.conf
  11. sed -i "1i local ${ip}" /etc/openvpn/server.conf # добавляем в первую строчку текущий ip
  12. cat /home/fess/ip.txt | mutt -x -s "New IP" admin@mail.ru # высылаем IP на email
  13. sleep 3 # ждем 3 секунды
  14. /etc/init.d/openvpn reload # говорим OpenVPN-серверу перечитать конфиг
  15.  
  16. else # если IP не изменился, то завершаем сценарий
  17. exit 0
  18. fi

Скрипт отправки ip на email

Скрипт на bash, проверяющий, не изменился ли IP адрес ppp0 - подключения, и, в случае изменения, высылающий его на email админа.

  1. #!/bin/bash
  2. ip=`/sbin/ifconfig ppp0 | egrep -io "inet [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"`
  3. ip2=`cat < /home/user/ip.txt`
  4. if [ "$ip" != "$ip2" ]
  5. then
  6. echo "$ip" > /home/user/ip.txt
  7. cat /home/user/ip.txt | mutt -x -s "New IP" admin@mail.ru
  8. fi
  9. exit 0

Вкратце расскажу, как он работает:

Запуск bash скрипта в фоновом режиме через Systemd

Systemd

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

Для реализации работы в фоне сначала написал Linux - демон на C, но потом решил что для моей задачи это слишком, и реализовал это при помощи Systemd.

Tmux - терминальный оконный менеджер

Рубрики: 

Сегодня я расскажу вам об основных командах Tmux - терминального оконного менеджера и мультиплексора в Linux-системах. Проще говоря tmux позволяет использовать несколько терминалов в одном. Tmux так же как и screen можно легко увести в фон, и так же легко вернуться к нему. Но основная фишка tmux, на мой взгляд, заключается в использовании фреймов. К примеру, в одном окне tmux нажимаем Ctrl+b, затем % - и окно разделится по вертикали на две части (фрейма). В верхней части можно запустить, к примеру, команду top, затем переключиться на второй фрейм комбинацией Ctrl+b, o.

Подключаем новый жесткий диск в Debian

Рубрики: 

На днях подключал новый жесткий диск на сервер для бэкапов с установленной ОС Debian 7.2.0. Опишу весь процесс.

Для начала посмотрим какие физические диски есть в нашей системе:

fdisk -l

Fdisk -l в Debian

Настройка Mutt для отправки почты с использованием внешнего smtp-сервера

Рубрики: 

Не так давно возникла необходимость отправки отчета с сервера на внешний email-адрес. Сначала я решил настроить Exim для работы через внешний smtp-сервер, а для отправки использовать консольный почтовый клиент Mutt, позволяющий отправлять письма с вложениями. Но после изучения мануалов по Mutt выяснилось, что программа сама умеет работать через внешний smtp-сервер, не используя локальный почтовый сервер. Итак, приступим.

Конфигурационные файлы Mutt хранятся в /etc/Muttrc или ~/.muttrc (или же ~/.mutt/muttrc). В моем случае на Debian 6 Lenny файла конфигурации ни по одному из указанных путей не оказалось, поэтому я просто скопировал пример конфига из /var/share/doc/mutt/examples/sample.muttrc.gz в папку /root. Если вы будете пользоваться mutt не из под рута, то скопируйте этот файл в домашний каталог пользователя, из под которого будет осуществляться работа.

Скрипт проверки сессии PPPOE

Рубрики: 

На одном из серверов у меня развернут файловый сервер на Samba, и также подключен yandex.disk как раздел файловой системы, с использованием технологии (протокола) WebDav. Интернет на этом сервере подключается с помощью PPPOE, сессия довольно нестабильна, разрывы соединения бывают раз в 3 часа, а то и чаще. Чтобы избежать периодического отключения Яндекс Диска из-за обрыва pppoe-сессии, я написал простой скрипт на bash, проверяющий наличие подключения, и в случае обрыва, восстанавливающий его:

  1. #!/bin/bash
  2. pings="0";
  3. a=5;
  4. pings=`ping -c $a 8.8.8.8 | grep -c "ttl"`
  5. if [ "$pings" = "$a" ]; then
  6. echo "OK" >> /var/log/ppp_restart.log
  7. else
  8. poff -a
  9. sleep 5
  10. pon dsl-provider
  11. date >> /var/log/ppp_restart.log
  12. fi

Также рекомендуем

Подписаться на RSS - Bash