왜 '/'에 '..'가 포함되어 있나요? [복사]

왜 '/'에 '..'가 포함되어 있나요? [복사]

위에 목차가 없는데 /무슨 뜻인가요?..

답변1

..루트 디렉터리의 항목은 특별한 경우입니다.

POSIX 표준(4.13 경로명 결정, 여기서 ...항목은 각각 "점" 및 "점-점"이라고 합니다):

특수 파일 이름 점은 이전 항목에서 지정한 디렉터리를 참조해야 합니다. 특수 파일 이름 dot-dot은 이전 파일의 상위 디렉터리를 참조해야 합니다.특별한 경우로, 루트 디렉터리에서 점-점은 루트 디렉터리 자체를 참조할 수 있습니다.

그 이유는 이것을 추가하기 위해서입니다(A.4.13 경로명 해석)

파일 이름 점이 루트 디렉토리와 관련하여 참조하는 것은 구현에 따라 정의됩니다.버전 7에서는 루트 디렉터리 자체를 나타냅니다. 이는 POSIX.1-2017에서 언급된 동작입니다. 일부 네트워크 시스템에서는 이 구조가 /../hostname/다른 호스트의 루트 디렉터리를 참조하는 데 사용되며 POSIX.1에서는 이 동작을 허용합니다.

다른 네트워크 시스템에서는 //hostname동일한 목적을 달성하기 위해 이 구조를 사용합니다. 즉, <slash>이중 이니셜을 사용합니다. [...]

간단히 말해서 POSIX 표준에서는 모든 디렉토리에 ...항목이 모두 있어야 하며 ..디렉토리 항목이 디렉토리 자체를 / 참조하는 것을 허용하지만 /(인용문의 첫 번째 텍스트에 "may"라는 단어가 있음을 참고하세요) 구현도 허용합니다. 그것은 다른 것을 가리킨다.

파일 시스템의 가장 일반적인 구현 /../.

답변2

선행은 이루기가 어렵다이는 POSIX 표준에 지정된 동작이라고 들었습니다. 하지만,유닉스의 역사공식적으로는 1970년대 초에 시작되었습니다.POSIX그 역사는 그로부터 15년이 지난 1980년대 후반까지만 거슬러 올라갑니다. 실제로,POSIX는 수행된 작업을 지정합니다.구현에 따라.

이와 대조적으로 UNIX는 오랫동안 서로 다른 장치의 파일 시스템을 단일 통합 디렉터리 계층 구조로 마운트하는 것을 지원해 왔습니다. 실제로 모든 파일 시스템에는그것은루트 디렉토리; 마운트된 파일 시스템은 /어떤 면에서는 특별히 특별하지 않습니다. (그것은콘텐츠그럴 수도 있지만 파일 시스템 자체는 그렇지 않습니다. )

sysmount시스템 호출은 sysumount1970-1971년 UNIX V1에 도입된 것으로 보입니다(V1은 1971-11년에 출시되었습니다.유닉스 헤리티지 컨소시엄의 유닉스 트리). 그들은에 정의되어 있습니다u1.s(각각 시스템 호출 번호 21과 22) 및u7.s. (1970년 1월자 PDP7 UNIX,뚜렷한 조상은 없는 것 같다).

아마도 이것이 어디로 가는지 알 수 있을 것입니다: 언제어느파일 시스템을 다음에 마운트할 수 있습니다.어느특별한 경우를 피하기 위해 모든 디렉토리(모든 파일 시스템의 루트 디렉토리 포함)에는 상위 디렉토리를 가리키는 항목이 포함되어야 합니다. 디스크에서 파일 시스템의 루트를 가리키는 상위 디렉터리 항목의 논리적 위치는 파일 시스템의 루트입니다. 파일 시스템의 루트 "위"에는 아무것도 없기 때문입니다. 루트 디렉터리 "위" 개념은 파일 시스템이 계층 구조의 루트가 아닌 다른 위치에 마운트된 경우에만 적용됩니다.

탑재 시 루트 디렉터리의 메모리 복사본에 있는 "상위 디렉터리" 포인터는 탑재 지점 디렉터리의 상위 디렉터리를 가리키도록 다시 쓸 수 있습니다. 마운트 지점 디렉토리에 대한 상위 디렉토리가 없는 경우(즉, 파일 시스템이 로 마운트되고 있는 경우 /) 해당 데이터 조각을 주변에 보관하거나(아마도 이를 가리킬 수 있는 다른 합리적인 장소가 없기 때문에) 처리하십시오. 나중에 별도로 (Kusalananda의 답변에 언급된 /../hostname/path및 사례의 경우일 수 있음 )//hostname/path

결과적으로 를 제외한 모든 디렉토리에서는 특정 /파일 시스템의 루트이든 하위 디렉토리(중첩 수준이든)에서 에 있는 ..해당 디렉토리의 상위 디렉토리를 가리키고 포인터는 를 가리킵니다 . 전자는 자연스러운 느낌을 주는 반면( 항상 같은 방식으로 작동하여 뿌리를 향해 한 단계 이동함), 후자는 약간 특이하지만 적어도 명백히 어떤 것도 깨뜨리지 않습니다(거의/../..피해루트 디렉터리 자체보다 더 멀리 루트 디렉터리로 이동할 수 있는 방법은 없습니다. 예를 들어, 어떤 숫자든 마무리 ../하고 그 숫자를 알 수 있습니다.최소한 오류는 발생하지 않을 것입니다...어느 시점에는 존재하지 않았기 때문입니다 .

답변3

거기그 자체 위의 디렉토리 /. /루트 디렉터리의 상위 디렉터리는 그 자체입니다. cd ..또는 cd ../..루트 디렉터리에서는 오류 없이 동일한 위치에 유지되어야 합니다.

일부 파일 시스템에서는 이들 중 어느 것도 실제 디렉토리 항목으로 존재하지 .않거나 ..존재할 수 있으며 운영 체제의 가상 파일 시스템 계층에 의해 에뮬레이트될 수 있습니다.


이와 같은 경로를 사용하면 /../hostname일부 초기 vfs 이전 및 nfs 이전 시스템에서 다른 호스트의 루트 디렉터리에 액세스할 수 있습니다.유닉스 시스템(사용"뉴캐슬 커넥션") 그러나 아직 그런 시스템이 사용되고 있는지는 모르고 소스 코드도 찾을 수 없습니다.

사용 가능한 정보는 매우 상충되지만 이러한 시스템을 배포하는 가장 일반적인 방법은 다음과 같습니다.재컴파일경로를 사용하는 모든 호출이 사용자 공간에서 리디렉션될 수 있도록 하는 모든 프로그램 open(2)(당시에는 공유 라이브러리가 없었습니다).

아마도 수백 명의 해커가 있을 것입니다(스크래치 박스최신 버전이고 이를 사용해야 했습니다). 따라서 그들이 이를 POSIX 표준에 통합할 필요성을 느낀 이유가 전혀 명확하지 않습니다.

답변4

여기에 언급된 다른 모든 이유 외에도심플한 디자인, UNIX는 이것으로 유명합니다. 모든 카탈로그가 포함되어 있습니다 ... 특수 케이스는 항상 어둠 속에서 걸려 넘어질 위험이 있습니다(안전 또는 건전함을 위해). 따라서 프로그래머가 여러 곳에서 하나의 드문 경우를 처리하도록 강요하는 대신, 모든 디렉토리는 무슨 일이 일어나는지 고려하지 않고도 항목 .을 갖고 ..균일하게 처리되도록 설계할 수 있습니다./

관련 정보