netcat: швейцарский нож для TCP/UDP

nc (netcat) — минимальный инструмент для работы с TCP/UDP прямо из терминала. Проверка порта: nc -zv 192.168.1.10 22 # открыт ли SSH nc -zv -w 3 host.example 443 # таймаут 3 сек -z — не отправлять данные, только проверить; -v — вывести результат. Мини-сервер для тестов: # слушать на порту 9000 и выводить всё входящее nc -lp 9000 # с другой машины — отправить данные echo "hello" | nc 192.168.1.10 9000 Передача файла по сети (без scp, без авторизации): ...

11 июня 2026 г. · llexa

SSH продвинутый: ProxyJump, ControlMaster, агент

ProxyJump — подключение через промежуточный хост (bastion): ssh -J user@bastion user@target # в ~/.ssh/config Host target ProxyJump bastion ControlMaster — переиспользование соединения. Первый ssh открывает сокет, последующие подключаются к нему мгновенно: Host * ControlMaster auto ControlPath ~/.ssh/cm-%r@%h:%p ControlPersist 10m ControlPersist 10m — сокет живёт 10 минут после закрытия терминала, следующий scp/rsync не будет переподключаться. Форвардинг агента — ключи с локальной машины доступны на удалённой: ssh -A user@bastion # или в config Host bastion ForwardAgent yes Не включать ForwardAgent yes для Host * — компрометация bastion раскроет агент. ...

11 июня 2026 г. · llexa

Vim с нуля #4: LSP и автодополнение

coc.nvim — самый популярный LSP-клиент для Vim. Требует Node.js. # установить Node.js если нет curl -fsSL https://deb.nodesource.com/setup_20.x | sudo bash - sudo apt install nodejs Добавить в ~/.vimrc (после plug#begin): Plug 'neoclide/coc.nvim', {'branch': 'release'} Запустить :PlugInstall, затем установить расширение для нужного языка: :CocInstall coc-pyright " Python :CocInstall coc-tsserver " TypeScript / JS :CocInstall coc-sh " bash/sh Добавить бинды в ~/.vimrc: " автодополнение по Tab inoremap <silent><expr> <Tab> \ coc#pum#visible() ? coc#pum#next(1) : "\<Tab>" inoremap <expr> <S-Tab> coc#pum#visible() ? coc#pum#prev(1) : "\<S-Tab>" inoremap <expr> <CR> coc#pum#visible() ? coc#pum#confirm() : "\<CR>" " go-to-definition nmap <silent> gd <Plug>(coc-definition) " показать документацию nnoremap <silent> K :call CocActionAsync('doHover')<CR> " список ошибок nnoremap <silent> <space>e :CocList diagnostics<CR> Диагностика (ошибки/предупреждения) отображается прямо в строке редактора — без лишних окон. ...

11 июня 2026 г. · llexa

jq: парсинг JSON в терминале

jq — фильтр для JSON прямо в bash. Незаменим при работе с API, конфигами и логами. # достать поле echo '{"name":"alice","age":30}' | jq '.name' # из массива — все элементы cat data.json | jq '.users[]' # фильтр: только активные пользователи cat data.json | jq '.users[] | select(.active == true)' # выбрать только поля name и email cat data.json | jq '.users[] | {name, email}' map() применяет выражение к каждому элементу массива: # увеличить все цены на 10% jq '.items | map(.price * 1.1)' catalog.json # получить список имён как bash-массив mapfile -t names < <(jq -r '.users[].name' data.json) -r убирает кавычки из строк — удобно для дальнейшей передачи в bash. ...

10 июня 2026 г. · llexa

systemd таймеры вместо cron

Таймеры systemd — это .timer + .service пара. Логи через journalctl, зависимости через Requires=, пропущенные запуски — через Persistent=true. # /etc/systemd/system/backup.timer [Unit] Description=Daily backup [Timer] OnCalendar=*-*-* 03:00:00 Persistent=true [Install] WantedBy=timers.target # /etc/systemd/system/backup.service [Unit] Description=Backup job [Service] ExecStart=/usr/local/bin/backup.sh systemctl enable --now backup.timer systemctl list-timers # все активные таймеры + следующий запуск journalctl -u backup.service # логи Persistent=true — если система была выключена в момент запуска, таймер сработает при следующем старте. В cron такого нет. ...

