cd .. 루트 폴더에

cd .. 루트 폴더에

cd ..루트 폴더에 입력해도 경고가 표시되지 않거나 오류와 함께 실패하는 이유는 무엇입니까 ?

나는 기대:

/$ cd ..
-bash: cd: ..: No such file or directory

대신 나는 혼자 남겨졌다 /. 물론, ..실제로 가 있기 때문 /이고 간단히 말해서 /와 같습니다 .. 왜 이런 일이 일어나는지 알고 싶습니다.

답변1

Open Group(POSIX 표준 담당)에 따르면:

각 디렉터리에는 해당 이름으로 표시되는 상위 디렉터리가 하나만 있습니다.피어 투 피어첫 번째 디렉토리에. [...] 파일 이름이 무엇입니까?피어 투 피어루트 디렉터리를 기준으로 구현 정의를 참조합니다. 버전 7에서는 이는 루트 디렉터리 자체를 나타냅니다. 이는 POSIX.1-2008에 언급된 동작입니다. 일부 네트워크 시스템에서는 건물/../CPU 이름/다른 호스트의 루트 디렉터리를 참조하는 데 사용되는 POSIX.1에서는 이 동작을 허용합니다.

A.4.13 경로명 해석

루트 디렉터리의 점-점 항목은 루트 디렉터리 자체를 나타내는 것으로 해석됩니다. 따라서 점-점은 루트 디렉터리에 루트가 있는 하위 트리 외부의 파일에 액세스하는 데 사용할 수 없습니다.

chroot - 루트 디렉터리 변경

답변2

/디렉토리 조차도 실제로는 오류가 발생하지 않습니다.가지다에 대한 유효한 디렉토리 항목 ..이지만 다른 디렉토리와 달리 디렉토리 자체를 가리키므로 동작은 다음과 같습니다 ..

$ ls -lid / /. /..
128 drwxr-xr-x 22 root root 4096 Apr 15 11:26 /
128 drwxr-xr-x 22 root root 4096 Apr 15 11:26 /.
128 drwxr-xr-x 22 root root 4096 Apr 15 11:26 /..
$

첫 번째 열에서 알 수 있듯이 ., ../모두 동일한 inode 번호를 가지므로 동일한 파일 시스템 항목입니다.

cd ..그래서 당신이 깊은 내면에 있더라도 , /당신은 단지 내부에 머물러 있습니다 /.

답변3

이를 제거하려면 커널 및 C 라이브러리에 특수 사례 처리 코드를 생성해야 하기 때문에 존재합니다. 이제 당신이 방문하는 모든 디렉토리에는 항상 및 이 있을 것이라고 가정할 수 있습니다 ....

이제 필요한 유일한 특수 사례 코드는 파일 시스템 마운트 코드입니다. 여기서 코드는 ..마운트 지점이 포함된 디렉터리를 가리키도록 inode 값을 재정의합니다. 왜냐하면 루트 디렉터리가 항상 루트 디렉터리가 아니기 때문입니다.

답변4

확인 .하고 체크인하는 ..또 다른 방법은 다음 /과 같습니다.

$ readlink -f ..
/home

$ readlink -f /.
/

$ readlink -f /..
/

보시다시피 , ...을 가리킵니다 /.

관련 정보