심볼릭 링크를 생성하려고하는데 이것이 작동하는 이유를 알 수 없습니다.
ln -s /Users/niels/something/foo ~/bin/foo_link
이
cd /Users/niels/something ln -s foo ~/bin/foo_link
아닙니다.
/Users/niels/something
대신 /Users/niels/bin
의 foo에 연결하는 foo_link
와 관련이 있다고 생각합니다.
문제는 실제로 입력하지 않고 절대 경로를 가리키는 심볼릭 링크를 만들려면 어떻게해야합니까?
참고로 저는 Mac OS X 10.9와 Zsh를 사용하고 있습니다. .
Answer
전체 경로 문자열을 입력하지 않고 절대 경로로 현재 디렉토리에 링크하는 가장 쉬운 방법은 다음과 같습니다.
ln -s "$(pwd)/foo" ~/bin/foo_link
ln -s
에 대한 target
(첫 번째) 인수 명령은 현재 디렉토리가 아니라 심볼릭 링크의 위치를 기준으로 작동합니다. 기본적으로 creat ed symlink (두 번째 인수)는 첫 번째 인수로 제공하는 텍스트 를 포함합니다.
따라서 다음을 수행하면 :
cd some_directory ln -s foo foo_link
링크를 이동 한 다음
mv foo_link ../some_other_directory ls -l ../some_other_directory
foo_link
가 표시됩니다. 상주하는 디렉토리에서 foo
를 가리 키도록 시도 합니다. 이는 상대 경로를 가리키는 기호 링크에서도 작동합니다. 다음을 수행하는 경우 :
ln -s ../foo yet_another_link
다음 yet_another_link
를 다른 디렉토리로 이동하고 가리키는 위치를 확인합니다. 항상 ../foo
를 가리킴을 알 수 있습니다. 심볼릭 링크가 다양한 절대 경로에 상주 할 수있는 디렉토리 구조의 일부일 수 있기 때문에 이는 의도 된 동작입니다.
귀하의 경우 입력하여 링크를 만들 때
ln -s foo ~/bin/foo_link
foo_link
는 위치를 기준으로 foo
에 대한 링크입니다. 대상 인수의 이름 앞에 $(pwd)
를 넣으면 현재 작업 디렉토리가 추가됩니다. 링크가 절대 대상으로 생성되도록 절대 경로입니다.
댓글
답변
-r
사용 (--relative
) 플래그를 사용하면 다음과 같이 작동합니다.
ln -sr foo ~/bin/foo_link
댓글
-
-r
는 GNUism입니다. 즉, POSIX가 아니므로 OP 케이스에서 표준 OS X로 작동하지 않습니다. ' div id = “8dceb49c5b”>
명령은 BSD 기반입니다.
source_file
(첫 번째) 인수는 링크가 가리키는 위치이며, 이는 명령에 입력하는 것과 동일합니다.target_file
(두 번째) 인수는 입력 한 내용이 디렉토리가 아닌 경우 링크의 이름이됩니다.이 경우 링크 이름은 그러나target_file
디렉토리에 있습니다.ln
맨 페이지에서target
는 첫 번째 인수 (링크가 to 를 가리킴)이고 두 번째 인수는 간단히link
라고합니다 (source
는 언급되지 않음).target
와 두 번째link
( man7.org/ linux / man-pages / man1 / ln.1.html ). 그러나 BSD (OS X 포함)에서 첫 번째는source
이고 두 번째는target
( freebsd.org/cgi/man.cgi?ln ). 상당히 혼란 스럽습니다.