답변:
그것은 저에게 효과적입니다. 결과는 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
따라서 -narf가 없으면 역 참조되기 때문에 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및 연결srcln -sfn src dir 링크를 만듭니다 dir/src -> src사용 -T:
ln -sfT src dirlink덮어 쓰기 dirlink및 연결srcln -sfT src dir 오류 메시지를 생성합니다. ln: ‘dir’: cannot overwrite directorycannot overwrite directory있습니까?
ln디렉토리 자체를 제거하지는 않습니다. 아마도 많은 수의 파일을 재귀 적으로 제거해야하므로 나쁜 생각 일 것입니다.