Co się tu właściwie dzieje?
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
źródło
źródło
lsof
(bez|
i grep)?lsof
wyświetla dużą listę otwartych plików. Myślę, że to kwestia poboczna. Pomyślałem, że być może plik został otwarty przez proces i mógł to być powód, dla którego root nie mógł przenieść pliku, ale tak nie jest. Stąd zamieszanie.can't stat...
to, że to kolejny problem. Zakładam, że prawdziwym problemem jest występującyNo such file or directory
błąd. Może to zabrzmieć idiotycznie, ale czy istnieje lokalizacja / home / bob / Desktop?Odpowiedzi:
BEZPIECZNIK i jego prawa dostępu
lsof
domyślnie sprawdza wszystkie zamontowane systemy plików, w tym FUSE - systemy plików zaimplementowane w przestrzeni użytkownika, które mają specjalne prawa dostępu w systemie Linux.Jak widać w tej odpowiedzi na Ask Ubuntu, zamontowany system plików GVFS (specjalny przypadek FUSE) jest zwykle dostępny tylko dla użytkownika, który go zamontował (właściciela
gvfsd-fuse
). Nawetroot
nie ma do niego dostępu. Aby ominąć to ograniczenie, można użyć opcji montowaniaallow_root
iallow_other
. Opcja musi być również włączona w demonie FUSE, który jest opisany na przykład w tej odpowiedzi ... ale w twoim przypadku nie musisz (i nie powinieneś) zmieniać praw dostępu.Wyłączając systemy plików z lsof
W twoim przypadku
lsof
nie musisz sprawdzać systemów plików GVFS, abyś mógł wykluczyćstat()
wywołania z nich za pomocą-e
opcji (lub możesz po prostu zignorować ostrzeżenie):Sprawdzanie niektórych plików przez lsof
Używasz,
lsof
aby uzyskać informacje o wszystkich procesach uruchomionych w systemie, a dopiero potem filtrujesz całe dane wyjściowe za pomocągrep
. Jeśli chcesz sprawdzić tylko niektóre pliki i powiązane procesy, użyj-f
opcji bez wartości bezpośrednio po niej, a następnie podaj listę plików po separatorze „koniec opcji”--
. Będzie to znacznie szybsze.Ogólne rozwiązanie
Aby wykluczyć wszystkie zamontowane systemy plików, w których
stat()
nie działa, możesz uruchomić coś takiegobash
:Lub dla pewności użycia
stat()
(test -e
może być zaimplementowany w inny sposób):źródło
lsof
zawsze próbuje uzyskać podstawowe informacje o wszystkich systemach plików, nawet jeśli argumenty sugerują, że żaden system nie uzyska żadnego wyniku. Jeśli nie jest w stanie uzyskać dostępu do systemu plików (w szczególności do wywołaniastat
w punkcie montowania, jak mówi komunikat), narzeka.Jako root zwykle posiadasz uprawnienia dostępu do systemów plików. Jednak ze względu na wewnętrzne działanie FUSE root nie ma automatycznie wszystkich uprawnień w systemie plików FUSE. To nie jest funkcja bezpieczeństwa (root może stać się użytkownikiem, który jest właścicielem systemu plików i uzyskać w ten sposób dostęp), to techniczne ograniczenie.
GVFS-FUSE to interfejs FUSE do GVFS , który jest mechanizmem, który pozwala aplikacjom Gnome na dostęp do wirtualnych systemów plików zaimplementowanych przez wtyczki Gnome: GVFS zapewnia aplikacjom innym niż Gnome dostęp do tych wirtualnych systemów plików za pośrednictwem zwykłego interfejsu systemu plików.
źródło