Windows. Вирусы. Ноутбуки. Интернет. Office. Утилиты. Драйверы

Я бы хотел посвятить статью обзору API, предоставляемых разными ОС для слежения за изменениями в директории. Статья появилась как результат моей работы над демонами слежения за изменениями для утилиты dklab_realsync ( , github репозиторий) и своей собственной, которую я пока что не хочу анонсировать.

Windows, ReadDirectoryChangesW

Для операционной системы Windows есть замечательная функция ReadDirectoryChangesW , которая возвращает набор изменений для директории, в том числе содержит флаг для работы рекурсивно (bWatchSubtree). Таким образом, реализация слежения за изменениями в директории не представляет особого труда и в том же dklab_realsync реализация занимает 80 строк кода или 3.5 Кб. Интересно, что в Windows эти события поддерживаются даже через SMB!

Тем не менее, существуют определенные подводные камни:

  • конечный размер буфера изменений, после которого очередь событий переполнится и эти события будут потеряны
  • согласно документации к watchdog package , событие перемещения посылается раньше, чем изменения становятся видны в ФС
  • размер буфера ограничен в 64 Кб для сетевой ФС

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

Mac OS X, FSEvents

В Mac OS X также есть удобный и простой API для слежения за изменениями в файловой системе под названием FSEvents . С использованием этого API простейшая реализация демона составляет 50 строк кода или 1.8 кб. Очередь не может переполниться (!), но полное сканирование все же может потребоваться, если демон fseventsd «упадет». Стоит отметить, что этот API до версии 10.7 не предоставляет изменения по файлам, он сообщает только директории, в которых что-то изменилось. Поскольку события никуда не деваются и пишутся в лог (FSEvents service stores events in a persistent, per-volume database), детализация с точностью для директории позволяет сэкономить место на диске.

Вывод: FSEvents API для Mac OS X является самым необычным из всех подобных API. Очередь не переполняется и даже имеется возможность получить события из прошлого. Тем не менее, детализация событий дается с точностью до директории (до версии 10.7), что означает меньшую эффективность демона для синхронизации файлов.

Linux, inotify

В linux vanilla kernel существует один способ слежения за изменениями в директории - это inotify . Для этого API существует хорошая и подробная документация, но нет поддержки рекурсивного слежения за изменениями! Также, у inotify есть ограничение на максимальное количество объектов, за которыми можно следить. Простейшая реализация демона занимает уже 250 строк кода или 8 кб. Статическая сборка с использованием dietlibc занимает примерно 14 кб. Другим неприятным моментом является то, что приложение должно само поддерживать соответствия между watch descriptor (в нашем случае это всегда директория) и именем. Есть функция inotify_add_watch , которой передается путь до отслеживаемой директории, но нет обратной - inotify_get_path, которая бы возвращала этот самый путь по переданному дескриптору. События же содержат только watch descriptor и относительный путь до изменившегося файла внутри директории.

Подводные камни рекурсивного слежения за директорией через inotify:

  • Возможность переполнения очереди (длина очереди задается в /proc/sys/fs/inotify/max_queued_events)
  • Ограничение на максимальное количество объектов слежения (задается в /proc/sys/fs/inotify/max_user_watches)
  • Отсутствие возможности рекурсивного слежения за директорией
  • Необходимость отдельно обрабатывать случай, когда создается директория (например mkdir -p a/b/c). Вы получите событие о том, что создана директория «a», но пока вы навешиваете обработчик на эту директорию, в ней уже могут создать ещё одну директорию и событие об этом вам уже не придет.
  • Теоретическая возможность целочисленного переполнения watch descriptor (wd), так как он задается uint32

FreeBSD, Mac OS X, kqueue

FreeBSD и Mac OS X позволяют отслеживать за изменениями с помощью kqueue, который аналогичен inotify по своим характеристикам и также не имеет возможности рекурсивного слежения за директориями. Также, kqueue принимает в качестве аргументов дескрипторы открытых файлов (директорий), поэтому при использовании этого API ограничения на количество отслеживаемых директорий ещё более строгие.

Итого:

Как можно видеть, у всех API существуют свои достоинства и недостатки. Наименее удобными являются механизмы kqueue и inotify, но они же являются самыми эффективными и надежными. Коммерческие ОС предоставляют более удобные механизмы слежения за изменениями, но у них тоже есть свои особенности. Надеюсь, теперь вы имеете больше представления о том, как тяжела участь Dropbox и подобных программ, которым требуется со всем этим уживаться и осуществлять надежную и эффективную синхронизацию данных:).

