traceroute и tracepath: маршрут до хоста

traceroute отправляет пакеты с нарастающим TTL — каждый роутер на пути отвечает ICMP Time Exceeded, так строится маршрут. traceroute -n google.com # без DNS-резолвинга, быстрее traceroute -T -p 443 google.com # TCP SYN вместо UDP — проходит через файрволы traceroute -I google.com # ICMP echo (нужен root) tracepath google.com # без root, находит MTU на каждом сегменте tracepath не требует root и параллельно определяет MTU пути (PMTUD) — полезно при проблемах с фрагментацией пакетов. Если нужен непрерывный мониторинг маршрута — mtr объединяет оба инструмента в реальном времени. ...

30 июня 2026 г. · llexa

bash best practices: пишем скрипты надёжно

Каждый скрипт начинается с set -euo pipefail — стоп при первой ошибке, незаданной переменной, упавшем пайпе. #!/bin/bash set -euo pipefail NAME="${1:-world}" # значение по умолчанию readonly LOG="/var/log/app.log" cleanup() { rm -f /tmp/app.lock; } trap cleanup EXIT [[ -f "$LOG" ]] && tail -n 100 "$LOG" [[ ]] вместо [ ] — нет сюрпризов с пробелами в переменных. readonly — защита от случайного переопределения. trap EXIT — очистка даже при ошибке. #bash #linux #sysadmin

29 июня 2026 г. · llexa

GNU parallel: xargs с параллелизмом и прогресс-баром

parallel — как xargs, но с явным числом потоков, progress-баром и --eta. Запустить команду для каждого аргумента: parallel -j4 gzip ::: file1.log file2.log file3.log parallel -j$(nproc) "convert {} {.}.webp" ::: *.png Читать список из файла и показывать прогресс: parallel -j8 --progress --eta curl -O {} :::: urls.txt Несколько групп аргументов — комбинации через :::: parallel echo {1}-{2} ::: A B C ::: 1 2 # A-1 A-2 B-1 B-2 C-1 C-2 xargs -P 4 проще для однострочников. parallel — когда нужен --eta, --joblog, --retry-failed. ...

29 июня 2026 г. · llexa

nginx: map и geo — динамика без if

map и geo живут в http {} и вычисляются один раз на запрос — без if, без лишнего кода. geo $remote_addr $is_internal { default 0; 10.0.0.0/8 1; 192.168.0.0/16 1; } map $http_referer $bad_referer { default 0; ~*spam\.ru 1; } server { if ($bad_referer) { return 444; } if ($is_internal = 0) { return 403; } } geo — хэш по IP, без regex, очень быстро. map — regex по любому заголовку или переменной. Комбинируются свободно. #nginx #linux #sysadmin

29 июня 2026 г. · llexa

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

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

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