Linux Ready | DevOps
10.8K subscribers
1.01K photos
73 videos
530 links
Авторский канал по разработке на Linux.
Ресурсы, обучения, задачи, шпаргалки.
Ежедневно информация пополняется!

Cотрудничество: @energy_c
Download Telegram
Linux умеет автоматически запускать команду после изменения файла без бесконечных циклов и ручных проверок!

Частая задача при разработке: изменить код, дождаться сборки, проверить тесты, обновить конфигурацию.

Обычно для этого пишут циклы с while, используют таймеры или устанавливают тяжёлые системы отслеживания изменений.

Утилита entr делает это проще:
$ ls *.go | entr go test ./...


Теперь после каждого изменения Go-файла тесты автоматически запускаются заново.

Можно следить за целым проектом:
$ find . -name "*.js" | entr npm run build


После сохранения JavaScript-файла сборка будет выполнена автоматически.

Можно использовать это и для серверных задач:
$ echo nginx.conf | entr sudo systemctl reload nginx


Изменили конфигурацию — сервис сразу получил обновление без ручного запуска команды.

🔥 В отличие от постоянных циклов, entr использует системные механизмы уведомления об изменениях файлов и не нагружает процессор постоянным опросом.

🚪 Linux Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥11❤6🤝1
👨‍💻 Полезная статья недавно вышла на Хабре: «Топ-10 утилит для работы с диском на VDS»!

В этой статье:
• Узнаете, как быстро найти файлы и директории, которые занимают больше всего места;
• Разберёте инструменты для проверки скорости диска и поиска процессов, создающих высокую нагрузку;
• Познакомитесь с утилитами для очистки дублей, передачи файлов и синхронизации данных с облаками.

🔊 Продолжай читать на Habr!


🚪 Linux Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤9🔥4🤝2
📂 Напоминалка по Berkeley Sockets API!

Например, SOCK_STREAM используется для потоковых соединений вроде TCP, а SOCK_DGRAM — для передачи отдельных датаграмм, например через UDP.

На картинке — наглядная схема работы сетевых и Unix domain sockets: AF_INET, AF_INET6, AF_UNIX, различия между stream и datagram-сокетами, а также базовый обмен данными между клиентом и сервером.

Сохрани, чтобы не потерять!

🚪 Linux Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤7🔥5🤝2
This media is not supported in your browser
VIEW IN TELEGRAM
🤔 Большой справочник по Linux и командной строке!

Здесь собраны заметки и команды по работе с Linux: Shell и SSH, файловая система и LVM, права доступа, grep, sed и Vim, сеть, systemd, переменные окружения, безопасность, DEB/RPM-пакеты, ядро и Bash-скрипты. Есть отдельные материалы по Docker, сборке программ через CMake и Autotools, отладке с GDB и другим системным инструментам.

Оставляю ссылочку: GitHub 📱


🚪 Linux Ready | #репозиторий
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥8❤4🤝2
Почему TCP подключается, но передача данных зависает?

TCP-соединение может успешно устанавливаться, хотя передача данных по нему работает нестабильно. Характерные симптомы — зависание SSH, HTTP-запросов и загрузок после начала передачи более крупных TCP-сегментов.

Одна из возможных причин — проблема с определением MTU на всём пути передачи. Сначала проверим MTU физических и виртуальных интерфейсов:
ip -br link

ip link show eth0
ip link show wg0
ip link show tun0
ip link show docker0


MTU интерфейса и MTU всего маршрута — разные параметры. Интерфейс может иметь MTU 1500, тогда как VPN, VXLAN, GRE, IPsec, PPPoE или другой участок маршрута ограничивает максимальный размер проходящего IP-пакета.

Для IPv4 проверим прохождение пакета размером 1500 байт с запретом фрагментации:
ping -4 -M do -s 1472 server_ip


1472 — данные ICMP. Плюс 20 байт заголовка IPv4 и 8 байт ICMP — получаем IP-пакет размером 1500 байт.

Если ядру уже известен меньший MTU маршрута, можно получить локальную ошибку:
ping: local error: message too long, mtu=1400


