monit

проверку синтаксиса для файла конфигурации monit control:

# monit -t

краткое описание monit:

# monit summary

Reload the Monit service with the following command:

# monit reload

статус monit run:

# monit status

Слежение и запуск сервиса в системах с systemd на примере bind9 (chroot):

## bind
check process named with pidfile /var/named/chroot/var/run/named/named.pid
start program = "/usr/bin/systemctl start named-chroot"
stop program = "/usr/bin/systemctl stop named-chroot"
if failed host 127.0.0.1 port 53 type tcp protocol dns then restart
if failed host 127.0.0.1 port 53 type udp protocol dns then restart
if 5 restarts within 5 cycles then timeout

 

image_pdfimage_print

Копирование бэкапов на сетевой диск

Вариант с Robocopy

Robocopy (от англ. Robust File Copy) — утилита командной строки для репликации (не просто копирования) каталогов (папок). Она была доступна как часть Windows Resource Kit и представлена как стандартный компонент Windows VistaWindows 7 и Windows Server 2008. Robocopy функционально заменяет Xcopy, с большим количеством опций.

Robocopy разработана для отказоустойчивого копирования каталогов и деревьев каталогов. Она обладает возможностью копирования всех (или выборочных) NTFS атрибутов и свойств, имеет дополнительный код для перезапуска при применении с сетевым соединением в случае его разрывов.

Создаем скрипт для передачи файлов на сетевой диск (IP 192.168.1.97). Файлы помещаются в директорию другой программой (WinRAR например)

D:\_bin\backup_rc.bat

@echo off
chcp 1251
robocopy.exe D:\_Backup \\192.168.1.97\acc\_Backup /mir /log:D:\_log\backup_bat.log

Создаем скрипт подключения сетевого диска netuse_open.bat:

net use \\192.168.1.97\acc mirtrud /user:acc

Создаем скрипт для отключения сетевого диска netuse_close.bat:

net use * /del /y

Создаем в планировщике задания:

  1. Подключить сетевой диск
  2. Копировать на диск
  3. Отключить сетевой диск

Вариант с xcopy

@echo off
chcp 1251
xcopy D:\_Backup \\192.168.1.97\acc\_Backup /s /e

Дальше все тоже.

image_pdfimage_print

Sonata – перенести дані на інший комп’ютер

Для перенесення даних на інший комп’ютер необхідно виконати наступні дії:

На початковому комп’ютері:

  1. Натиснути Меню – Резервна копія – Створити
  2. Вибрати профілі організацій для перенесення і натиснути Зберегти
  3. Вибрати де зберегти файл з резервною копією і натиснути Зберегти

