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»)>.
В основном, это (обычно) указывает на то, что ваша система неактивна по памяти, что не очень хорошо, поэтому она красная.