나는 지난 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_NAME
ln
-f
ln -nsf dir3 dir2
dir2
내부적으로 링크를 생성하는 대신 대체합니다 dir2
.