Helcode | Хелкод | Скрипты и автоматизация

Helcode | Хелкод | Скрипты и автоматизация

@helcode

☎️ Контакты для связи: @helcodeadm

987подписчиков
🇷🇺

Похожие каналы

Все →

Последние посты

duf — анализ дисков, который не напрягает глазаВы наверняка знаете df -h. Но давайте честно: его вывод — серое полотно, в котором глаза цепляются за проценты, а колонки разъезжаются, если подключено много устройств.duf — это df, который сделали нормальные люди. Таблицы, цвета, сортировка, фильтрация и даже JSON для скриптов.Базовое использование:dufВы увидите:- все разделы, смонтированные устройства, Docker-тома (если есть)- колонки: размер, использовано, свободно, процент, точка монтирования- цветовую индикацию: зелёный — норма, жёлтый — близко к заполнению, красный — опасноВариант 1 (Показать только реальные диски, исключить tmpfs, devtmpfs, squashfs):duf --only ext4,xfs,btrfs,zfsВариант 2 (Сортировка по любому столбцу):duf --sort size # самые большие сверхуduf --sort used # больше всех использованоduf --sort avail # больше всех свободноВариант 3 (Изменить единицы измерения):duf --bytes # байтыduf --si # десятичные приставки (MB, GB)duf --binary # двоичные (MiB, GiB)Вариант 4 (Исключить определённые устройства):duf --hide-loops # скрыть loop-устройства (snap/docker)duf --hide-tmpfs # скрыть tmpfsduf --exclude /mnt/* # скрыть всё, что примонтировано в /mntВариант 5 (Вывод в JSON для автоматизации):duf --json | jq '.[] | select(.mountpoint == "/") | .size'Получить размер корневого раздела в байтах для скрипта мониторинга.Вариант 6 (Тема оформления):duf --theme darkduf --theme lightМеняет цветовую схему под ваш терминал.Скачать бинарник с GitHub (если в репах нет):wget https://github.com/muesli/duf/releases/download/v0.9.1/duf_0.9.1_linux_amd64.debСовет: добавьте в ~/.bashrc алиас alias df='duf'. Если привыкли к df, то однажды забудете, что поменяли, и будете просто радоваться красивому выводу.P.S. Самый недооценённый флаг — `--only`. Часто `df` показывает 15 устройств, а нужны только `ext4`. `duf --only ext4` — и шума меньше, и глаза не разбегаются.👉🏻 Я в Telegram - t.me/helcode👉🏻 Я в VK - vk.com/helcode👉🏻 Я на Boosty - b

24 мая 2026 г.530В Telegram

entr — запускаем команды при изменении файловСитуация: вы пишете код. Каждые 30 секунд переключаетесь в терминал, нажимаете Ctrl+C, стрелку вверх, Enter, чтобы перезапустить тесты или пересобрать проект. Рутина раздражает.entr — это утилита, которая следит за файлами и запускает команду при любом изменении. Пересохранили файл — entr сам перезапустил тесты, перекомпилировал проект или перезагрузил сервер.Базовое использование:# Перезапускать тесты при изменении любого .py файлаfind . -name "*.py" | entr pytest# Следить за конкретным файломecho app.py | entr python app.pyВариант 1 (Автоматический перезапуск веб-сервера при разработке):echo app.py | entr -r python app.py-r — рестарт: убивает предыдущий процесс перед запуском нового. Идеально для серверов.Вариант 2 (Автоматическая пересборка документации):find docs/ -name "*.md" | entr -s "make html"-s — выполнить команду через шелл. Позволяет использовать пайпы и составные команды.Вариант 3 (Запуск скрипта при изменении конфига и перезагрузка сервиса):echo /etc/nginx/nginx.conf | entr -p systemctl reload nginx-p — не перезапускать команду, если она уже выполняется (защита от наложения).Вариант 4 (Выполнить несколько команд при изменении):find src/ -name "*.go" | entr -s "go test && go build -o app"Вариант 5 (Запускать скрипт в фоне и не ждать его завершения):find *.c | entr -n ./compile.sh-n — не ждать завершения предыдущей команды (полезно для долгих задач в фоне).Некоторые трюки с entr:1. Следить за новыми файлами: по умолчанию entr следит только за файлами, которые были переданы на старте. Чтобы добавить динамически появляющиеся файлы, нужен перезапуск. Но можно использовать find повторно: while true; do find . -name "*.py" | entr -d pytest; done (флаг -d отслеживает изменение директории).2. Перезапуск при изменении конфигурации: entr умеет получать сигналы. Если нужно перечитать конфиг без остановки, используйте -r.3. Ограничение частоты запусков: entr запускает команду при каждом изменении. Если файл сохраняется 1

