Linux에서 폴더/디렉토리를 만들 때 링크 값 "2" 뒤에 숨은 논리를 처음으로 이해하도록 도와줄 수 있는 사람이 있습니까?
많이 검색했지만 만족스러운 논리를 찾지 못했습니다.
답변1
Unix 파일 시스템의 기본 설계는 초기로 거슬러 올라갑니다. 이는 논문에 설명되어 있습니다.UNIX 시간 공유 시스템저자: Dennis M. Rich 및 Ken Thompson.
디자이너는 현재 디렉터리를 참조하고 디렉터리에서 상위 디렉터리로 이동할 수 있는 방법을 원했습니다. 특별한 쉘 구문을 도입하는 대신, 그들은 이미 존재하는 기능을 사용하기로 결정했습니다. 즉, 디렉터리는 다른 디렉터리에 대한 항목을 포함할 수 있으므로 특별한 이름을 가진 항목은 .
항상 디렉터리 자체를 가리키고 특별한 이름을 가진 항목은 항상 디렉터리 자체를 가리키기로 결정했습니다. 디렉토리 자체. name은 ..
항상 디렉터리의 상위 디렉터리를 가리킵니다. 예를 들어 루트 디렉터리에 라는 하위 디렉터리가 포함된 경우 항목 foo
은 루트 디렉터리를 가리키고 항목 은 자신을 가리킵니다 .foo
..
foo
.
foo
따라서 하위 디렉토리가 없는 디렉토리의 경우 디렉토리의 링크 수(디렉토리를 가리키는 디렉토리 항목 수)는 항상 2입니다. 즉, 상위 디렉토리의 예상 항목에 디렉토리를 더한 값입니다 .
. 각 하위 디렉토리에는 각 항목에 대해 1씩 증가하는 링크 수가 있습니다 ..
.
특수 항목 .
은 ..
처음에 mkdir
파일 시스템의 디스크 표현을 사용하여 직접 정리하는 명령에 의해 생성됩니다. 이후 시스템에서는 이를 커널로 옮겼습니다. 오늘날 많은 파일 시스템에는 더 이상 디스크 표현 항목이 포함되지 않습니다 .
. ..
파일 시스템 드라이버는 그럴 필요가 없으며 디렉터리의 상위 디렉터리 위치를 항상 기억한다면 필요하지 않습니다(이로 인해 메모리 소비가 약간 증가하며 오늘날 표준에서는 무시할 수 있지만 1970년대 표준에서는 그렇지 않습니다) .
. ..
디스크 .
와 ..
항목이 포함된 파일 시스템에서 파일 시스템 드라이버는 이러한 항목이 항상 존재하는지 확인합니다. 디스크 표현에 이러한 항목이 포함되지 않은 파일 시스템에서 파일 시스템 드라이버는 이러한 항목이 존재하는 것처럼 가장합니다.
답변2
디렉터리당 링크 수는 2개 이상입니다.
- 상위 디렉터리에서 이 디렉터리에 대한 참조
- 디렉토리의 자기 참조(
.
)
예: 일부 기본 디렉터리에 디렉터리가 있다고 가정합니다 foo
.
$ ls -i /basedir
1056868 foo
$ ls -ia /basedir/foo
1056868 . 1056849 ..
이 ls
옵션은 -i
디렉토리 항목의 inode 번호를 표시합니다. 이 옵션은 -a
점으로 시작하는 항목을 표시합니다( ls
기본적으로 표시되지 않음). 동일한 inode 번호를 가지고 있다는 /basedir/foo
점 에 유의하십시오 . /basedir/foo/.
해당 인덱스 노드에 대한 서로 다른 참조가 (적어도) 2개 있으므로 해당 인덱스 노드의 링크 수는 2개(또는 그 이상)입니다.