Howto Bash
Различия
Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
howto:howto_bash [18.10.2018 07:06] сергей_трошин [Не сохранять историю] |
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 ===== | ===== Как отправить почту с авторизацией из shell стандартной утилитой mail ===== | ||
| <code bash> | <code bash> | ||
| + | yum install mailx | ||
| + | |||
| echo -e \ | echo -e \ | ||
| "To: admin@example.com | "To: admin@example.com | ||
| Строка 29: | Строка 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##*/}" - имя скрипта | ||
| ===== Не сохранять историю ===== | ===== Не сохранять историю ===== | ||
| Строка 40: | Строка 64: | ||
| </code> | </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~~ Обязательны к прочтению всем /*Не удаляйте эту строку и ниже!*/ | ||