나는 배우고 있다파일 설명자Linux의 경우 표시할 명령어가 있는지 알고 싶습니다.전체 목록이게 나한테 알려줘각각은 어디로 리디렉션되나요?지금 이 순간까지.
아마도 다음과 같은 정보가 있을 것입니다:
0 --> <stdin
1 --> >stdout
2 --> >stderr
3 --> >MyFileForWriting
4 --> <MyFileForReading
내가 찾았어이 스레드이는 필수이지만 lsof
이 명령이 있는 경우 이 명령에 의존하지 않는 다른 방법을 사용하는 것이 유용할 수 있습니다.
Linux에 대한 정보가 필요합니다(지금까지 "lsof" 도구는 포함하지 않았지만 대부분 POSIX 호환 OS처럼 작동하는 CygWin도 사용해 보겠습니다).
답변1
파일 /proc
시스템에는 정확히 다음 정보가 나열됩니다.
$ ls -l /proc/self/fd
total 0
lrwx------ 1 michas users 1 Apr 6 04:44 0 -> /dev/pts/0
lrwx------ 1 michas users 1 Apr 6 04:44 1 -> /dev/pts/0
lrwx------ 1 michas users 1 Apr 6 04:44 2 -> /dev/pts/0
lr-x------ 1 michas users 1 Apr 6 04:44 3 -> /proc/6934/fd
$ ls -l /proc/self/fd 2>/dev/null <<<foo |cat
total 0
lr-x------ 1 michas users 1 Apr 6 04:45 0 -> /tmp/sh-thd-361068043 (deleted)
l-wx------ 1 michas users 1 Apr 6 04:45 1 -> pipe:[136729]
l-wx------ 1 michas users 1 Apr 6 04:45 2 -> /dev/null
lr-x------ 1 michas users 1 Apr 6 04:45 3 -> /proc/6952/fd
다른 프로세스에 관심이 있는 경우 "self"를 해당 PID로 바꾸면 됩니다.
답변2
@Patrick은 아래 설명에서 이러한 파일에 액세스하려면 기본이 아닌 커널 컴파일 시간 옵션이 필요함을 지적합니다. 나는 그 당시 이것을 깨닫지 못했고 지금까지 발견하지 못했습니다. 내 커널 패키지가 패키지 관리자를 통해 설치되었다는 것을 알고 있지만 적어도 하나의 배포판의 기본 빌드에 포함되어야 합니다. 따라서 특히 Cygwin이 관련된 경우 마일리지가 다를 수 있습니다.
최소한 포함하면 더 완전한 목록을 얻을 수 있다고 생각합니다./proc/self/map_files:
% sudo ls -al ${p=/proc/$$}/map_files | sudo sort -t\> -ubk2,2
lr-------- 1 mikeserv mikeserv ? 64 Apr 5 21:07 400000-4a6000 -> /usr/bin/zsh
lr-------- 1 mikeserv mikeserv ? 64 Apr 5 21:07 7f5e05aa3000-7f5e05ac3000 -> /usr/lib/ld-2.19.so
lr-------- 1 mikeserv mikeserv ? 64 Apr 5 21:07 7f5e04b88000-7f5e04b8c000 -> /usr/lib/libattr.so.1.1.0
lr-------- 1 mikeserv mikeserv ? 64 Apr 5 21:07 7f5e04d8d000-7f5e04f2b000 -> /usr/lib/libc-2.19.so
lr-------- 1 mikeserv mikeserv ? 64 Apr 5 21:07 7f5e0589f000-7f5e058a3000 -> /usr/lib/libcap.so.2.24
lr-------- 1 mikeserv mikeserv ? 64 Apr 5 21:07 7f5e0569b000-7f5e0569e000 -> /usr/lib/libdl-2.19.so
lr-------- 1 mikeserv mikeserv ? 64 Apr 5 21:07 7f5e05135000-7f5e05235000 -> /usr/lib/libm-2.19.so
lr-------- 1 mikeserv mikeserv ? 64 Apr 5 21:07 7f5e05436000-7f5e05496000 -> /usr/lib/libncursesw.so.5.9
lr-------- 1 mikeserv mikeserv ? 64 Apr 5 21:07 7f5e0497c000-7f5e04987000 -> /usr/lib/libnss_files-2.19.so
lr-------- 1 mikeserv mikeserv ? 64 Apr 5 21:07 7f5e05afa000-7f5e05c83000 -> /usr/lib/locale/locale-archive
lr-------- 1 mikeserv mikeserv ? 64 Apr 5 21:07 7f5e0450c000-7f5e0452f000 -> /usr/lib/zsh/5.0.5/zsh/complete.so
lr-------- 1 mikeserv mikeserv ? 64 Apr 5 21:07 7f5e038e0000-7f5e038ee000 -> /usr/lib/zsh/5.0.5/zsh/complist.so
lr-------- 1 mikeserv mikeserv ? 64 Apr 5 21:07 7f5e036cb000-7f5e036db000 -> /usr/lib/zsh/5.0.5/zsh/computil.so
lr-------- 1 mikeserv mikeserv ? 64 Apr 5 21:07 7f5e03cf3000-7f5e03cfc000 -> /usr/lib/zsh/5.0.5/zsh/parameter.so
lr-------- 1 mikeserv mikeserv ? 64 Apr 5 21:07 7f5e03aef000-7f5e03af2000 -> /usr/lib/zsh/5.0.5/zsh/stat.so
lr-------- 1 mikeserv mikeserv ? 64 Apr 5 21:07 7f5e04101000-7f5e04103000 -> /usr/lib/zsh/5.0.5/zsh/terminfo.so
lr-------- 1 mikeserv mikeserv ? 64 Apr 5 21:07 7f5e04731000-7f5e04773000 -> /usr/lib/zsh/5.0.5/zsh/zle.so
lr-------- 1 mikeserv mikeserv ? 64 Apr 5 21:07 7f5e03efe000-7f5e03f00000 -> /usr/lib/zsh/5.0.5/zsh/zleparameter.so
lr-------- 1 mikeserv mikeserv ? 64 Apr 5 21:07 7f5e04304000-7f5e0430b000 -> /usr/lib/zsh/5.0.5/zsh/zutil.so
이것은 정렬된 고유 목록입니다. 목록은 매우 유사해 보입니다.
% lsof -p ${p##*/}
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
zsh 23748 mikeserv cwd DIR 0,3 0 7800580 /proc/23748/map_files
zsh 23748 mikeserv rtd DIR 0,33 254 256 /
zsh 23748 mikeserv txt REG 0,33 705496 1281560 /usr/bin/zsh
zsh 23748 mikeserv mem REG 0,30 1281560 /usr/bin/zsh (path dev=0,33)
zsh 23748 mikeserv mem REG 0,30 1281593 /usr/lib/zsh/5.0.5/zsh/computil.so (path dev=0,33)
zsh 23748 mikeserv mem REG 0,30 1281592 /usr/lib/zsh/5.0.5/zsh/complist.so (path dev=0,33)
zsh 23748 mikeserv mem REG 0,30 1281579 /usr/lib/zsh/5.0.5/zsh/stat.so (path dev=0,33)
zsh 23748 mikeserv mem REG 0,30 1281576 /usr/lib/zsh/5.0.5/zsh/parameter.so (path dev=0,33)
zsh 23748 mikeserv mem REG 0,30 1281596 /usr/lib/zsh/5.0.5/zsh/zleparameter.so (path dev=0,33)
zsh 23748 mikeserv mem REG 0,30 1281582 /usr/lib/zsh/5.0.5/zsh/terminfo.so (path dev=0,33)
zsh 23748 mikeserv mem REG 0,30 1281587 /usr/lib/zsh/5.0.5/zsh/zutil.so (path dev=0,33)
zsh 23748 mikeserv mem REG 0,30 1281591 /usr/lib/zsh/5.0.5/zsh/complete.so (path dev=0,33)
zsh 23748 mikeserv mem REG 0,30 1281595 /usr/lib/zsh/5.0.5/zsh/zle.so (path dev=0,33)
zsh 23748 mikeserv mem REG 0,30 1936654 /usr/lib/libnss_files-2.19.so (path dev=0,33)
zsh 23748 mikeserv mem REG 0,30 23825 /usr/lib/libattr.so.1.1.0 (path dev=0,33)
zsh 23748 mikeserv mem REG 0,30 1936661 /usr/lib/libc-2.19.so (path dev=0,33)
zsh 23748 mikeserv mem REG 0,30 1936618 /usr/lib/libm-2.19.so (path dev=0,33)
zsh 23748 mikeserv mem REG 0,30 24316 /usr/lib/libncursesw.so.5.9 (path dev=0,33)
zsh 23748 mikeserv mem REG 0,30 1936627 /usr/lib/libdl-2.19.so (path dev=0,33)
zsh 23748 mikeserv mem REG 0,30 1249113 /usr/lib/libcap.so.2.24 (path dev=0,33)
zsh 23748 mikeserv mem REG 0,30 1936645 /usr/lib/ld-2.19.so (path dev=0,33)
zsh 23748 mikeserv mem REG 0,30 1720288 /usr/lib/locale/locale-archive (path dev=0,33)
zsh 23748 mikeserv 0u CHR 136,6 0t0 9 /dev/pts/6
zsh 23748 mikeserv 1u CHR 136,6 0t0 9 /dev/pts/6
zsh 23748 mikeserv 2u CHR 136,6 0t0 9 /dev/pts/6
zsh 23748 mikeserv 10u CHR 136,6 0t0 9 /dev/pts/6
음, 어쨌든 파일 이름이군요. 나는 이 기능 중 많은 부분이 가능한 PID stat,
및 ps
/또는 흥미로운 PID를 사용하여 쉽게 재현될 수 있다고 생각합니다. 분명히 디렉토리가 있으며 fd
다른 답변에서 언급했듯이 /proc/self
파일 시스템에서 루트, cwd를 얻을 수도 있습니다.