lsof에 물리적 파일(소켓이 아닌, TCP/IP 연결이 아닌 물리적 파일만)만 나열해야 한다고 어떻게 알 수 있나요?
답변1
일부 매뉴얼 페이지를 살펴보면 다음 명령을 사용하는 것으로 보입니다.
sudo lsof /
그러면 Linux 파일 시스템의 모든 항목인 / 디렉터리에 열려 있는 모든 파일이 나열됩니다. 방금 테스트했는데 REG와 DIR만 표시되었습니다.
더 많은 예:
lsof -a -d 0-999 -c <command name> /
lsof -a -d 0-999 -p <pid> /
0-999는 파일 설명자 번호가 있는 파일로 제한됩니다.
답변2
스위치가 있을 수 있지만 grep을 통해 필터링해도 괜찮다면 sudo lsof | egrep 'REG|DIR'
"물리적 파일"이 일반 파일과 디렉터리를 의미한다고 가정하고 그렇게 할 수 있습니다.
man lsof
해당 열에 있을 수 있는 모든 유형에 대해서는 매뉴얼 페이지의 OUTPUT :: TYPE 섹션을 참조하세요 .
답변3
이것은 나에게 완벽하게 효과가 있었던 내가 한 일입니다.
lsof -F n -p 12501 | grep ^n/ | cut -c2- | sort -u
옵션 -F n
을 사용하면 lsof
다음 내용만 인쇄됩니다.이름열린 파일 중. 열린 파일의 이름을 가진 각 출력 줄은 단일 문자로 시작됩니다.N바로 이어서이름.정기적인files는 항상 파일의 완전하고 완전한 이름입니다. 는 이름이 a (절대적이고 완전한 파일 이름을 의미함) grep ^n/
로 시작하는 행만 선택합니다 . /
따라서 열린 포트, 소켓, 파이프(예: FIFO) 등과 같은 항목이 제거됩니다. 는 cut -c2-
첫 번째 문자인 을 제거 n
하고 파일 이름만 남깁니다. 그런 다음 마지막으로 sort -u
중복 항목이 제거됩니다.
한 가지 주의할 점은 여기에는 다음과 같은 파일이 포함됩니다.정기적인이름이 /
. 예를 들어 다음으로 시작하는 모든 파일이 포함됩니다.
- /개발자
- /proc
- /sys
그리고 OS에 따라 다른 항목이 있을 수도 있습니다.
답변4
이를 사용하면 lsof /
/ 아래에 직접 마운트된 파일 시스템의 열린 파일만 나열됩니다. 즉, /home이 / 아래에 마운트된 경우 해당 내용은 무시됩니다. lsof에 대한 다양한 옵션 조합을 시도했지만 모두 문제가 있었습니다. 내가 생각해 낼 수 있는 최선의 방법은 다음과 같습니다.
lsof `readlink -f /dev/block/*`
이는 readlink -f를 사용하여 모든 블록 장치를 가져와서 검색할 목록으로 제공합니다. lsof는 마운트되지 않은 것을 무시합니다.
검색을 제한하는 다른 옵션(예: pid)이 있는 경우 lsof 명령을 to -a
및 블록 장치 목록과 함께 종료해야 합니다.
lsof -p 982482 -a `readlink -f /dev/block/*`