Я написал скрипт, который каждый час проверяет все php-файлы в заданной папке на наличие изменений, чтобы я мог обнаруживать возможные инъекции кода и их целостность. Пока это работает, но мой подход кажется немного медленным и слишком много вилок ls
процессы. Вот код:
/usr/bin/find /home/www -name "*.php" -exec ls -l \{} \;
Есть ли способ лучше?
Обратите внимание: мне нужен как минимум полный путь, разрешения, владелец, группа и время изменения для каждого из файлов.
Спасибо!
У 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
Использование: 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
Возможно, вы захотите взглянуть на помощник. Он делает именно то, что вы описываете, и предлагает еще несколько функций.