gpg: шифрование и подписи без облака

Пара ключей создаётся одной командой, дальше gpg сам спрашивает имя, email и пароль: gpg --gen-key gpg --list-keys Зашифровать файл для конкретного получателя — по его публичному ключу: gpg -e -r user@example.com file.txt gpg -e -r user@example.com --armor file.txt # текстовый вывод вместо бинарного Расшифровка — gpg сам найдёт нужный приватный ключ в keyring и спросит пароль: gpg -d file.txt.gpg > file.txt Подпись подтверждает авторство без шифрования содержимого: gpg --sign file.txt gpg --verify file.txt.gpg Публичный ключ для обмена — экспорт и импорт в текстовом виде: ...

23 июня 2026 г. · llexa

timeout: защита от зависших команд

Если команда может зависнуть навсегда — timeout убивает её по таймауту: timeout 5s curl https://example.com По умолчанию посылается SIGTERM, но не все процессы его слушают. --kill-after добивает SIGKILL, если процесс не завершился сам: timeout --kill-after=3s 10s ./stuck-script.sh Код возврата 124 — сигнал о том, что сработал именно таймаут, а не ошибка самой команды: timeout 5s long-task; echo $? # 124 = превышен лимит В cron-задачах timeout — стандартная страховка от зависшего скрипта, который иначе будет копиться в процессах до следующего перезапуска: ...

23 июня 2026 г. · llexa

/proc — файловая система, которой нет на диске

/proc существует только в памяти — ядро генерирует содержимое файлов при каждом чтении, на диске ничего не лежит. grep MemAvailable /proc/meminfo cat /proc/cpuinfo | grep "model name" | head -1 Для конкретного процесса — каталог /proc/<pid>/: cmdline хранит аргументы запуска через нулевые байты вместо пробелов, поэтому читать его лучше через tr: cat /proc/1234/cmdline | tr '\0' ' ' /proc/net/tcp отдаёт таблицу соединений в сыром виде — адреса и порты в hex, состояние сокета числом. На этот файл, собственно, и опирается ss. ...

22 июня 2026 г. · llexa

bash: process substitution — <() и >()

<(cmd) превращает вывод команды в путь к файлу — bash создаёт /dev/fd/N, и его можно подсунуть туда, где ожидается файл, а не stdin. diff <(ssh host1 cat /etc/hosts) <(ssh host2 cat /etc/hosts) Без процесс-сабституции пришлось бы гонять вывод во временные файлы и чистить их после. Здесь diff получает два «файла», которые на самом деле читают из живых SSH-сессий параллельно. >(cmd) — обратная операция: команда справа получает на вход поток, который записывается слева. ...

22 июня 2026 г. · llexa

cgroups v2: лимиты CPU и RAM на сервис

systemd-cgls показывает дерево cgroup — какие процессы в каком слайсе сидят, без похода в /sys/fs/cgroup/ руками. systemd-cgls systemd-cgtop Лимит для конкретного сервиса ставится одной командой, без правки unit-файла: systemctl set-property nginx.service CPUQuota=50% MemoryMax=512M Изменения применяются сразу и переживают перезапуск сервиса — systemd пишет их в /etc/systemd/system.control/. Текущие значения видны прямо в файловой системе cgroup: cat /sys/fs/cgroup/system.slice/nginx.service/cpu.max cat /sys/fs/cgroup/system.slice/nginx.service/memory.max Если сервис выходит за MemoryMax — ядро убивает его через OOM killer внутри cgroup, не трогая остальную систему. ...

22 июня 2026 г. · llexa

Будь добрее #4: Эх, дороги

Эх, дороги… Пыль да туман, холода, тревоги да степной бурьян. Снег ли ветер, – вспомним друзья!… Нам дороги эти позабыть нельзя. #будьдобрее

21 июня 2026 г. · llexa

Эволюция пароля от root за 10 лет

2016: password 2017: P@ssw0rd1 2018: Company2018! 2020: меняется каждый квартал, в конце дописывается !! 2022: password manager + сложность 32 символа, никто его не знает 2024: SSO + passkey, пароля как такового уже нет 2026: и всё равно кто-то находит .env в публичном репо #юмор #sysadmin #security

21 июня 2026 г. · llexa

vmsync: инкрементальная репликация libvirt VM

vmsync копирует диски libvirt-машины на удалённый хост без полной пересылки при каждом запуске. После первой полной синхронизации он следит за изменёнными блоками через dirty bitmap QEMU и гонит дальше только дельту. vmsync -source-domain myvm -source-uri qemu:///system \ -target-uri qemu+ssh://backup-host/system Первый прогон тащит весь qcow2-диск через NBD, все последующие — только блоки, изменившиеся с момента последнего bitmap-чекпоинта. Лёгкая альтернатива shared storage там, где полноценный кластер не нужен, а гонять rsync всего диска каждый раз — слишком долго. ...

20 июня 2026 г. · llexa

xargs: параллельность и тонкая настройка

xargs -P 4 запускает до 4 процессов параллельно вместо обработки файлов один за другим. find /var/log -name "*.log" -print0 | xargs -0 -P 4 -I {} gzip {} -print0 у find и -0 у xargs — пара для имён с пробелами и переводами строк: find разделяет вывод нулевым байтом вместо пробела, xargs так же его читает. Без этой пары имя файла с пробелом превратится в два отдельных аргумента. -I {} подставляет каждый аргумент в шаблон команды. Если нужно ограничить число аргументов на один вызов — --max-args=2, полезно для команд, которые не умеют принимать длинный список сразу. ...

20 июня 2026 г. · llexa

Атомарные дистрибутивы на базе Debian

Атомарные (immutable) дистрибутивы обновляются не пакет за пакетом, а целым образом системы: либо переходишь на новую версию целиком, либо остаёшься на старой — промежуточных битых состояний между ними не бывает. На базе Debian эту схему реализует Vanilla OS через ABRoot: система хранит два корневых раздела, A и B. Обновление собирается в неактивном разделе, переключение между ними происходит атомарно при перезагрузке. abroot status abroot upgrade abroot rollback Если новый образ не загрузился — откат на предыдущий раздел занимает секунды, а не часы восстановления из бэкапа. Корневая ФС смонтирована read-only; установка пакетов мимо системного обновления идёт через apx — обёртку над distrobox, которая разворачивает изолированный контейнер с нужным пакетным менеджером, не трогая базовую систему. ...

20 июня 2026 г. · llexa