"/"에 ".." 항목이 있는 이유는 무엇입니까?

"/"에 ".." 항목이 있는 이유는 무엇입니까?

이것은 항상 나를 당황하게 만들었습니다. 루트 디렉터리에 상위 디렉터리에 대한 참조가 포함되어 있는 이유는 무엇입니까?

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

관련 정보