더 정확하게 말하자면, 저는 -s
이 옵션이 무엇을 의미하는지 알고 있습니다. 저는 이 옵션을 매일 사용합니다. 그러나 누군가가 보안을 강화하기 /var/www/html/project
위해 자신의 웹사이트의 문서 루트를 에서 으로 옮겼다는 것을 튜토리얼에서 보았습니다 ~/www/project
(그는 나중에 권한 등을 변경했지만 이 경우에는 중요하지 않았습니다). 그런 다음 그는 다음과 같은 심볼릭 링크를 만들었습니다.
ln -sT ~/www/project /var/www/html/project
일반적으로 맨 페이지에서 이 옵션에 대한 다음과 같은 정보를 얻었 -T
기 때문에 이것이 무엇에 사용되는지 궁금합니다 .-s
-T
-T, --no-target-directory
treat LINK_NAME as a normal file always
나는 이것이 무엇을 위한 것인지 정말로 이해하지 못한다. 심볼릭 링크를 만들 때 왜 -T
이들을 결합 해야 합니까? -s
이렇게 하면 큰 이점이 있나요?
답변1
ln
요약은 다음과 같습니다.
ln [OPTION]... [-T] TARGET LINK_NAME (1st form)
ln [OPTION]... TARGET (2nd form)
ln [OPTION]... TARGET... DIRECTORY (3rd form)
ln [OPTION]... -t DIRECTORY TARGET... (4th form)
그렇지 않은 경우 이미 존재하고 디렉터리(또는 최종적으로 디렉터리로 확인되도록 검증된 심볼릭 링크) -T
인 경우 첫 번째와 세 번째 형식은 모호하고 세 번째 형식이 선택됩니다. 링크가 생성됩니다.LINK_NAME
ln
~에목차. 그러므로
ln -s ~/www/project /var/www/html/project
후자가 이미 존재하는 경우 project
inside라는 이름의 링크가 생성됩니다./var/www/html/project
-T
모호성을 제거하고 ln
첫 번째 양식만 고려하도록 합니다. 링크가 없으면 지정된 이름으로 링크가 생성됩니다. 지정된 이름의 파일이나 디렉터리가 이미 있으면 LINK_NAME
오류 ln
가 발생합니다( -f
지정하지 않는 한). .
그래서
ln -sT ~/www/project /var/www/html/project
/var/www/html/project
을 가리키는 링크 ~/www/project
나 오류 메시지(및 0이 아닌 종료 코드) 로 끝날 것이 보장됩니다 .
답변2
귀하의 경로(예제에서는 /var/www/html/project
)가 최종 경로인지 확인하므로 링크가 존재하든 존재 /var/www/html/project
하지 않든 100% 존재하게 됩니다./var/www/html/project/**project**
/var/www/html/project
혼란스러울 수 있으므로 차이점을 보여주는 예
설정:
cd /tmp
;
mkdir /tmp/aa
;
mkdir /tmp/bb
;
ln -s /tmp/aa /tmp/bb
새로운 심볼릭 링크가 생성됩니다/tmp/bb/aa -> /tmp/aa
하지만
ln -sT /tmp/aa /tmp/bb
결과는 다음과 같습니다ln: failed to create symbolic link '/tmp/bb': File exists
이 -s
매개변수는 그것과 아무 관련이 없습니다. (평소와 같이) 문서에 설명되어 있습니다.https://www.gnu.org/software/coreutils/manual/html_node/Target-directory.html