루트 디렉토리가 왜 / 기호로 표시됩니까?


95

Google에서 이에 대한 조사를 수행했지만 결과가 흐려졌습니다. /루트 디렉토리를 나타내는 데 왜 부호가 사용됩니까? 그 뒤에 확실한 이유가 있습니까?


12
이유는 '/'가 디렉토리 구분 기호이고 루트 디렉토리 자체에는 이름이없는 반면, 빈 이름 끝에 추가 cd /home하는 것과 동일 하게 해당 디렉토리에 액세스 할 수 있기 때문입니다. cd /home//
SF.

2
이것을 읽었습니까 : en.wikipedia.org/wiki/Root_directory ?
Kevdog777

11
내부에서 볼 때 보이는 디렉토리 트리의 경계이기 때문에 이름이 없습니다. 가시적 인 디렉토리 계층은 경로 이름 조회가 chroot()호출을 통해 수정 된 경우와 같이 더 큰 계층의 하위 트리 일 수 있지만 내부에서 볼 때 추상화됩니다.
Thomas Nyman

14
빈 줄이 끔찍한 선택 이었기 때문에!
Bakuriu

3
언급 된 것 외에도 /를 사용하여 루트를 나타내면 절대 및 상대 경로 이름 측면에서 특정 부작용이 발생합니다. /some/dirALWAYS는 (root)/some/dirwhile some/dir이 항상 현재 작업 디렉토리에 상대적 임을 의미 합니다. 이 원칙은 또한 웹 URL 사용으로 양도 할 수 있습니다.
Tor Valamo

답변:


108

슬래시 /는 유닉스 계열 운영 체제 에서 경로의 디렉토리를 구분하는 구분 문자입니다 . 이 캐릭터는 1970 년대 언젠가 선택된 것으로 보이며, 일화 소스에 따르면 , 그 이유는 Multics 운영 체제 인 Unix의 전신 이 >캐릭터를 경로 구분자로 사용했지만 Unix의 디자이너는 이미 예약 한 것과 관련이있을 수 있습니다 문자 ><다중 레벨 파일 시스템을 갖기 전에 쉘 명령 행에서 I / O 재 지정을 나타냅니다. 따라서 파일 시스템을 설계 할 때가되면 경로 이름 요소 분리를 나타내는 다른 문자를 찾아야했습니다.

여기서 주목해야 할 것은 1970 년대에 일반적으로 사용되는 Lear-Siegler ADM-3A 터미널에서 홈 디렉토리를 나타내는 데 문자를 사용하는 관행에서 ~비롯된 것입니다 . /키는 키 옆에 있습니다 >.

Lear-Siegler ADM-3A 터미널의 키보드 레이아웃

루트 디렉토리가 single로 표시되는 이유는 루트 디렉토리가 /디렉토리 계층 구조의 최상위 디렉토리이며 다른 디렉토리가 그 아래에있을 수 있다는 사실에 영향을받는 경우가 많습니다. 루트 디렉토리 외부의 것을 참조하는 이유. 마찬가지로 디렉토리 항목 자체는 보이는 디렉토리 트리의 경계이기 때문에 이름이 없습니다.


2
"다른 디렉토리가 그 아래에있을 수 있지만 일반적으로 루트 디렉토리 외부의 것을 참조 할 이유는 없습니다." 나는 이것을 이해하지 못한다. "아래"가 어떤 방향을 의미하는지 잘 모르겠지만 ,에 계층 구조가 "외부"라는 것은 없습니다/ . 유닉스 파일 시스템은 다양한 드라이브에 대한 마운트 지점이있는 단일 트리입니다.
Alexis

4
또한 새로운 루트 이외의 chroot것은 액세스 할 수 없지만 이것이 존재하지 않는다는 것을 의미하지는 않습니다.
밥슨

1
@Gilles, 드라이브의 물리적 위치는 문제가되지 않습니다. 모든 디스크 파티션은 그런 의미에서 루트 파티션 외부에 있지만 장착 에 따라 파일 시스템 계층 구조에서 루트. Bobson, chroot에 대한 좋은 점이지만 Thomas가 말한 내용과 맞지 않습니다. chroot 이후 "root는 이유가 없습니다"라고 시스템 루트 외부로 나가는 것이 아닙니다. 그것은 불가능. 유닉스 에서 파일 시스템의 모든 것은 루트 아래에 있습니다.
Alexis

1
"chroot 이후에 시스템 루트 외부로 나가는 것이"일반적으로 이유가 없다 "는 것이 아닙니다. 불가능합니다." 이것은 명백한 잘못입니다. 시간이에 chroot()소개 된, 그것은 전혀 감옥 같은 속성을 가지고 있지 않았다 , 그것은 단지 경로 해상도에 영향을. 오늘날에도 특권 프로세스 의도적 으로 chroot에서 벗어날 수 있습니다 . 나는 또한 이전 의견chroot() 에서 언급 했다 .
Thomas Nyman