20 мая 2026 г.530В Telegram

tree — показать структуру папок красивоСитуация: вы пришли в новый проект. Внутри — 50 папок и 200 файлов. Как понять, что где лежит? ls -la покажет список, но не даст представления о вложенности. find . вывалит простыню.tree выводит структуру файлов и папок в виде дерева. С первого взгляда видно, какие папки внутри каких лежат, где глубина, где пустота.Базовое использование:# Показать дерево текущей папкиtree# Показать дерево конкретной папкиtree /home/user/projectПример вывода:.├── app.py├── config│ ├── settings.py│ └── logging.conf├── requirements.txt├── static│ ├── css│ │ └── style.css│ └── js│ └── main.js└── templates ├── index.html └── article.htmlВариант 1 (Ограничить глубину):# Только два уровня вложенностиtree -L 2 /home/user/projectВариант 2 (Показать только папки, без файлов):tree -d /home/user/projectВариант 3 (Показать скрытые файлы):tree -a /home/user/projectВариант 4 (Подсветка по типам файлов):tree -C /home/user/projectИсполняемые файлы — зелёным, папки — синим, архивы — красным.Вариант 5 (Сохранить дерево в файл):tree /home/user/project > structure.txtВариант 6 (Исключить определённые папки):tree --prune --matchdirs --dirsfirst -I "node_modules|.git|__pycache__"Не показывать node_modules, .git и pycache.Вариант 7 (Показать размер файлов):tree --du -h--du — показать суммарный размер папки, -h — человеко-читаемый формат.Вариант 8 (С XML/JSON выводом для скриптов):tree --xml > structure.xmltree --json > structure.jsonКрасивые варианты:# Ограничить глубину 2, показать папки первыми, исключить мусорtree -L 2 -d --dirsfirst -I "venv|.idea|.pytest_cache|__pycache__|.git"# С размерами файлов, глубиной 3, только папкиtree -L 3 -d --du -h# Цветной вывод с папками первыми, без файловtree -C -d --dirsfirstСовет: добавьте в ~/.bashrc алиас:alias tree='tree -C --dirsfirst'Теперь всегда будет цветной вывод и папки сверху.Используете tree для навигации или предпочитаете ls -R?P.S. Самый недооценённый флаг — -L. Ограничивает глубину, когда де

16 мая 2026 г.527В Telegram

zoxide — cd, который запоминает ваши привычкиСитуация: вы работаете в трёх-четырёх проектах одновременно. Пути к ним выглядят примерно так: /home/user/projects/backend/api/src, /home/user/work/legacy/2024/frontend, /home/user/labs/experiments/rust/cool-tool. Каждый раз вводить полный путь или даже жать Tab несколько раз — утомительно.zoxide — это cd, который запоминает, куда вы ходили, и позволяет переходить по короткому фрагменту имени. Чем чаще вы посещаете папку и чем недавнее это было, тем выше её рейтинг.➤ Базовое использование:Вместо:cd /home/user/projects/backend/api/srcПишете:z apizoxide сам найдёт папку, содержащую api в имени, и перейдёт туда.# Создать базу данных посещённых папок (достаточно один раз)zoxide init bash # для bashzoxide init zsh # для zsh# Добавить команду в .bashrc/.zshrceval "$(zoxide init bash)"➤ Вариант 1 (Переход по части имени):# Если есть папки:# /home/user/projects/old-backend# /home/user/projects/new-backendz new # перейдёт в new-backend (чаще посещалась)z old # перейдёт в old-backend➤ Вариант 2 (Несколько слов и подстановки):# Перейти в папку, содержащую "rust" и "lab"z rust lab# Подстановка звездочки (любое количество символов)z *server # найдёт "my_server", "test-server", "server-main"➤ Вариант 3 (Интерактивный выбор при нескольких совпадениях):z api# Если есть api/v1, api/v2, api/v3# zoxide покажет список, можно выбрать стрелками (требуется fzf)zi apiФлаг i (interactive) — открывает интерактивный поиск с предпросмотром содержимого папки.➤ Вариант 4 (Замена `cd` целиком):Добавьте в .bashrc:alias cd='z'Теперь даже если вы по привычке напишете cd, сработает умный переход.➤ Вариант 5 (Просмотр и редактирование базы данных):# Показать рейтинг всех папокzoxide query --list# Вывести команды для удаления или изменения весаzoxide edit➤ Вариант 6 (Игнорирование временных папок и монтирований):Добавить в .bashrc:export _ZO_EXCLUDE_DIRS="$HOME/Downloads;$HOME/.cache"Теперь zoxide не будет запоминать эти папки.➤

