파티션을 으로 다시 마운트하려고 하면 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