MTU маршрута также может быть уменьшен после получения ICMP Fragmentation Needed от маршрутизатора.

Если такие ICMP-сообщения фильтруются, отправитель может не узнать, что размер пакета необходимо уменьшить. Крупные пакеты будут отбрасываться, а небольшие продолжат проходить.

При необходимости можно выполнить проверку без учёта сохранённого ядром MTU маршрута:
ping -4 -M probe -s 1472 server_ip


Найти приблизительную границу можно последовательной проверкой:
for size in 1472 1452 1440 1420 1400 1380 1372; do
ping -4 -M do -c 3 -s "$size" server_ip
done


Например, если максимальный рабочий размер данных ICMP равен 1372 байтам:
1372 + 20 IPv4 + 8 ICMP = 1400


Предполагаемый MTU маршрута — 1400 байт. При этом он может различаться в прямом и обратном направлениях, поэтому при возможности проверяйте соединение с обеих сторон.

Дополнительно проверим маршрут:
tracepath server_ip


Для TCP важен MSS — максимальный размер данных TCP, который сторона сообщает другой стороне. MSS объявляется независимо в SYN и SYN-ACK, поэтому значения могут отличаться. Посмотреть MSS при установлении соединения:
tcpdump -i any -nn -vv 'tcp[tcpflags] & tcp-syn != 0'


При IPv4 MTU 1500 типичный MSS:
1500 - 20 IPv4 - 20 TCP = 1460


Если реальный MTU маршрута меньше, а его определение работает некорректно — например, ICMP Fragmentation Needed блокируется — крупные пакеты могут теряться, вызывая повторные передачи и зависание соединения.

Состояние TCP-соединения проверим через:
ss -ti dst server_ip


Смотрим RTT, mss, advmss, окно перегрузки и повторные передачи. Одновременно можно анализировать TCP и ICMP:
tcpdump -i any -nn -vv 'tcp or icmp'


Ищем повторные передачи TCP-сегментов и ICMP Fragmentation Needed. Успешный обычный ping здесь ничего не доказывает: небольшие ICMP-пакеты могут проходить даже при меньшем MTU маршрута. По той же причине TCP-соединение может успешно устанавливаться — SYN, SYN-ACK и ACK имеют небольшой размер.

При подтверждённой проблеме не стоит произвольно уменьшать MTU на конечном сервере. Проверьте MTU туннелей, фильтрацию ICMP и конфигурацию наложенной сети. Ограничение TCP MSS также может применяться на маршрутизаторах и VPN-шлюзах, но только как осознанное решение конкретной проблемы.

🔥 Главный вывод будет такой: успешное установление TCP-соединения не гарантирует нормальную передачу данных. Если небольшие пакеты проходят, а крупные теряются — проверяйте MTU маршрута, MSS, ICMP и повторные передачи TCP.

🚪 Linux Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥10❤7🤝1
This media is not supported in your browser
VIEW IN TELEGRAM
❤️ Linux SysOps Handbook — руководство по системному администрированию Linux!

Здесь собраны команды, инструкции и примеры по управлению процессами и пользователями, правам доступа, Bash и SSH, systemd и cron, логам и мониторингу, сетям, дискам и диагностике системы. Отдельно разобрана работа с ps, systemctl, journalctl, nmcli, apt, yum, LVM и другими системными инструментами. Полезный справочник для изучения Linux и работы с серверами.

Оставляю ссылочку: GitHub 📱


🚪 Linux Ready | #репозиторий
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥9🤝5❤2
📂 Напоминалка для работы с Vim!

Например, i включает режим вставки текста, dd удаляет текущую строку, а :wq сохраняет изменения и закрывает редактор.

На картинке — основные режимы и самые нужные команды Vim для навигации, редактирования, поиска, сохранения и выхода.

Сохрани, чтобы не потерять!

🚪 Linux Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤11🔥8👎1
Отслеживаем изменения файлов через inotifywait!

При диагностике приложения, деплоя или скрипта полезно видеть файловую активность в реальном времени: создание, изменение, удаление и перемещение файлов. В 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.

