lsof: 읽고 쓰기 위해 열린 파일 표시

lsof: 읽고 쓰기 위해 열린 파일 표시

파티션을 으로 다시 마운트하려고 하면 read-only오류가 발생합니다 /foo is busy. 열려 있는 모든 /foo파일을 나열할 수 있습니다.

lsof /foo

read-only하지만 파일이 열려 있는지 여부 는 알려주지 않습니다 read-write. 열려 있는 파일만 나열하는 방법이 있습니까 read-write?

답변1

이 질문에 구체적으로 답하려면 다음과 같이 하십시오.

lsof /foo | awk 'NR==1 || $4~/[0-9]+u/'

read-write그러면 마운트 지점 아래에 열려 있는 파일이 표시됩니다 foo. 그러나 실제로 하고 싶은 일은 쓰기 위해 열려 있는 모든 파일을 나열하는 것입니다. 여기에는 열린 파일 write-only뿐만 아니라 열린 파일도 포함됩니다 read-write. 이렇게 하려면 다음을 수행합니다.

lsof /foo | awk 'NR==1 || $4~/[0-9]+[uw]/'

FD출력의 네 번째 필드가 비어 있고 다른 필드가 비어 있지 않은 경우 이러한 명령이 작동합니다. Debian에서 명령에 경로를 포함할 때 이런 경우가 있습니다 lsof. 그러나 경로를 포함하지 않으면 TID때로는 비어 있는(그리고 혼란스러울 수 있는 awk) 추가 필드가 인쇄됩니다. 마일리지는 릴리스 또는 버전에 따라 lsof달라질 수 있습니다.

답변2

FD출력에서 열 값을 봅니다 lsof. 예를 들어:

sudo lsof +d /foo

맨페이지에서는 해석을 설명합니다. 'r'은 읽기를 의미하고 'w'는 읽기-쓰기 액세스를 의미합니다.

이는 관심 있는 개체를 나열하는 데 쉽게 사용할 수 있습니다.

sudo lsof +d /foo | awk '/$4~/u/ {print $NF}'   

답변3

파일에 대한 읽기 및 쓰기 액세스 권한이 있는 List 프로세스를 사용하는 데는 행운이 없었지만 lsof(빌드에서 옵션을 무시했을 수도 있음 lsof) 결국 발견했습니다.디지털 바다에 대한 이 가이드이 정보를 얻기 위해 사용하는 방법을 보여줍니다 fuser.

다음은 Ubuntu 16.04 상자의 일부 테스트 출력입니다.

$ sudo fuser -v /etc/os-release

                     사용자 PID 액세스 명령
/usr/lib/os-release: 루트 827 f.... snapd

$ sudo fuser -v /proc/kmsg

                     사용자 PID 액세스 명령
/proc/kmsg: syslog 989 f....rsyslogd

에서 언급했듯이가이드:

위 출력은 상세 모드에서 실행될 때 퓨즈 유틸리티가 USER, PID, ACCESS 및 COMMAND에 대한 정보를 제공한다는 것을 보여줍니다. e(실행 파일 실행), r(루트 디렉터리), f(파일 열기. 기본 표시 모드에서는 F가 생략됨), F(쓰기용 파일 열기, 기본 표시 모드에서는 F가 생략됨) 등 다양한 액세스 유형이 있습니다. ) 등(mmap된 파일 또는 공유 라이브러리).

위의 각 예에서 파일은 읽기 위해 열립니다. 다음은 쓰기 위해 파일을 여는 예입니다.

$ sudo fuser -v /run/systemd/journal/syslog

                     사용자 PID 액세스 명령
/run/systemd/log/syslog:
                     루트 1 F....systemd
                     시스템 로그 989 F....rsyslogd

systemd여기서는 둘 다 "파일"(이 경우 소켓)에 대한 rsyslogd쓰기 액세스 권한을 갖고 있음 을 볼 수 있습니다 ./run/systemd/journal/syslog

관련 정보