Howto Bash
howto_bash.1544451842.txt.gz | Хозяин: admin | Изменен: 20.05.2019 15:18 admin | Утвержден(admin 2018/12/10 09:24)
Важные Приемы для BASH и Linux
O_DIRECT Как скопировать файлы не портя кеш, чтоб комп не тормозил
- Удобно - crab_cp_nocache
- Нативно - dd conv=noerror iflag=direct if=«$src» of=«$dst» oflag=direct bs=128000
- Если большой файл скопировать на другой сервер - crb_sync
- Если не только копирование, а разные утилиты частично - https://github.com/Feh/nocache он использует posix_fadvise(fd, offset, len, POSIX_FADV_DONTNEED). Чистит только при закрытии поэтому при больших файлах толку мало.
Как отправить почту с авторизацией из shell стандартной утилитой mail
echo -e \ "To: admin@example.com Subject: Hello Admin\n Это тело сообщения\n" \ | mail -S ssl-verify=ignore \ -S nss-config-dir=/etc/pki/nssdb \ -S hostname=myhost.example.com \ -S smtp=smtp.example.com:465 \ -S smtp-use-starttls \ -S from="user123@example.com<user123@example.com>" \ -S smtp-auth=login -S smtp-auth-password='*********' \ -S smtp-auth-user=user123 -S ssl-no-default-ca \ -a "admin@example.com" \ -t \ -S verbose
pidof -c
Выводит список процессов только текущего chroot
Часто нужно проверить наличие процесса в системе по имени. Платформа использует chroot контейнеры, потому задача усложняется: нам обычно не интересны одноимённые процессы из других контейнеров.
Я встречал 2 подхода:
- нет проверки контейнера(что по-сути потенциальный баг)
- проверка сделана на наличию специфичных для контейнера файлов (видимо как исправление этого бага)
У утилиты pidof есть опция -c, которая делает нужную проверку, и выводит процессы только из текущего chroot.
Например:
`pidof -с crond` - выведет только крон(ы) текущего контейнера.
Не запускать дубль скрипта
if pidof -csxo %PPID "${0##*/}"; then echo "Already running" >&2 exit 1 fi
Опции:
- -c - в текущем chroot
- -s - одного pid достаточно
- -x - проверять скрипты
- -o %PPID - исключить из поиска вызывающий скрипт, т.е. нас самих.
- «${0##*/}» - имя скрипта