![상대 경로 이름에 대한 심볼릭 링크 만들기](https://linux55.com/image/947/%EC%83%81%EB%8C%80%20%EA%B2%BD%EB%A1%9C%20%EC%9D%B4%EB%A6%84%EC%97%90%20%EB%8C%80%ED%95%9C%20%EC%8B%AC%EB%B3%BC%EB%A6%AD%20%EB%A7%81%ED%81%AC%20%EB%A7%8C%EB%93%A4%EA%B8%B0.png)
나는 이것을 할 수 있다:
$ pwd
/home/beau
$ ln -s /home/beau/foo/bar.txt /home/beau/bar.txt
$ readlink -f bar.txt
/home/beau/foo/bar.txt
하지만 나는 이것을 할 수 있기를 원합니다:
$ pwd
/home/beau
$ cd foo
$ ln -s bar.txt /home/beau/bar.txt
$ readlink -f /home/beau/bar.txt
/home/beau/foo/bar.txt
가능합니까? 어떻게든 상대 경로 이름을 구문 분석하여 에 전달할 수 있습니까 ln
?
답변1
상대 경로에 대한 심볼릭 링크를 생성하면 예제에 표시된 것과 같은 절대 심볼릭 링크가 아닌 상대 심볼릭 링크로 저장됩니다. 이는 일반적으로 좋은 일입니다. 파일 시스템이 다른 곳에 마운트되면 절대 심볼릭 링크가 작동하지 않습니다.
귀하의 예제가 작동하지 않는 이유는 ln
실행 위치가 아닌 심볼릭 링크의 상위 디렉토리에 상대적이기 때문입니다.
넌 할 수있어:
$ pwd
/home/beau
$ ln -s foo/bar.txt bar.txt
$ readlink -f /home/beau/bar.txt
/home/beau/foo/bar.txt
또는 그 문제에 대해서는:
$ cd foo
$ ln -s foo/bar.txt ../bar.txt
ln -s
다음에 나오는 첫 번째 인수가 기호 링크의 대상으로 저장된다는 점을 인식하는 것이 중요합니다 . 모든 문자열이 될 수 있지만(비어 있을 수 없고 NUL 문자를 포함할 수 없다는 유일한 제한 사항) 기호 링크를 사용하고 구문 분석할 때 문자열은 기호 링크의 상위 디렉터리에 대한 상대 경로로 이해됩니다. hour 로 시작하지 않습니다 /
.)
답변2
최신 coreutils를 사용하는 경우(저는 coreutils-8.22-11을 사용하고 있습니다) 다음과 같은 옵션이 있습니다.
ln --help | grep relative
can hold arbitrary text; if later resolved, a relative link is
-r, --relative create symbolic links relative to link location
예를 들어:
$ mkdir /tmp/test
$ touch /tmp/test/to
$ ln -rs /tmp/test/to /tmp/test/from
$ ls -l /tmp/test/from
lrwxrwxrwx 1 ptr ptr 4 aug 25 17.02 /tmp/test/to -> from
답변3
죄송합니다. 그런 기능은 없습니다. 심볼릭 링크는 링크가 생성된 위치가 아니라 링크가 위치한 위치를 기준으로 합니다. 이러한 동작에는 여러 가지 이유가 있으며 그 중 대부분은 원격 파일 시스템 마운트와 관련됩니다.
답변4
가장 일반적인 쉘 확장 경로는 상대 심볼릭 링크를 생성하는 것이므로 "소스 경로"를 인용해야 합니다.
또한 -s
매개변수는 기본적으로 --symbolic
하드 ln
링크가 생성됨을 의미합니다.
$ ln -s '../../relative_path' path
$ ls -al path
lrwxrwxrwx 1 empjustine empjustine 19 Aug 6 01:38 path -> ../../relative/path