Inotify в bash ловимо зміни файлової системи

Inotify в bash ловимо зміни файлової системи
Inotify - це підсистема ядра Linux, яка дозволяє відстежувати зміни файлових систем. Використання цієї підсистеми дозволяє виконувати певні дії в тому випадку якщо ви створили файл, щось в нього записали, відкрили, закрили, видалили і так далі. Використання цього механізму дозволяє позбутися від необхідності вставляти в скрипти перевірки з таймаут за допомогою команди sleep. Це спрощує логіку скрипта, оскільки нам потрібно просто чекати інформацію про зміни файлової системи, а при отриманні інформації про те, що щось змінилося, виконати необхідні дії. Давайте розглянемо приклад скрипта, що використовує inotify.

Програми inotifywait і inotifywatch

Ці програми якраз і допоможуть нам забезпечити необхідний функціонал відстеження змін файлової системи. В Debian і Ubuntu вони входять в пакет inotify-tools. Установка пакета:

Як працює inotifywatch

Програма inotifywatch збирає статистику доступу до файлової системи за допомогою inotify. Після закінчення роботи програма виводить статистичну інформацію у вигляді таблиці, що включає інформацію про загальну кількість подій, про кількість подій кожного типу і файлі, для якого відбулася подія. У неї є ряд параметрів, які можна використовувати для зміни параметрів роботи програми.

Виведення інформації по використанню

Виводити додаткову інформацію на стандартний потік помилок під час роботи

Відстежувати зміни рекурсивно для директорії, переданої в якості аргументу командного рядка. Якщо всередині відслідковується директорії будуть створені піддиректорії під час роботи програми, вони автоматично будуть відслідковуватися. Якщо для відстеження обрана коренева директорія або директорія з великою кількістю піддиректорій і файлів, установка відстеження всіх елементів файлової системи може зайняти деякий час, протягом якого події отримані не будуть. Крім того, можливе досягнення максимальної кількості об'єктів файлової системи, дозволених для відстеження кожному користувачеві. Значення за замовчуванням 8192, і воно може бути збільшено записом нового значення в / proc / sys / fs / inotify / max_user_watches:

echo "51200"> / proc / sys / fs / inotify / max_user_watches

Виключити з відстеження файли з іменами, що збігаються з шаблоном. Для шаблону використовуються розширені регулярні вирази POSIX. Регістр при використанні даного параметра враховується.

Виключити з відстеження файли з іменами, що збігаються з шаблоном. Для шаблону використовуються розширені регулярні вирази POSIX. Регістр при використанні даного параметра ігнорується.

Під час рекурсивного стеження за Директорією виключити вказаний файл з відстеження. Якщо для файлу вказані одночасно включення в список для відстеження та виключення з відстеження, він буде відслідковуватися. Для файлу можна використовувати як відносний шлях, так і абсолютний. Якщо ім'я файлу включає символ «@», використовуйте абсолютний шлях.

Читати список файлів, які будуть відслідковуватися та ігноруватися, з файлу, кожне ім'я файлу повинна починатися з нового рядка. Якщо ім'я файлу починається з символу «@», відстеження для нього буде відключено. Якщо в якості імені файлу вказати символ «-» (мінус), то список файлів буде зчитуватися з стандартного потоку введення. Цей параметр має сенс використовувати, коли потрібно відстежувати велику кількість файлів, і їх список незручно передавати як аргументи командного рядка.

Виводити колонки і рядки таблиці навіть у тому випадку, коли вони порожні. За замовчуванням порожні рядки і колонки не виводяться.

-t <секунды>,
-timeout <секунды>

Працювати тільки протягом зазначеного кількості секунд. Якщо цей параметр не вказано, програма буде працювати до отримання сигналу на переривання роботи, наприклад, після натискання клавіш Ctrl + C

-e <событие>,
-event <событие>

Відстежувати тільки події зазначених типів. Цей параметр може бути вказаний більш ніж один раз. Якщо він не вказаний, будуть відслідковуватися події всіх типів

-a <событие>,
-ascending <событие>

Сортувати висновок по зростанню кількості подій для зазначеного типу подій. Типи подій, за якими можна здійснювати сортування, включають «total» і події, які перераховані нижче, за винятком «move» і «close» (замість них потрібно вказувати «moved_to», «moved_from», «close_write» і «close_nowrite») . За замовчуванням сортування проводиться по спадаючій по полю «total».

-d <событие>,
-descending <событие>

Сортувати висновок щодо зменшення кількості подій для зазначеного типу подій. Типи подій, за якими можна здійснювати сортування, включають «total» і події, які перераховані нижче, за винятком «move» і «close» (замість них потрібно вказувати «moved_to», «moved_from», «close_write» і «close_nowrite») . За замовчуванням сортування проводиться по спадаючій по полю «total».

Типи подій для відстеження:

Схожі статті