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


30

lsof에게 실제 파일 (소켓이 아닌, TCP / IP 연결이 아닌, 실제 파일 만)을 나열해야한다고 어떻게 알 수 있습니까?


먼저 필요한 것을 결정해야합니다. "실제 파일"을 말하는 것은 너무 일반적입니다. lsof는 파일 디스크립터로 열린 파일을 제공합니다. 스레드에 의해 메모리 매핑 파일로 열린 파일을 제공합니다. 프로세스에 의해 열린 라이브러리 파일을 제공합니다. 이 파일들은 모두 실제 파일이지만 사용되는 방식이 다릅니다.
Michael Martinez

답변:


37

일부 매뉴얼 페이지를 살펴보면 다음 명령을 사용하는 것처럼 보입니다.

sudo lsof /

이것은 / 디렉토리의 모든 열린 파일을 나열합니다. 이것은 Linux 파일 시스템의 모든 것입니다. 방금 테스트했으며 REG 및 DIR 만 표시됩니다.

더 많은 예 :

lsof -a -d 0-999 -c <command name> /
lsof -a -d 0-999 -p <pid> /

0-999는 파일 설명자 번호가있는 파일로 제한합니다.


2
FIFO도 포함됩니다.
Kyle Brandt

1
좋고 간단합니다. 마지막 열만 필요한 경우 | awk { 'print $ 9'} 흥미 롭습니다. 나는 출력물에 fifo를 얻지 못한다. 페도라 12와 CentOS 5.3
egorgry

CentOS 5.2와 Ubuntu 9.04는 fifo를 반환합니다. 변경 될 수 있지만 fifo가 있습니까? 나는 그것을 시도해 보는 것보다 먼저 그것을 grep하고 그것이 있는지 확인합니다/
Kyle Brandt

또한, 나는 단지 nitpicking하고 있었고, 그는 단지 소음을 원하지 않는 것처럼 들리며 아마도 많은 fifo가 없을 것입니다.
Kyle Brandt

4
lsof /는 루트 파일 시스템의 파일 만 포함합니다. 여러 파일 시스템이 마운트되어 있으면 출력에 나타나지 않습니다. 가장 좋은 방법은 grep을 사용하는 것입니다.
James

9

스위치가있을 수 있지만 grep을 통해 필터링하지 않아도 sudo lsof | egrep 'REG|DIR'되는 경우 "실제 파일"이라고 가정하면 일반 파일과 디렉토리를 의미합니다.

man lsof해당 열에있을 수있는 모든 유형 에 대해서는 매뉴얼 페이지의 OUTPUT :: TYPE 섹션을 참조하십시오 .


24
스위치가있을 수 있지만 맨 페이지는 누군가의 박사 학위 논문처럼 읽습니다 ... :)
Cawflands

1
예 .. lsof 사람은 읽기가 매우 어렵습니다 ...; p)
Vladislav Rastrusny

해당 댓글을 +1합니다. :)
egorgry

충분한 고객과 VPN 서버, lsof를 나를 위해 옵션이 아닙니다 그래서 greping, 반환하지 않습니다
오 하드 코헨

찾고있는 것을 제한하면 @OhadCohen lsof가 반환됩니다. 맨 페이지의 "FD"(mem, cwd, pd 등)
Michael Martinez

2

이것은 내가 완벽하게 일한 것입니다.

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중복 항목을 제거합니다.

한 가지주의 할 점은 이름이로 시작하는 한 규칙적 이지 않은 파일을 포함합니다 /. 예를 들어 다음으로 시작하는 모든 파일이 포함됩니다.

  • / dev
  • / proc
  • / sys

OS에 따라 다른 것이있을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.