* Картинка взята с

Небольшая программа, не требующая установки, предназначенная для мониторинга файлов в указанной Вами папке. Она позволяет мониторить как локальную, так и сетевую папку и выводить оповещения как на Рабочем столе, так и через сеть или по E-mail! Также в программе есть возможность быстрого реагирования на изменения путем запуска bat-файлов или определенных приложений.

Так уж повелось, что сегодня каждый, так или иначе, зависит от компьютера. Я не говорю о компьютерной зависимости как заболевании, нет:). Просто каждый пользователь в любом случае хранит на ПК свои личные файлы…

А поскольку за одним компьютером может работать несколько человек, то, естественно, у Вас может возникнуть желание следить за тем, чтобы Ваши данные никто и никуда не дел.

Самым радикальным способом является шифрование Вашей личной папки паролем . Однако это не всегда удобно, например, если Вам нужно иметь к ней доступ по сети…

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

Сравнение с платным аналогом

Простой наблюдатель, несмотря на незамысловатое название, - довольно мощное средство мониторинга файловой системы, которое позволяет вести наблюдение, как за отдельной папкой, так и за всем диском или даже общей сетевой директорией. Сравнить его можно с другой платной отечественной разработкой - Folder Watchdog Service:

Единственным недостатком Простого наблюдателя является отсутствие возможности следить сразу за несколькими папками. Все остальное - только в плюсе:).

Подготовка к работе с программой

Еще одним плюсом приложение является то, что оно не требует установки! Для начала работы с программой Вам потребуется только извлечь ее из архива и поместить в любую удобную папку (хоть и в ту, которая должна мониториться). Все - мы готовы к работе:).

Ах да! Чуть не забыл предупредить, что на Вашем ПК должны быть установлены библиотеки .NET Framework 3.5 (обычно они устанавливаются вместе с системой, но могут и отсутствовать, поэтому на всякий случай вот ссылка на скачивание: https://www.microsoft.com/ru-ru/download/details.aspx?id=21).

После запуска программы мы увидим следующее:

Не пугайтесь:). Никто не требует с нас денег - регистрация полностью бесплатна. А если Вы не хотите раскрывать свое инкогнито, то можете и не регистрироваться вообще! Для этого просто нажмите кнопку «Не регистрировать».

Однако в будущем делать это придется всякий раз, когда Вы запускаете программу, поэтому проще все-таки будет ввести нужные данные в соответствующие поля и нажать «Регистрация».

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

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

Настройки программы

Перед тем, как начинать наблюдение за папкой, советую ознакомиться с установками Простого наблюдателя. Чтобы попасть к ним, нужно нажать кнопку «Настройки»:

Установки программы собраны на четырех вкладках. И первая из них - «Мониторинг». Здесь собраны настройки, отвечающие собственно за функции слежения. Обратить внимание стоит на такие параметры:

Вторая вкладка - «Оповещение»:

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

Если Вы решите настраивать сетевые уведомления, то обязательно прочитайте информацию по ссылке «Важные замечания по работе функции».

На вкладке «Действия» собраны все функции, доступные для исполнения программой после обнаружения изменений в наблюдаемой папке:

Здесь мы можем настроить:

  • запуск определенной программы или пакетного сценария;
  • отправку отчета на электронный ящик;
  • отправку измененных файлов на FTP-сервер;
  • копирование измененных файлов в другую папку.

Особенно следует остановиться на пункте работы с E-mail-оповещениями. Если Вы хотите получать отчеты (а также измененные файлы) на свой электронный почтовый ящик, то Вам нужно активировать флажок «Отправка отчетов по e-mail», а затем нажать активировавшуюся кнопку «Настройка»:

В окне настроек нам нужно обязательно указать следующие параметры:

  1. «Сервер SMTP». Если Вы используете сервисы он-лайн почты, то адрес сервера обычно соответствует адресу самого сервиса, предваренного приставкой «smtp.» (например, smtp.mail.ru , smtp.yandex.ru и т.п.). Если такая схема не проходит, то точный адрес смотрите на страничке справки Вашего провайдера.
  2. «Почтовый адрес». Здесь Вы указываете адрес, с которого будет отправлен отчет. Во избежание недоразумений, лучше указывать собственный E-mail.
  3. Флажок «Требуется аутентификация». Если на Вашем почтовом сервере для отправки писем требуется авторизация (обычно на всех он-лайн сервисах), тогда нужно активировать данную опцию и указать логин и пароль от своего ящика.
  4. Поле «Получатели». Сюда через точку с запятой мы вписываем список адресов, на которые будут отправляться отчеты.

