2012-06-22 2 views
1

Я в настоящее время с помощью функции языка Python,файла демона сканирования (OS X) в Python

os.walk('/') 

перебрать всю свою файловую систему на OS X. Моя цель состоит в том, чтобы сделать личный демон, который отслеживает:

  1. Новоиспеченные файлы/каталоги
  2. Скорректированная/прикоснулся файлов/DIRS
  3. удаленных файлов (возможно)

Идея

Это больше предусмотрительных функций Я хотел бы добавить к моему Macs, чтобы иметь возможность увидеть, если странные вещи получают помещены в моих каталогах нежелательных, так что если мои компьютеры Mac когда-либо заразиться некоторыми (но неизвестный) троянец, я могу, возможно, сам это обнаружить. Также я изучаю возможность добавления функций позже, чтобы, возможно, отключить мои интернет-соединения и т. Д., Когда что-то отключено. Это, возможно, иррациональная функция, но поскольку это всего лишь персональный сценарий, я думаю, что это не так уж плохо: P.

То, что я хочу достичь

Так что мой главный вопрос заключается. После первого запуска я сохраню массив всей файловой системы и их метаданных (данные о создании, дата изменения). После этого я хочу, чтобы демон запускался в фоновом режиме в режиме «просмотра», фактически отражая последний известный хранимый массив файловой системы с новым зацикленным. Проблема теперь в том, что когда я запускаю скрипт для тестирования, он начинает запускать мой процессор, что заставляет MacBook начинать получать икоту через некоторое время. Я хочу добавить спать между каждым шагом в каталоге «os.walk()» в моем цикле for. Мой вопрос: что такое правильное время сна? Дисковая утилита MacBook говорит, что у меня есть 183.867 папок и 1.013.320 файлов, что составляет в общей сложности 1.197.187 записей (так как файлы также являются файлами). Поэтому установка моего кода:

time.sleep(0.001) 

..would приблизительно принимает это 1.2Million записи, которые будут рассматриваться в течение примерно 2 минут. Я не знаю, насколько это хорошо, и я предпочитаю делать его более динамично на основе общего количества файлов/папок.

Дополнительная функция Основываясь на моем вопросе, я заметил, что дисковая утилита OS X уже знает мои полные файлы и папки. Может ли Python получить эти данные, не делая чрезмерного цикла? Возможно, вызов функции терминала, встроенной в OS X. Таким образом, я мог бы также сохранить индикатор, если вы используете небольшой графический интерфейс для моего статуса Daemon.

Заранее благодарен!

+0

Как предостережение, я построил скрипт python для мониторинга удаленного доступа к Windows для новых файлов (не спрашивайте). Эта вещь безумно неэффективна, и в оригинальной версии все время использовалось 70-100 процессоров, так как люди хотели «мгновенной» работы, если файл был удален. Используйте структуру уведомлений. –

ответ

2

Это не прямой ответ, но направлен на требование отслеживать:

Newly made files/dirs 
Adjusted/touched files/dirs 
Deleted files (maybe) 

Вы можете использовать: http://pyinotify.sourceforge.net/, который связывает с Inotify и будет посылать события на изменения файлов, удаление и создание. Это позволит избежать прогулок по большим каталогам.

Это обертка над Inotify. Это доступно для Linux. Я также вижу, что есть библиотеки и модули для OSX в fink и macports. Поэтому это должно быть более элегантное решение.

+0

Привет, спасибо за ответ. Я не мог получить уведомление о работе на моем Fink, MacPorts или Homebrew. Я просто нашел это: fseventer (http://www.fernlightning.com/doku.php?id=software%3afseventer%3astart). Разработчик также сделал инструмент командной строки. Я думаю, это было бы неплохо начать. Он использует вид той же системы ответов ядра, когда изменения производятся в файловой системе. Я думаю, что я попытаюсь использовать это из функции вызова Objective-C или Python :). –

+0

@Allendar: Спасибо. Просто проверил альтернативу, похожую и родную OSX. Это должен быть путь. У меня был опыт работы с системой Linux, поэтому был дан ответ, но он хотел избежать os.walk(), который строго ограничивает требуемую функциональность. – pyfunc

1

Не полный ответ, но несколько указателей:

Для OSX, fseventsd реализует механизм, аналогичный Inotify. fslogger - пример того, как его можно использовать. pymacadmin, похоже, позволяет вам связать его с Python.

То, что вы хотите реализовать, аналогично Tripwire.

Смежные вопросы