10 июня 2026 г. · llexa

Архиваторы #3: 7z и сравнение форматов

7z умеет почти всё: создавать, распаковывать, тестировать и листить архивы любых форматов. # создать архив 7z a archive.7z ./dir/ # распаковать (сохраняет структуру) 7z x archive.7z # просмотр содержимого 7z l archive.7z # проверить целостность 7z t archive.7z Сравнение форматов при сжатии папки ~500 МБ: Формат Команда Степень Скорость 7z 7z a -mx=9 ★★★★★ ★★☆☆☆ xz tar -cJf ★★★★★ ★☆☆☆☆ zst tar -I 'zstd -19' ★★★★☆ ★★★★☆ gz tar -czf ★★★☆☆ ★★★★☆ zip zip -r ★★☆☆☆ ★★★★★ Для бэкапов — zst. Максимальная компрессия — 7z/xz. Windows-совместимость — zip. ...

10 июня 2026 г. · llexa

openssl в командной строке

Проверить сертификат, TLS-рукопожатие или срок истечения — openssl делает это без браузера. # TLS-рукопожатие и цепочка сертификатов openssl s_client -connect example.com:443 -servername example.com </dev/null # информация о сертификате из файла openssl x509 -in cert.pem -noout -text # дата истечения openssl x509 -in cert.pem -noout -dates Проверить, не истекает ли сертификат в течение 30 дней (exit 1 = истекает): openssl x509 -in cert.pem -noout -checkend 2592000 && echo OK || echo "EXPIRES SOON" # проверить удалённо echo | openssl s_client -connect example.com:443 2>/dev/null | \ openssl x509 -noout -enddate # проверка цепочки доверия openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt cert.pem Удобно добавить в cron — заранее узнаёшь об истекающих сертификатах. ...

9 июня 2026 г. · llexa

systemd: пишем свой .service с нуля

Любой скрипт или приложение можно превратить в systemd-сервис за пять минут. # /etc/systemd/system/myapp.service [Unit] Description=My Application After=network.target [Service] Type=simple ExecStart=/usr/local/bin/myapp --config /etc/myapp.conf ExecStop=/bin/kill -TERM $MAINPID Restart=on-failure RestartSec=5 User=myapp [Install] WantedBy=multi-user.target Основные значения Type=: simple — не форкается; forking — демон в фон; oneshot — запуск и выход (cron-стиль). systemctl daemon-reload systemctl enable --now myapp systemctl status myapp journalctl -u myapp -f Restart=on-failure — перезапуск при ненулевом exit-коде. Restart=always — всегда, кроме явного stop. RestartSec — пауза перед перезапуском. ...

9 июня 2026 г. · llexa

tcpdump: захват трафика на сервере

Самый быстрый способ понять, что происходит в сети — tcpdump прямо на сервере. # слушать на всех интерфейсах, без резолва имён tcpdump -i any -n # только HTTP (порт 80) от конкретного хоста tcpdump -i eth0 -n host 192.168.1.10 and port 80 # захватить 100 пакетов и выйти tcpdump -i any -n -c 100 BPF-фильтры: host, net, port, src, dst, логика and/or/not. # всё кроме SSH tcpdump -i any not port 22 # захват в файл для анализа позже tcpdump -i eth0 -w /tmp/capture.pcap # прочитать файл tcpdump -r /tmp/capture.pcap -n Pipe в Wireshark с удалённого сервера: ...

9 июня 2026 г. · llexa

DNS: unbound, dog и DOH/DOT

DNS можно резолвить быстрее, приватнее и с нормальным выводом. # установить unbound apt install unbound systemctl enable --now unbound # проверить резолвинг dig @127.0.0.1 example.com dog — современная замена dig с цветным выводом: apt install dog dog example.com dog example.com MX dog @8.8.8.8 example.com AAAA DOT (DNS over TLS) и DOH (DNS over HTTPS) шифруют запросы. В unbound включить DOT: forward-zone: name: "." forward-tls-upstream: yes forward-addr: 1.1.1.1@853 forward-addr: 9.9.9.9@853 После systemctl restart unbound — трафик на 53 снаружи не виден. Проверить: dog @127.0.0.1 example.com должен отвечать с кешем. ...

8 июня 2026 г. · llexa