11 мая 2026 г.526В Telegram

Скрипт, который не ломается на втором запускеБывало такое: запускаете скрипт настройки сервера, а он орёт «пакет уже установлен» и падает? Или молча дублирует конфиги, а потом всё едет? Идемпотентность - это когда повторяете одно и то же действие много раз, а результат не меняется. Как выключатель: щёлкайте сколько угодно - свет либо включится, либо выключится. Без дыма и искр.➤ Три функции, которые спасут ваши нервыКладёте в начало любого скрипта - и спите спокойно:#!/bin/bashset -euo pipefail# Ставим пакет, только если его нетensure_pkg() { dpkg -s "$1" &>/dev/null && { echo "$1 уже стоит"; return 0; } echo "Ставим $1..." apt-get install -y "$1"}# Добавляем строку в файл, только если её там нетensure_line() { grep -qxF "$1" "$2" 2>/dev/null && { echo "Строка уже есть в $2"; return 0; } echo "$1" | tee -a "$2"}# Запускаем сервис, только если он не крутитсяensure_svc() { systemctl is-active --quiet "$1" && { echo "$1 уже работает"; return 0; } systemctl start "$1" && systemctl enable "$1"}Логика простая: сначала проверяем, потом делаем. ➤ Как это выглядит в делеВместо простыни из if-else пишете читаемый список желаемого:echo "Пора наверное навести порядок..."ensure_pkg "nginx"ensure_pkg "jq"ensure_pkg "htop"ensure_line "vm.swappiness=10" /etc/sysctl.confsysctl -p &>/dev/nullensure_svc "nginx"echo "Закончили. Хоть десять раз запустите - ни одной ошибки не увидите :D."По сути, мы только что написали декларативную спецификацию: говорим «что должно быть», а не «как сделать». Это ровно то, за что все любят Ansible и Terraform, только на голом bash.➤ Где ещё пригодится этот приём- SQL-миграции: CREATE TABLE IF NOT EXISTS вместо просто CREATE- Работа с API: метод PUT идемпотентен, POST - нет- CI/CD: повторный запуск пайплайна не должен создавать дубликаты артефактов- Форма заказа на сайте: защита от двойного нажатия через идемпотентный ключ👉🏻 Я в Telegram - t.me/helcode👉🏻 Я в VK - vk.com/helcode👉🏻 Я на Boosty - boosty.to/helcode

7 мая 2026 г.570В Telegram

screen — терминальный долгожитель, который не бросает дела при отвале SSHСитуация: вы зашли на сервер по SSH, запустили миграцию базы данных, которая идёт 40 минут. Закрыли ноутбук, пошли домой. Пришли утром — миграция оборвалась посередине, потому что SSH-сессия разорвалась, когда ноутбук уснул. Знакомо?screen решает эту проблему. Это терминальный мультиплексор, который держит сессию на сервере независимо от вашего подключения. Потеряли интернет? Закрыли ноутбук? Ребутнули локальную машину? Сессия на сервере продолжает жить.Базовые команды:# Создать новую сессию (имя присвоится автоматически)screen# Создать сессию с именем (рекомендую)screen -S deploy# Отключиться от сессии (процесс продолжается)# Ctrl+A, D# Посмотреть список сессийscreen -ls# Подключиться к последней отключённой сессииscreen -r# Подключиться к сессии с конкретным именемscreen -r deploy# Убить сессию (если она зависла)screen -X -S deploy quitВариант 1 (Запуск команды в screen и отключение):# Создать сессию, выполнить команду и отключитьсяscreen -d -m -S backup bash -c "rsync -av /data/ /backup/; exec bash"-d -m — создать сессию в фоне. exec bash — оставить шелл после выполнения команды.Вариант 2 (Режим только для чтения):screen -r deploy -XПодключиться к сессии, но ничего не писать. Удобно, когда коллега уже работает, а вы хотите просто посмотреть.Вариант 3 (Логирование всего, что происходит в сессии):Добавьте в ~/.screenrc:logfile /var/log/screen/screen-%S.loglogfile flush 1deflog onТеперь все сессии пишут лог. Если что-то пошло не так — открываете лог и смотрите, что было.Вариант 4 (Разделение окна на области):- Ctrl+A, S — разделить окно горизонтально- Ctrl+A, TAB — переключиться между областями- Ctrl+A, c — создать новое окно в текущей области- Ctrl+A, Q — убрать все области, оставить активнуюЗапустили htop в одной области, tail -f лога в другой — и переключаетесь между ними.Вариант 5 (Переключение между окнами внутри сессии):В одной сессии можно открыть несколько окон (как вкладки в браузере):

