현재 디렉토리를 기준으로 심볼릭 링크 생성

현재 디렉토리를 기준으로 심볼릭 링크 생성

내 외장 하드 드라이브의 디렉터리를 가리키는 홈 디렉터리에 심볼릭 링크를 만들려고 합니다.

다음과 같이 지정하면 잘 작동합니다.

cd ~
ln -s /run/media/name/exhdd/Data/ Data

그러나 이렇게 하려고 하면 잘못된 링크가 생성됩니다.

cd /run/media/name/exhdd
ln -s Data/ ~/Data

cd입력할 수 없는 링크 가 생성됩니다 .

시도하면 bash가 다음과 같이 불평합니다.

bash: cd: Data: Too many levels of symbolic links

ls컬러 출력을 표시하도록 설정하면 내 집의 데이터 심볼릭 링크도 빨간색으로 나타납니다.

왜 이런 일이 발생합니까? 이런 식으로 링크를 어떻게 만들 수 있나요? (내 작업 디렉토리의 디렉토리에 대한 다른 디렉토리의 심볼릭 링크를 만들고 싶습니다.)


편집하다:~에 따르면이것StackOverflow 답변, 두 번째 인수(내 경우에는 ~/Data)가 이미 존재하고 디렉터리인 경우 ln대상에 대한 심볼릭 링크가 생성됩니다.~에그 디렉토리.

그러나 나는 같은 문제에 직면했습니다.

ln -s Data/ ~/

답변1

이것이 일어난 일입니다. 상대 경로를 사용하여 심볼릭 링크를 생성하면 심볼릭 링크는 상대 경로가 됩니다. 기호 링크는 사용자가 제공한 경로만 저장합니다. 그들은 절대 경로를 전체 경로로 해결하지 않습니다. 달리기

$ pwd
/usr/bin
$ ln -s ls /usr/bin/ls2

심볼릭 링크가 있는 디렉토리( )를 기준으로 에 이름 이 ls2붙은 심볼릭 링크 (즉, )를 만듭니다 . 위의 명령은 모든 디렉토리에서 기능적 심볼릭 링크를 생성합니다./usr/binls/usr/bin/ls/usr/bin

$ pwd
/home/me
$ ln -s ls /usr/bin/ls2

심볼릭 링크를 다른 디렉토리로 이동하면 더 이상 /usr/bin/ls.

에 대한 심볼릭 링크를 만들고 Data이름을 지정합니다 Data. 그것은 그 자체를 가리킨다. 디렉토리에 대한 절대 경로를 사용하여 심볼릭 링크를 생성해야 합니다.

ln -s "$(realpath Data)" ~/Data

답변2

나는 또한 같은 문제에 직면했습니다. Google은 이 답변을 제시했지만 가장 간단한 솔루션은 여기에 문서화되어 있지 않습니다.

ln -sT 

- 해줄게

남성:

-T, --no-target-directory
    treat LINK_NAME as a normal file always

같은 문제가 있는 사람이 찾을 수 있도록 여기에 추가하세요. :)

답변3

ln상대 경로의 동작은 직관적이지 않습니다. 정신을 회복하려면 -r깃발을 사용하십시오.

cd /run/media/name/exhdd
ln -sr Data/ ~/Data

설명하다:

   -r, --relative
          create symbolic links relative to link location

이는 ln예상한 대로 작동한다는 것을 의미합니다. 현재 있는 디렉터리, 대상이 있는 디렉터리를 고려하고 링크가 있는 디렉터리에 대한 상대 경로를 구성합니다. 기본 동작( 없이 -r)은 첫 번째 인수(대상)를 해석하는 것입니다.문자 그대로, 이 경우 링크된 디렉터리에서 유효하도록 경로를 직접 작성해야 합니다.

또는 @SmithJohn이 언급한 절대 경로를 사용하세요.

ln -s "$(realpath Data)" ~/Data #bash shell

또는

ln -s "(realpath Data)" ~/Data #fish shell

답변4

매우 쉽습니다. 폴더에 대한 링크를 만들 수 있습니다. 내 주문 좀 봐

ln -s /home/targetedfolder /var/www/html/link_name

관련 정보