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
). Nawet root
nie ma do niego dostępu. Aby ominąć to ograniczenie, można użyć opcji montowania allow_root
i 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 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):
lsof -e /run/user/1000/gvfs
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.
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 -e
moż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)?