4 мая 2026 г.560В Telegram

mtr - диагностика сети, которая показывает правдуСитуация: сайт не открывается или работает медленно. ping говорит, что хост доступен. traceroute показывает маршрут, но не даёт понять, где именно проблема. Что делать?mtr (My TraceRoute) объединяет ping и traceroute в одной утилите. Она показывает каждый узел на пути к серверу и статистику по потерям пакетов и задержкам на каждом из них. В реальном времени.Базовый запуск:mtr google.comЗапускается интерактивный интерфейс, который обновляется в реальном времени.Вариант 1 (Запуск в режиме отчёта):mtr -r -c 100 google.com-r - режим отчёта (без интерактива), -c 100 - 100 пакетов. На выходе - готовая статистика для анализа или отправки провайдеру.Вариант 2 (Только потеря пакетов, без графики):mtr -r -c 50 --report-wide google.com--report-wide расширяет вывод, чтобы IP-адреса не обрезались.Вариант 3 (Ограничить количество прыжков):mtr --max-ttl 10 google.comПроверить только первые 10 узлов, если проблема явно недалеко от вас.Вариант 4 (Использовать TCP вместо ICMP):mtr --tcp --port 443 google.comНекоторые сети блокируют ICMP (обычные ping-запросы). TCP-мод обходит это ограничение. --port 443 проверяет доступность конкретного порта (например, HTTPS).Вариант 5 (Сохранить результат в файл и смотреть позже):mtr --report google.com > report.txtУдобно, когда нужно показать кому-то или сравнить два разных маршрута.Как читать вывод `mtr`:- Loss% - процент потерянных пакетов на узле. Если потери начинаются на каком-то узле и продолжаются на всех следующих - проблема именно на этом узле или на пути к нему.- Snt - количество отправленных пакетов.- Last / Avg / Best / Worst / Stdev - задержки в миллисекундах. Если на каком-то узле время резко скачет (например, с 20 мс до 200 мс), а на следующих узлах снова падает - это может быть нормальным поведением маршрутизатора (он обрабатывает ICMP в фоне). Но если тряска остаётся - есть проблема.Важный нюанс: потери на промежуточных узлах не всегда означают проблему. Многие маршрутизаторы имеют

1 мая 2026 г.536В Telegram

Коллеги, всех приветствую!Помните пост про сайт? Рассказывал о планах, демонстрировал проделанную работу. Обещал делиться. Сделал даже больше, чем планировал.Коротко: сайт практически готов. Код написан, тесты проходят, большая часть функций уже работает.Что реализовано: статьи и гайды, регистрация и комментарии с модерацией, категории (Linux, DevOps, Python, Bash, Сети и другие), популярное в сайдбаре, тёмная тема, адаптив под телефоны, красивые ссылки, карта сайта, безопасность (CSRF, защита от частых запросов, санитизация и др.), всё под 152-ФЗ. В общем, полноценный блог.Работы ещё немало, но основное уже сделано. Просто не так оно работает, как хотелось бы: где-то кнопки съехали, где-то дата не в том формате, где-то мобильное меню живёт своей жизнью.Визуально сайт выглядит вполне готовым, но за красивой обложкой пока бардак. Работа велась по принципу «накидать и доработать» - сейчас как раз этап доработки.Когда запуск: хотелось бы всё закончить до июня, но прогнозировать трудно. Процесс идёт, основное готово - довожу до ума.В комментариях накидаю скринов, дабы можно было оценить проделанную работу😁

