"ln -d"가 성공한 파일 시스템이 있습니까?

"ln -d"가 성공한 파일 시스템이 있습니까?

맨페이지에서왜냐하면:

-d, -F, --directory
  allow the superuser to attempt to hard link directories (note: will 
  probably fail due to system restrictions, even for the superuser)

실제로 이를 허용하는 파일 시스템 드라이버가 있습니까, 아니면 이것이 유일한 옵션입니까 mount --bind <src> <dest>? 아니면 파일 시스템 특정 드라이버에 도달하기 전에 커널에 의해 이 동작이 차단됩니까?

참고: 실제로 어떤 컴퓨터에서도 이 작업을 수행할 계획은 없습니다. 단지 궁금할 뿐입니다.

답변1

첫 번째 참고 사항: 이 명령에는 , 및 기타 옵션이 ln없습니다 . 이는 이식 불가능한 GNUism입니다.-d-F--directory

찾고 있는 기능은 link(1)명령을 통해 구현됩니다.

원래 질문으로 돌아가서:

일반적인 UNIX 시스템에서는 디렉터리에 대한 하드 링크가 가능한지 여부가 파일 시스템 드라이버에 의해 결정됩니다.

Solaris UFS 드라이버는 디렉토리에 대한 하드 링크를 지원하지만 ZFS 드라이버는 지원하지 않습니다.

Solaris의 UFS가 하드 링크를 지원하는 이유는 AT&T가 이 기능에 관심이 있기 때문입니다. BSD의 UFS는 하드 링크 디렉토리를 지원하지 않습니다.

ZFS가 하드 링크된 디렉토리를 지원하지 않는 이유는 Jeff Bonwick이 해당 기능을 좋아하지 않기 때문입니다.

Linux와 관련하여 내 추측으로는 Linux 블록이 상위 커널 계층의 디렉터리에 하드 링크를 생성하려고 시도하는 것 같습니다. 이러한 가정의 이유는 Linus Torvalds가 git clone하드 링크된 디렉터리를 지원하는 플랫폼에서 루트로 호출될 때 디렉터리를 박살내는 GIT용 코드를 작성했기 때문입니다.

하드 링크된 디렉터리 생성을 지원하는 파일 시스템은 unlink(1)루트로서 비어 있지 않은 디렉터리 삭제도 지원해야 합니다.

따라서 Torvalds가 Linux의 작동 방식을 알고 있다고 가정하고 Linux가 하드 링크된 디렉터리를 지원한다면 Torvalds는 unlink(2)디렉터리를 루트로 호출해도 오류가 반환되지 않지만 디렉터리가 손상된다는 점을 알아야 합니다. 즉, Linux에서는 파일 시스템 드라이버가 하드 링크된 디렉터리를 구현하는 것을 허용하지 않습니다.

답변2

OP의 질문이 언급되었습니다 mount --bind. 빠른 검사를 통해 설치된 디렉터리의 링크 개수가 수정되지 않음을 알 수 있습니다. 하드 링크언제나를 사용하여 볼 수 있는 링크 수를 수정합니다 ls -ld.

일반적으로(대부분의 Unix 계열 시스템) 디렉토리의 하드 링크 수는 해당 이름에 연결된 디렉토리 수입니다.

  • ".."(상위 디렉토리)
  • "."(디렉토리 자체)
  • 하위 디렉토리

(보통) 더 유익한 내용을 읽으면정보페이지에서 찾을 수 있습니다.다른 사람완성된:

Oh great, one spends hours tying to find what is wrong only to
discover,
$ info ln
On all existing implementations, you cannot make a hard link to a
directory, and hard links cannot cross filesystem boundaries.  (These
restrictions are not mandated by POSIX, however.)

Therefore, kindly say everywhere you say super-user only,
instead say "few systems, super-user only".

비록지금문구이다

대부분의 시스템은 디렉토리에 대한 하드 링크 생성을 금지합니다. 허용되는 경우 수퍼유저만 그렇게 할 수 있습니다(그리고 루프를 생성하면 다른 많은 유틸리티에 문제가 발생할 수 있으므로 주의하세요). 하드 링크는 파일 시스템 경계를 넘을 수 없습니다. (그러나 POSIX는 이러한 제한을 요구하지 않습니다.)

