`ln --no-dereference`는 무엇을 해야 합니까?

`ln --no-dereference`는 무엇을 해야 합니까?

나는 지난 20년 동안 완전히 이해한 적이 없었다는 것을 인정하는 몇 가지 기본 GNU/Linux 명령에 대한 이해를 새롭게 하고 있습니다.

$ man ln부분적으로는 다음과 같이 말합니다.

-n, --no-dereference
          treat LINK_NAME as a normal file if it is a symbolic link to a directory

이것을 더 잘 이해하기 위해 다음과 같이 분류합니다.

$ mkdir dir1
$ ln -vs dir1 dir2
'dir2' -> 'dir1'
$ mkdir dir3; touch dir3/xx

$ tree -F
.  
├── dir1/  
├── dir2 -> dir1/  
└── dir3/  
    └── xx  

# Now to test -n, first as a hard link
$ ln -vn dir3/xx dir2
ln: failed to create hard link 'dir2': File exists

# and second as a symbolic link
$ ln -vsn dir3/xx dir2
ln: failed to create symbolic link 'dir2': File exists

# ??? why do these both fail ???

요약의 첫 번째 명령 형식만 다음 구문을 사용하여 'LINK_NAME'을 호출합니다.

   ln [OPTION]... [-T] TARGET LINK_NAME

따라서 이것은 수단 -n--no-dereference옵션오직,의 첫 번째 명령형과 관련됩니다 ln(다른 세 가지 명령형은 해당되지 않음).

내 예에서는:

이것표적dir3/xx,
그리고LINK_NAMEdir2('디렉토리에 대한 심볼릭 링크') 입니다 .

설명서에 따르면LINK_NAME인 경우(즉, 이것이 우리가 만들고 싶은 링크의 이름이라는 것을 기억하세요) 예'디렉토리에 대한 심볼릭 링크'...

... 그러면 이 심볼릭 링크를 "일반 문서'.

내가 무엇을 놓치고 있나요?

답변1

그렇지 않은 경우 -n두 명령 모두 ln내부적으로 링크를 생성합니다 dir2. 링크가 LINK_NAME존재하고 디렉토리이거나 디렉토리에 대한 심볼릭 링크인 경우 디렉토리 내부에 링크를 생성합니다(가능한 경우).

이것이 -n여기서 변경된 사항입니다. 디렉터리 ln로 처리되지 않습니다 (심볼릭 링크인 경우). 이미 존재 LINK_NAME하므로 실패합니다 . 추가하면 기존 기호 링크가 대체됩니다.LINK_NAMEln-f

ln -nsf dir3 dir2

dir2내부적으로 링크를 생성하는 대신 대체합니다 dir2.

관련 정보