28 апр. 2026 г.566В Telegram

ncdu - визуальный анализ того, куда делось местоСитуация: сервер ругается, что диск заполнен на 95%. Вы запускаете df -h, видите, что корень почти полный. Дальше начинаются танцы с du -sh */ - приходится долбиться в каждую папку, спускаться глубже, терять нить, забываать, где были.ncdu (NCurses Disk Usage) делает то же самое, но с интерактивным интерфейсом, где можно ходить стрелками и сразу видеть всё дерево папок.Как это работает:Запускаем ncdu / - утилита сканирует директорию (от 10 секунд до пары минут, в зависимости от объёма) и показывает список папок и файлов, отсортированный по размеру.Навигация внутри ncdu:- Стрелки вверх/вниз - перемещение по списку- Enter - зайти внутрь папки- Стрелка влево - вернуться назад- d - удалить выбранный файл/папку (с подтверждением)- n - сортировка по имени (по умолчанию — по размеру)- q - выходВариант 1 (Быстрый анализ конкретной папки):ncdu /var# Тут же видно, что /var/log весит 40 гигабайтВариант 2 (Сканирование в фоне с сохранением результата):# Сохранить результат сканированияncdu -o /tmp/disk_usage.json /home# Потом посмотреть без повторного сканированияncdu -f /tmp/disk_usage.jsonВариант 3 (Исключить определённые папки):# Не сканировать монтирования и временные папкиncdu --exclude /mnt --exclude /tmp /Из личной практики:Диск забился на сервере с сайтами. df -h показал, что проблема в /var. Запустил ncdu /var - увидел, что /var/log/nginx весит 30 гигабайт. Зашёл туда стрелкой, увидел, что один лог-файл раздулся до нечеловеческих размеров. Нажал d, подтвердил удаление - место освободилось за 30 секунд. Без ncdu я бы тыкался руками ещё полчаса.Почему лучше, чем `du`: интерактивность, наглядность, возможность удалять прямо из интерфейса. Не нужно запоминать путь, чтобы потом писать rm -rf.P.S. На больших дисках (несколько терабайт) первое сканирование может занять несколько минут. Запускайте через screen или tmux, чтобы не оборвалось.👉🏻 Я в Telegram - t.me/helcode👉🏻 Я в VK - vk.com/helcode👉🏻 Я на Boosty - boosty.to/hel

25 апр. 2026 г.642В Telegram

strace - смотрим, что процесс делает на самом делеБывает, процесс висит, жрёт CPU, но не падает. Логи молчат. Что делать? Танцы с бубном? Нет. Есть strace - утилита, которая показывает все системные вызовы процесса.В Linux любая программа постоянно общается с ядром: читает файлы, пишет в сокеты, выделяет память. strace перехватывает этот диалог и показывает его вам.➤ Вариант 1 (Прицепиться к работающему процессу): процесс завис, но не умирает.# Прицепиться к PID 1234strace -p 1234# Вывод:# read(3, 0x7f8a2c000000, 4096) = -1 ETIMEDOUT (Connection timed out)# Наглядно: процесс ждёт ответа от какого-то файлового дескриптора 3➤ Вариант 2 (Запустить программу под strace): нужно понять, почему падает при запуске.# Запускаем и смотримstrace ./my_binary# Ищем строки с -1 (ошибка)strace ./my_binary 2>&1 | grep -1➤ Вариант 3 (Фильтрация по конкретным вызовам): шума много, нужно только чтение файлов.# Только open, read, write, closestrace -e trace=open,read,write,close ./my_binary# Только сетьstrace -e trace=network ./my_binary➤ Вариант 4 (Сохранить вывод в файл): процесс падает редко, нужно записать всё.strace -o /tmp/strace.log ./my_binary➤ Вариант 5 (Замерить время каждого вызова): где программа тормозит?# -T показывает время выполнения каждого вызоваstrace -T -e trace=read ./my_binary# -c — сводная статистика в концеstrace -c ./my_binaryКогда strace бесполезен:- Процесс тормозит, но не из-за системных вызовов (например, алгоритм O(n²))- Проблема в самом ядре (туда уже нужен perf или trace-cmd)- Программа работает с графикой/звуком через прямые вызовы драйверовP.S. strace может влиять на производительность процесса в 10-100 раз. На проде прицепляйтесь аккуратно и ненадолго.👉🏻 Я в Telegram - t.me/helcode👉🏻 Я в VK - vk.com/helcode👉🏻 Я на Boosty - boosty.to/helcode

