여기서 무슨 일이 일어나고 있는 걸까요?
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.
답변1
FUSE 및 해당 액세스 권한
lsof
기본적으로 다음을 포함하여 마운트된 모든 파일 시스템이 검사됩니다.퓨즈- Linux에서 특별한 접근 권한을 가진 사용자 공간에 구현된 파일 시스템입니다.
당신이 본대로Ask Ubuntu에 대한 답변설치됨중력 가속도 센서파일 시스템(FUSE의 특별한 경우)은 일반적으로 이를 설치한 사용자(소유자 gvfsd-fuse
)만 액세스할 수 있습니다. 접근 조차 root
불가능합니다. 이 제한을 무시하려면 설치 옵션 allow_root
및 를 사용할 수 있습니다 allow_other
. 이 옵션은 이 섹션에 설명된 대로 FUSE 데몬에서도 활성화되어야 합니다.답변...하지만 귀하의 경우에는 액세스 권한을 변경할 필요가 없으며 변경해서는 안 됩니다.
lsof에서 파일 시스템 제외
귀하의 경우에는 lsof
GVFS 파일 시스템을 확인할 필요가 없으므로 stat()
다음 옵션을 사용하여 해당 파일 시스템에 대한 호출을 제외 할 수 있습니다 -e
(또는 경고를 무시할 수 있습니다):
lsof -e /run/user/1000/gvfs
lsof를 통해 일부 파일 확인
을 사용하여 lsof
시스템에서 실행 중인 모든 프로세스에 대한 정보를 얻은 다음 전체 출력 필터링을 사용합니다 grep
. 특정 파일만 확인하고 해당 프로세스가 -f
해당 값을 직접 따르지 않고 옵션을 사용하는 경우 "옵션 끝" 구분 기호 뒤에 파일 목록을 지정합니다 --
. 훨씬 더 빨라질 것입니다.
lsof -e /run/user/1000/gvfs -f -- /tmp/report.csv
범용 솔루션
실패한 마운트된 모든 파일 시스템을 제외하려면 stat()
다음과 같은 명령을 실행할 수 있습니다( 에서 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
답변2
lsof
매개변수가 특정 파일 시스템을 암시하는 경우에도 항상 모든 파일 시스템에 대한 일부 기본 정보를 얻으려고 시도하면 결과가 생성되지 않습니다. 파일 시스템에 액세스할 수 없으면 메시지가 표시됩니다(구체적으로는 stat
메시지에 표시된 것처럼 마운트 지점을 호출할 수 없습니다).
루트로서 일반적으로 파일 시스템에 액세스할 수 있습니다. 하지만 내부 작업으로 인해퓨즈, 루트는 FUSE 파일 시스템에 대한 모든 권한을 자동으로 가지지 않습니다. 이는 보안 기능이 아니며(루트는 파일 시스템을 소유한 사용자가 될 수 있으며 해당 방식으로 액세스할 수 있음) 기술적인 제한 사항입니다.
GVFS-FUSE는 FUSE 인터페이스입니다.중력 가속도 센서, Gnome 응용 프로그램이 Gnome 플러그인으로 구현된 가상 파일 시스템에 액세스할 수 있도록 하는 메커니즘: GVFS는 일반 파일 시스템 인터페이스를 통해 비 Gnome 응용 프로그램에 이러한 가상 파일 시스템에 대한 액세스 권한을 부여합니다.