lsof에게 실제 파일 (소켓이 아닌, TCP / IP 연결이 아닌, 실제 파일 만)을 나열해야한다고 어떻게 알 수 있습니까?
lsof에게 실제 파일 (소켓이 아닌, TCP / IP 연결이 아닌, 실제 파일 만)을 나열해야한다고 어떻게 알 수 있습니까?
답변:
일부 매뉴얼 페이지를 살펴보면 다음 명령을 사용하는 것처럼 보입니다.
sudo lsof /
이것은 / 디렉토리의 모든 열린 파일을 나열합니다. 이것은 Linux 파일 시스템의 모든 것입니다. 방금 테스트했으며 REG 및 DIR 만 표시됩니다.
더 많은 예 :
lsof -a -d 0-999 -c <command name> /
lsof -a -d 0-999 -p <pid> /
0-999는 파일 설명자 번호가있는 파일로 제한합니다.
/
스위치가있을 수 있지만 grep을 통해 필터링하지 않아도 sudo lsof | egrep 'REG|DIR'
되는 경우 "실제 파일"이라고 가정하면 일반 파일과 디렉토리를 의미합니다.
man lsof
해당 열에있을 수있는 모든 유형 에 대해서는 매뉴얼 페이지의 OUTPUT :: TYPE 섹션을 참조하십시오 .
이것은 내가 완벽하게 일한 것입니다.
lsof -F n -p 12501 | grep ^n/ | cut -c2- | sort -u
이 -F n
옵션을 사용 lsof
하면 열려있는 파일 의 이름 만 인쇄 합니다. 열린 파일 이름을 가진 각 출력 행은 단일 문자 n으로 시작하고 그 뒤에 바로 name이옵니다 . 일반 파일은 항상 파일의 완전한 정규화 된 이름입니다. 는 grep ^n/
이름이 a로 시작 만 그 라인을 선택합니다 /
(절대, 완전한 파일 이름을 의미); 따라서 열린 포트, 소켓, 파이프 (FIFO와 같은) 등 cut -c2-
을 제거합니다. 첫 번째 문자 인을 제거 n
하고 파일 이름 만 남겨 둡니다. 그런 다음 마지막으로 sort -u
중복 항목을 제거합니다.
한 가지주의 할 점은 이름이로 시작하는 한 규칙적 이지 않은 파일을 포함합니다 /
. 예를 들어 다음으로 시작하는 모든 파일이 포함됩니다.
OS에 따라 다른 것이있을 수 있습니다.