Howto Bash

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
howto:howto_bash [04.09.2018 07:21]
admin Approved(admin 2018/09/04 07:21)
howto:howto_bash [16.06.2020 07:34] (текущий)
s.troshin
Строка 1: Строка 1:
 ====== Важные Приемы для BASH и Linux ====== ====== Важные Приемы для 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 =====
 +<code bash>
 +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
 +</​code>​
  
 ===== pidof -c ===== ===== pidof -c =====
-Выводит список процессов только текущего chroot+ 
 +**Выводит список процессов только текущего chroot**
  
 Часто нужно проверить наличие процесса в системе по имени. Платформа использует chroot контейнеры,​ потому задача усложняется:​ нам обычно не интересны одноимённые процессы из других контейнеров.\\ Часто нужно проверить наличие процесса в системе по имени. Платформа использует chroot контейнеры,​ потому задача усложняется:​ нам обычно не интересны одноимённые процессы из других контейнеров.\\
Строка 10: Строка 38:
   * проверка сделана на наличию специфичных для контейнера файлов (видимо как исправление этого бага)   * проверка сделана на наличию специфичных для контейнера файлов (видимо как исправление этого бага)
  
-У утилиты pidof есть опция -c, которая делает нужную проверку,​ и выводи процессы только из текущего chroot. \\ Например:​ \\ `pidof -с crond` - выведет только крон(ы) текущего контейнера.+У утилиты pidof есть опция -c, которая делает нужную проверку,​ и выводит процессы только из текущего chroot. \\ Например:​ \\ `pidof -с crond` - выведет только крон(ы) текущего контейнера. 
 + 
 + 
 +===== Не запускать дубль скрипта ===== 
 +<​code>​ 
 +if pidof -csxo %PPID "​${0##​*/​}";​ then 
 + echo "​Already running"​ >&​2 
 + exit 1 
 +fi 
 +</​code>​ 
 +Опции:​ 
 +  * -c - в текущем chroot 
 +  * -s - одного pid достаточно 
 +  * -x - проверять скрипты 
 +  * -o %PPID - исключить из поиска вызывающий скрипт,​ т.е. нас самих. 
 +  * "​${0##​*/​}"​ - имя скрипта 
 + 
 +===== Не сохранять историю ===== 
 + 
 +Иногда,​ производя работы нужно скрыть использование определённых команд. 
 + 
 +Чтобы bash не сохранял историю по завершению интерактивной сессии можно сделать 
 + 
 +<​code>​unset HISTFILE 
 +</​code>​ 
 + 
 +===== Удалить аргумент из списка ===== 
 + 
 +Сложные изменения $@ 
 + 
 +<​code>​ 
 +# удаляем --user-login из списка аргументов 
 +for arg do 
 + shift 
 + [[ "​$arg"​ = "​--user-login="​* ]] && continue 
 + set -- "​$@"​ "​$arg"​ 
 +done 
 +</​code>​ 
 + 
 + 
 +===== Убрать/​заменить не валидные символы ===== 
 + 
 +Бывает нужно из строки сделать имя файл или переменной,​ и при этом, чтобы имя было из определённых символов:​ 
 + 
 +<code bash> 
 +# замена всех не букв-цифр на _ 
 +# есть и другие классы,​ также можно указать конкретные символы и диапазоны 
 +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 
 +</​code>​ 
 + 
 +  * -c = --complement,​ дополнение множества символов из первого параметра (все остальные символы,​ кроме перечисленных) 
 +  * -d = --delete 
 +  * -s = --squeeze-repeats - убрать повторы указанных символов
  
 ~~OWNERAPPROVE~~ Обязательны к прочтению всем /*Не удаляйте эту строку и ниже!*/ ~~OWNERAPPROVE~~ Обязательны к прочтению всем /*Не удаляйте эту строку и ниже!*/
  
 {(rater>​id=1|name=Прочитал_howto:​howto_bash|type=vote|trace=user|tracedetails=1)} {(rater>​id=1|name=Прочитал_howto:​howto_bash|type=vote|trace=user|tracedetails=1)}
 +