age: простое шифрование файлов вместо gpg

gpg для разового шифрования файла — это ключи, keyring и десяток флагов, о которые легко запнуться. age решает ту же задачу без веба доверия: ключ — одна строка, шифрование — одна команда. age-keygen -o key.txt # Public key: age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p age -r age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p \ -o backup.tar.age backup.tar age -d -i key.txt -o backup.tar backup.tar.age # симметричный вариант с паролем, вообще без ключей age -p -o secret.age secret.txt Формат бинарный и компактный, ключи можно хранить прямо в .ssh/ (age шифрует и на существующий ssh ed25519-ключ через ssh-to-age) — удобно для бэкапов в dotfiles-репозиториях, где полноценный gpg-keyring избыточен. ...

9 июля 2026 г. · llexa

nerdctl: docker-совместимый CLI поверх containerd

Если на сервере уже крутится Kubernetes или containerd сам по себе, держать вдобавок docker-демон — лишняя сущность. nerdctl даёт тот же синтаксис, что docker, но говорит напрямую с containerd. curl -LO https://github.com/containerd/nerdctl/releases/latest/download/nerdctl-full-2.0.0-linux-amd64.tar.gz tar Cxzf /usr/local nerdctl-full-2.0.0-linux-amd64.tar.gz nerdctl run -d --name web -p 80:80 nginx nerdctl compose up -d # docker-compose.yml работает как есть alias docker=nerdctl Из коробки есть то, чего у docker нет: rootless без отдельной установки и lazy-pulling образов через stargz (контейнер стартует раньше, чем образ скачался целиком). Состояние живёт в неймспейсах containerd (nerdctl -n k8s.io ps = вид Kubernetes) — к этому надо привыкнуть. ...

9 июля 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

parted и gdisk: разметка GPT-дисков

MBR ограничен 2 ТБ на диск и 4 основными разделами — на современном железе стандарт давно GPT. parted работает и неинтерактивно (одной командой), и в консольном меню; gdisk — интерактивный аналог fdisk, но именно для GPT. Разметка через parted одной командой: parted /dev/sdb mklabel gpt parted /dev/sdb mkpart primary ext4 0% 100% parted -l Через gdisk — интерактивно: n создать раздел, p показать таблицу, w записать изменения: gdisk /dev/sdb Перед разметкой продакшен-диска — бэкап таблицы разделов, чтобы откатиться при ошибке: ...

8 июля 2026 г. · llexa

tmux-session managers: чем отличаются аналоги tmux-workbench

У tmux-workbench (ws) есть соседи по нише — но ни один не индексирует сессии сразу на нескольких серверах через SSH с git-контекстом. tmuxinator — YAML-сессии, но шаблон, не живые tmuxp — то же самое, локально, без TUI tmux-resurrect — save/restore, локально, плагин sesh — TUI+fzf, локально, без SSH/git smug — YAML-команды, без remote-индекса Все решают часть задачи — сохранить сессию или быстро переключиться fzf’ом. SQLite-индекс сразу по всем серверам с git-веткой и dirty-статусом — фича, которой здесь больше ни у кого нет. ...

8 июля 2026 г. · llexa

Современные ФС #4: ZFS — основы

ZFS сочетает менеджер томов и файловую систему в одном слое — вместо связки mdadm + LVM + ФС работаешь с одним zpool. Каждый блок данных хранится с чексуммой, поэтому битые копии на диске обнаруживаются сами, без ручных сверок. Создать пул из зеркала двух дисков и датасет со сжатием: zpool create tank mirror /dev/sdb /dev/sdc zfs create -o compression=lz4 tank/data zfs list Проверить состояние пула и целостность данных: zpool status tank zpool scrub tank scrub читает все блоки и сверяет чексуммы — если на зеркале найдена ошибка, ZFS чинит блок автоматически со второй копии. На Debian/RED OS ставится пакетом zfsutils-linux (DKMS-модуль, не в mainline ядре из-за лицензии CDDL). ...

8 июля 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

tmux-workbench: ws — менеджер сессий с индексом по всем серверам

tmux-workbench (команда ws) — TUI на Rust для управления tmux-сессиями не только локально, но и на удалённых серверах через SSH, с индексом в SQLite вместо разбора вывода tmux list-sessions на лету. ws scan # проиндексировать сессии ws attach prod/api # подключиться к сессии на сервере ws list --server prod --status active Для каждой сессии хранится: сервер, директория, git-ветка и статус (dirty, ahead/behind), наличие CLAUDE.md/AGENTS.md. Фильтры в TUI: server:prod tag:backend git:dirty. Стек: Rust + ratatui + rusqlite, установка через cargo install или install.sh. ...

7 июля 2026 г. · llexa

ufw: firewall без боли с iptables

ufw (Uncomplicated Firewall) генерирует правила iptables/nft из простых команд — не нужно помнить синтаксис цепочек и таблиц ради базовой защиты сервера. ufw allow 22/tcp # разрешить SSH ufw allow from 10.0.0.0/8 # доверенная подсеть — все порты ufw deny 23 # заблокировать telnet явно ufw enable # включить firewall ufw status verbose # список правил с номерами Правила применяются по порядку — ufw status numbered показывает номера для ufw delete <N>. По умолчанию политика deny incoming, allow outgoing — открывать нужно только то, что реально слушает. Логи: /var/log/ufw.log, включаются через ufw logging on. Не забыть открыть SSH до ufw enable, иначе отвалится текущая сессия. ...

7 июля 2026 г. · llexa