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

lsof для файлов, открытых другими пользователями

Как посмотреть список открытых файлов (lsof) в конкретном каталоге и другими пользователями?

я могу сделать lsof +D /path, но это показывает только файлы текущего пользователя.

Есть ли способ узнать, открывали ли другие пользователи файлы в каталоге?

Поскольку недавно у меня возник аналогичный вопрос, я хотел бы поделиться своими выводами и здесь. Также предполагается, что пользователь root и как упоминалось в других ответах.

Список открытых файлов в определенном каталоге

lsof +D /var/log/

покажет файлы, открытые всеми пользователями.

Указание пользователя

lsof -u ${USER} +D /var/log/

покажет все файлы от пользователя ИЛИ в определенном каталоге (... И независимо от пользователя).

Это из-за и как указано в man lsof:

Поскольку они представляют собой исключения, они применяются без операций ИЛИ или И и вступают в силу до применения любых других критериев выбора.

Параметр -a может использоваться для И для выбора. Например, указание -a, -U и -ufoo создает список только файлов сокетов UNIX, принадлежащих процессам, принадлежащим пользователю `` foo ''.

Чтобы перечислить открытые файлы от пользователя И только в определенном каталоге

lsof -u ${USER} -a +D /var/log/ 

Затем можно перечислить открытые файлы, которые НЕ являются пользователем И в определенном каталоге.

lsof -u ^${USER} -a +D /var/log/ 

Этот подход также хорошо работает для сетевых подключений. Т.е. если вас интересуют все соединения TCP или UDP, которые открываются НЕ под запущенными корневыми процессами

lsof -u ^root -P -i TCP -i UDP

Чтобы решить проблему с пользователем без полномочий root, sudo и sudoers будет необходимо Определить sudo вызывающий пользователь.

Перечислить все открытые файлы в определенном каталоге И открытые от пользователя

sudo lsof -u $(who | cut -d " " -f 1) -a +D /usr/lib/

в противном случае он будет показывать открытые файлы ИЛИ в каталоге И независимо от пользователя.

Перечислить все открытые файлы в определенном каталоге, НЕ открытые указанным пользователем

sudo lsof -u ^$(who | cut -d " " -f 1) +D /usr/lib/

Вы не можете этого сделать, если не выполняете это как root.

Если хотите, можете настроить sudo alias для lsof, но это было бы либо очень общее.

Т.е. этот пользователь может видеть все lsof вывод или очень конкретный, поскольку этот пользователь может видеть только этого другого пользователя lsof -u user вывод.

Я предполагаю, что вы запускаете как root / можете sudo как root lsof:

lsof -u www-data