Дополнительно можете обратить внимание на опцию «Прикреплять новые файлы». Она позволяет вместе с оповещением отправить Вам на почту файлы, которые были изменены.

Для того, чтобы не перегружать Интернет канал и не расходовать трафик зря (если он платный), Вы можете ограничить размер отправляемых файлов при помощи опции «Не отправлять файлы размером более…». Ниже также есть возможность наоборот задать файлы, которые будут отправляться всегда. Таким файлом может быть, например, лог работы программы.

По окончанию настройки Вы можете проверить ее правильность, нажав кнопку «Тест»:

Если все настроено правильно, то Вы получите письмо с тестовым сообщением.

Последняя вкладка - «Программа»:

Здесь собраны опции, касающиеся общих настроек Простого наблюдателя, такие как, автозапуск при загрузке системы, автоматический запуск мониторинга папки, скрытие приложения в трей и т.д. Здесь же можно проверить обновления и активировать отображение всплывающих сообщений (если их не видно по умолчанию).

Наблюдение за папкой в программе Простой наблюдатель

Теперь, когда у Вас все настроено так, как нужно, можно приступать к непосредственной работе с программой Простой наблюдатель. И первым делом Вам нужно указать папку для наблюдения. По умолчанию выбран весь Диск С:, поэтому для изменения пути нужно нажать кнопку «Папка», и в окне Проводника указать нужную директорию:

Я создал отдельную тестовую папку на Рабочем столе, однако расположение папки роли не играет - программа одинаково хорошо работает со всеми дисками. Стоит, однако, еще раз упомянуть, что через Проводник можно указать только локальную директорию. Для мониторинга удаленной общей папки ее адрес нужно задавать в первом окне настроек!

Итак, у нас все готово - можно запускать слежение. Для этого жмем кнопку «Пуск»:

После ее нажатия активируется кнопка «Стоп», деактивируется кнопка «Папка», а в статусной строке появляется информация о времени наблюдения папки, количестве изменений в ней и времени последнего изменения. Для того, чтобы скрыть окно программы, достаточно свернуть его, и оно минимизируется в трей. Вызвать окно повторно можно одинарным кликом по значку в трее.

Для проверки работоспособности Простого наблюдателя давайте поместим в нашу тестовую папку какой-нибудь файл:

Как видите, программа определила изменения и указала нам, что в папке появился новый файл с определенным именем. Также отчет об этом был выслан на мой e-mail. Еще одна особенность сообщения Простого наблюдателя - если кликнуть по окошку уведомления, то перед Вами откроется Ваша папка, в которой будет выделен изменившийся файл!

Просмотр логов

Как только Простой наблюдатель обнаружит первую активность в наблюдаемой папке, он автоматически создаст файл watch.log . Это текстовый файл, в котором записываются и хранятся отчеты обо всех произошедших событиях.

Данный файл может быть открыт обычным Блокнотом, но удобнее просматривать его встроенными средствами программы. Для этого достаточно нажать кнопку «Лог»:

Здесь мы увидим данные о событии (действие, дата, время, имя файла и папки, которые изменились) и быстро сможем найти нужную запись благодаря системе фильтров. Также здесь есть кнопка, которая позволяет быстро очистить лог-файл, если тот слишком «распух» в размерах:).

Кстати, зная имя и расположение лог-файла, Вы можете настроить Простой наблюдатель таким образом, чтобы он отправлял файл отчета вместе с каждым сообщением на Вашу электронную почту (см. раздел о настройках).

Достоинства и недостатки программы

  • не требуется установка;
  • небольшой размер утилиты;
  • возможность слежения за подпапками;
  • отправка отчетов на электронную почту;
  • отправка уведомлений по локальной сети.
  • работает только с одной папкой;
  • без предварительной настройки потребляет довольно много ресурсов на старых ПК;
  • нет возможности полностью скрыть работу программы «штатными» средствами.

Выводы

На сегодняшний день Простой наблюдатель - это, пожалуй, единственная полностью бесплатная (даже для коммерческого использования) программа в своем роде!

