gdb: отладка бинарников без пересборки с логами

Когда сервис падает, а логов недостаточно, следующий шаг — gdb. Не обязательно быть C-разработчиком: базовых команд хватает, чтобы вытащить стек вызовов и переменные на момент краха. gdb -p $(pgrep myapp) # подключиться к живому процессу gdb --args ./myapp --config prod.conf (gdb) bt # backtrace — стек вызовов (gdb) info locals # переменные текущего фрейма (gdb) frame 2 # переключиться на фрейм (gdb) print my_var (gdb) continue Для уже случившегося краха без живого процесса — gdb ./myapp core.12345: bt покажет строку и стек на момент сигнала. Без -g при сборке символов нет, bt покажет только адреса — но иногда и этого хватает понять, в какой библиотеке крах. ...

27 июля 2026 г. · llexa

ldd, ldconfig и LD_PRELOAD: динамическая линковка в Linux

Динамически слинкованный бинарник не содержит код библиотек внутри — при запуске загрузчик находит .so-файлы по путям из кэша. ldd, ldconfig и LD_PRELOAD управляют этим процессом, пригождаются при error while loading shared libraries. # какие .so нужны бинарнику и откуда они реально берутся ldd /usr/bin/nginx # обновить кэш путей после установки новой библиотеки в нестандартный путь ldconfig ldconfig -p | grep libssl # проверить, что библиотека в кэше # подменить библиотеку на лету, без пересборки бинарника LD_PRELOAD=/opt/libs/libfake.so ./app LD_PRELOAD удобен для отладки и быстрых хаков без правки исходников, но тем же механизмом пользуются руткиты — лишняя строка в выводе ldd повод проверить /etc/ld.so.preload. ...

27 июля 2026 г. · llexa

Ubuntu 20 лет врал через /etc/debian_version

Заходишь на Ubuntu-сервер, cat /etc/debian_version — а там версия Debian Sid, из которой когда-то собрали пакеты. К реальной версии Ubuntu это не имеет отношения вообще, но файл честно живёт в системе и вводит в заблуждение любой скрипт, который наивно на него полагается. Баг завели в 2005 году. Двадцать с лишним лет community-мудрость одна: “не читай этот файл, читай /etc/os-release” — а сам файл никто не трогал, потому что а вдруг что-то сломается. Самый живучий баг — не тот, который не могут воспроизвести, а тот, который воспроизводит каждый, все знают, что он есть, и никто не убирает десятилетиями. ...

26 июля 2026 г. · llexa

certbot: автоматизация TLS-сертификатов Let's Encrypt

Платный wildcard-сертификат или возня с CSR — избыточны для большинства сайтов. certbot сам получает сертификат Let’s Encrypt, вписывает его в конфиг nginx и настраивает автопродление: сертификаты живут 90 дней, продление обязано быть автоматическим. # выпуск + автонастройка nginx для домена sudo certbot certonly --nginx -d example.com -d www.example.com # автопродление настроено? (обычно systemd timer) systemctl list-timers | grep certbot # сухой прогон продления, без реального обновления sudo certbot renew --dry-run --nginx сам находит нужный server-блок. --standalone — если nginx ещё не поднят. renew --dry-run раз в квартал стоит гонять руками — чтобы не узнать о сломанном автопродлении в момент истечения сертификата. ...

25 июля 2026 г. · llexa

restic: бэкапы с дедупликацией и шифрованием из коробки

borg дедуплицирует бэкапы, но требует SSH-доступа к хранилищу или локального пути. restic — та же дедупликация и шифрование, но из коробки говорит с S3, Backblaze B2, SFTP и локальным диском, без отдельного backup-сервера. # инициализация репозитория (тот же синтаксис для S3/SFTP) restic init --repo /mnt/backup/restic-repo # бэкап директории restic -r /mnt/backup/restic-repo backup /etc /var/lib/postgresql/data # снапшоты и восстановление restic -r /mnt/backup/restic-repo snapshots restic -r /mnt/backup/restic-repo restore latest --target /tmp/restore Пароль репозитория задаётся при init — без него бэкапы не восстановить, хранить его нужно отдельно. Дедупликация на уровне блоков: повторный бэкап после мелких правок в большом файле занимает не весь объём, а только изменённые куски. ...

