*nix에서 새 디렉토리를 생성하면 몇 개의 항목이 생성됩니까?

*nix에서 새 디렉토리를 생성하면 몇 개의 항목이 생성됩니까?

내 생각 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/ain에 대한 항목과 in(자신을 가리키는) 항목 및 in( 1)을 가리킨다.a/parent.aa..a/parent

곧 친구들의 코드가 mkdir커널로 옮겨졌지만 파일 시스템 형식에는 여전히 명시적인 .항목 ..과 파일 시스템 순회 코드가 이름별로 발견되었습니다(각 디렉토리에 특별히 형식화된 두 개의 포인터가 있는 대신).

요즘 일부(대부분?) 파일 시스템은 이를 위조합니다. 디렉토리에는 실제로 디스크에 항목이 없으며 .드라이버에 의해 생성됩니다. ..그러나 사용자의 관점에서 보면 이는 투명합니다. 디렉토리의 링크 수는 여전히 2에 하위 디렉토리 수(상위 디렉토리의 항목, 디렉토리 자체 .및 각 하위 디렉토리의 항목 ..)를 더한 값입니다. 특히, 빈 디렉터리의 링크 수는 2입니다(즉, 파일 시스템에 해당 디렉터리를 가리키는 두 개의 항목이 있음). 하지만 이를 생성하면 세 개의 항목이 생성됩니다(세 번째 항목은 ..상위 디렉터리를 가리킴).

1 이름이 아닌 참조로. 따라서 이름을 바꾸면 /parent파일 시스템 구조에서 이동된 위치에 상관없이 계속 a해서 상위 디렉토리를 ..가리킵니다 .a

관련 정보