다음 보고서 내용의 불일치를 어떻게 설명할 수 있나요 /dev/fd
?
erhannis@mnode6:/dev/fd$ ll /dev/fd/
total 0
dr-x------ 2 erhannis erhannis 0 Jan 12 22:10 .
dr-xr-xr-x 9 erhannis erhannis 0 Jan 12 22:10 ..
lrwx------ 1 erhannis erhannis 64 Jan 12 22:10 0 -> /dev/pts/8
lrwx------ 1 erhannis erhannis 64 Jan 12 22:10 1 -> /dev/pts/8
lrwx------ 1 erhannis erhannis 64 Jan 12 22:10 2 -> /dev/pts/8
lr-x------ 1 erhannis erhannis 64 Jan 12 22:10 3 -> /proc/24334/fd
erhannis@mnode6:/dev/fd$ ll
total 0
dr-x------ 2 erhannis erhannis 0 Jan 12 21:42 .
dr-xr-xr-x 9 erhannis erhannis 0 Jan 12 21:42 ..
lrwx------ 1 erhannis erhannis 64 Jan 12 21:42 0 -> /dev/pts/8
lrwx------ 1 erhannis erhannis 64 Jan 12 21:42 1 -> /dev/pts/8
lrwx------ 1 erhannis erhannis 64 Jan 12 21:42 2 -> /dev/pts/8
lrwx------ 1 erhannis erhannis 64 Jan 12 21:55 255 -> /dev/pts/8
특히 링크된 ll
파일은 별도로 표시되지만 링크된 파일은 표시된다는 점에 유의하세요. (프로세스 번호는 매번 바뀌는데, 자체 프로세스 번호인 것 같아요.)255
/dev/pts/8
ll /dev/fd/
3
/proc/24334/fd
ll
.
...날짜가 다르다는 것도 알게 되었습니다. 에 대한 디렉토리 와 에 대한 디렉토리가 달라졌습니까 /dev/fd/
? 또한 /dev/fd(두 경로 중 하나를 사용하여)에 파일을 생성할 수 없다는 사실도 발견했습니다.
답변1
첫 번째 경우에는 ls
나열된 내용 /dev/fd -> /proc/self/fd -> /proc/<pid_of_ls>/fd
, 두 번째 경우에는 나열된 내용 입니다 /proc/<pid_of_the_shell>/fd
.
( 인수 없이 호출할 때 나열된 현재 디렉터리 ) /dev/fd
에 대한 (마법의) 심볼릭 링크이지만 그렇지 않으며 이전 호출의 값 으로 확인되었습니다 ./proc/self/fd
.
ls
/proc/<pid_of_the_shell>/fd
cd /dev/fd
ll
255
연결된 파일을 개별적으로 표시/dev/pts/8
이것은 bash 쉘에서 내부적으로 사용되는 파일 설명자이며, 이 플래그로 열면 시스템 호출이 다른 프로그램을 실행하는 데 사용될 때(귀하의 경우처럼) O_CLOEXEC
자동으로 닫힙니다 .execve(2)
/bin/ls
또한 /dev/fd(두 경로 중 하나를 사용하여)에 파일을 생성할 수 없다는 사실도 발견했습니다.
Linux의 파일 시스템에서는 파일을 생성할 수 없습니다 procfs
.
그러나 아래 디렉터리에 다른 파일 시스템을 마운트 /proc
하거나 아래 경로에 있는 파일이나 디렉터리를 바인드 마운트 할 수 있습니다 /proc
. 다른 곳과 마찬가지로.