Linux 루트 디렉터리 이름에 슬래시(/) 부분이 포함되어 있습니까?

Linux 루트 디렉터리 이름에 슬래시(/) 부분이 포함되어 있습니까?

슬래시( /)는 실제로 Linux 루트 디렉터리 이름의 일부입니까? 아니면 단지 그것의 상징일까요?

그래서 /etc뭐?

고쳐 쓰다

/dev/sda2Linux 루트 디렉터리의 블록 장치라고 가정합니다 .

$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./etcetc

답변2

슬래시는분할기;목차이름구분 기호는 포함하지 않지만전체 경로 이름구분자를 포함합니다.

그래서"루트 수준" /아니요이름. 대부분의 Unix 계열 시스템에서는 이는 .및 와 같은 특수한 경우로 처리됩니다 ..(물론 둘 사이의 루트 수준에서는 차이가 없습니다).

명칭은 다를 수 있습니다. POSIX.1-2017을 예로 들면, 일반적으로 사용되는 일부정의:

  • 3.2 절대 경로 이름

    하나 또는 두 개 이상의 문자로 <slash>시작하는 경로 이름 도 참조하세요.경로명.

  • 3.271 경로명

    파일을 식별하는 데 사용되는 문자열입니다. POSIX.1-2008의 맥락에서 경로 이름은 종료 널 바이트를 포함하여 {PATH_MAX} 바이트로 제한될 수 있습니다. 선택적 시작 <slash>문자가 있고 그 뒤에는 0개 이상의 <slash>문자로 구분된 파일 이름이 옵니다. 경로 이름에는 선택적으로 하나 이상의 후행 <slash>문자가 포함될 수 있습니다. 여러 연속 문자는 정확히 두 개의 선행 문자가 있는 경우를 제외하고 <slash>1과 동일하게 처리됩니다 . 참고: 경로 이름에 이식 가능한 파일 이름 문자 집합의 문자에 해당하는 바이트만 포함된 경우(참조<slash><slash>

    이식 가능한 파일 이름 문자 집합), <slash>문자 및 단일 종료 <NUL>문자로 구성된 경우 경로 이름은 지원되는 모든 로케일에서 문자열로 사용됩니다. 그렇지 않으면 경로 이름은 (문자열 대신) 문자열일 수 있습니다. 또한 문자에 대한 단일 바이트 인코딩 <slash>요구 사항은 모든 로케일에서 동일하고 멀티바이트 문자 내에 나타날 수 없기 때문에 <slash>경로 이름이 문자가 아니더라도 경로 이름의 문자에 대한 참조는 잘 정의된 문자열입니다. 그러나 이 속성은 이식 가능한 파일 이름 문자 집합의 나머지 문자에 반드시 적용되는 것은 아닙니다.

  • 3.272 경로명 구성요소

    파일 이름 보기파일 이름.

  • 3.170 파일 이름

    {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

이제 루트 디렉터리는 상위 디렉터리에 구성 요소가 없기 때문에 고유합니다.오직이름으로 전체 경로 이름이 있습니다: /.

관련 정보