4
IIRC는 멀 틱스 규칙에만 사용하지 >디렉토리 구분 기호로,뿐만 아니라 <상위 디렉토리를 참조 : <자체에 해당했다가 .., 반면 <foo에 해당했다 ../foo. 나는 항상 미적으로 기쁘게 생각합니다.
Mark Reed

55

오늘날 우리가 아는 첫 번째 계층 파일 시스템Multics 용으로 설계되었습니다 . 이 설계는 RC Daley와 PG Neumann의 “보조 저장 소용 범용 파일 시스템”에 설명되어 있습니다. 이 파일 시스템의 두드러진 특징은 디렉토리는 다른 파일과 같이 디렉토리에 포함될 수있는 파일이라는 것입니다. 파일 구조는 모든 비 리프 노드가 디렉토리 인 트리를 형성합니다. 트리의 루트는 항상 디렉토리입니다. 각 파일에는 상위 디렉토리 내에서 고유 한 이름 ( 항목 이름 )이 있습니다. 루트 디렉토리는 다른 디렉토리에 포함되어 있지 않으므로 이름이 없습니다.

파일을 지정하려면 트리 루트의 경로를 설명해야합니다. 멀 틱스는 자연스러운 구문 채택 경로 이름 경우 P디렉토리의 경로와 F다음, 파일의 이름을 호출 한 파일의 구문은 그 경로 디렉토리 내부 .P>FFP

디렉토리에 부담을 느끼고 싶지 않은 시간 동안 Multics는 working directory 라는 개념을 가지고있었습니다 . 디렉토리 표시가없는 Bare 파일 이름은 작업 디렉토리의 파일로 해석됩니다.

이러한 규칙을 결합 foo하면 작업 디렉토리의 파일입니다. 작업 디렉토리 foo>bar의 하위 디렉토리 foo에 있는 파일 등입니다. 이 규칙은 상대 경로를 설명하지만 루트 디렉토리에서 시작하여 절대 경로를 작성하려면 보충 규칙이 필요합니다. 왼쪽에서 오른쪽으로 경로 이름을 읽는 것은 루트에서 나무의 잎으로 이동하는 것과 일치하므로 루트는 경로 이름 왼쪽에 특수 마커로 표시해야합니다. 파일 이름은 절대로 비어 있지 않기 때문에 (혼란하기 쉬우므로) 상대 경로 이름이 문자로 시작하지 않으므로 >절대 경로 이름을 쉽게 표시 할 수 있습니다. 따라서 >foo라는 파일 foo의 루트 디렉토리에이 >foo>bar라는 파일입니다 bar라는 디렉토리에이foo루트 디렉토리 등에서. 이것은 루트 디렉토리를 남깁니다. 이것은 빈 문자열 일 수 있습니다. 그러나 빈 문자열을 경로 이름으로 사용하는 것이 편리하지 않은 경우가 종종 있습니다. 대신 >첫 번째 문자가 인 경우에만 경로 이름이 절대적이라는 추가 이점이 >있습니다.

Unix는이 디자인을 Multics에서 채택했습니다. Unix는 >명령 셸에서 출력 리디렉션에 이미 문자 를 사용 했으므로 디자이너/경로 이름에서 디렉토리를 구분 하기 위해 다른 문자 를 선택했습니다 .


11

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#^}"

이러한 유형의 코딩은 유닉스 스타일 경로를 다룰 때 여전히 필요한 경우가 있지만 그 수가 적습니다.


8
"슬래시는 타이핑하기 쉬우 며 이동이 필요 없습니다." 어쩌면 당신은 연못을 가로 질러 쉽게이 하차하지만, 여기에 핀란드에서 우리는 변화를 누릅니다하지 뿐만 아니라 모든 숫자 행에 걸쳐 도달 할 뿐만 아니라. ; P
Thomas Nyman

1
@ThomasNyman 외국 키보드 레이아웃은 아마도 Ken Thompson에게는 관심사가되지 않았을 것입니다. 슬래시는 유닉스 개발자와 초기 사용자에게 쉽게 입력 할 수있었습니다.
Kaz

1
그럴 수 있지. 나는 주로 농담했지만, 오랜 유산을 가진 소프트웨어의 일부 특성이 현대 하드웨어의 특성으로 어떻게 설명 될 수 있는지 흥미롭고 때로는 재미 있습니다 .
Thomas Nyman

@ThomasNyman Haha, Bill Joy가 로그인하여 해당 ADM-3A 페이지에서 {citation-needed} 부분을 업데이트하면 "Wikidickhead"가 "이 기사에는 독창적 인 연구 내용이 포함되어 있습니다"라는 내용이 표시됩니다. :)
Kaz

@ThomasNyman, 이제 /오른발을 사용하여 입력 할 수있는 "페달"키보드가 있다고 생각 합니다. 피아노 연주처럼.
Pacerier
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.