lsof - 출력을 실제 파일로만 제한합니다. - 어떻게?

lsof - 출력을 실제 파일로만 제한합니다. - 어떻게?

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/*`

관련 정보