Важные Приемы для BASH и Linux

O_DIRECT Как скопировать файлы не портя кеш, чтоб комп не тормозил

Как отправить почту с авторизацией из shell стандартной утилитой mail

yum install mailx
 
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

Опции:

Не сохранять историю

Иногда, производя работы нужно скрыть использование определённых команд.

Чтобы bash не сохранял историю по завершению интерактивной сессии можно сделать

unset HISTFILE

Удалить аргумент из списка

Сложные изменения $@

# удаляем --user-login из списка аргументов
for arg do
	shift
	[[ "$arg" = "--user-login="* ]] && continue
	set -- "$@" "$arg"
done

Убрать/заменить не валидные символы

Бывает нужно из строки сделать имя файл или переменной, и при этом, чтобы имя было из определённых символов:

# замена всех не букв-цифр на _
# есть и другие классы, также можно указать конкретные символы и диапазоны
ts@ts:~$ echo "$(tr -c '[:alnum:]' '_' <<<"var some/value+other?thing")"
var_some_value_other_thing_
 
# удаление всех не букв-цифр и _
ts@ts:~$ echo "$(tr -cd '[:alnum:]_' <<< "var_some??_value+++_other_thing")"
var_some_value_other_thing
 
# Очень полезно иногда заменить несколько пробелов одним, чтобы использовать потом cut
ts@ts:~$ tr -s '[:blank:]' <<<"field1       field2       field3" | cut -d " " -f 1,3
field1 field3

~~OWNERAPPROVE~~ Обязательны к прочтению всем

Прочитал howto howto bash
Yes(3) No(0) Clear

Yes:
, Сергей Трошин, Наумов Михаил,

No: