Команда Lsof в режиме повтора без интервала

814
updude

Как вы можете установить время lsof до 1 секунды? На lsof -r (режим повтора) минимальное значение равно 1 секунде? Есть ли способ иметь непрерывный мониторинг с lsof без интервалов между 2 последовательными командами lsof, чтобы проверить, какой пользователь получил доступ к конкретному файлу?

1

2 ответа на вопрос

1
John1024

Чтобы в режиме реального времени отслеживать доступ к любому файлу в текущем каталоге, откройте терминал и запустите:

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 -csvвместе с большим количеством кода, который понимает тонкости формата CSV.

1
Zlemini

Если вы не inotifywaitустановили (что идеально подходит для этого), то вы можете приблизиться к режиму реального времени, если объедините lsofс watch:

$ watch -n0.1 lsof

Это обновляет каждую 0.1секунду.

Похожие вопросы