나는 다음과 같은 파일 구조를 만들었습니다.
test/src
test/firefox
이 명령을 실행할 때:
ln -s test/src test/firefox
test/firefox/src
에 대한 심볼릭 링크를 만들고 싶지만 test/src
다음 오류가 발생합니다.
-bash: cd: src: Too many levels of symbolic links
- 내가 뭘 잘못했나요?
- 해당 폴더의 형제 폴더에 저장된 폴더에 대한 심볼릭 링크를 만들 수 없습니까?
- 점은 무엇인가?
답변1
Dubu가 의견에서 지적했듯이 문제는 상대 경로입니다. NET에서 nginx 구성을 심볼릭 링크할 /usr/local/etc/nginx
때 비슷한 문제가 발생했습니다 /etc/nginx
. 다음과 같이 심볼릭 링크를 생성하면:
cd /usr/local/etc
ln -s nginx/ /etc/nginx
실제로 소스 경로가 링크 경로에 상대적이기 때문에 /etc/nginx -> /etc/nginx 링크를 생성하게 됩니다. 해결책은 절대 경로를 사용하는 것만큼 간단합니다.
ln -s /usr/local/etc/nginx /etc/nginx
상대 경로를 사용하고 예상대로 작동하도록 하려면 $PWD
다음과 같이 이 변수를 사용하여 현재 작업 디렉터리 경로에 경로를 쉽게 추가할 수 있습니다.
cd /usr/local/etc
ln -s "$PWD/nginx/" /etc/nginx
현재 경로의 공백 등이 이스케이프되도록 경로를 큰따옴표로 묶어야 합니다. $PWD
작은따옴표를 사용하면 대체되지 않으므로 이 작업을 수행할 때 큰따옴표를 사용해야 합니다 .
답변2
표면적으로는 당신이 시도해 보라고 제안한 것이 나에게 효과적입니다.
예
$ mkdir -p test/src test/firefox
$ tree --noreport -fp
.
`-- [drwxrwxr-x] ./test
|-- [drwxrwxr-x] ./test/firefox
`-- [drwxrwxr-x] ./test/src
심볼릭 링크를 생성합니다:
$ ln -s test/src test/firefox
$ tree --noreport -fp
.
`-- [drwxrwxr-x] ./test
|-- [drwxrwxr-x] ./test/firefox
| `-- [lrwxrwxrwx] ./test/firefox/src -> test/src
`-- [drwxrwxr-x] ./test/src
두 번째로 실행하면 일반적으로 다음과 같은 결과가 생성됩니다.
$ ln -s test/src test/firefox
ln: failed to create symbolic link ‘test/firefox/src’: File exists
그래서 다른 일이 일어날 수도 있습니다. 링크가 자신을 가리키는 순환 참조가 있는 것 같습니다.
find
다음 방법을 사용하여 조사를 수행 할 수 있습니다 .
$ cd /suspected/directory
$ find -L ./ -mindepth 15
답변3
심볼릭 링크는 프로세스의 현재 디렉토리가 아닌 링크의 상위 디렉토리를 기준으로 합니다 ln
.
이 작업을 수행할 때:
cd /top/dir
ln -s test/src test/firefox
( test/firefox
디렉토리는 어디에 있습니까?) test/firefox/src
에 대한 대상을 생성하고 있습니다 test/src
.
이는 디렉토리 test/src
에 상대적이므로 test/firefox
to 입니다 /top/dir/test/firefox/test/src
.
심볼릭 링크를 에 대한 링크로 만들려면 /top/dir/test/src
다음을 작성해야 합니다.
ln -s ../src test/firefox/
또는
ln -s /top/dir/test/src test/firefox/
절대 경로를 사용하여 심볼릭 링크를 생성하는 것은 일반적으로 좋지 않은 생각입니다. 디렉터리 이름이 바뀌거나 파일 시스템이 다른 곳에 마운트되면 쉽게 손상될 수 있기 때문입니다.
GNU에서는 옵션을 사용하여 스스로 계산을 수행하도록 ln
할 수 있습니다 .-r
$ ln -rs test/src test/firefox/
$ ls -ld test/firefox/src
lrwxrwxrwx 1 chazelas chazelas 6 Nov 29 15:59 test/firefox/src -> ../src
답변4
대답은 절대 경로를 사용하는 것입니다. 그러나 현재 디렉터리에 있는 항목의 전체 경로를 입력하는 것은 성가실 수 있습니다. 이러한 상황을 방지하려면 pwd 명령 대체를 사용할 수 있습니다. 대상이 현재 디렉터리에 있는 경우:
ln -s "$(pwd)"/target abs/path/to/link
링크가 현재 디렉터리에 있어야 하는 경우:
ln -s /abs/path/to/target "$(pwd)"