Google에서 이에 대한 조사를 수행했지만 결과가 흐려졌습니다. /
루트 디렉토리를 나타내는 데 왜 부호가 사용됩니까? 그 뒤에 확실한 이유가 있습니까?
답변
슬래시 /
는 유닉스 계열 운영 체제 에서 경로의 디렉토리를 구분하는 구분 문자입니다 . 이 캐릭터는 1970 년대 언젠가 선택된 것으로 보이며, 일화 소스에 따르면 , 그 이유는 Multics 운영 체제 인 Unix의 전신 이 >
캐릭터를 경로 구분자로 사용했지만 Unix의 디자이너는 이미 예약 한 것과 관련이있을 수 있습니다 문자 >
및 <
다중 레벨 파일 시스템을 갖기 전에 쉘 명령 행에서 I / O 재 지정을 나타냅니다. 따라서 파일 시스템을 설계 할 때가되면 경로 이름 요소 분리를 나타내는 다른 문자를 찾아야했습니다.
여기서 주목해야 할 것은 1970 년대에 일반적으로 사용되는 Lear-Siegler ADM-3A 터미널에서 홈 디렉토리를 나타내는 데 문자를 사용하는 관행에서 ~
비롯된 것입니다 . /키는 키 옆에 있습니다 >.
루트 디렉토리가 single로 표시되는 이유는 루트 디렉토리가 /
디렉토리 계층 구조의 최상위 디렉토리이며 다른 디렉토리가 그 아래에있을 수 있다는 사실에 영향을받는 경우가 많습니다. 루트 디렉토리 외부의 것을 참조하는 이유. 마찬가지로 디렉토리 항목 자체는 보이는 디렉토리 트리의 경계이기 때문에 이름이 없습니다.
답변
오늘날 우리가 아는 첫 번째 계층 파일 시스템 은 Multics 용으로 설계되었습니다 . 이 설계는 RC Daley와 PG Neumann의 “보조 저장 소용 범용 파일 시스템”에 설명되어 있습니다. 이 파일 시스템의 두드러진 특징은 디렉토리는 다른 파일과 같이 디렉토리에 포함될 수있는 파일이라는 것입니다. 파일 구조는 모든 비 리프 노드가 디렉토리 인 트리를 형성합니다. 트리의 루트는 항상 디렉토리입니다. 각 파일에는 상위 디렉토리 내에서 고유 한 이름 ( 항목 이름 )이 있습니다. 루트 디렉토리는 다른 디렉토리에 포함되어 있지 않으므로 이름이 없습니다.
파일을 지정하려면 트리 루트의 경로를 설명해야합니다. 멀 틱스는 자연스러운 구문 채택 경로 이름 경우 P
디렉토리의 경로와 F
다음, 파일의 이름을 호출 한 파일의 구문은 그 경로 디렉토리 내부 .P>F
F
P
디렉토리에 부담을 느끼고 싶지 않은 시간 동안 Multics는 working directory 라는 개념을 가지고있었습니다 . 디렉토리 표시가없는 Bare 파일 이름은 작업 디렉토리의 파일로 해석됩니다.
이러한 규칙을 결합 foo
하면 작업 디렉토리의 파일입니다. 작업 디렉토리 foo>bar
의 하위 디렉토리 foo
에 있는 파일 등입니다. 이 규칙은 상대 경로를 설명하지만 루트 디렉토리에서 시작하여 절대 경로를 작성하려면 보충 규칙이 필요합니다. 왼쪽에서 오른쪽으로 경로 이름을 읽는 것은 루트에서 나무의 잎으로 이동하는 것과 일치하므로 루트는 경로 이름 왼쪽에 특수 마커로 표시해야합니다. 파일 이름은 절대로 비어 있지 않기 때문에 (혼란하기 쉬우므로) 상대 경로 이름이 문자로 시작하지 않으므로 >
절대 경로 이름을 쉽게 표시 할 수 있습니다. 따라서 >foo
라는 파일 foo
의 루트 디렉토리에이 >foo>bar
라는 파일입니다 bar
라는 디렉토리에이foo
루트 디렉토리 등에서. 이것은 루트 디렉토리를 남깁니다. 이것은 빈 문자열 일 수 있습니다. 그러나 빈 문자열을 경로 이름으로 사용하는 것이 편리하지 않은 경우가 종종 있습니다. 대신 >
첫 번째 문자가 인 경우에만 경로 이름이 절대적이라는 추가 이점이 >
있습니다.
Unix는이 디자인을 Multics에서 채택했습니다. Unix는 >
명령 셸에서 출력 리디렉션에 이미 문자 를 사용 했으므로 디자이너 는 /
경로 이름에서 디렉토리를 구분 하기 위해 다른 문자 를 선택했습니다 .
답변
Unix의 경로 이름 구성 요소에서는 두 문자 만 사용할 수 없습니다. 널 문자는 C (커널 언어)로 문자열을 종료하고 슬래시는 경로 구분 기호로 예약되어 있습니다. 또한 경로 구성 요소는 빈 문자열 일 수 없습니다.
따라서 경로 이름에는 슬래시와 구성 요소의 두 가지 토큰 만 있습니다.
새로운 토큰을 추가하지 않고 상대 경로와 절대 경로의 두 가지 유형의 경로를 지원 한다고 가정합니다 . 또한 이름이없는 루트 디렉토리를 참조하려고합니다 (이름이있는 상위 디렉토리가 없음).
슬래시 만 사용하여 상대 경로, 절대 경로를 나타내고 루트 디렉토리를 참조하는 방법은 무엇입니까?
언어를 확장하는 가장 확실한 방법은 (새로운 토큰 도입 이외의) 새로운 구문을 만드는 것입니다 : 잘못된 구문 인 토큰의 조합에 새로운 의미를 부여하십시오.
슬래시로 시작하는 경로는 의미가 없으므로 “이 경로는 상대 경로가 아니라 절대 경로”라는 표시로 선행 슬래시를 사용하지 마십시오.
슬래시 만 포함하는 경로도 유효하지 않으므로 “루트 디렉토리”라는 의미를 지정하지 마십시오.
절대 경로가 루트 디렉토리에서 검색을 시작하기 때문에이 두 의미는 서로 연결됩니다. 다시 말해서 슬래시가 다음과 같은 의미를 갖는 것으로 간주 될 수 있습니다.
- 루트 디렉토리로 이동하여 슬래시 문자를 사용하십시오.
- 경로에 더 많은 재료가 있으면 상대 경로로 처리하십시오. 그렇지 않으면 완료됩니다.
그런 다음, 끝에 슬래시를 넣을 수도 있습니다. “이 경로는 마지막 경로 구성 요소가 일반 파일이나 다른 유형의 객체가 아닌 디렉토리의 이름임을 나타냅니다. 후행 슬래시는 해당 디렉토리를 다음과 유사하게 나타냅니다. 선행 슬래시가 루트 디렉토리를 나타내는 방식입니다. “
위의 모든 구문을 사용하면 이중 슬래시, 삼중 슬래시 등 할당되지 않은 의미의 구문이 있습니다.
다른 토큰을 소개하고 다르게하는 것이 어떻습니까? 디자이너가 일반적으로 최소한의 접근 방식을 취했기 때문일 수 있습니다. (왜 잘못된 작업을 수행 할 때 ed
편집기에 왜 A 만 표시 ?
됩니까?) 슬래시는 입력하기 쉬우 며 이동이 필요 없습니다. 토큰 유형이 두 개 (컴포넌트 및 슬래시) 인 경로 언어는 기억하고 사용하기 쉽습니다.
또 다른 중요한 고려 사항은 문자열 표현 만 사용하여 경로를 쉽게 조작 할 수 있다는 것입니다. 예를 들어, 새로운 부모 디렉토리에 대한 절대 경로를 “루트”할 수 있습니다 :
OLD_PATH=/old/path
NEW_HOME=/new/home
NEW_PATH="$NEW_HOME$OLD_PATH" /new/home/old/path
주요 달러 기호 또는 기타 다른 방법으로 절대 경로를 표시하면 작동하지 않습니다.
OLD_PATH=^old/path # ^ means absolute path
NEW_HOME=^new/home
# now we need more string kung-fu than just catenation
NEW_PATH="$NEW_HOME/${OLD_PATH#^}"
이러한 유형의 코딩은 유닉스 스타일 경로를 다룰 때 여전히 필요한 경우가 있지만 그 수가 적습니다.