/dev/fd 디렉토리의 내용에는 diff 파일이 있습니다.

/dev/fd 디렉토리의 내용에는 diff 파일이 있습니다.

나에게는 이런 명령이 있다.

#echo -e "ls\npwd" >test
#bash
#exec <test

이 코드 뒤에는

#ls /dev/fd

0 1 2 3

#cd /dev/fd;ls

0 1 2 255

흥미로운 점은 디렉토리 /dev/fd내용이 다르다는 것입니다. 무슨 일이 일어났나요?

답변1

/dev/fd고정된 디렉터리가 아니라 각 프로세스 디렉터리에 대한 심볼릭 링크입니다. 두 번의 호출에서는 ls서로 다른 두 "디렉토리"의 내용을 나열합니다.

첫 번째 출력은 ls와 연관된 파일 설명자를 제공합니다. 두 번째 출력은 와 연관된 파일 설명자를 제공합니다 bash. echo앞의 디렉토리 목록은 exec이를 변경하지 않습니다.

고려하다:

foo:~$ ls -ln /dev/fd/
total 0
lrwx------ 1 1000 1000 64 Jul 10 12:13 0 -> /dev/pts/19
lrwx------ 1 1000 1000 64 Jul 10 12:13 1 -> /dev/pts/19
lrwx------ 1 1000 1000 64 Jul 10 12:13 2 -> /dev/pts/19
lr-x------ 1 1000 1000 64 Jul 10 12:13 3 -> /proc/20115/fd
foo:~$ cat /dev/fd/../cmdline && echo
cat/dev/fd/../cmdline

foo:~$ cd /dev/fd ; ls -ln
total 0
lrwx------ 1 1000 1000 64 Jul  8 05:01 0 -> /dev/pts/19
lrwx------ 1 1000 1000 64 Jul  8 05:01 1 -> /dev/pts/19
lrwx------ 1 1000 1000 64 Jul  8 05:01 2 -> /dev/pts/19
lrwx------ 1 1000 1000 64 Jul  8 05:01 255 -> /dev/pts/19
foo:/dev/fd$ cat ../cmdline && echo
bash
foo:/dev/fd$ pwd -P
/proc/2689/fd

관련 정보