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

Finger princess: оставь всё — мне срочно нужен `man grep`

Есть категория людей, у которых выработалась суперспособность: не открывать браузер самостоятельно. «Какой флаг у tar для распаковки?» — написали они в 9:02 в понедельник. «Как посмотреть свободное место на диске?» — спрашивают в Slack, где ты онлайн. «Можешь найти ссылку на документацию nginx?» — nginx.org существует 20 лет. Это не незнание. Это стиль жизни. В 2010 году придумали ответ: lmgtfy.com — Let Me Google That For You. Вводишь вопрос, получаешь ссылку — анимация медленно открывает Google, набирает запрос, жмёт поиск. Прямо на экране получателя. Сайт жив: ru.lmgtfy2.com. ...

28 июня 2026 г. · llexa

PostgreSQL: statement_timeout — когда убивать запрос

statement_timeout прерывает запрос, если он работает дольше лимита. Postgres бросает ERROR: canceling statement due to statement timeout. На практике ставят на уровне роли приложения — не глобально: ALTER ROLE app SET statement_timeout = '3s'; -- или на сессию при открытии соединения: SET statement_timeout = '10s'; Глобально в postgresql.conf — риск: попадут VACUUM, REINDEX, ALTER TABLE, pg_dump и запросы обслуживания. Autovacuum и autoanalyze — фоновые воркеры вне сессии, не затронуты. statement_timeout отсчитывает время с начала выполнения, включая ожидание блокировки. Для долгого lock-wait — lock_timeout. Для брошенных транзакций — idle_in_transaction_session_timeout. ...

28 июня 2026 г. · llexa

Будь добрее #5: Гражданин-мститель

Уве Болл — режиссёр, которого критики списали давно. Он снимает сам, финансирует сам и говорит то, что думает. В 2026 году он выпустил Citizen Vigilante. Сюжет: Сандерс разочаровался в судах и полиции. Начал охотиться на коррумпированных чиновников и преступников — записывает на камеру, публикует с размытыми лицами, произносит манифесты. Интернет делает его звездой. Фильм фактически запрещён в Германии. На X его опубликовал лично Элон Маск. На Rutube — лежит свободно. ...

28 июня 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

Афоризмы Мёрфи #4: Второе следствие

«Всё занимает больше времени, чем кажется.» Второе следствие Мёрфи — Артур Блох, «Законы Мёрфи», 1977. Оценка «займёт час» превращается в день, «день» — в неделю. Причины всегда находятся по ходу: зависимость не задокументирована, environment отличается, тест упал на последнем шаге. Мёрфи тут не исключение — он правило. #murphy #афоризмы #юмор #sysadmin

27 июня 2026 г. · llexa

MikroTik Container: на каких устройствах работает

RouterOS 7.4+ умеет запускать OCI-контейнеры прямо на роутере — но только если процессор ARM или x86. MIPS и Tile (Cavium Tilera на CCR1xxx) не поддерживаются. Быстрая проверка архитектуры: /system resource print Поле architecture-name: arm / arm64 / x86_64 → контейнеры работают mipsbe / mips / tile → не работают ARM/ARM64 — работает: RB4011, RB3011, RB5009, CCR2004, CCR2116, CCR2216, RBM33G, hAP ax³, CHR. Без контейнеров: весь бюджетный сегмент на MIPS (hEX, hAP ac, RB951, wAP), весь CCR1xxx (Tile), старые PowerPC-платформы. ...

26 июня 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