25 июля 2026 г. · llexa

swapfile в Linux: своп без переразметки диска

Своп-раздел готовится заранее, при разметке диска. Забыли — на живой системе без LVM его так просто не добавить. swapfile проще: обычный файл на смонтированной ФС, без переразметки, без остановки сервисов. # файл на 4G (fallocate быстрее dd, но не работает на всех ФС — тогда dd if=/dev/zero) fallocate -l 4G /swapfile chmod 600 /swapfile mkswap /swapfile swapon /swapfile # постоянно — строка в /etc/fstab echo '/swapfile none swap sw 0 0' >> /etc/fstab # swappiness пониже для сервера с достаточным объёмом RAM — не уходить в своп раньше времени sysctl vm.swappiness=10 chmod 600 до mkswap — иначе любой локальный юзер прочитает файл свопа, а там может быть что угодно из памяти, вплоть до кусков секретов. На btrfs так не сработает: нужен chattr +C, отключение CoW, или отдельный раздел. ...

25 июля 2026 г. · llexa

mtr: traceroute и ping в одном инструменте

ping показывает, жив ли хост, traceroute — маршрут до него, но оба дают разовый снимок. mtr держит трассировку открытой непрерывно и на каждом хопе копит статистику потерь и задержки — сразу видно, где именно на маршруте начинаются проблемы. # интерактивный режим (обновление в реальном времени) mtr 8.8.8.8 # отчёт в текст, для логов/тикетов mtr --report -c 100 8.8.8.8 # только IPv4, без резолва имён (быстрее) mtr -4 -n 1.1.1.1 Полезно на перемежающихся проблемах “то работает, то нет”: обычный traceroute может попасть в момент, когда всё хорошо, а mtr за пару минут накопит статистику и покажет конкретный хоп с процентом потерь. ...

24 июля 2026 г. · llexa

netdata: мониторинг сервера за одну команду

Поднять Zabbix или связку Prometheus+Grafana ради разового взгляда на нагрузку сервера — избыточно. netdata ставится одной командой и сразу даёт веб-дашборд с сотнями метрик: CPU по ядрам, память, диски, сеть, процессы — всё с обновлением раз в секунду. # установка (собственный inline-скрипт, ставит как systemd-сервис) curl -Ss https://get.netdata.cloud/kickstart.sh | sh # дашборд доступен сразу # http://<server-ip>:19999 Из коробки — без настройки алертов, retention всего несколько часов и заметный расход CPU/RAM на самого агента при большом числе метрик. Для разовой диагностики “что жрёт сервер прямо сейчас” — быстрее, чем разворачивать полноценный стек. Для долгосрочной истории и алертинга на проде — всё равно Zabbix или Prometheus. ...

24 июля 2026 г. · llexa

siege и wrk: нагрузочное тестирование HTTP из терминала

Перед тем как отдавать сервис в прод, полезно прикинуть, сколько запросов в секунду он держит — без разворачивания JMeter или Gatling. siege и wrk — однобинарники, дают нагрузку из терминала за одну команду. # siege: 50 одновременных клиентов, 30 секунд siege -c 50 -t 30s http://localhost/ # wrk: 4 потока, 100 соединений, 30 секунд wrk -t4 -c100 -d30s http://localhost/ siege проще читается (concurrent users, availability, response time), wrk быстрее на высоких нагрузках за счёт своего event-loop на Lua-скриптах — можно писать кастомные сценарии запросов, не только GET на один URL. Для быстрой проверки “не упадёт ли nginx под пиковой нагрузкой” любой из двух хватает. ...

24 июля 2026 г. · llexa

nerdctl: docker-совместимый CLI поверх containerd

Если на сервере уже стоит containerd (например, как часть Kubernetes-ноды), ставить рядом полный Docker ради привычного CLI избыточно — nerdctl даёт те же команды, но работает прямо через containerd, без своего демона. nerdctl run -d -p 8080:80 nginx nerdctl ps nerdctl build -t myapp . docker-compose.yml тоже читается как есть: nerdctl compose up -d Отдельно стоит rootless-режим — контейнеры без root на хосте, без suid-бинарников и без выхода из namespace как единственной защиты: ...

23 июля 2026 г. · llexa