
대상이 이미 존재한다는 점을 고려하여 /home/user/app/public
에 연결하는 적절한 방법이 있습니까 ?/home/user/public_html
만약 내가 그렇게 한다면 ln -s /home/user/app/public /home/user/public_html
나는 결국 을 가지게 될 것이다 /home/user/public_html/public
.
와 같은 작업을 반전시키는 것도 가능할 것 같지만 최종 결과로 ln -s /home/user/public_html /home/user/app/public
피하는 방법은 잘 모르겠습니다 ./home/user/app/public/public_html
답변1
귀하의 문제를 올바른 방식으로 이해해 드리겠습니다.
귀하의 출처는 /home/user/public_html
이며 거기에 파일이 있다고 가정합니다. 그리고 에서 바로 이 디렉토리에 대한 링크를 만들고 싶습니다 /home/user/app/public
. 이런 식으로 다음과 같은 작업을 수행 ls /home/user/app/public
하고 에 존재하는 파일을 볼 수 있습니다 /home/user/public_html
.
이것이 맞다면 소스는 /home/user/public_html
이고 타겟은 입니다 /home/user/app/public
. 적절한 명령은 다음과 같습니다.
ln -s /home/user/public_html /home/user/app/public
/home/user/app/public
명령을 입력하기 전에 올바른 디렉터리나 파일이 아닌지 확인하세요 .
답변2
귀하의 질문을 올바르게 이해했다면 이미 존재하는 대상을 처리하는 방법을 알고 싶어 하셨을 것입니다. 그렇다면 두 가지 시나리오가 가능합니다.
1) 기존 대상이 파일입니다. 이 경우 "-f"를 사용하여 심볼릭 링크를 강제로 생성할 수 있습니다.
2) 기존 대상은 디렉터리입니다. 이 경우 ln 명령의 현재 구현에 따라 다릅니다. 그것~할 수 있었다"-n" 인수를 사용하면 디렉터리에 대한 심볼릭 링크가 사용자가 말한 대로 복제하는 대신 적절하게 처리됩니다.
참조:https://unix.stackexchange.com/questions/207294/create-symlink-overwrite-if-one-exists
답변3
정답이 이미 선택되어 있으므로 이에 대해 자세히 논의하지는 않겠습니다. 하지만 ln
그런 식으로는 작동하지 않습니다.
대체 솔루션 mount
은 ln
. 이 경우 올바른 명령은 다음과 같습니다.
sudo mount --bind ~/app/public ~/public_html
그러나 이런 방식으로 수행할 때 주의할 점은 다음과 같습니다. 내 경험상 mount
권한이 필요하므로 그렇게 해야 합니다 sudo
. 이러한 이유로 .profile
세션이 잠길 수 있으므로 넣을 수 없습니다 . 스크립트에 넣을 수도 있고 /etc/fstab
. 나는 일반적으로 바운드 마운트를 추가하지 않지만 fstab
항목은 다음과 같을 것이라고 생각합니다.
/home/user/app/public /home/user/public_html none defaults,bind 0 0
또는 매우 유사한 것. 또한 에서는 상대 경로를 사용할 수 없으므로 fstab
여기에 표시된 것처럼 경로는 절대 경로여야 합니다.
답변4
@jotadepicas와 @Milkmannetje가 댓글에서 언급했듯이 이를 처리하는 몇 가지 방법이 있습니다.
소스가 이고 $source
대상이 이라고 가정합니다 $target
.
먼저 대상을 수동으로 제거하십시오. 이는 Linux 및 Mac에서 일관되게 작동합니다.
rm "$target" ln -s "$source" "$target"
Linux를 사용하는 경우 옵션을 사용할 수 있습니다
-T
.ln -sT "$source" "$target"
macOS를 사용하는 경우 이 옵션을 사용할 수 있습니다
-F
.ln -sF "$source" "$target"