Inotify и fsnotify для событий на файловой системе
Linux умеет уведомлять процессы о событиях на файловой системе.
С помощью inotify (и абстракции fsnotify в ядре) можно отслеживать создание, удаление, модификацию файлов и каталогов, что удобно для автоматизации.
Вместо регулярного опроса ls или find достаточно «подписаться» на события файловой системы — это экономит ресурсы и ускоряет реакцию.
Базовый пример с inotifywait (из пакета inotify-tools):
Что можно отслеживать:
• create — создание файла
• delete — удаление
• modify — изменение содержимого
• moved_to / moved_from — перемещение файлов в/из каталога
Linux умеет уведомлять процессы о событиях на файловой системе.
С помощью inotify (и абстракции fsnotify в ядре) можно отслеживать создание, удаление, модификацию файлов и каталогов, что удобно для автоматизации.
Пример применения: нужно запускать скрипт каждый раз, когда появляются новые логи или выгружается дамп БД.
Вместо регулярного опроса ls или find достаточно «подписаться» на события файловой системы — это экономит ресурсы и ускоряет реакцию.
Базовый пример с inotifywait (из пакета inotify-tools):
# следим за появлением новых файлов в каталоге /var/log/myapp
inotifywait -m /var/log/myapp -e create -e moved_to |
while read path action file; do
echo "Новый файл $file обнаружен в $path, запускаем скрипт..."
/usr/local/bin/process_new_log.sh "$path/$file"
done
Что можно отслеживать:
• create — создание файла
• delete — удаление
• modify — изменение содержимого
• moved_to / moved_from — перемещение файлов в/из каталога
❤11👍7
Быстрый поиск строк в логах: ripgrep
Когда на сервере гигабайты логов, а надо срочно найти конкретную ошибку, стандартный grep начинает тормозить.
Он оптимизирован под большие объёмы данных и работает в разы быстрее.
Пример для поиска ошибок во всех логах:
По умолчанию он рекурсивно обходит каталоги и выводит совпадения с путём к файлу и номером строки.
Если нужен контекст вокруг найденной строки:
Так выводятся три строки до и после совпадения — удобно при анализе логов PostgreSQL, Nginx или системных журналов.
⏺ ripgrep поддерживает регулярные выражения, можно искать сразу несколько шаблонов и фильтровать файлы по расширениям. Например:
Вывод ограничится только SQL-логами.
Когда на сервере гигабайты логов, а надо срочно найти конкретную ошибку, стандартный grep начинает тормозить.
Здесь помогает ripgrep (rg) — современный инструмент поиска по тексту.
Он оптимизирован под большие объёмы данных и работает в разы быстрее.
Пример для поиска ошибок во всех логах:
rg "ERROR" /var/log
По умолчанию он рекурсивно обходит каталоги и выводит совпадения с путём к файлу и номером строки.
Если нужен контекст вокруг найденной строки:
rg -C 3 "FATAL" /var/log/postgresql
Так выводятся три строки до и после совпадения — удобно при анализе логов PostgreSQL, Nginx или системных журналов.
rg -t sql "SELECT.*FROM" /var/log
Вывод ограничится только SQL-логами.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7🔥7👍1
Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.
При fork дочерний процесс получает копию страниц памяти родительского, но фактически обе копии указывают на одни и те же физические адреса. Только если один из процессов пытается записать в память, ядро создает новую копию изменяемой страницы.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍4
BGP PIC (Prefix Independent Convergence)
При падении primary hop трафик мгновенно переключается без полной перерасчётки маршрутов. Обычно обычный BGP failover занимает секунды, с PIC — миллисекунды.
Применяется в WAN и датацентрах с критическим SLA, ECMP-сценариях, L3VPN/EVPN.
Виды:
⏺ Core (по префиксу) — precomputed backup next-hop в FIB, переключение мгновенное.
⏺ Edge (по соседу) — резерв на уровне BGP-соседа, удобно для PE/CE.
Настройка на Cisco IOS-XR:
Juniper JunOS:
Для проверки failover включают BFD, пингуют primary hop и отключают линк. С BGP PIC потеря пакетов минимальна, трафик идёт на backup сразу.
⚡️ Особенности: резервный next-hop должен быть в FIB, потребляет RAM/CPU для precompute, на больших таблицах BGP может потребоваться tuning.
BGP PIC ускоряет failover, предустанавливая резервный next-hop.
При падении primary hop трафик мгновенно переключается без полной перерасчётки маршрутов. Обычно обычный BGP failover занимает секунды, с PIC — миллисекунды.
Применяется в WAN и датацентрах с критическим SLA, ECMP-сценариях, L3VPN/EVPN.
Виды:
Настройка на Cisco IOS-XR:
router bgp 65001
address-family ipv4 unicast
bgp bestpath pic
network 10.0.0.0 mask 255.255.255.0
Juniper JunOS:
protocols {
bgp {
group IBGP {
type internal;
local-address 192.168.0.1;
family inet { unicast; }
pic;
}
}
}
Для проверки failover включают BFD, пингуют primary hop и отключают линк. С BGP PIC потеря пакетов минимальна, трафик идёт на backup сразу.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7🔥3💯2
Cron не запускает скрипт. Вручную работает. Причина?
Anonymous Quiz
30%
Скрипт без shebang
26%
Неправильный cron
42%
Нет прав root
2%
Плохой swap
🤡19🤣7❤4
Инкрементальные бэкапы с tar
Помимо привычных архивов, tar умеет делать инкрементальные бэкапы через ключ --listed-incremental.
Он хранит «снимок» метаданных файлов и при следующем запуске берёт только изменения.
Пример:
👉 snapshot.file — база, где хранится информация о прошлых бэкапах. Если её удалить, то следующий архив будет снова полным.
Плюсы:
➕ экономия места (в архив попадают только изменившиеся файлы);
➕ встроено в стандартный tar, не нужны отдельные утилиты;
➕ можно комбинировать с cron и хранением на удалённом сервере.
Подходит для небольших серверов, dev-сред и домашних каталогов, где не нужна тяжёлая система бэкапов, но важна скорость и простота.
Помимо привычных архивов, tar умеет делать инкрементальные бэкапы через ключ --listed-incremental.
Он хранит «снимок» метаданных файлов и при следующем запуске берёт только изменения.
Пример:
# первый полный бэкап
tar --listed-incremental=/var/backups/snapshot.file \
-czf full-backup.tar.gz /home
# инкрементальный
tar --listed-incremental=/var/backups/snapshot.file \
-czf incr-backup.tar.gz /home
Плюсы:
Подходит для небольших серверов, dev-сред и домашних каталогов, где не нужна тяжёлая система бэкапов, но важна скорость и простота.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10🔥9👍4
Рейтинг языков программирования TIOBE за сентябрь 2025: Python растёт, Perl возвращается
Авторы TIOBE опубликовали свежий рейтинг. Топ-8 остался без изменений (1. Python, 2. C++, 3. C, 4. Java, 5. C#, 6. JavaScript, 7. Visual Basic, 8. Go).
Рост Perl связывают с огромным количеством книг на Amazon и его уникальными возможностями работы с текстом: регулярные выражения, богатая библиотека CPAN, поддержка Unicode.
Хотя Perl 6 (ныне Raku) так и не взлетел, Perl 5 продолжает обновляться и привлекает внимание.
Эксперты отмечают, что текстовые форматы (XML, JSON, YAML, Markdown, логи) остаются ключевыми даже в эпоху ИИ, и Perl здесь по-прежнему один из лучших инструментов.
Авторы TIOBE опубликовали свежий рейтинг. Топ-8 остался без изменений (1. Python, 2. C++, 3. C, 4. Java, 5. C#, 6. JavaScript, 7. Visual Basic, 8. Go).
Perl уступил 9-е место Delphi/Object Pascal, но при этом удержался в десятке — год назад он был на 27-м месте.
Рост Perl связывают с огромным количеством книг на Amazon и его уникальными возможностями работы с текстом: регулярные выражения, богатая библиотека CPAN, поддержка Unicode.
Хотя Perl 6 (ныне Raku) так и не взлетел, Perl 5 продолжает обновляться и привлекает внимание.
Эксперты отмечают, что текстовые форматы (XML, JSON, YAML, Markdown, логи) остаются ключевыми даже в эпоху ИИ, и Perl здесь по-прежнему один из лучших инструментов.
❤5🔥2
etckeeper: контроль версий для /etc
Проблема в том, что правки накапливаются хаотично - руками, апдейтами пакетов, скриптами. В итоге, когда «вдруг перестало работать», непонятно кто и когда изменил конфиг.
⏺ etckeeper решает задачу просто: сохраняет /etc в Git (или другом VCS). Получаем историю изменений, удобный diff и возможность быстро откатить.
Установка (Debian/Ubuntu):
После этого можно работать как с обычным репозиторием:
Фишка — etckeeper интегрируется с apt и yum: перед обновлением пакетов он автоматически делает commit.
Можно добавить git remote и пушить историю в отдельный репозиторий (например, на приватный GitLab или в backup).
Это удобно для серверов, где нужно отслеживать конфиги централизованно.
Каталог /etc — сердце системы: здесь лежат конфиги сервисов, сетевые настройки, права доступа.
Проблема в том, что правки накапливаются хаотично - руками, апдейтами пакетов, скриптами. В итоге, когда «вдруг перестало работать», непонятно кто и когда изменил конфиг.
Установка (Debian/Ubuntu):
sudo apt install etckeeper git
sudo etckeeper init
sudo etckeeper commit "init"
После этого можно работать как с обычным репозиторием:
sudo git status /etc
sudo git diff /etc/ssh/sshd_config
sudo git log /etc
Фишка — etckeeper интегрируется с apt и yum: перед обновлением пакетов он автоматически делает commit.
Можно добавить git remote и пушить историю в отдельный репозиторий (например, на приватный GitLab или в backup).
Это удобно для серверов, где нужно отслеживать конфиги централизованно.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍8
fstrim: освобождение места на SSD
SSD не всегда «понимает», что файлы были удалены — блоки могут оставаться помеченными как занятые.
Команда fstrim помогает сообщить диску, какие блоки можно реально очистить.
Проверка вручную:
Выведет, сколько байт освободилось на корневом разделе.
Чтобы не делать это руками, есть встроенный systemd-таймер. Достаточно один раз включить:
Теперь очистка будет выполняться автоматически раз в неделю.
Это безопасный и простой способ поддерживать SSD в нормальной форме без лишних ухищрений.
SSD не всегда «понимает», что файлы были удалены — блоки могут оставаться помеченными как занятые.
Из-за этого диск со временем теряет скорость записи.
Команда fstrim помогает сообщить диску, какие блоки можно реально очистить.
Проверка вручную:
sudo fstrim -v /
Выведет, сколько байт освободилось на корневом разделе.
Чтобы не делать это руками, есть встроенный systemd-таймер. Достаточно один раз включить:
sudo systemctl enable fstrim.timer
sudo systemctl start fstrim.timer
Теперь очистка будет выполняться автоматически раз в неделю.
Это безопасный и простой способ поддерживать SSD в нормальной форме без лишних ухищрений.
👍19❤4
Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.
SoftIRQ используется, например, в сетевом стеке (обработка пакетов), планировщике задач и таймерах. Он позволяет разгрузить обработчики прерываний, обеспечивая баланс между низкими задержками и производительностью.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍4
lsns: кто держит namespace?
В обычной работе это не видно, но как только в системе появляются контейнеры, systemd-изоляторы или «подозрительные» процессы, namespaces становятся критически важны для отладки.
Инструмент lsns позволяет быстро посмотреть, какие процессы «сидят» в каких пространствах имён.
Простейший запуск:
На выходе будет таблица: PID, тип namespace, время создания и т.д.
Это помогает понять, например, кто держит лишний mount namespace или почему сетевой стек не совпадает с основным.
Можно фильтровать по типу:
Покажет все сетевые namespaces — полезно для диагностики контейнеров.
А если нужно конкретно узнать, кто держит PID namespace:
Linux активно использует namespaces — они изолируют процессы по сетям, PID, пользователям, монтам и прочим ресурсам.
В обычной работе это не видно, но как только в системе появляются контейнеры, systemd-изоляторы или «подозрительные» процессы, namespaces становятся критически важны для отладки.
Инструмент lsns позволяет быстро посмотреть, какие процессы «сидят» в каких пространствах имён.
Простейший запуск:
lsns
На выходе будет таблица: PID, тип namespace, время создания и т.д.
Это помогает понять, например, кто держит лишний mount namespace или почему сетевой стек не совпадает с основным.
Можно фильтровать по типу:
lsns -t net
Покажет все сетевые namespaces — полезно для диагностики контейнеров.
А если нужно конкретно узнать, кто держит PID namespace:
lsns -t pid
👍10❤7
Anonymous Quiz
11%
Каждое воскресенье в 2 ночи
78%
Каждый день в 2 ночи
7%
Каждую минуту в 2 ночи
4%
Каждый час
😁12🤪6👍5❤3
Swap-файл vs swap-раздел: как влияет на SSD и работу в системах с малым ОЗУ
На слабых серверах и миниатюрных VPS наличие подкачки решает всё. Даже базовая установка apt без swap может закончиться «убийством» процессов через OOM-killer.
Что выбрать — swap-файл или swap-раздел?
Swap-раздел исторически считался более «надёжным» вариантом: он выделяется на физическом уровне и не фрагментируется. Но в реальности:
⏺ менять его размер сложно (особенно без LVM);
⏺ требует переформатирования или изменения разметки;
⏺ неудобен в облаках и на VPS.
Swap-файл — более гибкий и удобный. Особенно если:
⏺ вы работаете на облаке с единственным диском;
⏺ у вас ограниченное место;
⏺ нужно быстро изменить размер или выключить swap.
На современных ядрах swap-файл работает почти так же эффективно, как и раздел, особенно если создать его правильно.
Как правильно создать swap-файл
Не используйте dd — он может создать фрагментированный файл:
Вместо этого:
В fstab:
Дополнительные улучшения: zswap и zram
Чтобы продлить срок службы SSD и ускорить работу на слабых системах:
Zswap — сжатая подкачка в RAM. Включается одной командой:
Zram — компрессированный swap в памяти. Особенно эффективен на embedded и ARM-устройствах:
Настройка поведения подкачки
Чтобы система не бросалась в swap при любой нагрузке:
10–20 — хороший баланс: сначала используется RAM, и только потом swap.
На слабых серверах и миниатюрных VPS наличие подкачки решает всё. Даже базовая установка apt без swap может закончиться «убийством» процессов через OOM-killer.
Но что выбрать: swap-файл или swap-раздел? И главное — как сделать, чтобы не угробить SSD и не словить тормоза?
Что выбрать — swap-файл или swap-раздел?
Swap-раздел исторически считался более «надёжным» вариантом: он выделяется на физическом уровне и не фрагментируется. Но в реальности:
Swap-файл — более гибкий и удобный. Особенно если:
На современных ядрах swap-файл работает почти так же эффективно, как и раздел, особенно если создать его правильно.
Как правильно создать swap-файл
Не используйте dd — он может создать фрагментированный файл:
# Плохо:
dd if=/dev/zero of=/swapfile bs=1M count=1024
Вместо этого:
# Хорошо:
fallocate -l 1G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
В fstab:
/swapfile none swap sw 0 0
Дополнительные улучшения: zswap и zram
Чтобы продлить срок службы SSD и ускорить работу на слабых системах:
Zswap — сжатая подкачка в RAM. Включается одной командой:
echo 1 > /sys/module/zswap/parameters/enabled
Zram — компрессированный swap в памяти. Особенно эффективен на embedded и ARM-устройствах:
modprobe zram
echo lz4 > /sys/block/zram0/comp_algorithm
echo 512M > /sys/block/zram0/disksize
mkswap /dev/zram0
swapon /dev/zram0
Настройка поведения подкачки
Чтобы система не бросалась в swap при любой нагрузке:
sysctl vm.swappiness=10
10–20 — хороший баланс: сначала используется RAM, и только потом swap.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14❤8👍2
Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.
Система управляет writeback через параметры vm.dirty_ratio и vm.dirty_background_ratio, а также через демоны pdflush или flush. Правильная настройка writeback снижает задержки при записи, предотвращает перегрузку диска и балансирует использование оперативной памяти и I/O.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍9
capsh и Linux capabilities
В Linux root-аккаунт обладает полным набором прав, но далеко не всегда это нужно. Capabilities позволяют «разрезать» привилегии на части и выдавать только нужные.
Например, чтобы процесс слушал порты ниже 1024, достаточно capability CAP_NET_BIND_SERVICE. Полный root здесь избыточен.
Проверка текущих прав:
Запуск процесса только с нужной capability:
⚡️ Так можно запускать сервисы безопаснее, следуя принципу «минимально необходимых прав». Это актуально и для контейнеров, и для демонов в продакшене.
В Linux root-аккаунт обладает полным набором прав, но далеко не всегда это нужно. Capabilities позволяют «разрезать» привилегии на части и выдавать только нужные.
Это снижает риски: сервис не сможет сделать ничего лишнего, даже если его взломают.
Например, чтобы процесс слушал порты ниже 1024, достаточно capability CAP_NET_BIND_SERVICE. Полный root здесь избыточен.
Проверка текущих прав:
capsh --print
Запуск процесса только с нужной capability:
capsh --drop=all --add=cap_net_bind_service -- -c "./server"
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍10
This media is not supported in your browser
VIEW IN TELEGRAM
Внутри 20+ модулей: от установки Linux и работы с файлами до сетей, прав, дисков, процессов, автоматизации на Bash и многого другого. Всё сразу закрепляется на практике (200+ заданий с автопроверкой).
Материал подаётся понятным языком, шаг за шагом, на реальных примерах и с наглядными схемами.
После прохождения вы получите сертификат, который можно добавить в резюме.
Есть бесплатные демо-уроки для ознакомления. В ближайшие 48ч курс доступен со скидкой 20% по промокоду «
ADMGUIDES
»: открыть курс на StepikPlease open Telegram to view this post
VIEW IN TELEGRAM
❤6👍5🔥1
Multikernel: несколько ядер Linux на одном хосте
Проект Multikernel позволяет запускать на одной машине сразу несколько независимых экземпляров ядра Linux — без гипервизора и накладных расходов виртуализации.
Каждый экземпляр ядра получает прямой доступ к CPU и ресурсам, изоляция выше, чем у контейнеров, а производительность близка к «железу».
⏺ Запуск через улучшенный kexec, управление и отладка — через /proc/multikernel.
⏺ Для обмена сообщениями используется собственный IPI-фреймворк.
⏺ Поддерживается динамическое выделение ресурсов и изоляция отказов.
Проект Multikernel позволяет запускать на одной машине сразу несколько независимых экземпляров ядра Linux — без гипервизора и накладных расходов виртуализации.
Каждый экземпляр ядра получает прямой доступ к CPU и ресурсам, изоляция выше, чем у контейнеров, а производительность близка к «железу».
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍2🔥1
Один канал для решения трёх задач: сделать систему эффективной, стабильной и безопасной.
Без воды, только практика:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2❤1