심볼릭 링크는 준 보편적 인 리눅스,하지만 그들은 (을 에뮬레이트 Cygwin에서 제외) 다른 곳에서는 존재하지 않는다. AIX 및 Solaris에도 존재하지만 심볼릭 링크는 아닙니다. 오픈 파일에 대한 정보를 얻으려면 설치하십시오 ./proc/PID/fd/NUM
/proc/PID/fd/NUM
lsof
와 함께 Unices /proc/PID/fd
Linux에서, ID PID 가 있는 프로세스가 파일 디스크립터 NUM 에서 연 파일에 대한 약간의 마술 기호 링크 입니다. 이 링크는 예를 들어 파일이 제거 된 경우에도 파일에 액세스하는 데 사용될 수 있다는 점에서 마술입니다. 링크도 이름 변경을 통해 파일을 추적합니다. 가리키는 마법의 심볼릭 링크 여기서 PID는 링크에 액세스하는 과정은./proc/PID/fd/NUM
/proc/self
/proc/PID
이 기능은 거의 모든 Linux 시스템에 있습니다. 그것은 proc 파일 시스템 의 드라이버에 의해 제공되며 기술적으로 선택 사항이지만 임베디드 시스템에서도 거의 빠지지 않는 많은 작업 ( ps
작업 수행 포함 )에 사용됩니다./proc/PID
시그윈
Cygwin은 Linux (Cygwin 프로세스 용) 및을 에뮬레이트합니다 ./proc/PID/fd/NUM
/proc/self
각 파일 디스크립터에 대한 항목 이 있지만 열린 파일과 동일한 유형으로 표시되므로 파일 경로에 대한 정보를 제공하지 않습니다. 그러나 파일을 연 프로세스에 보고하는 것과 동일한 정보를 보고하므로 파일이있는 파일 시스템과 inode 번호를 확인할 수 있습니다. 디렉토리는 심볼릭 링크로 표시되지만 따라야 만 할 수있는 마법 심볼릭 링크 이며 빈 문자열을 반환합니다./proc/PID/fd
stat
fstat
readlink
AIX에서 procfiles
명령은 프로세스의 열린 파일에 대한 일부 정보를 표시합니다. Solaris에서이 pfiles
명령은 프로세스의 열린 파일에 대한 일부 정보를 표시합니다. 여기에는 파일 경로가 포함되어 있지 않습니다 (Solaris에서는 Solaris 10 이후에 아래 참조).
이외에도 최신 Solaris 버전에는 Linux의 심볼릭 링크와 유사한 심볼릭 링크가 포함되어 있습니다 . 이 명령은 경로를 포함하여 프로세스의 열린 파일에 대한 정보를 보여줍니다./proc/PID/fd/NUM
/proc/PID/path/NUM
/proc/PID/fd/NUM
pfiles
/proc/PID/fd
프로세스에 의해 열린 파일 디스크립터 당 하나의 레코드 (라인)를 포함하는 텍스트 파일입니다. 파일 이름은 추적되지 않습니다.
/proc/PID/
디렉토리이지만 파일 설명자에 대한 정보는 포함되어 있지 않습니다.
/proc
파일 디스크립터에 직접 액세스하지는 않는 Unices
(참고 : 때로는 아래에서 액세스 할 수있는 메모리 이미지를 통해 프로세스의 열린 파일에 대한 정보를 얻을 수도 있습니다 /proc
. "직접 액세스"로 계산하지 않습니다.
파일이있는 Unices/proc/PID
proc 파일 시스템 자체 는 UNIX 8th Edition에서 시작 되었지만 다른 구조로 계획 9를 거쳐 유니스로 돌아갔습니다. 필자 /proc
는 PID가있는 모든 운영 체제 에 각 PID에 대한 항목이 있다고 생각 하지만 많은 시스템에서 디렉토리가 아닌 일반 파일입니다. 다음 시스템을 읽어야합니다 ./proc/PID
ioctl
- 솔라리스 최대 2.5
- OSF / 1 해주기로 알려진 의 Tru64
- IRIX (?)
- SCO (?)
MINIX 3에는 디렉토리를 포함하여 여러 Linux와 같은 구성 요소를 제공 하는 procfs 서버 가 있습니다. 그러나 이것은 없습니다 ./proc/PID/
/proc/PID/fd
FreeBSD에는 디렉토리가 있지만 열린 파일 디스크립터에 대한 정보는 제공하지 않습니다. (그러나 Linux와 유사 하며 심볼릭 링크를 통해 실행 파일에 액세스 할 수 있습니다.)/proc/PID/
/proc/PID/file
/proc/PID/exe
FreeBSD의 procfs는 더 이상 사용되지 않습니다 .
없는 유니스 /proc
- HP-UX
- OpenBSD
- NetBSD
- 맥 OS X
다른 채널을 통한 파일 디스크립터 정보
이 fuser
명령은 지정된 파일이 열려 있거나 지정된 마운트 지점에서 파일이 열려있는 프로세스를 나열합니다. 이 명령은 표준입니다 (모든 XSI 호환 시스템, 즉 X / Open System Interface Extension이있는 POSIX에서 사용 가능).
이 유틸리티를 사용하면 프로세스에서 파일 이름으로 이동할 수 없습니다.
Lsof는 "목록 열기 파일"을 나타냅니다. 그것은이다 타사 도구 유닉스 변종 대부분에 해당하는 (그러나 보통 기본 설치의 일부). 위의 분석으로 의심 스러울 수 있으므로 열린 파일에 대한 정보를 얻는 것은 시스템에 따라 매우 다릅니다. lsof 관리자는 단일 인터페이스에서 모두 결합하는 작업을 수행했습니다.
FAQ 를 읽고 lsof가 어떤 어려움을 겪고 있는지 확인할 수 있습니다 . 대부분의 유니스에서 열린 파일 이름에 대한 정보를 얻으려면 커널 데이터 구조를 구문 분석해야합니다. FAQ에서 인용 3.3“왜 전체 경로 이름을보고하지 않습니까?”:
Lsof는 다음 언어의 커널 이름 캐시에서 경로 이름 구성 요소를 얻을 수 없습니다.
Linux 커널 만이 열린 파일에 대해 유지 관리하는 구조에 전체 경로 이름을 기록합니다. 대신, 대부분의 커널은 경로 이름을 장치 및 노드 번호 이중선으로 변환하고 파일이 열리면 후속 파일 참조에 사용합니다.
lsof
의 출력 에서 정보를 구문 분석해야하는 경우 -F
모드 (라인 당 하나의 필드), 바람직하게는 -F0
모드 (널 구분 필드)를 사용하십시오. 특정 프로세스의 특정 파일 기술자에 대한 정보를 얻으려면 사용 -a
과 옵션 및 예를 .-p PID
-d NUM
lsof -a -p 123 -d 0 -F0n
/dev/fd/NUM
현재 프로세스의 파일 디스크립터
많은 유닉스 변형은 프로세스가 파일 이름을 통해 열린 파일에 액세스하는 방법을 제공합니다. 여는 것은 호출과 같습니다 . 이 이름은 프로그램이 파일 이름을 원하지만 이미 열린 파일 (예 : 파이프 또는 소켓)을 전달하려는 경우에 유용합니다. 예를 들어 프로세스 대체 를 구현하는 셸은 사용 가능한 경우 ( 사용할 수없는 임시 명명 된 파이프 사용) 사용합니다./dev/fd/NUM
dup(NUM)
/dev/fd
어디에 /dev/fd
존재, 보통 (항상?)도 있습니다 동의어 (때로는 심볼릭 링크, 때로는 하드 링크, 동등한 특성을 가진 때로는 마법 파일) /dev/stdin
= /dev/fd/0
, /dev/stdout
= /dev/fd/1
, /dev/stderr
= /dev/fd/2
.
- Linux에서는
/dev/fd
에 대한 심볼릭 링크 /proc/self/fd
입니다.
- 대부분의 유니스 ( IRIX , OpenBSD , NetBSD , SCO, Solaris 등)에서 항목
/dev/fd
은 문자 장치입니다. 일반적으로 파일 디스크립터가 열려 있는지 여부에 따라 표시되며 특정 숫자 이상의 파일 디스크립터에 대해서는 항목을 사용하지 못할 수 있습니다.
- FreeBSD 및 OSX에서 fdescfs 파일 시스템은
/dev/fd
호출 프로세스의 열린 디스크립터를 따르는 동적 디렉토리를 제공합니다 . 정적 /dev/fd
은 사용 가능 /dev/fd
하지 않습니다.
- OSF / 1 (Tru64)에서 fdfs
/dev/fd
를 통해 제공됩니다 .
/dev/fd
AIX 또는 HP-UX 에는 없습니다 .
pfiles
명령에 파일 설명자 경로가 표시됩니다./proc/<pid>/path
또한 언급 할 수 있는 디렉토리 에서이 정보를 검색합니다 . 참조 docs.oracle.com/cd/E19253-01/817-0547/esxiq/index.html