이것은 항상 나를 당황하게 만들었습니다. 루트 디렉터리에 상위 디렉터리에 대한 참조가 포함되어 있는 이유는 무엇입니까?
bob@bob:/$ ls -a . 홈 lib32 mnt .rpmdb sys vmlinuz 빌드 ..cdrom initrd.img lib64 opt sbin tmp vmlinuz.old bin dev initrd.img.old 분실 + proc selinux usr 발견 시작 등 lib 미디어 루트 srv var
나는 파일 시스템에서 디렉토리가 어떻게 관리되는지 이해합니다. 각 디렉토리에는 자체에 대한 n+2 포인터가 있습니다(n = 디렉토리 내의 하위 디렉토리 수). 각 직접 하위 디렉터리에 대해 하나씩, 상위 디렉터리에 대해 하나씩, 자체에 대해 하나씩.
/
하지만 의 부모는 무엇입니까?
답변1
/..
다음을 가리키며 /
:
$ ls -id /
2 /
$ ls -id /..
2 /..
둘 다 동일한 inode 번호를 가지며, 이 시스템에서는 정확히 2입니다. (정확한 값은 중요하지 않습니다.)
이는 일관성을 위해 수행됩니다. 이렇게 하면 커널이 ..
경로에서 a를 처리할 때 현재 위치를 확인하기 위해 커널에 코드를 추가할 필요가 없습니다. 영원하다고 말할 수는 있지만 cd ..
뿌리보다 더 깊지는 않습니다.
답변2
이는 Unix의 보증으로 인해 존재합니다. 모든 디렉토리에는 두 개의 항목이 포함되어 있습니다. .
하나는 자신을 가리키는 항목이고 ..
다른 하나는 상위 디렉토리를 가리키는 항목입니다.
현재 네임스페이스의 루트는 ..
동일한 것을 가리킨다는 점에서 특별 .
하지만 프로그램에 대한 운영 체제의 보증을 깨뜨릴 만큼 특별하지는 않습니다. 이러한 계약이 깨지면 상황이 잘못되고 모두가 서로를 비난합니다.
디스크상의 파일 시스템에서 표시되는 루트 디렉터리는 실제로 다른 상위 디렉터리를 가질 수 있습니다. 마운트된 네임스페이스에 제공되는 파일 시스템 보기가 강제됩니다 .. = .
. /
따라서 감옥에 있으면 감옥 외부의 사람들이 보더라도 볼 chroot()
수 있습니다 ./.. = /
/path/to/jail/..
/path/to