cd .. 어떤 디렉토리가 ..인지 어떻게 알 수 있나요?

cd .. 어떤 디렉토리가 ..인지 어떻게 알 수 있나요?

디렉토리에는 현재 디렉토리와 상위 디렉토리에 대한 하드 링크인 .및 가 포함되어 있습니다...

그렇다면 쉘은 현재 디렉토리의 이름이 "a"라는 것을 어떻게 (예를 들어 프롬프트에서) 알 수 있습니까 cd a/path/..? 전용 케이스가 있나요?

..그렇지 않으면 그 입장에서는 이 디렉터리가 위의 디렉터리이기도 한 줄 모르고 그냥이라는 디렉터리로 들어가게 되는 것이 아닐까 ? 이름을 어떻게 알 수 있나요?

답변1

foo귀하의 질문은 bash가 작업 디렉토리가 (대신 foo/bar/..) 에 있도록 디렉토리를 변경하는 방법을 어떻게 아는 것이라고 가정합니다 cd foo/bar/...

두 경로 모두 동일한 inode로 표시되지만(이 답변의 끝에 표시된 대로 경로에 심볼릭 링크가 없는 경우) 쉘은 현재 디렉토리 이름을 대신 으로 표시하기 위해 특별한 조치를 취해야 foo합니다 ... 에서는 bashpath 에서 cd발견될 때 내부적으로 상위 디렉토리를 제거합니다 . 즉, 디렉토리 이름이 될 수 없습니다.....

이에 대한 문서는 다음과 같습니다 help cd.

..바로 앞의 경로 이름 구성 요소를 슬래시 또는 DIR의 시작 부분으로 다시 이동하여 처리됩니다.

이 특별한 대소문자 구분은 다음과 같은 흥미로운 동작을 발생시킵니다(실제 경로인 경우에도 foo/qux/..여전히 다음으로 확인됩니다).foobar/baz/..

$ tree
.
|-- bar
|   `-- baz
`-- foo

3 directories, 0 files
$ ln -s "$(readlink -f bar/baz)" foo/qux
$ tree
.
|-- bar
|   `-- baz
`-- foo
    `-- qux -> bar/baz

4 directories, 0 files
$ cd foo/qux/..
$ basename "$(pwd)"
foo

답변2

당신이 말했듯 ..이 상위 디렉토리에 대한 하드 링크입니다. 쉘은 디렉토리에 액세스할 때 디렉토리 이름을 알 필요가 없습니다 ... 단순히 inode를 통해 디렉토리에 액세스합니다.

inode는 파일 이름(유형, 권한, 소유자, 그룹, 크기, 액세스/변경/수정/삭제 횟수, 링크 수, 속성, ACL 및 저장소)을 제외하고 파일(또는 디렉터리)에 대한 모든 메타데이터를 저장하는 구조입니다. 실제 파일 콘텐츠(예: 데이터)의 주소입니다.

관련 정보