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

fc: редактирование и повтор команд из истории bash

fc (fix command) — встроенная команда bash для просмотра, редактирования и повторного выполнения команд из истории. Менее известна, чем !! или стрелка вверх, но решает то, что им не под силу. Без аргументов fc открывает последнюю команду в $FCEDIT (или $EDITOR), даёт поправить и сразу выполняет отредактированный вариант — удобно, когда опечатка не в конце команды, а где-то в середине длинной строки. Основные варианты: fc -l — список последних 16 команд с номерами fc -l -20 — последние 20 команд fc 15 20 — открыть диапазон команд 15–20 в редакторе одним блоком fc -s old=new — быстрая замена подстроки в последней команде и повтор, без редактора fc -s — просто повторить последнюю команду #bash #linux

12 июля 2026 г. · llexa

nohup, disown, setsid: процесс без терминала

Закрыл SSH-сессию — и долгий процесс упал вместе с ней, получив SIGHUP. nohup, disown и setsid решают эту проблему по-разному: один игнорирует сигнал заранее, другой отвязывает уже запущенный процесс от shell, третий сразу создаёт для процесса отдельную сессию. Заранее защитить процесс от SIGHUP: nohup ./long-task.sh & Если процесс уже запущен в фоне текущего шелла: disown -h %1 Полная изоляция — без управляющего терминала с самого начала: setsid ./long-task.sh < /dev/null &> /tmp/task.log & setsid создаёт новую сессию, поэтому даже disown не нужен — процесс изначально не привязан к терминалу. Это то, что systemd и tmux используют под капотом для демонизации. ...

11 июля 2026 г. · llexa

xxd, hexdump, base64: бинарная инспекция из терминала

Иногда файл нужно смотреть не как текст, а как последовательность байт — определить формат по сигнатуре, найти повреждение или передать бинарник туда, где ждут только текст. Первые байты файла — обычно там сигнатура формата: xxd -l 16 file.bin Канонический hex-дамп: hexdump -C file.bin | head Бинарный файл текстом — например, для JSON или email-вложения: base64 -w0 file.bin > file.b64 base64 -d file.b64 > file.bin xxd дополнительно умеет обратное преобразование (xxd -r) — удобно поправить пару байт прямо в hex-дампе и собрать файл обратно. ...

11 июля 2026 г. · llexa

tmux+SSH своими руками: DIY-версия без Rust

За две недели разобрали ws и аналоги (tmuxinator, tmuxp, sesh) — все требуют бинарник или Python-пакет. Если серверов немного, результат собирается из ~/.ssh/config и десятка строк bash. #!/usr/bin/env bash set -euo pipefail hosts=$(awk '/^Host / && $2 !~ /\*/ {print $2}' ~/.ssh/config) for h in $hosts; do sess=$(ssh -o ConnectTimeout=2 "$h" tmux ls 2>/dev/null || true) [ -n "$sess" ] && printf "%-15s %s\n" "$h" "$sess" done Подключение — через fzf: target=$(bash list.sh | fzf | awk '{print $1}') [ -n "$target" ] && ssh -t "$target" tmux attach Нет SQLite-кэша и git-статуса — на десятке хостов опрос занимает пару секунд. Разрастётся до полусотни — смысл смотреть на ws. ...

9 июля 2026 г. · llexa

bash history: не только стрелка вверх

История bash хранит не просто список команд — в ней есть подстановки для быстрого повтора и редактирования без перепечатывания. sudo !! # повторить прошлую команду с sudo vim !$ # последний аргумент прошлой команды !apt # последняя команда, начинающаяся с apt ^old^new # заменить old на new в прошлой команде и выполнить Ctrl+R — обратный поиск по истории, повторное нажатие листает совпадения дальше. HISTCONTROL=ignoredups:erasedups в .bashrc убирает дубли и повторы подряд. HISTTIMEFORMAT="%F %T " добавляет метки времени в history. history -d N удаляет конкретную строку, если туда случайно попал пароль. ...

7 июля 2026 г. · llexa

heredoc и herestring в bash

heredoc (<<) подставляет блок текста как stdin команде — без склеивания строк через \n и без экранирования кавычек. cat <<EOF > /etc/nginx/conf.d/app.conf server { listen 80; server_name app.local; } EOF Herestring (<<<) — то же самое, но для одной строки: grep "error" <<< "$log_line" Если EOF в кавычках (<<'EOF') — переменные внутри блока не подставляются, текст передаётся как есть. Без кавычек — $var и `cmd` раскрываются. <<-EOF убирает ведущие табы, что позволяет делать отступы внутри if/function без искажения вывода. ...

7 июля 2026 г. · llexa

flock: защита cron-задач от наложения

flock захватывает файловую блокировку перед запуском команды. Если блокировка занята — ждёт или выходит сразу. flock -n /var/lock/backup.lock /usr/local/bin/backup.sh В crontab: */5 * * * * flock -n /tmp/sync.lock /usr/local/bin/sync.sh С -n — не ждать, выйти с кодом 1, если занято. Без -n — ждать освобождения. Файл блокировки создаётся автоматически. Блокировка снимается при завершении процесса — зависший lock не застрянет навсегда. Комбо: flock -w 10 — ждать максимум 10 секунд. #linux #bash #cron #sysadmin

6 июля 2026 г. · llexa