На цільовому комп’ютері:

  1. Перенести файл з резервною копією з вихідного комп’ютера, наприклад на флешці або по мережі
  2. Встановити Сонату (https://sonatazvit.com.ua/uk/download/)
  3. Натиснути Меню – Резервна копія – Відновити і вибрати файл з резервною копією
  4. Вказати профілі підприємств, які необхідно відновити і натиснути кнопку Відновити
  5. Зайти в налаштування профілю підприємства на вкладку Цифровий підпис і встановити позначки Запам’ятовувати пароль до ключа (потрібно буде ввести пароль до ключів ЕЦП)
  6. Зберегти налаштування профілю
image_pdfimage_print

grep

Не учитывать регистр во время поиска. Тогда комбинации ABC, abc и Abc с точки зрения программы будут одинаковы:

grep -i "user" /etc/passwd

ВЫВЕСТИ НЕСКОЛЬКО СТРОК

Выведет строку с вхождением и 4 строчки после неё:

grep -A4 "192.168.1.167" /var/log/maillog.log

Выведет строку с вхождением и 4 строчки до неё:

grep -B4 "192.168.1.167" /var/log/maillog.log

Выведет строку с вхождением и по 2 строчки до неё и после:

grep -C2 "192.168.1.167" /var/log/maillog.log

РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ В GREP

Поиск вхождения в начале строки с помощью спецсимвола “^”, например, выведем все сообщения за ноябрь:

grep "^Nov 10" messages.1

Поиск в конце строки – спецсимвол “$”:

grep "terminating.$" messages

Найдём все строки, которые содержат цифры:

grep "[0-9]" /var/log/Xorg.0.log

РЕКУРСИВНОЕ ИСПОЛЬЗОВАНИЕ GREP

Поиск во всех подкаталогах /etc/apache2 на предмет вхождения строки mydomain.com:

grep -r "mydomain.com" /etc/apache2/

Вывод имени файла легко отключить с помощью опции -h:

grep -h -r "zendsite" /etc/apache2/

ПОИСК СЛОВ В GREP

Когда вы ищете строку abc, grep будет выводить также kbabc, abc123, aafrabc32 и тому подобные комбинации. Вы можете заставить утилиту искать по содержимому файлов в Linux только те строки, которые выключают искомые слова с помощью опции -w:

grep -w "abc" имя_файла

ПОИСК ДВУХ СЛОВ

Можно искать по содержимому файла не одно слово, а два сразу:

egrep -w 'word1|word2' /path/to/file

КОЛИЧЕСТВО ВХОЖДЕНИЙ СТРОКИ

Утилита grep может сообщить, сколько раз определённая строка была найдена в каждом файле. Для этого используется опция -c (счетчик):

grep -c 'word' /path/to/file

C помощью опции -n можно выводить номер строки, в которой найдено вхождение, например:

grep -n 'root' /etc/passwd

Получим:

1:root:x:0:0:root:/root:/bin/bash

ИНВЕРТИРОВАННЫЙ ПОИСК В GREP

Команда grep Linux может быть использована для поиска строк в файле, которые не содержат указанное слово. Например, вывести только те строки, которые не содержат слово пар:

grep -v пар /path/to/file

ВЫВОД ИМЕНИ ФАЙЛА

Вы можете указать grep выводить только имя файла, в котором было найдено заданное слово с помощью опции -l. Например, следующая команда выведет все имена файлов, при поиске по содержимому которых было обнаружено вхождение primary:

grep -l 'primary' *.c

ЦВЕТНОЙ ВЫВОД В GREP

Также вы можете заставить программу выделять другим цветом вхождения в выводе:

grep --color root /etc/passwd

 

image_pdfimage_print

Roundcube plugin managesieve – PHP Warning: Use of undefined constant PLAIN

После обновления php с версии 5.6 на 7.2 в логах появилось предупреждение:

PHP Warning: Use of undefined constant PLAIN - assumed 'PLAIN' (this will throw an Error in a 
future version of PHP) in /usr/local/www/roundcube/plugins/managesieve/config.inc.php on line 17

Нужно взять в одинарные кавычки параметр:

$config['managesieve_auth_type'] = 'PLAIN';
image_pdfimage_print

M.E.Doc  – бекап бази даних за допомогою Winrar

В даній інструкції наведений приклад, як створювати резервні копії бази даних мережевої версії програми M.E.Doc, яка встановлена в каталог D:\Medoc\MedocSRV, резервні копії зберігатимуться в кореневий каталог диску D:\ у форматі  BackupYYYY-MM-DD.rar. Назва служби програми M.E.Doc в даному випадку ZvitGrp1, якщо на комп’ютері встановлювались декілька версій програми, назва служби може мати інший порядковий номер. Рекомендуємо налаштувати щоденне резервне копіювання, яке проводитиметься у нічний час, з подальшим перенесенням бекапів на зовнішні носії, хмарні сховища або інші комп’ютери.

Створюємо завдання для закриття програми MEDoc:

Створюємо завдання для зупинки служби програми:

Створюємо завдання для архівування:

Запуск служби MeDOC. Час потрібно встановити свій, краще з запасом, в залежності від потужності ПК та розміру БД:

Тепер можна переглянути наші завдання, відсортувавши по часу виконання:

 

Коротка інструкція:

  1. У Windows Task Scheduler створіть завдання для закриття програми M.E.Doc з параметрами:
    Program/script: taskkill
    Add arguments (optional): /im ezvit.exe /F
  2. Створіть завдання для зупинки служби програми з параметрами:
    Program/script: sc
    Add arguments (optional): stop ZvitGrp1

    Це завдання повинно виконуватись мін. через 1 хв. після виконання попереднього завдання.

  3. Створіть завдання для виконання архівування з параметрами (WinRAR or RAR – не принципово):
    Program/script: ”C:\Program Files\WinRAR\RAR.exe”
    Add arguments (optional): A -ac -rr -s -t -agYYYY-MM-DD -ilogD:\_log\medoc.log D:\Backup_Medoc_.rar D:\Medoc\MedocSRV\db
    

    -ac – снять атрибут «Архивный». Во время выполнения архивирования с файлов будет снят атрибут «Архивный». После какого-либо изменения файла, этот атрибут для него всегда устанавливается снова. Таким образом, этот атрибут является сигналом-признаком при выполнении добавочного копирования.
    -ag[формат] – добавить к имени архива текущие дату и время. Добавляет к имени архива текущие дату и время при создании или обработке архива, задается шаблоном символов. Каждый символ шаблона формирует соответствующий символ даты или времени.
    -ilog[имя файла] – записывать протокол ошибок в файл. Записывает протокол ошибок за время выполнения архивирования в указанный файл
    -inul – не показывать сообщения об ошибках. Поскольку процесс архивирования должен проходить без участия человека, то сообщения эти ни к чему.
    -m5 – метод сжатия. Выбираем максимальное сжатие.
    -os – сохранять потоки NTFS
    -r – включить в обработку вложенные папки. Копируем все, что находится во вложенных подпапках.
    -rr[N] – добавить данные для восстановления. Дополнительная прослойка “соломки” на случай, если по каким-то причинам архив окажется поврежденным. Объем данных рекомендуется задавать в пределах 3…10%. Что бы задать объем данных для восстановления 5% используются ключ -rr5p. Ключ без дополнительных параметров -rr задает значение по-умолчанию 3% – обычно этого достаточно.
    -s – создать непрерывный архив. Особый вид архива, упакованный специальным способом, при котором сжимаемые файлы рассматриваются, как один последовательный поток данных. Непрерывная архивация значительно увеличивает степень сжатия при добавлении в архив существенного количества небольших однотипных файлов с похожим содержимым. Конечно, дополнительные алгоритмы сжатия увеличивают время на упаковку и распаковку архива, но по сравнению с экономией места для резервных копий, это сущие пустяки. В зависимости от похожести файлов степень сжатия архива может достигать 40% от исходного объема файлов, особенно хорошо упаковываются файловые базы 1С – степень сжатия архива может достигать даже до 6…7%. Во время извлечения из непрерывного архива отдельных файлов архиватору приходится обрабатывать практически весь объем архива, что существенно увеличивает время на распаковку и, в зависимости от положения извлекаемых файлов в нем, может быть сопоставимо со временем распаковки всего архива. Но, согласитесь, в сравнении с эффективностью сжатия, это тоже не принципиально.
    -t – протестировать файлы после архивации. Еще одна перестраховка.

    Це завдання повинно виконуватись мін. через 1 хв. після виконання попереднього завдання, може займати тривалий час.

  4. Створіть завдання для запуску служби, після виконання архівування, з параметрами:
    Program/script: sc
    Add arguments (optional): start ZvitGrp1

    Це завдання повинно виконуватись після завершення процесу архівування.

Відновлення

Для відновлення інформації, достатньо замінити файли баз даних *.FDB на комп’ютері з встановленою програмою M.E.Doc, попередньо зупинивши службу програми:

  1. Зупинити службу Zvitgrp1
  2. Скопіювати в папку D:/Medoc/MedocSRV/db останню копію БД
  3. Запустити службу, та перевірити програму

https://www.pavlobilan.com/backup-db/

image_pdfimage_print

awk – заметки

Печать всех столбцов:

$ awk '{print $0}' FILE

Вывести первый столбец:

$ awk '{print $1}' FILE

Вывести второй столбец:

$ awk '{print $2}' FILE

Вывести последний столбец:

$ awk '{print $NF}' FILE

Печатать нескольких столбцов (первый и третий):

$ awk '{print $1 $3}' FILE

В качестве разделителя полей в awk может выступать как отдельный символ, так и регулярное выражение.
Он контролирует каким образом awk разбивает входящие строки на столбцы. По умолчанию, awk в качестве разделителя полей, использует пробелы и табуляции. Вы можете указать awk чем разделены поля с помощью опции -F в командной строке.

Использовать , (запятую) в качестве разделителя и напечатать первый столбец:

$ awk -F "," '{print $2}' FILE

Использовать : (двоеточие) в качестве разделителя и напечатать третий столбец:

$ awk -F ":" '{print $3}' FILE

Исключение Столбцов

Напечатать все столбцы, за исключением третьего:

$ awk '{$3=""; print $0}' FILE

Напечатать все столбцы, за исключением первого и второго:

$ awk '{$1=$2=""; print $0}' FILE

Печать/Исключение Диапазонов

Напечатать диапазон столбцов со второго по четвертый:

$ awk -v f=2 -v t=4 '{for(i=f;i<=t;i++) printf("%s%s",$i,(i==t)?"\n":OFS)}' FILE

Исключить диапазон столбцов со второго по четвертый и напечатать все остальные:

$ awk -v f=2 -v t=4 '{for(i=1;i<=NF;i++)if(i>=f&&i<=t)continue;else printf("%s%s",$i,(i!=NF)?OFS:ORS)}' FILE
image_pdfimage_print

Find – поиск и удаление файлов

Удаление файлов старше N дней

find /dir/ -atime +N | xargs rm -f

или

find /dir/ -atime +N -delete

или

find /dir/ -name "*.jpg" -mtime +N -exec rm -f {} \;

или

find /dir/ \( -name "*.jpg" -o -name "*.png" \) \! -newerct '30 days ago' -delete

Ключи:

  • -name — искать по имени файла, при использовании подстановочных образцов параметр заключается в кавычки.
  • -o — логическое “или”
  • -a — логическое “и”
  • -type — тип искомого: f=файл, d=каталог, l=ссылка (link).
  • -user — владелец: имя пользователя или UID.
  • -group — владелец: группа пользователя или GID.
  • -perm — указываются права доступа.
  • -size — размер: указывается в 512-байтных блоках или байтах (признак байтов — символ «c» за числом).
  • -atime — время последнего обращения к файлу.
  • -ctime — время последнего изменения владельца или прав доступа к файлу.
  • -mtime — время последнего изменения файла.
  • -newer другой_файл — искать файлы созданные позже, чем другой_файл.
  • -delete — удалять найденные файлы.
  • -ls — генерирует вывод как команда ls -dgils.
  • -print — показывает на экране найденные файлы.
  • -exec command {} \; — выполняет над найденным файлом указанную команду; обратите внимание на синтаксис.
  • -ok — перед выполнением команды указанной в -exec, выдаёт запрос.
  • -depth — начинать поиск с самых глубоких уровней вложенности, а не с корня каталога.
  • -prune — используется, когда вы хотите исключить из поиска определённые каталоги.
  • N — количество дней.

Найти и удалить файлы старше N дней:

#/usr/bin/find /home/.trash/ -type f -mtime +30 -exec rm -rf {} \;
# find /path/to/files/* -mtime +1 -delete
# find /somewhere -type f -mtime +7 -print0 | xargs -0 rm -f

Предварительно проверить:

/usr/bin/find /home/.trash/ -type f -mtime +10 -print

Уточненный поиск файлов, если известно примерное время не старее 12-25 11:35 но и не старше 12-28 19:35

# find -mindepth 1 -newermt '2018-12-25 11:35' ! -newermt '2018-12-28 19:35' -print0 | xargs -0 cp -p --target-directory=/home/svm/12.28

Все файлы с расширением .doc и не старше 7 дней и скопировать в директорию

# find /home/resc/ -name \*.doc ! -mtime +7 -print0 | xargs -0 cp -p --target-directory=/home/svm/12.28-2

Файлы созданные или изменённые в течении последних 5 минут

# find /home/user -type f -mmin -5

Время последнего обращения к которым более 5 дней

# find /usr/bin -type f -atime +5

Поиск строки в файлах

# find ./ -type f -exec grep -i -H "STRING" {} \;

Найти все файлы php в который встречается строка STRING:

# find ./ -type f -name "*.php" -exec grep -i -H "STRING" {} \;

Так же можно использовать команду grep с опцией -R для поиска файлов по содержимому:

# grep "STRING" -R /path/for/find

Исключить из поиска саму директорию

# find /var/log/journal -mindepth 1 -type d
# find /var/log/journal -mindepth 1 -type d -empty -delete 2>/dev/null

Массовое изменение прав доступа

Найти рекурсивно все директории и изменить права

# chmod 755 $(find /path/to/base/dir -type d)

Найти все файлы и изменить им права

# chmod 644 $(find /path/to/base/dir -type f)

или

Установка прав доступа 644 на все файлы в текущей директории и всех поддиректориях:

# find ./ -type f -exec chmod 644 {} \;

Установка прав доступа 755 на все папки в текущей директории и всех поддиректориях:

# find ./ -type d -exec chmod 755 {} \;

Скобочки {} означают передаваемый аргумент команде выполняющейся в -exec от утилиты find, такой как путь файла

Исключить директорию:

/usr/bin/find /dir/ -type f -mtime +28 \
-not -path "/dir/dir1/*" \
-not -path "/dir/dir2/*" \
-not -path "/dir/dir3/*" \
-print

Пакетное переминование файлов:

Ищем все файлы формата txt и переминовываем в jpg

find . -type f | sed -e "p;s/txt/doc/" | xargs -n2 mv
image_pdfimage_print

Dovecot – Error: net_connect_unix(/var/run/dovecot//stats-writer) failed: Permission denied

После обновления Dovecot в логах postfix-a maillog начала проскакивать ошибка вида:

Error: net_connect_unix(/var/run/dovecot//stats-writer) failed: Permission denied

Читаем на сайте:

https://wiki2.dovecot.org/Upgrading/2.3

service stats {
  unix_listener stats-writer {
    user = vmail
    #mode = 0666 # Use only if nothing else works. It's a bit insecure, since it allows any user in the system to mess up with the statistics.
  }
}

где vmail – пользователь под которым работает Dovecot, у меня это nobody. Дописываем в конец файла и рестартуем сервис:

# ee /usr/local/etc/dovecot/conf.d/10-master.conf

## NEW
service stats {
unix_listener stats-writer {
user = nobody
#mode = 0666 # Use only if nothing else works. It's a bit insecure, since it allows any user in the system to mess up with the statistics.
}
}
##
image_pdfimage_print

Portmaster – обновление perl 5.24 to perl 5.28, php56 to php72

# portsnap fetch update

Perl

1. Добавить в /etc/make.conf:

DEFAULT_VERSIONS+= perl5=5.28
2. # portmaster -o lang/perl5.28 lang/perl5.24

выполнили, после чего удалить верхнюю строку из /etc/make.conf

3. обновить все что использует старую динамическую библиотеку perl

# portmaster -f `pkg shlib -qR libperl.so.5.24`

4. проверить что убрали все лишнее из /etc/make.conf – указанную выше строку

PhP

Перед апгрейдом PHP, необходим апгрейд mysql. PHP проще чем с Perl, ничего не нужно заносить в /etc/make.conf.

На всякий случай создать список пакетов, это нужно делать перед апгрейдом:

# cd /root && pkg info php56\* > ~/installed-php56.txt && cat installed-php56.txt
# cat ~/installed-php56.txt | xargs pkg delete -fy

Далее устанавливаем php72 и остальные пакеты завязанные на php (например php72-extensions)

# portmaster lang/php72 lang/php72-extensions

Примечание. Все текущие DEFAULTS определены в:

# less /usr/ports/Mk/bsd.default-versions.mk
image_pdfimage_print