Что именно здесь происходит?
root@bob-p7-1298c:/# ls -l /tmp/report.csv && lsof | grep "report.csv"
-rw-r--r-- 1 mysql mysql 1430 Dec 4 12:34 /tmp/report.csv
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.
privileges
lsof
fuse
jmunsch
источник
источник
lsof
(без|
и grep)?lsof
выводит большой список открытых файлов. Я думаю, что это побочный вопрос. Я подумал, что, возможно, файл был открыт процессом, и это могло быть причиной того, что root не смог переместить файл, но это не так. Отсюда и путаница.can't stat...
это другая проблема. Я предполагаю, что настоящая проблема -No such file or directory
ошибка, которую вы получаете. Это может показаться идиотским, но существует ли местоположение / home / bob / Desktop?Ответы:
FUSE и его права доступа
lsof
по умолчанию проверяет все смонтированные файловые системы, включая FUSE- файловые системы, реализованные в пространстве пользователя, которые имеют специальные права доступа в Linux.Как вы можете видеть в этом ответе в Ask Ubuntu, смонтированная файловая система GVFS (особый случай FUSE) обычно доступна только пользователю, который ее смонтировал (владельцу
gvfsd-fuse
). Дажеroot
не может получить к нему доступ. Чтобы отменить это ограничение, можно использовать параметры монтированияallow_root
иallow_other
. Эта опция также должна быть включена в демоне FUSE, который описан, например, в этом ответе ... но в вашем случае вам не нужно (и не нужно) изменять права доступа.Исключая файловые системы из lsof
В вашем случае
lsof
не нужно проверять файловые системы GVFS, чтобы вы могли исключитьstat()
вызовы на них, используя-e
опцию (или вы можете просто проигнорировать сохранение):Проверка определенных файлов с помощью lsof
Вы используете
lsof
для получения информации обо всех процессах, запущенных в вашей системе, и только тогда вы фильтруете весь вывод, используяgrep
. Если вы хотите проверить только определенные файлы, и связанные процессы используют-f
параметр без значения, непосредственно следующего за ним, укажите список файлов после разделителя «end of options»--
. Это будет значительно быстрее.Общее решение
Чтобы исключить все смонтированные файловые системы, в которых происходит
stat()
сбой, вы можете запустить что-то вроде этого (вbash
):Или, чтобы быть уверенным, использовать
stat()
(test -e
может быть реализован по-другому):источник
lsof
всегда пытается получить некоторую базовую информацию обо всех файловых системах, даже если аргументы предполагают, что из конкретной файловой системы не будет получен результат. Если он не может получить доступ к файловой системе (в частности, для вызоваstat
в точке монтирования, как говорится в сообщении), он жалуется.Как пользователь root, вы обычно имеете разрешение на доступ к файловым системам. Однако из-за внутренней работы FUSE root не обладает автоматически всеми правами на файловую систему FUSE. Это не функция безопасности (root может стать пользователем, который владеет файловой системой и получает доступ таким образом), это техническое ограничение.
GVFS-FUSE представляет собой интерфейс FUSE для GVFS , который представляет собой механизм, который позволяет приложениям Gnome получать доступ к виртуальным файловым системам, реализованным плагинами Gnome: GVFS предоставляет приложениям без Gnome доступ к этим виртуальным файловым системам через обычный интерфейс файловой системы.
источник