Команда Lsof в режиме повтора без интервала
Как вы можете установить время lsof до 1 секунды? На lsof -r (режим повтора) минимальное значение равно 1 секунде? Есть ли способ иметь непрерывный мониторинг с lsof без интервалов между 2 последовательными командами lsof, чтобы проверить, какой пользователь получил доступ к конкретному файлу?
2 ответа
Если у вас нет inotifywait
установлен, (что идеально подходит для этого), то вы можете приблизиться к режиму реального времени, если вы объедините lsof
с watch
:
$ watch -n0.1 lsof
Это обновляет каждый 0.1
секунды.
Чтобы в режиме реального времени отслеживать доступ к любому файлу в текущем каталоге, откройте терминал и запустите:
inotifywait -r -m -e access --format '%w%f' . | while IFS='' read -r fname; do [ -f "$fname" ] && lsof "$fname"; done
Или, как разбито на несколько строк:
inotifywait -r -m -e access --format '%w%f' . | while IFS='' read -r fname
do
[ -f "$fname" ] && lsof "$fname"
done
Для этого требуется ОС, такая как Linux, которая поддерживает inotifywait
,
Тело while
Цикл можно заменить на все, что подходит для ваших целей.
Значение вариантов inotifywait
являются:
-r
Мониторинг рекурсивно через подкаталоги.
-m
Мониторинг непрерывно.
-e access
Мониторинг событий ACCESS. Есть много возможных событий, которые могут представлять интерес, но это, кажется, наиболее близко соответствует тому, что вы просили.
--format '%w%f'
Запишите путь и файл каждого файла, к которому осуществляется доступ, к стандартному выводу.
.
Отслеживать текущий каталог,
.
,
ограничение
Приведенный выше код не обрабатывает имена файлов, которые содержат символы новой строки. Чтобы справиться с этим, нужно использовать inotifywait's -csv
опция вместе с большим количеством кода, который понимает тонкости формата CSV.