Что означает это сообщение об ошибке: lsof: ПРЕДУПРЕЖДЕНИЕ: невозможно stat() файловая система fuse.gvfs-fuse-daemon /home/nes/.gvfs

Когда я использую lsof с sudo, как это

sudo lsof ~


lsof: WARNING: can't stat() fuse.gvfs-fuse-daemon file system /home/nes/.gvfs
      Output information may be incomplete.

Однако, когда я использую его без sudo, я не получаю эту ошибку.

Что означает это сообщение?

2 ответа

Решение

Виртуальная файловая система FUSE смонтирована на ~/.gvfs,

Для большинства обращений к файловой системе разрешения игнорируются для пользователя root. Однако монтирование виртуальной файловой системы FUSE является одним из редких исключений. Виртуальные файловые системы FUSE обычно ограничены пользователем, который их смонтировал.

В этом случае gvfs-fuse-daemon Команда (запускаемая как часть сеанса рабочего стола) создала это монтирование, принадлежащее вам, и никто другой не сможет получить к нему доступ, включая root.

В Unix и Linux есть аналогичный вопрос : lsof: ПРЕДУПРЕЖДЕНИЕ: невозможно использовать файловую систему stat() Fuse.gvfsd-fuse. У него есть два интересных ответа, которые я цитирую ниже.

пабук - Украина оставайся сильной ответ :

FUSE и его права доступа

по умолчанию проверяет все смонтированные файловые системы, включая — файловые системы, реализованные в пространстве пользователя, которые имеют специальные права доступа в Linux.

Как вы можете видеть в этом ответе на Ask Ubuntu, смонтированная файловая система (частный случай FUSE) обычно доступна только пользователю, который ее смонтировал (владельцуgvfsd-fuse). Дажеrootне может получить к нему доступ. Чтобы обойти это ограничение, можно использовать параметры монтирования.allow_rootиallow_other. Опцию также необходимо включить в демоне FUSE, который описан, например, в этом ответе ... но в вашем случае вам не нужно (и не следует) менять права доступа.

Исключение файловых систем из lsof

В вашем случае не нужно проверять файловые системы GVFS, поэтому вы можете исключить обращения к ним с помощью команды-eвариант (или вы можете просто игнорировать предупреждение):

       lsof -e /run/user/1000/gvfs

Проверка определенных файлов с помощью lsof

Вы используете для получения информации обо всех процессах, запущенных в вашей системе, и только затем фильтруете полный вывод, используяgrep. Если вы хотите проверить только определенные файлы и связанные с ними процессы, используйте команду-fпараметр без значения, следующего за ним, затем укажите список файлов после разделителя «конец параметров».--. Это будет значительно быстрее.

       lsof -e /run/user/1000/gvfs -f -- /tmp/report.csv

Общее решение

Чтобы исключить все смонтированные файловые системы, в которых произошел сбой, вы можете запустить что-то вроде этого (вbash):

       x=(); for a in $(mount | cut -d' ' -f3); do test -e "$a" || x+=("-e$a"); done
lsof "${x[@]}" -f -- /tmp/report.csv

Или чтобы обязательно использоватьstat()(test -eможно реализовать по-другому):

       x=(); for a in $(mount | cut -d' ' -f3); do stat --printf= "$a" 2>/dev/null || x+=("-e$a"); done

Ответ Жиля «ТАК- перестань быть злым» :

lsofвсегда пытается получить некоторую базовую информацию обо всех файловых системах, даже если аргументы подразумевают, что от конкретной файловой системы не будет получено никакого результата. Если он не может получить доступ к файловой системе (в частности, для вызоваstatв точке монтирования, как говорится в сообщении), он жалуется.

Как root, вы обычно имеете разрешение на доступ к файловым системам. Однако из-за внутренней работы FUSEFUSE root не имеет автоматически всех полномочий в файловой системе FUSE. Это не функция безопасности (пользователь root может стать пользователем, владеющим файловой системой, и таким образом получить доступ), это техническое ограничение.

GVFS-FUSE — это интерфейс FUSE для GVFSGVFS , который представляет собой механизм, который позволяет приложениям Gnome получать доступ к виртуальным файловым системам, реализованным плагинами Gnome: GVFS предоставляет приложениям, не принадлежащим Gnome, доступ к этим виртуальным файловым системам через обычный интерфейс файловой системы.

Другие вопросы по тегам