Недавно у меня произошел инцидент, когда некоторые файлы были случайно удалены. Это файлы в общей учетной записи веб-хостинга (FreeBSD), но дерево каталогов глубоко.

Я склонен написать что-то сам на PHP или Python, что делает это:

  1. Сканирование каждого каталога на количество файлов, содержащихся в каждом
  2. Храните эти данные, вероятно, в базе данных MySQL
  3. Ежедневно запускайте отчет, в котором сообщается, где находится активность (поэтому я вижу, что в каталоге выгрузки есть 3 новых файла, или в каталоге миниатюр содержится на 10 файлов меньше, или даже для каждого файла сообщается, что он изменился (может быть, он берет хэш каждого файла и сохраняет его?).
  4. Запускайте ежедневное задание cron с изменениями предыдущего дня (или еженедельное задание cron с изменениями предыдущей недели, или любого другого интервала, который имеет смысл)

Но я чувствую, что это то, что люди сделали до меня. Это существует, а я просто не знаю?

1 ответ1

1

Если вас интересуют только файлы, добавляемые или удаляемые, вы можете использовать комбинацию find и diff для отслеживания изменений:-

find /some/dir -print > file-list.expected # baseline

  # Add/remove files

find /some/dir -print > file-list.current
diff file-list.expected file-list.current # look for changes

mv file-list.old file-list.new # update baseline (optional)

Однако, если вам нужно (или вы хотите) узнать, изменилось ли содержимое файла, FreeBSD поставляется с утилитой [mtree] [1], с помощью которой можно сообщать о любых найденных изменениях между иерархией каталогов и ожидаемый базовый уровень:-

mtree -c -i -n -K cksum -p /some/dir > baseline.mtree # baseline

  # Add/remove/change files

mtree -f baseline.mtree -p /some/dir # look for changes
mtree -c -i -n -K cksum -p /some/dir > baseline.mtree # update baseline (optional)

Для любого из этих методов целесообразно сделать базовый файл неизменным («chflags uchg baseline.file»), что должно помочь предотвратить случайное удаление ваших файлов кем-либо, кроме root (включая вас).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .