‘/’에 ‘..’항목이있는 이유는 무엇입니까? lib64 opt sbin tmp vmlinuz.old bin dev

이것은 항상 나를 당혹스럽게 만들었다. 루트 디렉토리에 상위 디렉토리에 대한 참조가 포함되는 이유는 무엇입니까?

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 = 디렉토리 내부의 하위 디렉토리 수). 각 직계 서브 디렉토리 당 하나, 상위 디렉토리 및 하나.

그러나 /부모는 무엇입니까?



답변

/..가리킴 /:

$ ls -id /
2 /
$ ls -id /..
2 /..

둘 다 동일한 inode 번호를 가지며이 시스템에서 2가됩니다. (정확한 값은 중요하지 않습니다.)

일관성을 유지합니다. 이런 식으로 커널 ..에서 경로를 처리 할 때 현재 위치를 확인하기 위해 커널에 코드가 없어도됩니다 . 당신은 cd ..영원히 말할 수 있고 뿌리보다 더 깊이 가지 않습니다.


답변

유닉스가 보증하기 때문에 모든 디렉토리에는 두 개의 항목이 있으며, .그 자체 ..는 부모를 나타냅니다.

현재 네임 스페이스의 루트 디렉토리는 특별합니다. 즉 ..,와 동일 .하지만 OS가 프로그램에 보장 한 것을 깨뜨리는 것은 그리 특별하지 않습니다. 계약이 깨지면 상황이 잘못되고 모든 사람이 손가락을 가리 킵니다.

표시되는 루트 디렉토리는 디스크의 파일 시스템에서 실제로 다른 상위 디렉토리를 가질 수 있습니다. 마운트 된 네임 스페이스에 제공된 파일 시스템의보기는에 대한 .. = .규칙을 적용합니다 /. 당신이에 있다면 그래서 chroot()감옥, 당신은 볼 /.. = /을보고 감옥 외부의 누군가가더라도 /path/to/jail/..볼 수 있습니다 /path/to대신.


답변