vi – некоторые команды

Перемещение

Действие Клавиши
Влево, вниз, вверх, вправо hjkl
В конец строки $
В начало строки ^
В конец файла 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

 

image_pdfimage_print

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
image_pdfimage_print

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 часов.

image_pdfimage_print

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).

https://habr.com/ru/sandbox/37102/

image_pdfimage_print

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
image_pdfimage_print

Поиск и блокировка вредных 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;
}

 

image_pdfimage_print

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

 

image_pdfimage_print

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»)>.

В основном, это (обычно) указывает на то, что ваша система неактивна по памяти, что не очень хорошо, поэтому она красная.

image_pdfimage_print