我目前正在使用Python的功能,
os.walk('/')
在OS X上遍历我的整个文件系统。我的目标是创建一个跟踪的个人守护程序:
想法
这更像是我想要添加到我的Mac上的预防功能,以便能够看到奇怪的东西是否被放置在我的目录中,所以如果我的Mac感染了一些(但未知的)木马我可以检测到我自己已经。 此外,我正在考虑稍后添加功能,以便在检测到某些关闭时关闭我的互联网连接等。这可能是一个非理性的功能,但因为它只是一个个人脚本,我认为它并不坏:P。
我想要实现的目标
所以我的主要问题是。第一次运行后,我将保存整个文件系统及其元数据的数组(创建数据,修改日期)。之后,我希望守护进程以“观察”模式在后台运行,实际上使用新循环的镜像镜像文件系统的最后一个已知存储数组。 现在的问题是,当我运行脚本进行测试时,litteraly开始烧掉我的CPU,让我的MacBook在一段时间后开始出现打嗝。我想在每个目录步骤之间添加睡眠步骤“os.walk()”在我的for循环中进行。 我的问题是:什么是正确的睡眠时间?我的MacBook的磁盘实用程序说我有183.867个文件夹和1.013.320个文件,总共有1.197.187个条目(因为文件夹实际上也是文件)。所以将我的代码设置为:
time.sleep(0.001)
..大约需要在大约2分钟内处理这些1.2万条记录。我不知道这是不是很好,我更喜欢根据文件/文件夹的总数来更加动态。
额外功能 根据我的问题,我注意到OS X磁盘工具已经知道我的文件和文件夹总数。 Python可以在不进行极端循环的情况下获取此数据吗?也许调用内置于OS X的终端功能。 这样,如果我的守护进程状态使用了一点GUI,我也可以保留一个指示器。
提前致谢!
答案 0 :(得分:2)
这不是一个直接的答案,而是针对追踪的要求:
Newly made files/dirs
Adjusted/touched files/dirs
Deleted files (maybe)
您可以使用:http://pyinotify.sourceforge.net/与inotify绑定,并在文件更改,删除和创建时发送事件。这将避免遍历大型目录。
这是Inotify的封装。这适用于Linux。我还看到在fink和macports中有OSX的库和模块。所以这应该是更优雅的解决方案。
答案 1 :(得分:1)
不是一个完整的答案,而是一些指示:
对于OSX,fseventsd实现了与inotify类似的机制。 fslogger是如何使用它的一个例子。 pymacadmin似乎允许您将其与Python接口。
您要实施的内容与Tripwire类似。