我确实编写了一个脚本,每小时检查给定文件夹中的所有 php 文件是否有更改,这样我就可以检测可能的代码注入及其完整性。到目前为止,它运行正常,但我的方法似乎有点慢,并且分叉了太多ls
进程。以下是代码:
/usr/bin/find /home/www -name "*.php" -exec ls -l \{} \;
有没有更好的办法?
请注意,我至少需要每个文件的完整路径、权限、所有者、组和修改时间。
谢谢!
答案1
Find 有一个内置操作“-ls”,可以满足您的需要(见下文)。如果这不是您想要的信息,您还可以使用 -printf 和格式指令精确控制打印的内容。
james@Brindle:/tmp/blah$ time /usr/bin/find . -name "*.php" -exec ls -l \{} \;
-rw-r--r-- 1 james wheel 0 8 Jul 08:50 ./other.php
-rw-r--r-- 1 james wheel 0 8 Jul 08:50 ./thing.php
real 0m0.015s
user 0m0.005s
sys 0m0.008s
james@Brindle:/tmp/blah$ time find . -ls
1631212 0 drwxr-xr-x 4 james wheel 136 8 Jul 08:50 .
1631215 0 -rw-r--r-- 1 james wheel 0 8 Jul 08:50 ./other.php
1631213 0 -rw-r--r-- 1 james wheel 0 8 Jul 08:50 ./thing.php
real 0m0.006s
user 0m0.002s
sys 0m0.003s
答案2
使用:find /home/www/ -type f -mmin -60 -iname '*.php'
-type f
将加快检查速度,因为它仅限于文件。
-mmin -60
是 60 分钟前修改的所有文件。
xargs
如果您需要更多信息,则可以通过以下方式进行传输:find /home/www/ -type f -mmin -60 -iname '*.php' | xargs stat
答案3
你可能想看看助手。它确实实现了您所描述的功能,并且还带来了一些其他功能。