디렉터리에 대한 하드 링크 생성(및 제거)은 디렉터리 연결을 해제할 때 파일 손실을 방지하기 위해 제한된 기능입니다. C 운영 체제 인터페이스의 링크/링크 해제 작업은 다음과 같습니다.대칭, 디렉토리 연결은 일반적으로 mkdir/rmdir 호출에서만 수행됩니다.

대부분의 GNU coreutils는 일부 실제 박물관 자료가 ​​아직 사용되고 있던 20~30년 전에 작성(및 문서화)되었다는 점을 명심하세요. 에서 언급했듯이하드 링크 정보, 거기에있는 것으로 밝혀졌습니다mkdir/rmdir 호출은 없습니다. 디렉토리는 하드 링크를 사용하여 생성됩니다(특권 작업으로). 위의 문제를 해결하기 위해 시스템 콜을 추가하자 이 모든 것이 사라졌습니다. 그러나 이러한 시스템은 여전히 ​​문서에서 참조되며 이러한 시스템의 유지관리자는 더 이상 기억할 수 없습니다. 문제의 옵션은 이전 버전(1990년대 중반 fileutilsA&P와의 합병을 통해 형성됨)에 있었습니다. 이 기능의 출처를 밝히는 데 도움이 될 수 있는 변경 로그의 일부 항목:textutilsshellutilscoreutils

Mon Jul 23 16:57:44 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)

        * cp.c (copy): Make +update operate silently, like +one-file-system.
        * ln.c: Add -F as synonym for -d, for SunOS compatibility.

Wed Feb 21 11:13:26 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)

        * ln.c (error): New function.
        (main, do_link): Call error instead of fprintf and exit. 
        (main): Recognize new -d +directory option to allow superuser to
        make hard links to dirs, like the BSD ln -f option.
        (do_link): Don't allow hard links to dirs (they are hard to
        get rid of -- rmdir and unlink don't do it), unless -d was given.
        (usage): Mention -d +directory option.

예를 들어 이것이 작동하는 골동품 중 하나가 SunOS라는 것을 볼 수 있습니다. 동매뉴얼 페이지말했다:

OPTIONS
       -f     Force a hard link to a directory -- this option is  only   avail-
              able to the super-user.

       -s     Create a symbolic link or links.

SYSTEM V OPTIONS
       -f     Force  files to be linked without displaying permissions, asking
              questions or reporting errors.

       -F     Force a hard link to a directory -- this option is  only  avail-
              able to the super-user.

       -s     Create a symbolic link or links.

문서에 명시된 대로 이 기능(및 해당 옵션)은 POSIX에 없습니다(참조:근본적인이유를 부분적으로 설명합니다). 대신 기능은 다음과 같은 새로운 명령(GNU coreutils에서도 제공됨)으로 이동되었습니다.link. 명령 자체에 대한 설명은 모호합니다. 설명을 읽어야 합니다.함수 호출표준을 활용하세요. 그러나 이 표준은 필수 권한에 관한 면책조항을 명시하는 것 외에는 명령의 근무 조건을 명확히 하지 않습니다. 이렇게 하려면 표준 외부에서 시스템 종속 기능을 사용해야 합니다.

대부분의 역사적 구현에서는 디렉토리에 대한 연결이 수퍼유저로 제한되었습니다. 이 기능은 파일 계층 구조에 루프를 생성하거나 파일 시스템을 손상시킬 수 있기 때문입니다. POSIX.1-2008의 이 볼륨은 이를 금지 link()하고 unlink()허용하지 않음으로써 이 철학을 이어갑니다. 구현자가 그러한 확장을 설계하는 경우 다른 기능도 이를 수행할 수 있습니다.

거기일반적인 디렉토리 수(2개 + 하위 디렉토리)보다 많은 하드 링크를 사용하는 시스템.

OSX는 공통 디렉토리에 대한 여러 하드 링크를 사용합니다.문서. 이 사용을 지원하지 않습니다 ln(참조매뉴얼 페이지). ~에 따르면타임머신이 마법을 발휘하는 방법, 이는 Time Machine 백업 도구와 함께 사용할 버전을 제공하기 위해 수행됩니다.

추가 자료:

관련 정보