🚪 Linux Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥7❤6
✍️ Свежая и очень интересная статья на Хабре: «Как проверить, что бэкап действительно можно восстановить»!

В этой статье:
• Узнаете, почему даже регулярно создаваемые бэкапы могут оказаться бесполезными в критический момент;
• Разберёте проверку целостности, тестовое восстановление и мониторинг резервных копий;
• Посмотрите, как правильно проверять бэкапы файлов и баз данных PostgreSQL и MySQL.

🔊 Продолжай читать на Habr!


🚪 Linux Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍11🔥7👎1
Знали, что в Git можно одновременно работать с несколькими ветками без постоянного переключения между ними?

Обычно при переключении между задачами приходится сохранять изменения, менять ветку и возвращаться обратно.

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 избавляет от постоянного сохранения временных изменений и переключения между ветками. Полезно, когда одновременно ведутся несколько задач или нужно срочно исправить баг.

🚪 Linux Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥8❤7
👩‍💻 Переносим каталог на другой диск без изменения путей через bind mount!

Когда системный диск заканчивается, данные приложения можно перенести на другое хранилище, сохранив прежний путь для сервисов и скриптов. Bind mount позволяет сделать это средствами Linux без symlink и изменений в конфигурации приложения.

В этом посте:
• Переносим данные через rsync с сохранением ACL, xattrs и hard links;

• Переключаем каталог на новое хранилище через mount --bind;

• Проверяем фактическую точку монтирования с помощью findmnt;

• Закрепляем bind mount в /etc/fstab после перезагрузки.


Bind mount отделяет путь, с которым работает приложение, от физического расположения данных — удобный приём для миграции каталогов между дисками и файловыми системами.

🚪 Linux Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥8🤝4❤3
📂 Напоминалка по iptables (netfilter)!

Например, цепочка INPUT обрабатывает пакеты, предназначенные локальной машине, FORWARD — транзитный трафик, а через PREROUTING и POSTROUTING удобно понимать, где выполняется NAT.

На картинке — основные таблицы и цепочки iptables, маршруты входящих, исходящих и транзитных пакетов, а также примеры SSH, DNAT и MASQUERADE.

Сохрани, чтобы не потерять!

🚪 Linux Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍10❤9
📂 Шпаргалка по процессу загрузки Linux!

Например, BIOS/UEFI инициализирует оборудование, загрузчик GRUB запускает ядро, а systemd поднимает системные сервисы и переводит систему в нужный target.

На картинке — основные этапы загрузки: BIOS/UEFI, GRUB, ядро, systemd, уровни загрузки, важные системные файлы, параметры ядра, полезные команды и типичные проблемы при запуске системы.

Сохрани, чтобы не потерять!

🚪 Linux Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15🤝9👍7🔥2
Знали, что git diff умеет сравнивать вообще любые файлы и каталоги — даже если они никогда не находились в Git?

Для этого есть малоиспользуемый режим --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 уже умеет именно то, что нужно.

🚪 Linux Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍8🤝3
📂 Напоминалка по модели OSI и передаче данных!

Например, на транспортном уровне данные превращаются в сегменты, на сетевом — в пакеты, а на канальном — во фреймы.

На картинке наглядно показан весь процесс инкапсуляции и деинкапсуляции данных: какие заголовки добавляются на уровнях L4, L3 и L2, где используются IP- и MAC-адреса, порты TCP/UDP и как устроен Ethernet-фрейм.

Сохрани, чтобы не потерять!

🚪 Linux Ready | #ресурс
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-скрипты — подробная шпаргалка по автоматизации задач в Linux!

Здесь разобраны переменные и параметры скриптов, условия, циклы, математические операции, работа с внешними командами, перенаправление потоков и конвейеры. Всё сопровождается примерами кода и пояснениями, поэтому материал пригодится как для изучения Bash с нуля, так и в качестве справочника при написании собственных скриптов.

Оставляю ссылочку: GitHub 📱


🚪 Linux Ready | #репозиторий
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤6🤝5🔥1