Например,
i включает режим вставки текста, dd удаляет текущую строку, а :wq сохраняет изменения и закрывает редактор.На картинке — основные режимы и самые нужные команды Vim для навигации, редактирования, поиска, сохранения и выхода.
Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤11🔥8👎1
Отслеживаем изменения файлов через inotifywait!
При диагностике приложения, деплоя или скрипта полезно видеть файловую активность в реальном времени: создание, изменение, удаление и перемещение файлов. В Linux такие события можно отслеживать через
В Debian и Ubuntu утилита устанавливается из стандартных репозиториев:
Запустим непрерывное наблюдение за каталогом. Параметр
События выводятся по мере их получения от ядра:
Для наблюдения за всем деревом каталогов добавим
Параметр
Для диагностики удобнее выводить время, тип события и путь объекта:
При использовании абсолютного пути
Следует учитывать, что одно действие приложения может породить несколько событий
🔥
🚪 Linux Ready | #практика
При диагностике приложения, деплоя или скрипта полезно видеть файловую активность в реальном времени: создание, изменение, удаление и перемещение файлов. В Linux такие события можно отслеживать через
inotify, а из командной строки — с помощью inotifywait.В Debian и Ubuntu утилита устанавливается из стандартных репозиториев:
sudo apt update && sudo apt install -y inotify-tools
Запустим непрерывное наблюдение за каталогом. Параметр
-m (--monitor) оставляет процесс активным после получения события:inotifywait -m /var/www/app
События выводятся по мере их получения от ядра:
/var/www/app/ MODIFY config.json
/var/www/app/ CREATE cache.tmp
/var/www/app/ DELETE cache.tmp
Для наблюдения за всем деревом каталогов добавим
-r (--recursive):inotifywait -m -r /var/www/app
Параметр
-e позволяет оставить только нужные события. move включает события перемещения из наблюдаемого каталога и в него:inotifywait -m -r \
-e create,modify,delete,move \
/var/www/app
Для диагностики удобнее выводить время, тип события и путь объекта:
inotifywait -m -r \
--timefmt '%H:%M:%S' \
--format '%T %e %w%f' \
/var/www/app
При использовании абсолютного пути
%w%f формирует полный путь к объекту:14:32:07 MODIFY /var/www/app/config.json
14:32:11 MOVED_TO /var/www/app/releases/current
Следует учитывать, что одно действие приложения может породить несколько событий
inotify, а рекурсивное наблюдение создаёт отдельные watches для дерева каталогов. Текущий системный лимит можно проверить через sysctl:sysctl fs.inotify.max_user_watches
inotify фиксирует события файловой системы, но не сообщает PID процесса, который инициировал изменение. Если требуется определить конкретный процесс или пользователя, следует использовать механизмы аудита, например auditd.Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥7❤6
В этой статье:
• Узнаете, почему даже регулярно создаваемые бэкапы могут оказаться бесполезными в критический момент;• Разберёте проверку целостности, тестовое восстановление и мониторинг резервных копий;• Посмотрите, как правильно проверять бэкапы файлов и баз данных PostgreSQL и MySQL.🔊 Продолжай читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍11🔥7👎1
Знали, что в Git можно одновременно работать с несколькими ветками без постоянного переключения между ними?
Обычно при переключении между задачами приходится сохранять изменения, менять ветку и возвращаться обратно.
Теперь рядом находятся два независимых каталога:
В одном можно продолжать разработку, а во втором открыть срочный
Каждая директория имеет собственное состояние файлов, но использует общую историю, объекты и ветки Git.
Посмотреть все активные рабочие каталоги:
После завершения задачи дополнительную копию можно удалить:
🔥
🚪 Linux Ready | #совет
Обычно при переключении между задачами приходится сохранять изменения, менять ветку и возвращаться обратно.
git worktree создаёт дополнительную рабочую копию репозитория, которая использует тот же .git:git worktree add ../feature-login feature/login
Теперь рядом находятся два независимых каталога:
project/
project-feature-login/
В одном можно продолжать разработку, а во втором открыть срочный
hotfix:git worktree add ../hotfix main
Каждая директория имеет собственное состояние файлов, но использует общую историю, объекты и ветки Git.
Посмотреть все активные рабочие каталоги:
git worktree list
После завершения задачи дополнительную копию можно удалить:
git worktree remove ../hotfix
git worktree избавляет от постоянного сохранения временных изменений и переключения между ветками. Полезно, когда одновременно ведутся несколько задач или нужно срочно исправить баг.Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥8❤7
Когда системный диск заканчивается, данные приложения можно перенести на другое хранилище, сохранив прежний путь для сервисов и скриптов.
Bind mount позволяет сделать это средствами Linux без symlink и изменений в конфигурации приложения.В этом посте:
• Переносим данные через rsync с сохранением ACL, xattrs и hard links;
• Переключаем каталог на новое хранилище через mount --bind;
• Проверяем фактическую точку монтирования с помощью findmnt;
• Закрепляем bind mount в /etc/fstab после перезагрузки.
Bind mount отделяет путь, с которым работает приложение, от физического расположения данных — удобный приём для миграции каталогов между дисками и файловыми системами.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥8🤝4❤3
Например, цепочка
INPUT обрабатывает пакеты, предназначенные локальной машине, FORWARD — транзитный трафик, а через PREROUTING и POSTROUTING удобно понимать, где выполняется NAT.На картинке — основные таблицы и цепочки
iptables, маршруты входящих, исходящих и транзитных пакетов, а также примеры SSH, DNAT и MASQUERADE.Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍10❤9
Например, BIOS/UEFI инициализирует оборудование, загрузчик GRUB запускает ядро, а
systemd поднимает системные сервисы и переводит систему в нужный target.На картинке — основные этапы загрузки: BIOS/UEFI, GRUB, ядро,
systemd, уровни загрузки, важные системные файлы, параметры ядра, полезные команды и типичные проблемы при запуске системы. Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15🤝9👍7🔥2
Знали, что git diff умеет сравнивать вообще любые файлы и каталоги — даже если они никогда не находились в Git?
Для этого есть малоиспользуемый режим
Это удобно при разборе двух распакованных сборок, сгенерированных конфигураций или результатов работы программы:
Можно использовать и для отдельных файлов:
Есть важная деталь для скриптов: при найденных различиях команда завершается с кодом 1, а при полном совпадении — 0. Поэтому 1 здесь не означает обычную ошибку выполнения.
🔥 Если нужен
🚪 Linux Ready | #совет
Для этого есть малоиспользуемый режим
--no-index:git diff --no-index ./release-old ./release-new
Git рекурсивно сравнит два каталога и покажет привычный цветной diff с именами файлов и изменёнными строками. Репозиторий для этого не нужен.Это удобно при разборе двух распакованных сборок, сгенерированных конфигураций или результатов работы программы:
git diff --no-index \
/tmp/output-before \
/tmp/output-after
Можно использовать и для отдельных файлов:
git diff --no-index nginx.conf.old nginx.conf.new
Есть важная деталь для скриптов: при найденных различиях команда завершается с кодом 1, а при полном совпадении — 0. Поэтому 1 здесь не означает обычную ошибку выполнения.
git diff --no-index old/ new/
echo $?
diff двух произвольных каталогов, возможно, привычный интерфейс Git уже умеет именно то, что нужно.Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍8🤝3
Например, на транспортном уровне данные превращаются в сегменты, на сетевом — в пакеты, а на канальном — во фреймы.
На картинке наглядно показан весь процесс инкапсуляции и деинкапсуляции данных: какие заголовки добавляются на уровнях L4, L3 и L2, где используются IP- и MAC-адреса, порты TCP/UDP и как устроен Ethernet-фрейм.
Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥8🤝5❤2😁1
This media is not supported in your browser
VIEW IN TELEGRAM
Здесь разобраны переменные и параметры скриптов, условия, циклы, математические операции, работа с внешними командами, перенаправление потоков и конвейеры. Всё сопровождается примерами кода и пояснениями, поэтому материал пригодится как для изучения Bash с нуля, так и в качестве справочника при написании собственных скриптов.
Оставляю ссылочку: GitHub📱
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤6🤝5🔥1
SSH-туннели: доступ к закрытым сервисам без VPN!
SSH позволяет не только подключаться к удалённым серверам и выполнять команды. Через него можно создавать защищённые туннели и получать доступ к сервисам, которые недоступны извне. Например, PostgreSQL работает только внутри сервера и доступен только локально:
Порт базы данных не открыт наружу, но есть SSH-доступ к серверу. Создаём локальный туннель, который принимает соединения на вашем компьютере и передаёт их через SSH:
Теперь приложение на локальном компьютере подключается к базе через созданный порт:
При этом PostgreSQL остаётся закрытым для внешнего мира. Доступ к нему появляется только через SSH-туннель.
Тот же подход работает с любыми TCP-сервисами. Например, можно получить доступ к внутренней панели администратора, которая слушает только на сервере:
После создания туннеля сервис доступен локально:
Обратный туннель используется, когда удалённому серверу нужен доступ к сервису, который работает на вашей локальной машине. Например, приложение для разработки запущено на порту 3000:
Теперь процесс на сервере может обращаться к вашему локальному приложению через:
Это часто используют для тестирования вебхуков, демонстрации окружений разработки и временного доступа к локальным сервисам.
Если требуется открыть reverse tunnel не только для localhost, нужно изменить настройки SSH-сервера:
SSH также может работать как SOCKS5-прокси и направлять поддерживающие приложения через удалённую машину:
После этого в приложении можно указать SOCKS5-прокси:
Такой вариант используется для диагностики маршрутизации и проверки доступа к ресурсам из другой сети.
Если туннель используется постоянно, его можно запустить в фоне без открытия интерактивного сеанса:
Параметры команды:
Проверить, что локальный порт слушается:
Или посмотреть процесс, который использует порт:
Чтобы не писать длинные команды каждый раз, туннели можно описать в стандартном конфигурационном файле SSH:
После этого подключение выполняется короткой командой:
SSH-туннели не заменяют полноценный VPN, так как работают с конкретными портами и TCP-соединениями. Но для точечного доступа к закрытым сервисам это один из самых быстрых и надёжных инструментов.
🔥 В DevOps они постоянно используются для работы с приватными базами данных, диагностики продакшн окружений, тестирования интеграций и временного доступа без изменения сетевой инфраструктуры.
🚪 Linux Ready | #практика
SSH позволяет не только подключаться к удалённым серверам и выполнять команды. Через него можно создавать защищённые туннели и получать доступ к сервисам, которые недоступны извне. Например, PostgreSQL работает только внутри сервера и доступен только локально:
127.0.0.1:5432
Порт базы данных не открыт наружу, но есть SSH-доступ к серверу. Создаём локальный туннель, который принимает соединения на вашем компьютере и передаёт их через SSH:
ssh -L 5433:localhost:5432 user@server
Теперь приложение на локальном компьютере подключается к базе через созданный порт:
psql -h 127.0.0.1 -p 5433 database
При этом PostgreSQL остаётся закрытым для внешнего мира. Доступ к нему появляется только через SSH-туннель.
Тот же подход работает с любыми TCP-сервисами. Например, можно получить доступ к внутренней панели администратора, которая слушает только на сервере:
ssh -L 8080:localhost:8080 user@server
После создания туннеля сервис доступен локально:
http://localhost:8080
Обратный туннель используется, когда удалённому серверу нужен доступ к сервису, который работает на вашей локальной машине. Например, приложение для разработки запущено на порту 3000:
ssh -R 9000:localhost:3000 user@server
Теперь процесс на сервере может обращаться к вашему локальному приложению через:
localhost:9000
Это часто используют для тестирования вебхуков, демонстрации окружений разработки и временного доступа к локальным сервисам.
Если требуется открыть reverse tunnel не только для localhost, нужно изменить настройки SSH-сервера:
GatewayPorts clientspecified
AllowTcpForwarding yes
SSH также может работать как SOCKS5-прокси и направлять поддерживающие приложения через удалённую машину:
ssh -N -D 1080 user@server
После этого в приложении можно указать SOCKS5-прокси:
localhost:1080
Такой вариант используется для диагностики маршрутизации и проверки доступа к ресурсам из другой сети.
Если туннель используется постоянно, его можно запустить в фоне без открытия интерактивного сеанса:
ssh -fNT -L 5433:localhost:5432 user@server
Параметры команды:
-f запуск SSH-процесса в фоне
-N не выполнять команды на удалённой машине
-T отключить создание псевдотерминала
Проверить, что локальный порт слушается:
ss -tlnp | grep 5433
Или посмотреть процесс, который использует порт:
lsof -i :5433
Чтобы не писать длинные команды каждый раз, туннели можно описать в стандартном конфигурационном файле SSH:
Host production-db
HostName server.example.com
User deploy
LocalForward 5433 localhost:5432
После этого подключение выполняется короткой командой:
ssh production-db
SSH-туннели не заменяют полноценный VPN, так как работают с конкретными портами и TCP-соединениями. Но для точечного доступа к закрытым сервисам это один из самых быстрых и надёжных инструментов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20❤11🔥8👎1
Медленный API — не всегда проблема бекэнда. Задержка может возникнуть ещё на DNS, TCP или TLS, поэтому одного
time curl для диагностики недостаточно.В этом посте:
• Разбираем HTTP-запрос на отдельные этапы;
• Снимаем встроенные тайминги через curl;
• Считаем время DNS, TCP, TLS и ожидания первого байта;
• Добавляем HTTP-код и IP конечного сервера;
• Определяем, на каком участке появляется основная задержка.
В итоге получаем инструмент для анализа задержек HTTP без дополнительных утилит — полезный для быстрой диагностики API, сервисов и сетевых проблем.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥10🤝3❤1