Назад | Перейти на главную страницу

Список всех файлов php внутри папки с датой изменения и разрешениями

Я написал скрипт, который каждый час проверяет все 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

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