bash getopts: парсинг флагов без боли

getopts — встроенная команда bash для разбора флагов вида -v, -f file: while getopts "v:f:h" opt; do case $opt in v) VERBOSE=$OPTARG ;; f) FILE=$OPTARG ;; h) exit 0 ;; esac done shift $((OPTIND - 1)) Двоеточие после буквы (v:, f:) — флаг требует аргумент, без него (h) — просто переключатель. $OPTIND после цикла указывает на первый нефлаговый аргумент, shift сдвигает $1 $2 ... на оставшиеся: ./script.sh -v 3 -f /etc/conf input.txt # $VERBOSE=3 $FILE=/etc/conf $1=input.txt Длинные флаги (--verbose) getopts не понимает — нужен внешний getopt или ручной case. ...

18 июня 2026 г. · llexa

inotifywait: события файловой системы в реальном времени

inotifywait из пакета inotify-tools — подписка на события ядра для ФС: apt install inotify-tools # разовое ожидание события inotifywait -e modify /etc/nginx/nginx.conf # непрерывный мониторинг директории с дочерними inotifywait -m -r -e modify,create,delete /var/www/html # авто-перезагрузка при изменении конфига inotifywait -m -e close_write /etc/nginx/ | while read path event file; do echo "$file изменён, перезагружаем nginx..." systemctl reload nginx done Основные события: modify, create, delete, moved_to, close_write, attrib. ...

17 июня 2026 г. · llexa

Интерактив #1: chmod — права доступа своими руками

Под постом — настоящий терминал. Не картинка, не gif: можно печатать команды и видеть результат сразу. Песочница — каталог ~/project: deploy.sh config.yml secrets/api.key logs/ Доступны ls -l [путь], chmod [-R] <режим> <путь> (восьмеричный или символьный — 750 и u+x,g-w,o= оба работают), stat <путь>, clear, help. Четыре задания по порядку — каждое выполненное подсвечивается зелёным: Сделай deploy.sh исполняемым для владельца, но не для остальных Запри secrets/api.key — права только у владельца Дай группе право на чтение config.yml, но не на запись Закрой саму папку secrets — посторонним вход воспрещён После четырёх — свободная игра, песочница остаётся открытой. ...

17 июня 2026 г. · llexa

at и batch: отложенный запуск команд

at запускает команду один раз в нужное время: echo "/usr/bin/backup.sh > /tmp/bak.log 2>&1" | at now + 1 hour echo "reboot" | at 03:00 tomorrow echo "cleanup.sh" | at 14:30 Jun 20 atq # посмотреть очередь atrm 3 # удалить задание №3 batch — то же, но задача стартует только когда load average опускается ниже 0.8: echo "heavy-job.sh > /tmp/out.log 2>&1" | batch Вывод заданий идёт в почту локального пользователя — либо редиректь вывод прямо в команде. #linux #bash #sysadmin

16 июня 2026 г. · llexa

bash: массивы — индексированные и ассоциативные

Индексированный массив: arr=("alpha" "beta" "gamma") echo "${arr[0]}" # alpha echo "${arr[@]}" # все элементы echo "${#arr[@]}" # количество: 3 arr+=("delta") # добавить for item in "${arr[@]}"; do echo "$item"; done Ассоциативный массив (словарь): declare -A hosts hosts[web]="192.168.1.10" hosts[db]="192.168.1.20" echo "${hosts[web]}" for key in "${!hosts[@]}"; do echo "$key → ${hosts[$key]}" done "${arr[@]}" — всегда в кавычках, иначе пробелы в значениях сломают цикл. #bash #linux #sysadmin

16 июня 2026 г. · llexa