Как посмотреть список открытых файлов (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