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

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

WireGuard: VPN за 4 команды

WireGuard — VPN в ядре Linux с версии 5.6: меньше конфига, выше скорость, никакого OpenSSL-оверхеда. # ключи на каждой стороне wg genkey | tee privatekey | wg pubkey > publickey # /etc/wireguard/wg0.conf — сервер [Interface] PrivateKey = <privatekey> Address = 10.0.0.1/24 ListenPort = 51820 [Peer] PublicKey = <publickey-клиента> AllowedIPs = 10.0.0.2/32 # поднять / погасить туннель wg-quick up wg0 wg-quick down wg0 # текущее состояние: handshake, трафик по пирам wg show Автозапуск — systemctl enable wg-quick@wg0. Если сервер должен форвардить трафик дальше в интернет, не забыть net.ipv4.ip_forward=1 в sysctl и MASQUERADE в nftables/iptables. ...

19 июня 2026 г. · llexa

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

socat: швейцарский нож для сокетов

socat соединяет два потока данных — сокеты, файлы, процессы, устройства: socat TCP-LISTEN:9000,fork,reuseaddr TCP:10.0.0.5:80 # port forward socat - TCP:host:port # интерактивное подключение Передача файла между машинами без scp: socat TCP-LISTEN:9999,fork file:received.tar,create # приёмник socat file:archive.tar TCP:receiver-host:9999 # отправитель TLS-обёртка для нешифрованного сервиса: socat OPENSSL-LISTEN:443,cert=server.pem,fork TCP:localhost:8080 fork обязателен для серверных режимов — без него одно соединение и завершение. Для разовой диагностики хватает nc -zv, socat нужен там, где TLS, UNIX-сокеты или произвольные комбинации источник→приёмник. #linux #network #sysadmin

18 июня 2026 г. · llexa

Архиваторы #4: lz4 — скорость важнее степени

lz4 — архиватор для случаев, когда важна скорость, а не степень сжатия: lz4 file.bin file.bin.lz4 # сжать lz4 -d file.bin.lz4 file.bin # распаковать lz4 -9 file.bin # максимальное сжатие (всё ещё быстро) lz4 -z -f file.bin # перезаписать .lz4 если уже есть С tar: tar -I lz4 -cf archive.tar.lz4 dir/ # упаковать tar -I lz4 -xf archive.tar.lz4 # распаковать Сравнение на 1 ГБ текстовых логов: lz4 -1 0.3 сек 650 МБ zstd -3 1.1 сек 480 МБ zstd -19 18 сек 310 МБ xz -6 22 сек 290 МБ lz4 выигрывает на порядок по скорости, но проигрывает в степени сжатия. Использовать там, где сжатие в реальном времени важнее размера: логи перед отправкой по сети, бэкапы с жёстким временным окном, потоковые пайплайны. ...

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

nmap: сканирование сети с нуля

nmap — стандарт для аудита сети и диагностики портов: nmap 192.168.1.0/24 # пинг всей подсети, живые хосты nmap -sS 192.168.1.1 # SYN-scan (stealth, нужен root) nmap -sV -p 22,80,443 host # версии сервисов на конкретных портах nmap -O host # угадать ОС по TCP fingerprint nmap -p- host # все 65535 портов nmap --open 10.0.0.0/8 # только открытые порты в /8 Полезные скрипты NSE: nmap --script=vuln host # базовая проверка на CVE nmap --script=http-title -p 80 subnet/24 # заголовки всех веб-серверов nmap -sV --script=ssl-cert host # цепочка TLS-сертификата По умолчанию nmap сканирует 1000 самых популярных портов. -p- нужен, если хотите не пропустить нестандартные. ...

17 июня 2026 г. · llexa