새 디렉토리에 추가하기 전에 하드 링크 수가 2 인 이유는 무엇입니까?


38

newDirectory 디렉토리를 만든 다음 ls -ld 명령을 수행한다고 가정 해보십시오. 하드 링크의 수가 2임을 알 수 있습니다. 처음부터 하드 링크 2를 정확히 만드는 것은 무엇입니까? 또한 현재 디렉토리의 하위 디렉토리 수는 하드 링크 수-2와 동일합니까?


답변:


39

역사적 으로 첫 번째 Unix 파일 시스템은 모든 디렉토리 .에 디렉토리 자체를 ..가리키는 것과 부모를 가리키는 두 개의 항목을 만들었습니다 . 이를 통해 응용 프로그램과 OS 자체 모두에서 파일 시스템을 쉽게 탐색 할 수 있습니다.

따라서 각 디렉토리의 링크 수는 2 + n이며 여기서 n은 하위 디렉토리의 수입니다. 링크는 상위 디렉토리에있는 해당 디렉토리의 .항목, 디렉토리 자체의 항목 및 ..각 서브 디렉토리 의 항목입니다. 예를 들어, 이것이 /parent모든 디렉토리 에서 루트로 지정된 서브 트리의 컨텐츠라고 가정하십시오 .

/parent
/parent/dir
/parent/dir/sub1
/parent/dir/sub2
/parent/dir/sub3

그리고 dir5의 링크 카운트가 다음 dir의 항목 /parent.의 항목 /parent/dir, 그리고 세 가지 ..의 각 항목을 /parent/dir/sub1, /parent/dir/sub2하고 /parent/dir/sub3. 이후 /parent/dir/sub1하위 디렉토리가 없습니다, 해당 링크의 수는 2 (은 IS sub1의 항목 /parent/dir.항목 /parent/dir/sub1).

“적절한”부모가없는 루트 디렉토리에 대한 특수 케이스의 양을 최소화하기 위해 루트 디렉토리에는 ..자체를 가리키는 항목이 포함 됩니다. 이 방법은,도 2의 링크 카운트 플러스 하위 디렉토리의 수, 두 존재가 /./...

나중에 파일 시스템은 메모리의 상위 디렉토리를 추적하고 일반적으로 필요하지 않는 경향이있다 ...실제 항목으로 존재; 전형적인 현대 유닉스 시스템의 치료 ...특수 값으로 파일 시스템 유형에 독립적 인 파일 시스템 코드의 한 부분으로. 일부 파일 시스템은 여전히 디스크에 아무 것도 나타나지 않더라도 항목 ...항목을 포함 하거나 가장합니다.

대부분의 파일 시스템은 항목 ...존재 여부에 관계없이 디렉토리에 대해 링크 수를 2 + n으로보고 하지만 예외가 있습니다 (예 : btrfs가이를 수행하지 않음).


4
..부모를 가리키는 것은 현재 디렉토리의 링크 수에 영향을 미치지 않습니다. 2의 수 .와 디렉토리의 (원래) 이름 목록 자체 에서 나옵니다 . 당신이 그것을 넣어하는 방법은 약간 모호하고,이 같은 소리하게 .하고 ..두이다. ..수학이에게 어떻게 작동하는지 설명에만 사용해야합니다 2+n:)
th3an0maly

@ th3an0maly 부모를 가리키는 것은 부모의 링크 수에 영향을줍니다. “각 하위 디렉토리의 .. 항목”이 어떻게 모호한 지 알지 못하며“디렉토리 이름 목록 자체”의 의미를 이해하지 못합니다.
Gilles 'SO- 악마 그만'

실제로,이 답변 : unix.stackexchange.com/a/101516/160264 는 내가 암시 한 바입니다 . 당신의 대답이 맨 위에 있기 때문에 내가 당신의 대답을 읽은 후에 그것을 읽으십시오.
th3an0maly 2016 년

@ th3an0maly 나는 아직도 당신이 무엇을 암시하는지 전혀 모른다. 암시하는 대신 명확하게 표현할 수 있습니까?
Gilles 'SO- 악마 그만해'

@goldilocks의 대답은 분명합니다. 내가 말하고자하는 것은 당신의 대답이 그의 것과 비슷할 수 있다는 것입니다. 그러나 나는 당신의 대답을 읽을 때 그의 대답을 읽지 못했습니다. 첫 번째 줄은 원래의 의견에서 "디렉토리 자체와 .내부에 하나씩 있습니다." 여전히 확실하지 않은 경우 더 이상 명확하게 설명 할 수 없습니다. 내가 더 잘 할 수있는 것은 여기에 그의 대답을 복사하여 붙여 넣는 것입니다.
th3an0maly 2016 년

13

디렉토리 자체와 .내부에 하나가 있습니다.

또한 현재 디렉토리의 하위 디렉토리 수는 하드 링크 수-2와 동일합니까?

각 서브 디렉토리는 ..하드 링크를 작성 하고 그 이상으로 디렉토리에 대한 하드 링크를 작성할 수 없으므로 의미가 있습니다. 1 그러나 나는 이것을 심각하게 신뢰하지 않을 것입니다. 하위 디렉토리를 계산하고 실수를 얻는 것이 쉽지 않기 때문입니다.

ls서브가 몇 개인 지에 대한 아이디어를 얻기 위해 출력을 보고 있다면 괜찮은 아이디어를 얻을 수 있습니다.

1 또는 적어도 당신은 할 수 없습니다 ln. 프로그래밍 방식으로 시도하고,하지 않은 man 2 link모호 - 디렉토리에 연결하기위한 명백한 오류가 없다, (적용 할 수있는 몇 가지가 있지만 EMLINK, EPERM). 그래서 디렉토리에 유일하게 가능한 하드 링크는 말한다 몇 가지 표준 곳이 아니라면 ...다시는, 나는 단지 캐주얼 단서로 그 하드 링크 수를 치료하는 것입니다.


2
디렉토리에 대한 링크가 허용되는지 여부와 링크 수에서 하위 디렉토리를 계산할 수 있는지 여부는 둘 다 사용중인 파일 시스템에 따라 다릅니다.
alanc

macOS의 Time Machine은 실제로 디렉토리를 이전 백업으로 하드 링크합니다. 이렇게하면 각 증분 백업이 전체 사본 인 것처럼 가장하고 다른 증분에 영향을주지 않고 증분을 삭제할 수 있습니다. 그것은 또한 매우 부서지기 쉬우 며 정기적 인 syscall을 사용하여 놀고 있었고 파일 시스템을 철저히 강화했습니다.
w00t
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.