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