답변:
그것은 저에게 효과적입니다. 결과는 strace ln -f -s /var/www/html/releases/build1390 app-current
무엇입니까?
아, 그것은 디렉토리이기 때문에 -n
역 참조없이 추가 해야하며 이것은 문제를 해결해야합니다. -f
-f를 추가하면 어쨌든 연결이 끊어지기 때문에 실제로는 더 편리합니다. 비록 정상적으로로드 된 시스템에서는 아마도 수백 ms 더 빠를 것이라고 생각합니다.
예를 들어, arf가 이미 / home을 가리키는 경우 :
strace with -n
:
strace ln -n -f -s / arf
...
symlink("/", "arf") = -1 EEXIST (File exists)
unlink("arf") = 0
symlink("/", "arf") = 0
strace Without -n
:
strace ln -f -s / arf
...
write(2, "ln: "..., 4ln: ) = 4
write(2, "`arf/': cannot overwrite director"..., 34`arf/': cannot overwrite directory) = 34
write(2, "\n"..., 1) = 1
따라서 -n
arf가 없으면 역 참조되기 때문에 ln은 실제로 마치 마치 arf로 처리합니다 /
. 귀하의 특정 예에서 오류가 없다면 내부에 새로운 심볼릭 링크를 만들었을 것이라고 생각합니다 /var/www/html/releases/build1390 app-current
.
대상이 심볼릭 링크 인 경우 -n
또는 --no-dereference
을 사용하여 대상이 역 참조되지 않도록 할 수 있습니다 . -T
또는 --no-target-directory
대상 파일을 항상 일반 파일로 취급 하도록 또는 사용할 수도 있습니다 .
다음 예제와 같이 약간 다른 동작이 생성됩니다. 가정하자가 src
일부 파일 dirlink
디렉토리에 심볼릭 링크이며, dir
실제 디렉토리입니다.
사용 -n
:
ln -sfn src dirlink
덮어 쓰기 dirlink
및 연결src
ln -sfn src dir
링크를 만듭니다 dir/src -> src
사용 -T
:
ln -sfT src dirlink
덮어 쓰기 dirlink
및 연결src
ln -sfT src dir
오류 메시지를 생성합니다. ln: ‘dir’: cannot overwrite directory
cannot overwrite directory
있습니까?
ln
디렉토리 자체를 제거하지는 않습니다. 아마도 많은 수의 파일을 재귀 적으로 제거해야하므로 나쁜 생각 일 것입니다.