"lsof"명령의 대안?


20

많은 경우 "lsof"는 내가 작업해야하는 머신에 설치되지 않지만 lsof의 "기능"은 매우 필요합니다 (예 : AIX). : \

Windows 이외의 응용 프로그램에 "lsof"와 같은 응용 프로그램이 있습니까?

업데이트 : 예 : "/ home / username"디렉토리를 사용하는 프로세스가 무엇인지 알아야합니까?


1
좀 더 구체적으로 말씀해 주시겠습니까? AIX 이외의 시스템 (lsof에서 확실히 지원되는)은 무엇입니까? 아니면 당신이 생각하는 lsof의 특정 유형의 사용이 있습니까? 일반적으로 왜 하지 lsof를?
rozcietrzewiacz

Linux 2.6.18-92.el5 GNU를 사용하고 있으며 lsof가 없으며 lsof를 사용할 수있는 기능도 없습니다. (
SSH This

답변:


20

알고 fuser있습니다. 시스템에서 사용할 수 있는지 확인하십시오.


시스템에서 열려있는 모든 파일을 나열하기 위해 퓨저를 매개 변수로 제공 해야하는 것은 무엇입니까? : 오 타이!
LanceBaynes

2
이 명령 sudo fuser -vm / 2>&1 | awk '$3 ~ /f|F/' | less은에 마운트 된 파일 시스템에서 열린 파일이있는 모든 프로세스를 표시 할 수 있습니다 /. 특정 도움말은 맨 페이지를 참조하십시오.
enzotib

TY! 그것은 다음과 같은 출력을 제공합니다 : pastebin.com/raw.php?i=2z19g6Rk- 나는 그것을 구글 검색했지만 예를 출력 할 수있는 방법을 찾을 수 없습니다 : "gnome-screensaver", "gnome-screensav" "-so 넓은 명령 이름으로 어떻게 출력 할 수 있습니까? : O
LanceBaynes

: 그것은 동일한 출력을 제공 pastebin.com/raw.php?i=Fe3EJvUv
LanceBaynes

이 같은 것 :sudo fuser -vm / 2>&1 | awk '$3 ~ /f|F/' | while read user pid flags rest; do printf '%10s %10s %10s %s\n' $user $pid $flags "$(</proc/$pid/cmdline)"; done | less
enzotib

15

유닉스 로제타 스톤은 질문에 이런 종류의 좋은 자원이다. lsof에 대한 몇 가지 대안을 언급합니다 (아래 참조). 그러나 lsof는 실제로 수행하는 작업의 표준 응용 프로그램입니다.

원하는 것이 특정 파일이 열려있는 프로세스 ID를 찾는 것이라면 모든 fuserPOSIX 호환 시스템에서 사용할 수 있습니다 .

/proc디렉토리 가있는 운영 체제 에서 lsof의 정보를 통해 프로세스에서 열린 파일 ( 가장 일반적인 작업 모드와 반대)을 쿼리 할 수 ​​있습니다 /proc. 일부 운영 체제에는 다음과 같은 명령이 있습니다.


8

Solaris를 실행하는 경우 lsof기본적으로 설치되지 않고 ZFS에서 질식 할 수있는에 대한 대안 은 pfiles입니다.

예 :

pfiles /proc/*


2

유틸리티 실행이 약간 적은 내 버전 :

for proc_pid in $(find /proc -maxdepth 1 -name "[0-9]*"); do \
    ls -l ${proc_pid}/fd 2>/dev/null \
    | grep -q "$search_term" \
    && echo "${proc_pid#/proc/}"; \
done

분명히 모든 코너 케이스를 처리하지는 않지만 내 유스 케이스에서 작동합니다.


0

이것은 트릭을해야합니다. 다음을 제외한 모든 파일 설명자 매핑을 제공합니다.

  • 볼 권한이 없거나
  • "Permission denied"라는 문자열이 포함 된 파일 용
( find /proc -mindepth 1 -maxdepth 1 \
  | grep -E [0-9]+ | xargs -n 1 -I% find %/fd \
  | xargs ls -l \
  | grep -v "Permission denied" ) 2>/dev/null \
| cut -d' ' -f12- | less

특정 프로그램의 매핑에만 관심이 있다는 것을 이미 알고 있다면 대신 다음 줄을 따라 더 많은 것을 사용할 수 있습니다.

exec=sshd
pgrep "$exec" | xargs -n 1 ps -p
pgrep "$exec" | xargs -n 1 -I% find /proc/%/fd | xargs ls -l | cut -d' ' -f12- | less

-2

때때로 lsof설치/usr/sbin

/usr/sbin일부가 아닌 $PATH경우 설치된 명령도 놓칠 수 있습니다.

로 확인

whereis lsof
lsof: /usr/sbin/lsof /usr/share/man/man8/lsof.8.gz

OP는 lsof가 설치되지 않았고 대안을 요구했다고 말했다.
Jeff Schaller
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.