Поэтому, если Вы решили во что бы то ни стало установить слежку за личными данными на ПК в Ваше отсутствие, то другого варианта Вам просто не найти:). Тем более, что в программе, кроме поддержки наблюдения только за одной папкой, практически нет никаких минусов.

P.S. Разрешается свободно копировать и цитировать данную статью при условии указания открытой активной ссылки на источник и сохранения авторства Руслана Тертышного.

В случае, если вы являетесь не единственным пользователем ПК, то после долгого неиспользования машины вам может понадобиться выяснить, какие именно произошли изменения за этот промежуток времени. Также могут быть ситуации, при которых жесткий диск показывает активность, но на самом деле не разобрать, занят он обработкой полезных процессов или это работает вредоносное ПО. Отследить изменения в файлах и получить актуальные данные обо всех изменениях в файловой системе вам поможет программа FolderChangesView.

FolderChangesView – это небольшая по размерам утилита, которая создана специально для отслеживания всех изменений, которые происходят с файлами и папками. Программа отображает в режиме реального времени все изменения, происходящие с файлами, а весь полученный результат показывается пользователю в удобной таблице. Скачать саму программу можно с официального сайта разработчика по ссылке (там же возможно скачать русификатор, который устанавливается простым перемещением в папку с приложением): http://www.nirsoft.net/utils/folder_changes_view.html

Настройка программы

Утилита не требует установки, ведь в архиве находится один лишь файл.exe. Рекомендуется создать отдельную папку для программы, скачать русификатор и закинуть эти два файла в нее. После запуска перед вами будет открываться меню конфигурации (если завершить работу с программой и открыть ее вновь, то меню снова появится перед вами).

Здесь вам необходимо выбрать диск, папки или целый раздел жесткого диска, который необходимо анализировать. При выборе папки оставляйте отмеченным пункт «Сканировать также подкаталоги». Вы также имеете возможность указать папки, мониторить которые нет необходимости: нужно указать путь к папке и поставить галочку напротив «Exclute the following folders».
Ну и в заключение из полезных настроек вы можете установить размер файлов, за которыми необходимо следить. После выбора этих основных настроек просто нажимайте «Ок» и процесс мониторинга за выбранными папками начнется.

Я бы хотел посвятить статью обзору API, предоставляемых разными ОС для слежения за изменениями в директории. Статья появилась как результат моей работы над демонами слежения за изменениями для утилиты dklab_realsync ( , github репозиторий) и своей собственной, которую я пока что не хочу анонсировать.

Windows, ReadDirectoryChangesW

Для операционной системы Windows есть замечательная функция ReadDirectoryChangesW , которая возвращает набор изменений для директории, в том числе содержит флаг для работы рекурсивно (bWatchSubtree). Таким образом, реализация слежения за изменениями в директории не представляет особого труда и в том же dklab_realsync реализация занимает 80 строк кода или 3.5 Кб. Интересно, что в Windows эти события поддерживаются даже через SMB!

Тем не менее, существуют определенные подводные камни:

  • конечный размер буфера изменений, после которого очередь событий переполнится и эти события будут потеряны
  • согласно документации к watchdog package , событие перемещения посылается раньше, чем изменения становятся видны в ФС
  • размер буфера ограничен в 64 Кб для сетевой ФС

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

Mac OS X, FSEvents

В Mac OS X также есть удобный и простой API для слежения за изменениями в файловой системе под названием FSEvents . С использованием этого API простейшая реализация демона составляет 50 строк кода или 1.8 кб. Очередь не может переполниться (!), но полное сканирование все же может потребоваться, если демон fseventsd «упадет». Стоит отметить, что этот API до версии 10.7 не предоставляет изменения по файлам, он сообщает только директории, в которых что-то изменилось. Поскольку события никуда не деваются и пишутся в лог (FSEvents service stores events in a persistent, per-volume database), детализация с точностью для директории позволяет сэкономить место на диске.

Вывод: FSEvents API для Mac OS X является самым необычным из всех подобных API. Очередь не переполняется и даже имеется возможность получить события из прошлого. Тем не менее, детализация событий дается с точностью до директории (до версии 10.7), что означает меньшую эффективность демона для синхронизации файлов.

Linux, inotify

