![Linux 루트 디렉터리 이름에 슬래시(/) 부분이 포함되어 있습니까?](https://linux55.com/image/9407/Linux%20%EB%A3%A8%ED%8A%B8%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%20%EC%9D%B4%EB%A6%84%EC%97%90%20%EC%8A%AC%EB%9E%98%EC%8B%9C(%2F)%20%EB%B6%80%EB%B6%84%EC%9D%B4%20%ED%8F%AC%ED%95%A8%EB%90%98%EC%96%B4%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
슬래시( /
)는 실제로 Linux 루트 디렉터리 이름의 일부입니까? 아니면 단지 그것의 상징일까요?
그래서 /etc
뭐?
고쳐 쓰다
/dev/sda2
Linux 루트 디렉터리의 블록 장치라고 가정합니다 .
$sudo debugfs /dev/sda2 debugfs 1.44.1(2018년 3월 24일) 디버그: 비밀번호 [pwd] INODE: 2 경로: / [루트] INODE: 2 경로: / 디버그: 통계/ 인덱스 노드: 2 유형: 디렉토리 모드: 0755 플래그: 0x80000 세대: 0 버전: 0x00000000:00000077 사용자: 0 그룹: 0 프로젝트: 0 크기: 4096 파일 액세스 제어 목록: 0 링크: 25 블록: 8 조각: 주소: 0 수량: 0 크기: 0 ctime: 0x5b13c9f1:3f017990 -- 2018년 6월 3일 일요일 15:28:57 atime: 0x5b13ca0f:3b3ee380 -- 2018년 6월 3일 일요일 15:29:27 시간: 0x5b13c9f1:3f017990 -- 2018년 6월 3일 일요일 15:28:57 crtime: 0x5aad1843:00000000 -- 2018년 3월 17일 토요일 16:59:39 추가 inode 필드 크기: 32 범위: (0):9249
따라서 거기에 inode #2라는 디렉토리가 있지만 이름이 없습니다.
답변1
POSIX.1-2008 표준 표현
단일 경로 이름은
/
프로세스의 루트 디렉터리로 확인되어야 합니다. 빈 경로 이름은 성공적으로 확인되지 않습니다.
표준은 더욱 차별화됩니다.파일 이름그리고경로명. /
루트 디렉터리의 경로 이름입니다. 디렉터리 이름은 "root"이지만 파일 시스템에서는 이름이 없으며 파일 이름도 없습니다. 파일 이름이 있는 경우 해당 이름은 루트 디렉터리 위 디렉터리의 디렉터리 항목이 되며 그러한 디렉터리는 없습니다.
이 문자는 /
경로 구분 기호이므로 파일 이름의 일부가 될 수 없습니다.
명확하게 하기 위해: /
아니요이름루트 디렉토리이지만길그것에, 그것의경로명.
/etc
다른 경로 이름입니다. 이는 해당 디렉토리의 절대 경로입니다 etc
. 경로의 디렉터리 이름은 etc
(파일 이름은 etc
)입니다.
/usr/local/bin/curl
는 실행 파일의 경로 이름으로, 디렉토리의 경로 이름과 동일합니다 curl
./etc
etc
답변2
슬래시는분할기;목차이름구분 기호는 포함하지 않지만전체 경로 이름구분자를 포함합니다.
그래서"루트 수준" /
아니요이름. 대부분의 Unix 계열 시스템에서는 이는 .
및 와 같은 특수한 경우로 처리됩니다 ..
(물론 둘 사이의 루트 수준에서는 차이가 없습니다).
명칭은 다를 수 있습니다. POSIX.1-2017을 예로 들면, 일반적으로 사용되는 일부정의:
-
하나 또는 두 개 이상의 문자로
<slash>
시작하는 경로 이름 도 참조하세요.경로명. -
파일을 식별하는 데 사용되는 문자열입니다. POSIX.1-2008의 맥락에서 경로 이름은 종료 널 바이트를 포함하여 {PATH_MAX} 바이트로 제한될 수 있습니다. 선택적 시작
<slash>
문자가 있고 그 뒤에는 0개 이상의<slash>
문자로 구분된 파일 이름이 옵니다. 경로 이름에는 선택적으로 하나 이상의 후행<slash>
문자가 포함될 수 있습니다. 여러 연속 문자는 정확히 두 개의 선행 문자가 있는 경우를 제외하고<slash>
1과 동일하게 처리됩니다 . 참고: 경로 이름에 이식 가능한 파일 이름 문자 집합의 문자에 해당하는 바이트만 포함된 경우(참조<slash>
<slash>
이식 가능한 파일 이름 문자 집합),<slash>
문자 및 단일 종료<NUL>
문자로 구성된 경우 경로 이름은 지원되는 모든 로케일에서 문자열로 사용됩니다. 그렇지 않으면 경로 이름은 (문자열 대신) 문자열일 수 있습니다. 또한 문자에 대한 단일 바이트 인코딩<slash>
요구 사항은 모든 로케일에서 동일하고 멀티바이트 문자 내에 나타날 수 없기 때문에<slash>
경로 이름이 문자가 아니더라도 경로 이름의 문자에 대한 참조는 잘 정의된 문자열입니다. 그러나 이 속성은 이식 가능한 파일 이름 문자 집합의 나머지 문자에 반드시 적용되는 것은 아닙니다. -
파일 이름 보기파일 이름.
-
{NAME_MAX}
파일 이름을 지정하는 데 사용되는 1부터 바이트까지의 바이트 시퀀스입니다 . 이름을 구성하는 바이트에는<NUL>
또는<slash>
문자가 포함될 수 없습니다. 경로 이름의 맥락에서 각 파일 이름 뒤에는 하나<slash>
이상의<NUL>
문자가 와야 합니다. 다른 곳에서는 파일 이름 뒤에 문자가 오면<NUL>
문자열을 형성합니다(반드시 문자열일 필요는 없음). 파일 이름가리키다그리고dot-dot
특별한 의미가 있습니다. 파일 이름은 "경로 이름 구성 요소"라고도 합니다. 당신은 또한 볼 수 있습니다경로명.
그러니까... 찾고 계시다면밝히다, 그게 첫 번째 목적지가 아닐 수도 있습니다. 이런 튜토리얼유닉스 개념이 페이지는 예를 들어 "전체 경로 이름"이 "절대" 경로 이름과 동의어라는 점을 지적하는 데 도움이 됩니다.
답변3
Unix에서는 파일(디렉토리는 파일일 뿐입니다)에는 "이름"이 없습니다.링크이름이 있고 링크는 이름을 파일에 매핑하는 디렉터리의 항목입니다.
너가능한말하다, 링크하다주다파일 이름. 단, 참고 사항: 이는 여러 링크를 가질 수 있으므로 파일이 여러 이름을 가질 수 있음을 의미합니다.
루트 디렉터리는 루트 디렉터리일 뿐이므로 연결될 수 있는 "상위" 디렉터리가 없으므로 연결된 이름을 가질 수 없습니다. 이론적으로는 다른 디렉터리의 루트 디렉터리에 대한 링크를 추가하는 것이 가능하지만 대부분의 Unices는 파일 시스템 계층 구조(실제로 방향성 그래프)에서 사이클이 발생할 수 있고 그래프에서 감지 루프가 비용이 많이 들기 때문에 기존 디렉터리에 링크를 추가하는 것을 금지합니다. 커널에서 이름을 확인하려고 할 때 이를 감지하지 못하면 무한 재귀가 발생할 수 있습니다.
그래서 기본적으로 루트 디렉터리에는 이름을 기록할 수 있는 디렉터리가 없기 때문에 이름이 없습니다.
다른 답변에서 지적했듯이 이름과 경로(이름)를 구별해야 합니다. 루트 디렉토리할 수 있는path(name) 으로 참조됩니다 /
.
답변4
"이름"이라는 단어는 사용에 있어 다소 융통성이 있습니다. "완전한 경로 이름"을 나타낼 수 있으며, "디렉토리 항목"을 나타낼 수 있습니다.
예를 들어, /etc/foo
및 /var/tmp/../../etc/foo
및 는 /tmp/../../../../../../foo
모두 동일한 파일을 참조하는 방법입니다.이름, 디렉토리에 있을 foo
때와 동일합니다 /etc
.
그럼 기본으로 돌아가 보겠습니다.
유닉스의 파일 이름은 다음 부분으로 구성됩니다.요소디렉토리 구분 기호로 구분됩니다 /
. 구성 요소에 대한 거의 유일한 제한 사항은 /
또는 NUL 문자를 포함할 수 없다는 것입니다.
따라서 "완전한 경로 이름"은 /etc
완전한 문자열입니다: /etc
. 이는 etc
루트 디렉터리에 구성 요소가 있음을 의미합니다.
마찬가지로 구성요소는 디렉토리에 /x/y/z/foo
있습니다 .foo
/x/y/z
이제 루트 디렉터리는 상위 디렉터리에 구성 요소가 없기 때문에 고유합니다.오직이름으로 전체 경로 이름이 있습니다: /
.