lsof 명령을 사용하지 않고 열린 파일 디스크립터를 표시하는 방법


48

안녕 나는 읽고 여기에 현재 열려있는 파일 설명 자의 수를 얻기의 정확한 방법 lsof를 아니라고. 대신이 명령을 사용하는 것이 좋습니다

 cat /proc/sys/fs/file-nr

이 명령은 FD의 수를 표시하지만 위의 명령이 계산 한 열린 파일 디스크립터 목록을 어떻게 표시합니까?


4
ulimit가 초과되었는지 알고 싶습니까? 나는 이것에 대해 linuxintro.org/wiki/Is_my_ulimit_exceeded 아래에 블로그를 올렸 습니다 . 가장 중요한 것은 ulimit는 / proc / PID / limits에서 찾을 수있는 프로세스 별 제한이며 lsof 대신 ls / proc / PID / fd를 사용하여 프로세스의 파일 설명자를 나열합니다.
Thorsten Staerk 7

답변:


60

lsof | wc -l파일 디스크립터를 계산하지 않는 두 가지 이유 가 있습니다. 하나는 동적으로 링크 된 라이브러리 및 현재 작업 디렉토리와 같이 파일이 열리지 않은 것을 나열한다는 것입니다. 그것들을 걸러 내야합니다. 다른 하나는 lsof실행 하는 데 시간 이 걸리므로 실행 중에 열거 나 닫은 파일을 놓칠 수 있습니다. 따라서 나열된 열린 ​​파일 수는 대략적인 것입니다. 살펴보면 /proc/sys/fs/file-nr특정 시점에서 정확한 가치 를 얻을 수 있습니다.

cat /proc/sys/fs/file-nr정확한 수치가 필요할 때만 유용하며 주로 리소스 소모를 확인합니다. 열린 파일을 나열하려면을 호출 lsof하거나 /proc/*/fd수동 으로 트롤링과 같은 동등한 방법을 사용해야 합니다.


1
Gilles에 대해 설명해 주셔서 감사합니다. 나는 ls / proc / * / fd를 시도했고 그 당시 열린 모든 fd를 얻었습니다. 약간의 색상 코딩으로 출력물을 생성하기 때문에 매뉴얼을 봐야합니다.
dimas

@dimas /proc/*/fd디렉토리에는 열린 파일에 대한 심볼릭 링크가 포함되어 있습니다. 육안 검사에는을 사용하십시오 ls -l. 자동 처리의 readlink경우 링크 대상을 추출하는 데 사용하십시오.
Gilles 'SO- 악마 그만해'

ls -l을 사용하지만 readlink로 실험 해 보겠습니다. 여기서 kernel.org/doc/man-pages/online/pages/man5/proc.5.html에 지정된 다른 / proc / PID / maps 및 기타 옵션을 시도했습니다 . 추가 정보에 다시 한번 감사드립니다.
dimas

1
/ proc / sys / fs / file-nr은 3872 (및 다른 두 숫자)를 제공합니다. ulimit -n에 1024가 표시되는 경우이 파일을 어떻게 열 수 있습니까?
Thorsten Staerk 12

1
@ThorstenStaerk setrlimit( ulimitshell 명령의 기본 시스템 호출) 의 모든 설정은 프로세스별로 이루어집니다. 그것들은 호출하는 프로세스에만 영향을 미칩니다 (간접적으로 포크하는 프로세스).
Gilles 'SO- 악마 그만해

25

시스템은 프로세스 정보를 / proc 아래의 디렉토리에 동적으로 보관합니다. 예를 들어 PID가 1234 인 프로세스에는 / proc / 1234라는 디렉토리가 있습니다.

거기에는 꽤 많은 정보가 있지만 현재는 / proc / 1234 / fd 서브 디렉토리에 관심이 있습니다.

참고 : 소유하지 않은 프로세스 및 SetUID 프로세스에 대한 파일을 보거나 열려면 루트 권한이 있어야합니다.

예:

root@johan-HP-ProBook-6560b-LG654EA-ACQ:/proc# ls -l 2443/fd
total 0
lr-x------ 1 johan johan 64 Feb 27 10:26 0 -> pipe:[13637]
l-wx------ 1 johan johan 64 Feb 27 10:26 1 -> /home/johan/.xsession-errors
lrwx------ 1 johan johan 64 Feb 27 10:26 10 -> anon_inode:[eventfd]
lrwx------ 1 johan johan 64 Feb 27 10:26 11 -> anon_inode:[eventfd]
lrwx------ 1 johan johan 64 Feb 27 10:26 12 -> socket:[39495]
lrwx------ 1 johan johan 64 Feb 27 10:26 13 -> anon_inode:[eventfd]
lr-x------ 1 johan johan 64 Feb 27 10:26 14 -> anon_inode:inotify
lrwx------ 1 johan johan 64 Feb 27 10:26 15 -> anon_inode:[eventfd]
l-wx------ 1 johan johan 64 Feb 27 10:26 16 -> pipe:[37885]
lr-x------ 1 johan johan 64 Feb 27 10:26 17 -> pipe:[37886]
l-wx------ 1 johan johan 64 Feb 27 10:26 2 -> /home/johan/.xsession-errors
l-wx------ 1 johan johan 64 Feb 27 10:26 21 -> pipe:[167984]
lr-x------ 1 johan johan 64 Feb 27 10:26 22 -> pipe:[167985]
l-wx------ 1 johan johan 64 Feb 27 10:26 23 -> pipe:[170009]
lr-x------ 1 johan johan 64 Feb 27 10:26 24 -> pipe:[170010]
lrwx------ 1 johan johan 64 Feb 27 10:26 3 -> anon_inode:[eventfd]
lr-x------ 1 johan johan 64 Feb 27 10:26 4 -> pipe:[14726]
lrwx------ 1 johan johan 64 Feb 27 10:26 5 -> socket:[14721]
l-wx------ 1 johan johan 64 Feb 27 10:26 6 -> pipe:[14726]
lrwx------ 1 johan johan 64 Feb 27 10:26 7 -> socket:[14730]
lrwx------ 1 johan johan 64 Feb 27 10:26 8 -> socket:[13984]
lrwx------ 1 johan johan 64 Feb 27 10:26 9 -> socket:[14767]

root@johan-HP:/proc# cat 2443/fdinfo/2
pos:    1244446
flags:  0102001

또한 / proc 아래의 나머지 파일을 살펴보십시오 ... 시스템의 많은 유용한 정보가 여기에 있습니다.

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