В linux vanilla kernel существует один способ слежения за изменениями в директории - это inotify . Для этого API существует хорошая и подробная документация, но нет поддержки рекурсивного слежения за изменениями! Также, у inotify есть ограничение на максимальное количество объектов, за которыми можно следить. Простейшая реализация демона занимает уже 250 строк кода или 8 кб. Статическая сборка с использованием dietlibc занимает примерно 14 кб. Другим неприятным моментом является то, что приложение должно само поддерживать соответствия между watch descriptor (в нашем случае это всегда директория) и именем. Есть функция inotify_add_watch , которой передается путь до отслеживаемой директории, но нет обратной - inotify_get_path, которая бы возвращала этот самый путь по переданному дескриптору. События же содержат только watch descriptor и относительный путь до изменившегося файла внутри директории.

Подводные камни рекурсивного слежения за директорией через inotify:

  • Возможность переполнения очереди (длина очереди задается в /proc/sys/fs/inotify/max_queued_events)
  • Ограничение на максимальное количество объектов слежения (задается в /proc/sys/fs/inotify/max_user_watches)
  • Отсутствие возможности рекурсивного слежения за директорией
  • Необходимость отдельно обрабатывать случай, когда создается директория (например mkdir -p a/b/c). Вы получите событие о том, что создана директория «a», но пока вы навешиваете обработчик на эту директорию, в ней уже могут создать ещё одну директорию и событие об этом вам уже не придет.
  • Теоретическая возможность целочисленного переполнения watch descriptor (wd), так как он задается uint32

FreeBSD, Mac OS X, kqueue

FreeBSD и Mac OS X позволяют отслеживать за изменениями с помощью kqueue, который аналогичен inotify по своим характеристикам и также не имеет возможности рекурсивного слежения за директориями. Также, kqueue принимает в качестве аргументов дескрипторы открытых файлов (директорий), поэтому при использовании этого API ограничения на количество отслеживаемых директорий ещё более строгие.

Итого:

Как можно видеть, у всех API существуют свои достоинства и недостатки. Наименее удобными являются механизмы kqueue и inotify, но они же являются самыми эффективными и надежными. Коммерческие ОС предоставляют более удобные механизмы слежения за изменениями, но у них тоже есть свои особенности. Надеюсь, теперь вы имеете больше представления о том, как тяжела участь Dropbox и подобных программ, которым требуется со всем этим уживаться и осуществлять надежную и эффективную синхронизацию данных:).

* Картинка взята с

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

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

WinDirStat

Представляет размеры и количество файлов на жестком диске компьютера в графическом виде, а также на выбранных нами съемных носителях.

Преимущества WinDirStat

  • Доступная форма графической визуализации
  • Также работает в старых версиях Windows
  • Можно определить способ отображения элементов
  • Карты дерева

Недостатки:

Тип распространения : freeware
Цена : бесплатно

SpaceSniffer Portable

SpaceSniffer сканирует и показывает Вам содержимое выбранных дисков в удобном для чтения виде иерархической цветной схеме.

Преимущества SpaceSniffer

  • Не требует установки
  • Широкие возможности фильтрации данных, которые визуализируются

Тип распространения : freeware
Цена : бесплатно

TreeSize Free

Приложение TreeSize Free позволяет быстро просканировать содержимое любого носителя, а результаты отображаются в виде раскрывающегося дерева.

Преимущества TreeSize Free

  • Удобная сортировка по размеру, количеству файлов или папок
  • Справляется с альтернативными потоками данных файловой системы NTFS
  • Интерфейс адаптированный для сенсорных экранов

Недостатки:

  • Только в англоязычной версии

Тип распространения : freeware
Цена : бесплатно

JDiskReport

JDiskReport - для любителей статистики в виде диаграмм, напоминающих диаграммы из Excel. Вместо деревьев у нас тут гистограммы и круговые диаграммы.

Преимущества JDiskReport

  • Интересные графические схемы
  • Много различных статистических данных, в том числе разделение по размерам и дате создания
  • Доступна Java версия, которая работает на любой платформе с Java

Недостатки:

  • Версия для Windows требует установленной Java

Тип распространения : freeware
Цена : бесплатно

FolderSize

FolderSize выделяется окном сводки. Оно отображает диаграммы и список файлов или папок, которые можно сортировать по различным критериям.

Преимущества FolderSize

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

Недостатки:

  • Бесплатная версия не позволяет сканировать сопоставленные жесткие диски и сетевые

Тип распространения : freeware
Цена : бесплатно

Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter
ПОДЕЛИТЬСЯ: