server360 - логотип
0
Моя корзина
Каталог
0
Моя корзина
Server360 / Полезное / Как отслеживать изменения в файловой системе Linux

Как отслеживать изменения в файловой системе Linux

 inotifywait -e create -e modify -e moved_to "$TARGET_DIR" -r

Что делает эта команда?

Клиент

Этот скрипт использует инструмент inotifywait, который позволяет отслеживать изменения в файловой системе Linux. Давайте разберем, что делает каждая часть этой команды:

  • inotifywait: Это утилита для мониторинга изменений файловой системы с помощью inotify.
  • -e create: Опция указывает inotifywait отслеживать события создания файлов.
  • -e modify: Эта опция указывает inotifywait отслеживать события изменения файлов.
  • -e moved_to: Эта опция указывает inotifywait отслеживать события перемещения файлов внутрь целевого каталога.
  • "$TARGET_DIR": Это переменная, которая содержит путь к целевому каталогу, который вы хотите отслеживать.
  • -r: Эта опция указывает inotifywait отслеживать изменения рекурсивно внутри целевого каталога.

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

Какой вывод будет у этой команды?

Клиент

Когда вы запустите эту команду, она будет непрерывно отслеживать изменения в файловой системе в указанном каталоге и его подкаталогах. Каждый раз, когда происходит одно из событий, указанных в опциях -e create, -e modify или -e moved_to, inotifywait выведет информацию о событии в стандартный вывод.

Пример вывода может выглядеть примерно так:

./path/to/modified_file.txt MODIFY
./path/to/created_file.txt CREATE
./path/to/moved_file.txt MOVED_TO

Здесь ./path/to/modified_file.txt, ./path/to/created_file.txt и ./path/to/moved_file.txt – это пути к файлам, которые были изменены, созданы или перемещены соответственно. “MODIFY”, “CREATE” и “MOVED_TO” – это события, которые произошли с этими файлами.

Как только она увидит изменения, она завершит свою работу?

Клиент

Нет, по умолчанию inotifywait будет продолжать выполняться после того, как обнаружены изменения в файловой системе. Он будет продолжать ожидать и отслеживать любые дальнейшие изменения, пока его не остановят явно или он не завершится по другой причине (например, нажатие комбинации клавиш для прерывания выполнения процесса, такой как Ctrl+C).

Если вы хотите, чтобы inotifywait завершил свою работу после первого обнаружения изменения, вы можете использовать опцию --monitor (-m). Эта опция заставляет inotifywait оставаться активным после первого срабатывания, ожидая дальнейших событий. Тогда вы можете прервать его выполнение вручную, когда вам это понадобится.

Напиши bash скрипт, который будет использовать эту команду, и при обнаружении новых или измененных файлов будет выполнять какие-то команды

Клиент

Вот пример bash-скрипта, который будет использовать команду inotifywait для отслеживания изменений в указанном каталоге и выполнения определенных команд при обнаружении новых или измененных файлов:

#!/bin/bash

# Путь к целевому каталогу, который вы хотите отслеживать
TARGET_DIR="/path/to/target_directory"

# Команды, которые нужно выполнить при обнаружении изменений
COMMANDS_TO_RUN=(
    "echo 'New or modified file detected!'"
    "your_command_here"
    "another_command_here"
)

# Функция для выполнения команд
run_commands() {
    for cmd in "${COMMANDS_TO_RUN[@]}"; do
        eval "$cmd"
    done
}

# Основной цикл скрипта
while true; do
    # Используем inotifywait для отслеживания событий в целевом каталоге
    change=$(inotifywait -e create -e modify -e moved_to "$TARGET_DIR" -r 2>/dev/null)
    # Проверяем, были ли обнаружены изменения
    if [ $? -eq 0 ]; then
        # Если да, то выполнить команды
        run_commands
    else
        # Если произошла ошибка, вывести сообщение об ошибке и завершить скрипт
        echo "Error occurred while running inotifywait. Exiting."
        exit 1
    fi
done

Примечания:

  • Замените "/path/to/target_directory" на путь к каталогу, который вы хотите отслеживать.
  • Замените комментарии # Команды, которые нужно выполнить при обнаружении изменений на список команд, которые вы хотите выполнить при обнаружении новых или измененных файлов.
  • Вы можете добавить или изменить команды в массиве COMMANDS_TO_RUN по вашему усмотрению.
  • Для выполнения нескольких команд используется eval, чтобы можно было использовать различные типы команд, включая команды с переменными. Однако будьте осторожны с использованием eval, чтобы избежать уязвимостей безопасности.
«
»

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *