Что означает это сообщение об ошибке: 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, доступ к этим виртуальным файловым системам через обычный интерфейс файловой системы.