내 생각 mkdir ~/a
엔 2~3개 정도인 것 같다.
- 해당 디렉토리에 1개의 항목(
~/a
) 이 있습니다. - 자체에는 1개의 항목이 있습니다(
cd a && ls .
). - 및/또는 다시 자신을 위한 항목 1개 추가(
cd a && ls ..
)
누군가 이것이 2인지 3인지 명확히 할 수 있습니까?
답변1
빈 디렉터리에서:
% stat .
File: `.'
Size: 6 Blocks: 0 IO Block: 4096 directory
Device: fe04h/65028d Inode: 537317737 Links: 2
Access: (0750/drwxr-x---) Uid: ( 1000/stribika) Gid: ( 100/ users)
Access: 2011-02-22 08:47:20.935036074 +0100
Modify: 2011-02-22 08:47:20.935036074 +0100
Change: 2011-02-22 08:47:20.935036074 +0100
Birth: -
% mkdir foo
% stat .
File: `.'
Size: 16 Blocks: 0 IO Block: 4096 directory
Device: fe04h/65028d Inode: 537317737 Links: 3
Access: (0750/drwxr-x---) Uid: ( 1000/stribika) Gid: ( 100/ users)
Access: 2011-02-22 08:47:20.935036074 +0100
Modify: 2011-02-22 08:47:57.465036072 +0100
Change: 2011-02-22 08:47:57.465036072 +0100
Birth: -
% stat foo
File: `foo'
Size: 6 Blocks: 0 IO Block: 4096 directory
Device: fe04h/65028d Inode: 509269 Links: 2
Access: (0750/drwxr-x---) Uid: ( 1000/stribika) Gid: ( 100/ users)
Access: 2011-02-22 08:47:57.465036072 +0100
Modify: 2011-02-22 08:47:57.465036072 +0100
Change: 2011-02-22 08:47:57.465036072 +0100
Birth: -
보시다시피, 빈 디렉토리에 대한 링크가 2개 있습니다. 그 안에 새 디렉토리를 생성하면 링크 수가 3으로 증가합니다. 또한 새 디렉터리에 대한 링크가 2개 있습니다. 총 3개의 새로운 링크가 있습니다.
이는 각 디렉토리에 자체 링크(.)와 상위 디렉토리(..)가 있기 때문입니다.
답변2
원래 Unix 구현에서는 커널의 파일 시스템 코드를 단순하게 유지하기 위해 디렉토리 조작기가 몇 가지 추가 작업을 수행했습니다. 특히 mkdir /parent/a
in에 대한 항목과 in(자신을 가리키는) 항목 및 in( 1)을 가리킨다.a
/parent
.
a
a
..
a
/parent
곧 친구들의 코드가 mkdir
커널로 옮겨졌지만 파일 시스템 형식에는 여전히 명시적인 .
항목 ..
과 파일 시스템 순회 코드가 이름별로 발견되었습니다(각 디렉토리에 특별히 형식화된 두 개의 포인터가 있는 대신).
요즘 일부(대부분?) 파일 시스템은 이를 위조합니다. 디렉토리에는 실제로 디스크에 항목이 없으며 .
드라이버에 의해 생성됩니다. ..
그러나 사용자의 관점에서 보면 이는 투명합니다. 디렉토리의 링크 수는 여전히 2에 하위 디렉토리 수(상위 디렉토리의 항목, 디렉토리 자체 .
및 각 하위 디렉토리의 항목 ..
)를 더한 값입니다. 특히, 빈 디렉터리의 링크 수는 2입니다(즉, 파일 시스템에 해당 디렉터리를 가리키는 두 개의 항목이 있음). 하지만 이를 생성하면 세 개의 항목이 생성됩니다(세 번째 항목은 ..
상위 디렉터리를 가리킴).
1
이름이 아닌 참조로. 따라서 이름을 바꾸면 /parent
파일 시스템 구조에서 이동된 위치에 상관없이 계속 a
해서 상위 디렉토리를
..
가리킵니다 .a