파일과 디렉터리가 있다고 가정해 보겠습니다.
$ ls -l
total 4
drwxrwxr-x. 2 user user 4096 Oct 8 09:53 dir
-rw-rw-r--. 1 user user 0 Oct 8 09:53 file
나는 file
라는 심볼릭 링크 symlink1
와 dir
다음이라는 심볼릭 링크를 만들었습니다 dirslink1
.
$ ls -l
drwxrwxr-x. 2 user user 4096 Oct 8 09:53 dir
lrwxrwxrwx. 1 user user 3 Oct 8 10:03 dirslink1 -> dir
-rw-rw-r--. 5 user user 0 Oct 8 09:53 file
lrwxrwxrwx. 1 user user 4 Oct 8 09:53 symlink1 -> file
이제 다음 을 symlink1
사용하여 심볼릭 링크를 만듭니다 ln -s
.ln -sL
$ ln -s symlink1 symlink2
$ ln -sL symlink1 symlink3
$ ln -s dirslink1 dirslink2
$ ln -sL dirslink1 dirslink3
이제 내가 이해한 바에 따르면 는 symlink3
을 가리키고 file
를 dirslink3
가리켜야 합니다 dir
. 하지만 확인해 보니 symlink[23]
및 중 어느 것도 dirslink[23]
원본 파일이나 디렉터리를 가리키지 않습니다.
$ ls -l
drwxrwxr-x. 2 user user 4096 Oct 8 09:53 dir
lrwxrwxrwx. 1 user user 3 Oct 8 10:03 dirslink1 -> dir
lrwxrwxrwx. 1 user user 9 Oct 8 10:03 dirslink2 -> dirslink1
lrwxrwxrwx. 1 user user 9 Oct 8 10:03 dirslink3 -> dirslink1
-rw-rw-r--. 5 user user 0 Oct 8 09:53 file
lrwxrwxrwx. 1 user user 4 Oct 8 09:53 symlink1 -> file
lrwxrwxrwx. 1 user user 8 Oct 8 09:54 symlink2 -> symlink1
lrwxrwxrwx. 1 user user 8 Oct 8 09:54 symlink3 -> symlink1
문제는 다른 심볼릭 링크를 사용하여 원본 파일에 대한 심볼릭 링크를 만드는 것이 가능합니까/어떻게 하는 것입니다.
답변1
-L
하드 링크에만 적용됩니다.POSIX에 지정됨:
만약에-에스옵션을 지정한 후,-엘그리고-피옵션은 자동으로 무시됩니다.
가지고 있다면 readlink
다음과 같이 사용할 수 있습니다.
ln -s -- "$(readlink symlink1)" symlink4
readlink
이 옵션을 지원 하는 경우 -f
이를 사용하여 대상(즉대상 경로의 모든 기호 링크를 확인합니다(대상 기호 링크에 다른 기호 링크가 포함된 경우).
답변2
cp -P
다음을 사용하여 심볼릭 링크의 복사본을 만들 수 있습니다 .
cp -P symlink2 symlink3
(이는 symlink3
디렉토리나 디렉토리 심볼릭 링크가 아직 존재하지 않는다고 가정합니다. 이러한 경우에 대해서는 -T
GNU의 옵션을 참조하십시오 cp
.)
심볼릭 링크의 대상이 상대적이고 복사본이 원본과 동일한 디렉터리에 없으면 위의 내용으로 인해 링크가 끊어질 수 있습니다.
그리고 zsh
,
ln -s -- symlink2(:P) symlink3
symlink3
완전히 표준적인(심볼릭 링크 없음) 경로로 심볼릭 링크를 생성합니다 symlink2
. 유사 ln -s -- "$(readlink -f symlink2)" symlink3
하지만 더 안정적입니다. 경로가 줄 바꿈으로 끝나는 경우에도 여전히 잘 작동하기 때문입니다.
위와 동일한 경고 및 GNU에 대한 해결 방법도 동일합니다 ln
.