age: современная замена gpg для шифрования файлов

gpg умеет всё — подписи, web-of-trust, keyserver’ы, десятки опций — но для простой задачи «зашифровать файл получателю» это избыточная сложность. age делает ровно одну вещь и без конфигов. age-keygen -o key.txt # Public key: age1qy... Шифрование по публичному ключу получателя, можно на нескольких сразу: age -r age1qy... -o secret.age file.txt age -r age1qy... -r age1zx... -o secret.age file.txt Расшифровка — своим приватным ключом: age -d -i key.txt secret.age > file.txt Если получателя нет и нужен просто пароль — симметричный режим без ключей вообще: ...

23 июля 2026 г. · llexa

bash regex: =~ и BASH_REMATCH без внешних утилит

Для простой проверки строки необязательно звать grep отдельным процессом — bash умеет regex сам, через =~ внутри [[ ]]. line="user=admin;role=superadmin" [[ $line =~ role=([a-z]+) ]] && echo "role: ${BASH_REMATCH[1]}" BASH_REMATCH[0] — всё совпадение целиком, [1], [2]… — группы в скобках по порядку открывающих (. Массив живёт до следующего =~. Синтаксис — extended regex (ERE), как grep -E, а не basic как обычный grep: группы без экранирования, +/?/{} работают напрямую. Для разовой проверки это быстрее fork/exec внешнего процесса, но для построчной обработки файла grep -P/awk всё равно удобнее. ...

21 июля 2026 г. · llexa

expect: автоматизация того, что просит ввести пароль вручную

Некоторые старые CLI-утилиты не берут пароль из stdin — только приглашением. expect скриптует диалог: ждёт паттерн в выводе и посылает ответ. #!/usr/bin/expect spawn passwd testuser expect "New password:" send "S3cur3Pass!\r" expect "Retype new password:" send "S3cur3Pass!\r" expect eof spawn запускает процесс, expect "паттерн" ждёт его в выводе (regex), send пишет в stdin, expect eof — дожидается завершения (без него скрипт выйдет раньше процесса). autoexpect записывает сессию как script, сразу генерируя .exp-файл — писать с нуля не обязательно. expect — крайняя мера для legacy без non-interactive режима; где есть --batch/-y, лучше они. ...

21 июля 2026 г. · llexa

logger и systemd-cat: пишем в journald из bash

Скрипт, пишущий статус в свой файл в /var/log/, — ещё одна точка для ротации и мониторинга. logger шлёт сообщение прямо в syslog/journald, под общую ротацию и journalctl. logger -t backup-script -p user.err "disk full" # тег + приоритет journalctl -t backup-script # только свои сообщения systemd-cat оборачивает целую команду — её stdout/stderr: systemd-cat -t rsync-job rsync -av /data /backup/ journalctl -t rsync-job --since "10 min ago" Из cron: job.sh 2>&1 | logger -t rsync-job — результат ищется одной командой, без grep по файлам в /var/log/. Приоритет (err, warning) фильтрует по важности и вешает алерты на ошибки, не трогая шум. ...

20 июля 2026 г. · llexa

awk: BEGIN/END, массивы и функции — не только '{print $1}'

awk '{print $2}' знают все, но за этим стоит язык программирования с блоками инициализации, накопительными переменными между строками и своими функциями. awk 'BEGIN{print "start"} {n++} END{print "total:", n}' file — счётчик строк с сообщениями до и после обработки awk '{sum[$1]+=$2} END{for (k in sum) print k, sum[k]}' file — суммировать вторую колонку по группам из первой, аналог GROUP BY awk 'function sq(x){return x*x} {print sq($1)}' file — своя функция внутри awk-программы awk -F: '{print $1}' /etc/passwd — свой разделитель полей вместо пробела awk 'NR==FNR{a[$1]=$2; next} $1 in a{print $0, a[$1]}' ref.txt data.txt — join двух файлов по первому полю #linux #bash

14 июля 2026 г. · llexa

grep продвинутый: -P, ripgrep и контекст вокруг совпадений

Большинство используют grep как grep -i слово файл и останавливаются. POSIX-регулярки сильно уступают perl-совместимым, а вывод без контекста заставляет открывать файл заново. grep -P '(?<=user=)\w+' auth.log — perl-совместимые регулярки (lookahead/lookbehind), недоступные в обычном grep grep -A 3 -B 1 "ERROR" — 3 строки после и 1 до совпадения, без повторного открытия файла grep -C 2 "timeout" — то же самое, но одинаковое число строк с обеих сторон grep -o -P '\d+\.\d+\.\d+\.\d+' — вывести только совпавшую часть строки, например IP-адреса rg "pattern" -t log — ripgrep: та же задача в разы быстрее на больших деревьях, уважает .gitignore из коробки #linux #bash

14 июля 2026 г. · llexa

Markdown в терминале: glow, mdcat и frogmouth вместо cat

cat README.md показывает сырую разметку — решётки вместо заголовков, звёздочки вместо жирного текста. Для документации и заметок в терминале есть инструменты, которые рендерят markdown в читаемый вид прямо в TUI. glow README.md — рендер с форматированием (заголовки, списки, таблицы, подсветка кода) прямо в stdout glow — без аргументов открывает TUI-браузер по markdown-файлам каталога с поиском по имени glow -p file.md — принудительно через pager, удобно для длинных документов mdcat file.md — быстрый рендер без интерактивности, хорошо ложится в pipe и скрипты frogmouth file.md — TUI-браузер (Textual): переходы по ссылкам, оглавление, история назад/вперёд Ссылки: https://github.com/charmbracelet/glow https://github.com/swsnr/mdcat https://github.com/Textualize/frogmouth ...

14 июля 2026 г. · llexa

pv: прогресс-бар для любого pipe

Долгий cp большого файла или бэкап через pipe выполняются молча — непонятно, сколько осталось и не завис ли процесс. pv встраивается прямо в конвейер между командами и показывает прогресс, скорость и оставшееся время, не меняя саму логику команды. pv file.iso > /dev/sdb — прогресс-бар при записи образа на устройство вместо тихого dd tar -cf - /data | pv | gzip > backup.tar.gz — скорость и объём переданных данных внутри цепочки бэкапа pv -L 5m file.bin > /dev/null — ограничить скорость передачи (throttle), чтобы не забить диск/сеть pv -s 10G bigfile > /dev/null — указать ожидаемый размер заранее, тогда pv покажет ETA и процент psql -c "COPY t FROM STDIN" < <(pv dump.csv) — прогресс при загрузке дампа в PostgreSQL #linux #bash

14 июля 2026 г. · llexa

bash readline: set -o vi, bind и горячие клавиши

Редактирование командной строки в bash — это не сам bash, а библиотека readline под капотом. Она же отвечает за автодополнение по Tab и историю по стрелкам — и её можно настраивать под себя. set -o vi — переключить редактирование строки на vi-биндинги (Esc для normal mode, hjkl, dw, 0/$ прямо в командной строке) set -o emacs — вернуть режим по умолчанию bind -p — список всех текущих привязок readline bind '"\C-f": forward-word' — назначить своё сочетание клавиш ~/.inputrc — конфиг readline, применяется ко всем программам, использующим её, не только bash #bash #linux

13 июля 2026 г. · llexa

date: форматирование времени в bash

date в скриптах обычно используют только для метки времени в логах — date +%F и забыли. На деле команда умеет парсить произвольные даты, считать разницу между ними и выводить в любом формате без внешних утилит. date +"%Y-%m-%d %H:%M:%S" — свой формат вывода вместо дефолтного date -d "2 days ago" — относительные даты на человеческом языке (GNU date) date -d "@1720000000" — конвертировать unix-timestamp в читаемую дату date +%s — обратно, текущее время в unix-timestamp, удобно для арифметики date -d "2026-07-13 + 1 month" — арифметика над датами без ручного подсчёта дней в месяце #bash #linux

13 июля 2026 г. · llexa