Нарезаем исходящий трафик(Shaping)

Контроль за исходящим и маршрутизируемым трафиком очень важен. Один из простейших способов это использовать tc -Traffic Control.

Для того, что бы просмотреть существующие правила выполните :

tc -s qdisc ls dev eth0

Результат будет приблизительно такой :

qdisc pfifo_fast 0: bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Sent 7344577001 bytes 16278666 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0

Continue reading

Конфигурирование VLAN-ов на интерфейсе для RH/CentOS/Fedora

Есть два способа именования Vlan интерфейсов, это «vlanX» и «ethN.X». Первый удобен тем, что мы свободно можем перемещать интерфейс на другой физический интерфейс, при это не необходимости вносить изменения в системе. Второе имя более информативное, дающее понять на каком физическом интерфейсе находиться нах Vlan, к тому же, если у вас на два разных интерфейса приъходят Vlan-ы с одинаковым номером, то вы вынуждены использовать второй вариант.

Для того, что бы создать интерфейс с именем типа «vlanX» создадим файл ifcfg-vlan100:

touch /etc/sysconfig/network-scripts/ifcfg-vlan100

И дабавим в него:

VLAN=yes
VLAN_NAME_TYPE=VLAN_PLUS_VID_NO_PAD
DEVICE=vlan100
PHYSDEV=eth0
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.1.100
NETMASK=255.255.255.252

PHYSDEV — физический интерфейс на котором будет работь Vlan.
VLAN_NAME_TYPE — Тип имени Vlan интерфейса. Может быть:

VLAN_PLUS_VID —vlan00100
VLAN_PLUS_VID_NO_PAD — vlan100
DEV_PLUS_VID — eth0.00100
DEV_PLUS_VID_NO_PAD — eth0.100

Теперь рассмотрим второй тип имени. Создаем файл ifcfg-eth0.100

touch /etc/sysconfig/network-scripts/ifcfg-eth0.100

редактируем его и добавляем:

VLAN=yes
DEVICE=eth0.100
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.1.100
NETMASK=255.255.255.252

Так же, необходимо помнить,VLAN_NAME_TYPE задаеться по первому поднятому интерфейсу, а это значит, что использовать оба типа одновременно нельзя.

Синхронизация файлов между серверами при помощи Rsync

RSync это замена для старого rcp с помощью которого можно копировать файл между UNIX системами.RSync использует алгоритм отслеживающий изменения файла и копирует только необходимые части. Так же появилось множество новых возможностей, таких как работа через SSH или сжатие данных перед началом передачи. Я использую Rsync для синхронизации файлов между серверами, для этого можно использовать такие команды:

rsync -e ssh —progress -lzuogthvr —compress-level=9 —delete-after [email protected]<IP или имя сервера>:/home/<USER> /home/

или

rsync -e ssh —progress -lzuogthvr —compress-level=9 —delete-after /home/<USER> [email protected]<IP или имя сервера>:/home/

зависит от направления синхронизации.

Если вам нужно исключить какие-то файлы, вы можете использовать ключ —exclude

Ключи:

  • e — заменяет протокол с rsh на ssh
  • progress — вывод хода процесса работы на терминал
  • l — пересоздание symlinks, это значит, что символические ссылки будут так же переноситься
  • z — использовать сжатие
  • u — update. Обновление, он будет пропускать файлы которые новей, чем на удалённом сервере
  • o — установить владельца конечного файла таким же, как и у исходного
  • g — установить группу конечного файла таким же, как и у исходного
  • t — передача времени модификации и его обновление на удаленной системе. Этот ключ должен быть установлен для точной синхронизации
  • h — вывод информации на терминал в удобном для чтения (human-readable) виде
  • v — verbose. Вывод сообщений в терминал.
  • r — рекурсивный режим
  • n — отладочный режим
  • compress-level — уровень сжатия
  • delete-after — удалять файлы, которые не были найдены на удалённом сервере, “-after” означает, что удалить их нужно, только после окончания синхронизации. Так-же есть delete-before, delete-during, delete-excluded и просто delete

P.S. Не забудте организовать без парольный доступ между серверами по SSH.

Sudo: sorry, you must have a tty to run sudo

sudo: sorry, you must have a tty to run sudo это достаточно распространенная ошибка, если вы пытаетесь выполнить команду в скрипте от другого пользователя при помощи sudo. Дело в том, что по умолчанию, sudo, может быть запущен только если пользователь был залогинен с реальным tty. Для того, что бы исправить положение, достаточно отредактировать ваш файл /etc/sudoers и закоментировать строку Default requiretty:

#Default requiretty

Alias для часто используемых команд

Команда Alias позволяет  запускать вам команды сразу с определенными параметрами. Это очень удобно в том случаи если вы каждый день используете какие-то команды с параметрами. Для большей наглядности, например, я часто пользуюсь командой

ps ax | grep

при помощи alias ее можно уменьшить, для этого выполним:

alias psax=’ps ax|grep’

теперь, как пример, я могу просто выполнить:

psax amavisd что эквивалентно ps ax|grep amavisd

Или, другой пример:

alias …=’cd ../..’

Мы привзязываем троеточие к переходу на два католога вверх.

Если вам необходимо отменить привязку, то воспользуйтесь командой unalias:

unalias psax

Для просмотра всех привязок, просто выполните:

alias

 

Удаляем строки содержащие определенный текст

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

cat file.txt | grep -v «some text» > new.file.txt

Разделяем строку на несколько составляющих

Разделяем строку на составляющие по определенным признакам. Как пример, пускай на надо получить чистый ip адрес интерфейсы из вывода команды ifconfig. Это можно сделать несколькими способами. Первый, при помощи awk:

ifconfig eth0|grep «inet addr:»| awk ‘{split($0,a,»:»); print a[2]}’

Второй, используя cut:

ifconfig eth0|grep «inet addr:» | cut -f 2 -d ‘:’

Третий, обработав строку командой tr:

ifconfig eth0|grep «inet addr:» | tr ‘:’ ‘\n’

И последний это sed:

ifconfig eth0|grep "inet addr:"|sed -e ‘s_:_\n_g’

Вывод у этих команд немного разный, первые две  выводят все что находиться между символaми «:» . Если оригинал выглядит вот так :

inet addr:80.91.175.94 Bcast:80.91.175.95 Mask:255.255.255.240

то вывод будет(выбор сегмента производиться в print a[] для awk и для cut в параметре -f)

80.91.175.94 Bcast

В случаи же третей и четвертой команды, они считывают все строку, и каждый раз, когда находят символ «:» переходят на новую строку, удаляя при этом «:»

inet addr
80.91.175.94 Bcast
80.91.175.95 Mask
255.255.255.240

 

Yum update Как исключить определенные пакеты?

Есть два способа, первый, когда запускаете yum, можно использовать опцию —exclude=

yum —exclude=package* update
yum —exclude=php* update
yum —exclude=*rrd* update
yum —exclude=kernel*,*snmp,perl* update

Второй, он более радикальный, можно  добавить исключение в конфиг файл /etc/yum.conf :

exclude=php* kernel*

Выглядеть это будет так:

[main]
cachedir=/var/cache/yum
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
distroverpkg=redhat-release
tolerant=1
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
exclude=php* kernel*

Отключаем оповещение в Crontab

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

>/dev/null 2>&1 или &> /dev/null

Как пример:

0 1 5 10 * /path/to/script.sh >/dev/null 2>&1

или

0 1 5 10 * /path/to/script.sh &> /dev/null

Обязательно перезапустите крон.
Второй способ это изменить MAILTO= на:

MAILTO=»»