perf: от счётчиков CPU до flamegraph

perf stat ./program — счётчики ядра за один запуск: instructions, cycles, cache-misses, IPC. IPC < 1 — узкое место в CPU. Cache-miss rate > 10% — проблема с памятью. Live-профиль процесса без перезапуска: perf top -p $(pgrep nginx) Запись стеков и flamegraph: perf record -F 99 -g -p PID -- sleep 30 perf report --stdio perf script | stackcollapse-perf.pl | flamegraph.pl > out.svg Скрипты — github.com/brendangregg/FlameGraph. perf stat -a sleep 5 — счётчики всей системы за 5 секунд, без привязки к PID. ...

29 июня 2026 г. · llexa

tee: stdout в файл и в пайп одновременно

tee пишет stdin в файл и пропускает его дальше по пайпу — одновременно. make 2>&1 | tee build.log ansible-playbook deploy.yml | tee -a /var/log/deploy.log -a — append, не перезаписывать файл. Несколько адресатов через process substitution: ./script.sh | tee >(grep ERROR > errors.log) >(grep WARN > warns.log) > full.log Если нужен только файл, без вывода в терминал: make 2>&1 | tee build.log > /dev/null /dev/stderr как цель — лог ошибок на месте, stdout дальше: ...

29 июня 2026 г. · llexa

bash: nameref и косвенные переменные

declare -n создаёт ссылку на другую переменную — псевдоним по имени: declare -n ref=target target="hello" echo "$ref" # hello ref="world" echo "$target" # world Главная польза — возврат значений из функций без глобальных переменных и eval: get_ip() { declare -n _out=$1 _out=$(hostname -I | awk '{print $1}') } get_ip MY_IP echo "$MY_IP" Косвенное раскрытие ${!var} — более старый способ, работает без declare -n: varname="PATH" echo "${!varname}" # значение $PATH # динамические переменные в цикле for env in DEV STAGE PROD; do key="DB_HOST_${env}" echo "$env → ${!key}" done declare -n требует bash 4.3+. На macOS встроен bash 3.2 — там только ${!var}. ...

27 июня 2026 г. · llexa

bc, awk и $(( )): математика в bash

Bash умеет целые числа прямо в $(( )): echo $(( 10 * 3 + 5 )) # 35 echo $(( 2 ** 10 )) # 1024 Для дробей — bc. Ключ -l даёт sqrt, sin, log: echo "scale=4; sqrt(2)" | bc -l # 1.4142 echo "scale=2; 355/113" | bc # 3.14 awk считает float в одну строку — удобно когда уже парсишь вывод: awk 'BEGIN { printf "%.4f\n", 355/113 }' df / | awk 'NR==2 { printf "used: %.1f%%\n", $3/$2*100 }' printf форматирует числа без вычислений: printf "%.2f\n" 3.14159 # 3.14 printf "%d\n" $(( 1024 ** 2 )) Правило: $(( )) для целых, bc для точных дробей, awk когда уже в пайпе. ...

27 июня 2026 г. · llexa

nginx upstream: балансировка и keepalive

Базовый upstream с тремя бэкендами и балансировкой по наименьшим соединениям: upstream backend { least_conn; server 127.0.0.1:8001; server 127.0.0.1:8002; server 127.0.0.1:8003; keepalive 32; } server { location / { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } keepalive 32 — пул постоянных соединений к бэкендам. proxy_http_version 1.1 + Connection "" обязательны, иначе keepalive не работает. Алгоритмы: round_robin (дефолт), least_conn (меньше активных соединений), ip_hash (одна сессия — один бэкенд). Для ip_hash убрать least_conn. ...

26 июня 2026 г. · llexa

podman: rootless-контейнеры без демона

podman запускает контейнеры без root и без фонового демона — каждый контейнер это просто дочерний процесс пользователя: podman run -d --name nginx -p 8080:80 nginx:alpine podman ps podman logs nginx podman stop nginx && podman rm nginx Образы совместимы с Docker Hub. Большинство docker-команд работают через alias: alias docker=podman Превратить контейнер в systemd-сервис, который стартует при логине пользователя: podman generate systemd --name nginx --files --new mv container-nginx.service ~/.config/systemd/user/ systemctl --user enable --now container-nginx.service --new означает: при старте сервиса контейнер создаётся заново из образа, при стопе — удаляется. ...

26 июня 2026 г. · llexa

Обзор новинок #4: 19–26 июня

Релизы за неделю — только сервер-стек. grafana v13.0.3 — патч в ветке 13.x: исправления alert history и embedded dashboards. loki v3.7.3 — ⚠️ BREAKING: оператор меняет дефолт для OpenShift stream labels; добавлены bloom-фильтры — ускоряют поиск без индекса. 3x-ui v3.4.0 — Multi-Node Hardening: Notification Event Bus, Managed Hosts, масштаб до 100k клиентов на ноду, per-node outbound routing. doggo v1.2.0 — стабильные имена ассетов (doggo-linux-x86_64 без версии) — удобно для CI-скриптов автообновления. sing-box v1.13.14 — патч proxy-ядра. vscode 1.126.0 — обновление редактора. #linux #sysadmin #releases

26 июня 2026 г. · llexa

auditd: аудит файлов и событий безопасности

auditd пишет в ядерный кольцевой буфер — ни один rootkit не подменит события до записи на диск. Смотреть за файлом паролей и sudoers: auditctl -w /etc/passwd -p wa -k passwd_changes auditctl -w /etc/sudoers -p wa -k sudo_changes Флаги -p wa — write + attribute change. -k — ключ для поиска. Правила выживают перезагрузку через /etc/audit/rules.d/audit.rules. Найти все события по ключу и посмотреть статистику входов: ausearch -k passwd_changes --interpret aureport --auth --summary aureport --failed покажет только неудачные попытки — удобно для ежедневного отчёта в cron. ...

25 июня 2026 г. · llexa

GNU screen: терминальный мультиплексор без tmux

screen есть в базовой поставке почти любого дистрибутива — даже там, где нет tmux. Запустить именованную сессию: screen -S deploy # Ctrl+a d — detach, сессия живёт в фоне screen -r deploy # вернуться screen -ls # список сессий Ctrl+a — префикс всех команд screen (как Ctrl+b в tmux). Основные: Комбинация Действие Ctrl+a c новое окно Ctrl+a " список окон Ctrl+a S горизонтальный сплит Ctrl+a d detach screen -x session — подключиться к уже занятой сессии: два человека видят один терминал в реальном времени. Удобно для пар-программирования или передачи управления. ...

25 июня 2026 г. · llexa

md5sum, sha256sum, b3sum: контрольные суммы в Linux

md5sum сломан криптографически с 1996 года — коллизии найдены. Для проверки целостности файлов используй sha256sum или быстрее: # классика — медленно, но везде есть md5sum file.iso sha256sum file.iso # проверить по файлу контрольных сумм sha256sum -c SHA256SUMS # сгенерировать для директории find . -type f | sort | xargs sha256sum > checksums.sha256 # BLAKE3 — быстрее SHA-256, современный стандарт b3sum file.iso # apt install b3sum Скорость на большом файле: md5sum ≈ sha256sum < sha512sum < blake2 < blake3 (в 3–5× быстрее sha256 на многоядерных). ...

25 июня 2026 г. · llexa