vi – некоторые команды
Перемещение
| Действие | Клавиши |
|---|---|
| Влево, вниз, вверх, вправо | h, j, k, l |
| В конец строки | $ |
| В начало строки | ^ |
| В конец файла | G |
| В начало файла | :1 |
| На строку 47 | :47 |
Редактирование
| Действие | Клавиша |
|---|---|
| Удаление строки | dd |
| Удаление пяти строк | 5dd |
| Замена символа | r |
| Удаление символа | x |
| Удаление десяти символов | 10x |
| Отмена последнего действия | u |
| Объединение текущей и следующей строк | J |
| Замена старого на новое, глобально | %s’старое‘новое‘g |
| Удаление текста ВНИЗ до КОНЦА от этой строки | dG |
| Копирование строки | yy |
| Копирование от курсора до конца строки | y$ |
| Копирование от курсора до начала строки | y^ |
| Вставка строки | p |
Поиск
| Действие | Клавиша |
|---|---|
| Поиск “asdf” | /asdf |
| Поиск “asdf” в обратном направлении | ?asdf |
| Повтор последнего поиска в прямом направлении | / |
| Повтор последнего поиска в обратном направлении | ? |
| Повтор последнего поиска в том же направлении | n |
| Повтор последнего поиска в обратном направлении | N |
Сохранение и выход
| Действие | Клавиша |
|---|---|
| Выйти | :q |
| Выйти без сохранения | :q! |
| Записать и выйти | :wq |
| Записать без выхода | :w |
| Перезагрузить открытый в данный момент файл | :e! |
| Записать буфер в файл asdf | :w asdf |
| Открыть файл hejaz | :e hejaz |
| Загрузить файл asdf в буфер | :r asdf |
| Загрузить вывод команды ls в буфер | :r !ls |
whois
met@mail:/var/log# cat dovecot.log | grep "trying the next passdb" | awk '{ print $6}' | sed -e 's/sql(//g' | sed -e 's/)://g' | tr , \\t
vm@mail:/var/log# cat dovecot.log | grep "trying the next passdb" | awk '{ print $6}' | sed -e 's/sql(//g' | sed -e 's/)://g' | tr , \\t | sort | uniq -c | awk '{ print $3}' | sort | wc -l
550
svm@mail:/var/log# cat dovecot.log | grep "trying the next passdb" | awk '{ print $6}' | sed -e 's/sql(//g' | sed -e 's/)://g' | tr , \\t | sort | uniq -c | awk '{ print $3}' | sort > /home/svm/ip_ban_20190720.txt
sh проверка существования директории
$ cat check_dir_existence.sh
#!/bin/sh
# check directory existence
dir=/home/user/_bac/sql
if [ -d $dir ]
then
echo YES
else
echo NO
mkdir -p $dir
exit 0;
fi
exit 0;
rsync backup почтовых ящиков на другую машину
В ожидания покупки новых HDD, решил забэкапить на всякий случай почту.
$ cat backup_mail_vmail.sh
#!/bin/sh
### Проверка работы без всяких изменений файлов
# aaa - тестовый ящик
#rsync --dry-run -avzhe ssh /var/vmail/$domen/aaa admin@2.4.2.1:/home/admin
###
# user_mail.txt - список ящиков сервера вида
#user1
#user2
#user3
# Подключение ssh со входом по ключу
# domen=_YOUR_DOMEN_
# admin@192.168.0.17 - учетная запись для входа и IP удаленного сервера
# /home/admin/_backup/MAIL/vmail/$domen/ - директория на удаленном сервере где будет храниться почта
cat /home/admin/user_mail.txt | { while read user;
do
/usr/local/bin/rsync --delete-during -avzhe "ssh -i /home/svm/.ssh/id_rsa" /var/vmail/$domen/$user admin@192.168.0.17:/home/admin/_backup/MAIL/vmail/$domen/;
done;
}
Синхронизация 50 гигабайт (~300+ ящиков) заняла около 3 часов.
rsync опции и примеры
Опции и примеры
Для простоты понимания, операции синхронизации привожу сперва локально.
Быстрый способ синхронизировать два каталога, это использовать опцию -a:
rsync -a foobar_src/ foobar_dst/
В данном случае файлы и директории из источника скопируются в приемник, при этом, если там были файлы, то совпавшие по имени будут перезаписаны, а остальные не тронуты.
Опция -a задает архивный режим работы утилиты, и является эквивалентом набора опций:
-r, --recursive — рекурсивный режим;
-l, --links — пересоздание symlinks, это значит, что символические ссылки будут так же переноситься;
-p, --perms — перенос прав;
-t, --times — передача времени модификации и его обновление на удаленной системе. Этот ключ должен быть установлен для точной синхронизации;
-g, --group — установить группу конечного файла таким же, как и у исходного;
-o, --owner — установить владельца конечного файла таким же, как и у исходного;
-D, - same as --devices --specials — установить тип файла устройства и файла специального типа таким же, как у исходного.
В итоге получаем копию директории источника. Кстати, это можно использовать при переносе ОС на другой винчестер, подправив /etc/fstab, установив/переустановив grub на новом винте — получаем рабочую систему, но это уже другая тема.
Для вывода информации о работе утилиты, существует опция –v, –verbose. Чем больше опций -v, тем боле информативным будет вывод утилиты. Максимальная информативность достигается при четырех опциях -v, –verbose.
Если у нас содержится в директории источника актуальная информация, то чтобы не засорять приемник информацией, которая в процессе работы была удалена или перемещена в источнике, нужно старые файлы и директории удалить. Для этого есть несколько опций удаления, каждая из которых предоставляет свой алгоритм удаления. Их аж шесть!
--del — сокращенная форма --delete-during;
--delete — просто удалить посторонние файлы из приемника;
--delete-before — приемник удаляет перед передачей;
--delete-during — приемник удаляет в процессе передачи, но не перед;
--delete-delay — отложенное удаление/найти файлы для удаления в процессе передачи, но удалить после передачи;
--delete-after — приемник удаляет после передачи, но не перед ней;
--delete-excluded — так же удалить исключенные файлы в приемнике, для этого задается шаблон (--exclude=PATTERN).
Linux Mint узнать версию
В терминале:
$ inxi -S
System: Host: note Kernel: 4.15.0-54-generic i686 bits: 32
Desktop: MATE 1.20.1 Distro: Linux Mint 19 Tara
или
$ cat /etc/lsb-release DISTRIB_ID=LinuxMint DISTRIB_RELEASE=19 DISTRIB_CODENAME=tara DISTRIB_DESCRIPTION="Linux Mint 19 Tara"
или
$ cat /etc/issue Linux Mint 19 Tara \n \l
Поиск и блокировка вредных IP
Продолжение той истории.
Так как на новый сервер переносилась старая база логинов и паролей (что бы максимально смягчить для пользователей шок от перезда), то попадались откровенно слабые к перебору пароли, например 123321 или qwer123. И особо ленивые их не сменили. Поэтому подобрали пароль к старой но редко пользуемой учетке. Для начала меняем пароль через postfixadmin, а потом баним разбойников.
Выясняем кто и что:
# cat amavis_open_relay.sh
#!/bin/sh
# 2.2.2.2 - my IP или надежные IP
cat /var/log/amavisd-new.log | grep "OpenRelay" | grep -v -e 2.2.2.2 > /var/log/z_open_relay.`date +%Y-%m-%d`
Парсим IP (если добавим к uniq -c – получим количество вхождений):
# cat z_open_relay.2019-07-16 | grep "user_name" | awk '{print $11}' | uniq > /home/admin/ip_ban_20190716.txt
Получился такой список:
[191.240.84.96] [191.36.154.138] [95.182.120.38] [95.182.120.36] [185.231.245.42] [185.231.245.41] [185.231.245.46] [95.182.120.38] [185.231.245.46] [95.182.120.38] [94.242.206.124] [185.231.245.40] [185.231.245.44] [94.242.206.127] [185.231.245.48] [5.44.45.137] [94.242.206.124] [185.231.245.43] [5.44.45.143] [5.44.45.139]
Чистим от скобок:
# sed -i -e 's/\[//g' ip_ban_20190716.txt && sed -i -e 's/\]//g' ip_ban_20190716.txt
# cat ip_ban_20190716.txt 191.240.84.96 191.36.154.138 95.182.120.38 95.182.120.36 185.231.245.42 185.231.245.41 185.231.245.46 95.182.120.38 185.231.245.46 95.182.120.38 94.242.206.124 185.231.245.40 185.231.245.44 94.242.206.127 185.231.245.48 5.44.45.137 94.242.206.124 185.231.245.43 5.44.45.143 5.44.45.139
С помощью скрипта загоняем их в таблицу на “вечный” бан:
# cat add_ip_to_ipfw.sh #!/bin/sh # IPFW table 3, 4 cat /home/admin/ip_ban_20190716.txt | { while read ip; do /sbin/ipfw table 3 add $ip; done; }
OpenVPN – скорость тунеля
Пользователя смутила надпись, что он подключен по 10 мегабитному каналу. При этом никаких неудобств он в работе не чуствовал. Попросил объяснить.
Интерфейс на сервере показывает что он подключен:
# ethtool tun0 | grep -i speed
Speed: 10Mb/s
Но на самом деле проверка показывает, что:
$ iperf -c 10.8.0.18
------------------------------------------------------------
Client connecting to 10.8.0.18, TCP port 5001
TCP window size: 85.5 KByte (default)
------------------------------------------------------------
[ 3] local 10.8.0.1 port 35350 connected with 10.8.0.18 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 66.6 MBytes 55.8 Mbits/sec
$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[ 4] local 10.8.0.1 port 5001 connected with 10.8.0.18 port 36746
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-10.1 sec 62.8 MBytes 52.4 Mbits/sec
Линк входной с обеих сторон 100 Мбит. Что примерно соответствует пропускной способности на этом участке без vpn:
$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[ 4] local 1.1.1.1 port 5001 connected with 2.2.2.2 port 50432
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-10.8 sec 58.8 MBytes 45.6 Mbits/sec
$ iperf -c 2.2.2.2
------------------------------------------------------------
Client connecting to 2.2.2.2, TCP port 5001
TCP window size: 144 KByte (default)
------------------------------------------------------------
[ 3] local 1.1.1.1 port 60754 connected with 2.2.2.2 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 83.4 MBytes 69.9 Mbits/sec
atop
# yum install -y atop
Запуск
Для запуска достаточно запустить службу atop:
# service atop start
По умолчанию atop сохраняет метрики каждые 10 минут, данное значение можно изменить в файле /etc/sysconfig/atop (переменная INTERVAL).
Чтение бинарных логов
По умолчанию бинарные логи хранятся в директории /var/log/atop, именование файлов производится в формате atop-YYYYMMDD.
# atop -r /var/log/atop/atop_20190715
Горячие клавиши:
t - переход к следующему временному интервалу; Shift + t - переход к предыдущему временному интервалу; Shift + m - сортировка процессов по занимаемой резидентной памяти; Shift + с - сортировка процессов по потреблению CPU (по умолчанию); Shift + d - сортировка процессов по использованию диска; Shift + n - сортировка процессов по использованию сети; Shift + u — выстроит таблицу по самым прожорливым пользователям Shift + v — покажет более подробную информацию о процессах (пользователя, дату и время начала процесса) Shift + g — вернет все в дефолтный вывод
Пример расшифровки:
PAG | scan 49085 | steal 47991 | stall 0 | | | | | | swin 556 | swout 335 |
Частота Paging PAG. Эта строка содержит количество отсканированных страниц («сканирование») из-за того, что свободная память опускается ниже определенного порога и количество раз, которое ядро пытается восстановить страницы из-за насущной необходимости (`stall ‘).
Также показано количество страниц памяти, которые система считывает из области подкачки («swin»)> и количество страниц памяти, которые система написала для пространства подкачки («swout»)>.
В основном, это (обычно) указывает на то, что ваша система неактивна по памяти, что не очень хорошо, поэтому она красная.

