cd ..
루트 폴더에 입력 한 오류가 발생하거나 경고하지 않는 이유는 무엇 입니까?
나는 기대할 것이다 :
/$ cd ..
-bash: cd: ..: No such file or directory
대신에 나는 떠났다 /
. 물론, 이것은 이후 인 ..
존재를 수행 /
하고, 단순히 /
처럼 .
. 왜 그런지 궁금합니다.
답변
Open Group에 따르면 (POSIX 표준에 해당) :
각 디렉토리에는 정확히 하나의 상위 디렉토리가 있으며 첫 번째 디렉토리에서 이름으로 점으로 표시됩니다 . […] 파일 이름의 dot-dot 가 루트 디렉토리를 기준으로하는 것은 구현 정의입니다. 버전 7에서는 루트 디렉토리 자체를 나타냅니다. 이것은 POSIX.1-2008에 언급 된 동작입니다. 일부 네트워크 시스템에서 /../hostname/ 구성 은 다른 호스트의 루트 디렉토리를 참조하는 데 사용되며 POSIX.1은이 동작을 허용합니다.
답변
/
디렉토리 에도 실제로 유효한 디렉토리 항목 이 있기 때문에 오류가 발생하지 않지만 ..
다른 디렉토리와 달리 디렉토리 자체를 가리 키므로 다음과 동일하게 작동합니다 .
.
$ 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 /..
$
첫 번째 열은 알려줍니다으로 .
, ..
그리고 /
모두 같은 아이 노드 번호를 가지고 있고, 따라서 같은 파일 시스템 항목입니다.
그래서 심지어 당신을 경우 cd ..
내부의 /
당신이 그냥있어 /
.
답변
제거하면 커널과 C 라이브러리에서 특수한 처리 코드를 작성해야하기 때문에 존재합니다. 지금은 항상 ‘.’이 있다고 가정 할 수 있습니다. 그리고 당신이가는 디렉토리에 ‘..’.
현재 필요한 유일한 특수 코드는 파일 시스템 마운트 코드에 있으며, 여기서 루트 디렉토리는 항상 루트 디렉토리가 아니기 때문에 코드가 마운트 포인트를 포함하는 디렉토리를 가리 키기 위해 ‘..’의 inode 값을 재정의합니다.
답변
무엇 을 실제로 확인하는 또 다른 방법 은 다음 .
과 같습니다...
/
$ readlink -f ..
/home
$ readlink -f /.
/
$ readlink -f /..
/
당신이 볼 수 있듯이, .
및 ..
지적한다 /
.
답변
‘..’이 /에있는 또 다른 이유는 존재하지 않는 경우 또 다른 특별한 경우를 생성하기 때문입니다. 루트 디렉토리는 다른 모든 디렉토리보다 하나의 하드 링크가 적습니다 (모든 디렉토리 노드에는 n + 2 링크가 있으며 여기서 n은 내부의 직접 서브 디렉토리 수). 이로 인해 디렉토리 스캔 최적화에 의존하는 다양한 프로그램이 중단됩니다.
답변
그렇지 않으면 ../../../../
폴더에서 루트로 이동하기 위해 스팸 을 보낼 수 없기 때문에 거기에있는 것이 좋습니다 . 그것이 ..
루트에 허용하지 않으면 작업 디렉토리 아래의 폴더 수를 세고 붙어 있습니다.