cd ..
루트 폴더에 입력해도 경고가 표시되지 않거나 오류와 함께 실패하는 이유는 무엇입니까 ?
나는 기대:
/$ cd ..
-bash: cd: ..: No such file or directory
대신 나는 혼자 남겨졌다 /
. 물론, ..
실제로 가 있기 때문 /
이고 간단히 말해서 /
와 같습니다 .
. 왜 이런 일이 일어나는지 알고 싶습니다.
답변1
Open Group(POSIX 표준 담당)에 따르면:
각 디렉터리에는 해당 이름으로 표시되는 상위 디렉터리가 하나만 있습니다.피어 투 피어첫 번째 디렉토리에. [...] 파일 이름이 무엇입니까?피어 투 피어루트 디렉터리를 기준으로 구현 정의를 참조합니다. 버전 7에서는 이는 루트 디렉터리 자체를 나타냅니다. 이는 POSIX.1-2008에 언급된 동작입니다. 일부 네트워크 시스템에서는 건물/../CPU 이름/다른 호스트의 루트 디렉터리를 참조하는 데 사용되는 POSIX.1에서는 이 동작을 허용합니다.
루트 디렉터리의 점-점 항목은 루트 디렉터리 자체를 나타내는 것으로 해석됩니다. 따라서 점-점은 루트 디렉터리에 루트가 있는 하위 트리 외부의 파일에 액세스하는 데 사용할 수 없습니다.
답변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 /..
/
보시다시피 , .
및 ..
을 가리킵니다 /
.