다음 명령을 실행하면 예상대로 작동하여 src
from 에 대한 심볼릭 링크가 생성됩니다 include/bb
.
ln -sf ../src include/bb
src
그러나 동일한 명령을 다시 호출하면 aka에 추가 기호 링크가 생성 됩니다 .include/bb
src/src
이를 방지하려면 어떻게 해야 합니까?
편집하다:
분명히 ln
이것은 두 번 호출될 때 발생하며 세미콜론은 결국 그것과 아무 관련이 없을 것입니다.
이를 발생시키는 일련의 명령은 다음과 같습니다.
mkdir test
cd test
mkdir src
touch src/main.cpp
mkdir include
ln -sf ../src include/bb
ln -sf ../src include/bb
답변1
ln -s ../src include/bb
include/bb
../src
참조(해당 위치를 기준으로)라는 이름의 링크를 생성하거나 include/bb/src
참조 ../src
(해당 위치를 기준으로) 파일을 생성합니다. 후자 include/bb
는 존재하고 디렉토리(실제로 또는 디렉토리에 대한 링크)인 경우입니다.
따라서 명령을 한 번 실행하면 이제 include/bb
디렉터리 인 , src
대 디렉터리를 가리키는 링크가 생성됩니다. 따라서 다음에 명령을 실행할 때 이름이 지정된 새 링크가 디렉터리에 추가됩니다.include
include/bb
src
와는 아무 관련이 없습니다 ;
.
사용하려고 할 수도 있습니다.
ln -sTf ../src include/bb
대신 (by -T
)는 ln
기존 파일을 include/bb
일반 파일로 처리하도록 지시하고(디렉토리를 참조하는 링크인 경우에도) (by -f
) 파일을 강제로 교체합니다.
답변2
당신이 달릴 때
ln -s ../src include/bb
ln -s ../src include/bb
include/bb
첫 번째 줄은 디렉터리에 대한 링크를 생성합니다 ../src
(예상하는 대로).
두 번째 발견은 include/bb
이미 존재합니다. 그것이 일반 파일이거나 일반 파일에 대한 심볼릭 링크라면 오류가 될 것입니다(당신이 -f
그렇게 하지 않는 한). 대신 심볼릭 링크입니다.목차 ../src
, 이전 단계에서 생성되었습니다. ln
언제대상 피연산자가 디렉터리입니다.:
이것왜냐하면유틸리티는 다음에 의해 지정된 각 파일에 대해 새로운 기호 링크를 생성해야 합니다.
source_file
피연산자는 다음과 같은 기존 디렉터리에 있는 대상 경로입니다.target_dir
.
그래서 이번에는 디렉토리인 ../src
inside 에 대한 링크를 생성하도록 요청하고 있습니다. include/bb/
링크 이름은 기본적으로 기존 기본 이름을 기준으로 지정됩니다 src
(이 예의 경우). 세 번째로 실행하면 ../src/src
현재 존재하는 오류가 발생합니다.
include/bb
링크를 사용할 때마다 미리 링크를 제거하면 이를 방지할 수 있습니다 rm include/bb
. 세미콜론은 이것과 아무 관련이 없습니다.