BEZPIECZNIK i jego prawa dostępu
lsofdomyś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). Nawet rootnie ma do niego dostępu. Aby ominąć to ograniczenie, można użyć opcji montowania allow_rooti allow_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 lsofnie musisz sprawdzać systemów plików GVFS, abyś mógł wykluczyć stat()wywołania z nich za pomocą -eopcji (lub możesz po prostu zignorować ostrzeżenie):
lsof -e /run/user/1000/gvfs
Sprawdzanie niektórych plików przez lsof
Używasz, lsofaby 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 -fopcji bez wartości bezpośrednio po niej, a następnie podaj listę plików po separatorze „koniec opcji” --. Będzie to znacznie szybsze.
lsof -e /run/user/1000/gvfs -f -- /tmp/report.csv
Ogólne rozwiązanie
Aby wykluczyć wszystkie zamontowane systemy plików, w których stat()nie działa, możesz uruchomić coś takiego bash:
x=(); for a in $(mount | cut -d' ' -f3); do test -e "$a" || x+=("-e$a"); done
lsof "${x[@]}" -f -- /tmp/report.csv
Lub dla pewności użycia stat()( test -emoże być zaimplementowany w inny sposób):
x=(); for a in $(mount | cut -d' ' -f3); do stat --printf= "$a" 2>/dev/null || x+=("-e$a"); done
lsof(bez|i grep)?