23 апр. 2026 г.647В Telegram

Helcode | Хелкод | Скрипты и автоматизация pinned «Коллеги, всем доброго времени суток! Чертовски рад сделать разговорный пост - давно их не было. Думаю, многие заметили: постов стало меньше. Рассказываю, что произошло и когда снова будет разнообразие. Помните голосование о миграции канала пару месяцев…»

20 апр. 2026 г.В Telegram

lsof - кто держит порт и открыл тот файлСитуация: пытаетесь запустить сервер, а он падает с "Address already in use". Порт занят, но кем? Или пытаетесь удалить файл, а система пишет "file is in use". Кто его держит?lsof (List Open Files) отвечает на оба вопроса. В Linux «всё есть файл» - сетевые сокеты, пайпы, устройства, обычные файлы. lsof показывает, какие процессы какие «файлы» открыли.Вариант 1 (Кто занял порт): классический кейс с запуском сервера.# Кто слушает 3000 порт?lsof -i :3000# Вывод: COMMAND PID USER FD NAME# node 1234 user 23u IPv4 TCP *:3000 (LISTEN)Вариант 2 (Какой процесс держит файл): не даёт удалить папку или файл.# Кто использует файл лога?lsof /var/log/app.log# Кто работает в папке /home/user/project?lsof +D /home/user/projectВариант 3 (Все открытые файлы процесса): подозреваете конкретный процесс - смотрите, что он делает.# Все файлы, открытые процессом с PID 1234lsof -p 1234# Сеть, которую использует процессlsof -p 1234 -iВариант 4 (Кто использует удалённый файл): монтирование не отдаёт, а кто мешает?# Процессы, использующие файлы на смонтированном дискеlsof /mnt/usb# Обычно это оболочка, которая "стоит" в папке на этом дискеlsof нужен, когда обычные инструменты молчат. Команда не показывает ошибку, но что-то мешает. lsof показывает «что именно» и «кто».Альтернатива:# Когда точно знаем, что ищем сетевой порт. Быстрее и чаще установлена по умолчанию.ss -tlnp | grep 3000 lsof выручает, когда: 1. Нужно посмотреть не только TCP, но и UDP 2. Проблема не с портом, а с файлом или папкой 3. Хотите увидеть все соединения процесса целикомP.S. Самый частый сценарий: lsof -i :8080 - видим PID - kill -9 PID. Всё, порт свободен.👉🏻 Я в Telegram - t.me/helcode👉🏻 Я в VK - vk.com/helcode👉🏻 Я на Boosty - boosty.to/helcode

20 апр. 2026 г.664В Telegram

Коллеги, всем доброго времени суток!Чертовски рад сделать разговорный пост - давно их не было.Думаю, многие заметили: постов стало меньше. Рассказываю, что произошло и когда снова будет разнообразие.Помните голосование о миграции канала пару месяцев назад? Был там пункт про собственный сайт - тогда я его не сделал.Теперь решил исправить.После блокировок и новостей об импортозамещении (кстати, кого уже затронуло?) я ушёл в тему: можно ли своими силами с нуля запустить сайт?Почему я этого хочу:- код не превращается в кашу;- статьи живут годами, а не тонут в ленте за два дня;- туда помещается то, что сюда просто не влезает.Сейчас сделал макет, разобрался с принципами. Основная работа позади - осталась доработка (а точнее - полная переработка макета в готовый продукт) и подготовка материалов.Отвечая на главный вопрос: очень скоро посты снова выйдут на стабильный ритм.P.S. В комментариях скриншот макета для тех, кому интересно. Если есть предложения - пишите, с удовольствием послушаю.И если у вас есть опыт с хостингом, запуском сайтов, разработкой - делитесь. Любая информация пригодится😁

17 апр. 2026 г.574В Telegram

grep - возможности, о которых вы могли не знатьВсе знают grep "что-то" файл. Но в утилите есть тёмные углы, которые превращают её из поиска строк в настоящий анализатор логов и кода.➤ Вариант 1 (Поиск по временному диапазону в логах): логи обычно начинаются со времени. Нужно вытащить кусок между двумя метками.# Логи с 10:00 до 10:15grep "^2026-04-13 10:[0-1][0-9]" app.log# С помощью флага -A (after) и -B (before)grep -B 5 -A 10 "2026-04-13 10:15:00" app.log➤ Вариант 2 (Поиск по сложным паттернам с переносом строк): когда ошибка размазана на несколько строк, а -A и -B не хватает.# Использование pcre (Perl-совместимые регексы) через -Pgrep -Pzo "(?s)Exception.*?\n\s+at.*?\n" app.log# -z читает весь файл как одну строку# -o выводит только совпадения# -P включает переносы в регексах➤ Вариант 3 (Работа с бинарными файлами): иногда нужно найти строку в дампе памяти или логе, который grep считает бинарным.# Принудительно обрабатывать файл как текстовыйgrep -a "password" memory.dump# Или наоборот — исключить бинарникиgrep -I "error" ./logs/*➤ Вариант 4 (Статистика и группировка): не просто найти, а посчитать.# Сколько раз встретился каждый код ответа в логах nginxgrep -oE '" [0-9]{3} ' access.log | sort | uniq -c | sort -rn# -o выводит только совпадение (не всю строку)# -E расширенные регексы➤ Вариант 5 (Использование как фильтр с сохранением контекста): оставить в выводе только нужные колонки.# Из строки "time=2026-04-13 level=error msg=crash"grep -oP 'time=\K[^ ]+' app.log# \K означает "начать вывод отсюда"И главное, что забывают: grep можно комбинировать. Цепочка grep | grep -v | grep -o часто делает то, для чего в других языках пишут скрипты на 20 строк.P.S. grep -c считает количество совпавших строк. grep -m 5 останавливается после пяти совпадений. Мелочи, которые экономят время.👉🏻 Я в Telegram - t.me/helcode👉🏻 Я в VK - vk.com/helcode👉🏻 Я на Boosty - boosty.to/helcode

15 апр. 2026 г.584В Telegram

socat - nc для сетей, который вы заслужилиnetcat (nc) знают многие. Но когда задачи становятся сложнее - нужен SSL, нужен форк на несколько соединений, нужна привязка к конкретному интерфейсу - nc пасует. Здесь на сцену выходит socat.Это как прокаченный nc. Он умеет соединять что угодно с чем угодно: файл с сокетом, TCP с SSL, Unix-сокет с UDP, и даже выполнять команду при подключении.➤ Вариант 1 (Проброс трафика с одного порта на другой): классический use case для обхода фаерволов.# Слушаем на 8080, пересылаем на внутренний сервер 3000socat TCP-LISTEN:8080,fork TCP:localhost:3000# fork — позволяет обрабатывать несколько соединений➤ Вариант 2 (Туннель с SSL-терминацией): нужен HTTPS-сервер, а поднимать nginx ради одного эндпоинта — жирно.# Принимаем HTTPS на 443, внутри отдаём на HTTP 8080socat OPENSSL-LISTEN:443,cert=server.pem,verify=0,fork TCP:localhost:8080➤ Вариант 3 (Работа с Unix-сокетами): контейнеры и демоны часто общаются через сокеты, отлаживать их неудобно.# Подключиться к сокету Docker и отправить запросecho 'GET /info HTTP/1.0' | socat - UNIX-CONNECT:/var/run/docker.sock# Проксировать Unix-сокет в TCP для внешнего доступаsocat TCP-LISTEN:9999,fork UNIX-CONNECT:/var/run/docker.sock➤ Вариант 4 (Перенаправление ввода-вывода в сеть): передать вывод команды или файл по сети без ssh.# На стороне получателя: слушаем, сохраняем в файлsocat TCP-LISTEN:1234,fork OPEN:backup.tar.gz,create,append# На стороне отправителя: читаем файл, шлёмsocat OPEN:backup.tar.gz TCP:192.168.1.100:1234➤ Вариант 5 (Отладка и перехват трафика): посмотреть, что реально передаётся между клиентом и сервером.# Эхо-сервер для отладки (возвращает то же, что получил)socat -v TCP-LISTEN:1234,fork STDOUT# -v выводит весь трафик в stderr# Можно записывать в файл: 2>traffic.log➤ Вариант 6 (Выполнение команд по сети): организовать примитивное удалённое управление.# На сервере: при подключении выполняем скриптsocat TCP-LISTEN:1234,fork EXEC:/bin/script.sh# На клиенте: подключаемся, по

13 апр. 2026 г.556В Telegram