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


110

내 홈 디렉토리에 외부 HDD의 디렉토리를 가리키는 심볼릭 링크를 만들려고합니다.

다음과 같이 지정하면 정상적으로 작동합니다.

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/ ~/

7
임의의 팁 : cd ~일반적으로와 동일합니다 cd.

3
ls -l ~/Data"빨간색"링크의 문제점을 확인하는 데 도움이되었을 것입니다.
msw

흠, 내가 할 수 있다는 것을 몰랐어요. 고마워요. 나는 cat그것을 시도 했지만, 결과가 무엇인지 잊어 버렸습니다 ... (나는 그 순간 집에 없습니다.)
jcora

사이드 노트, 당신은, 말하자면, 내부의 모든 항목을 특정 폴더 안에있는 모든 파일, 디렉토리 및 하위 디렉터리의 심볼릭 링크를 만들 생각 /run/media/name/exhdd/Data/Data한 후 다음과 같은 사용ln -s /run/media/name/exhdd/Data/* Data
user2555595

답변:


115

무슨 일이야? 상대 경로로 심볼릭 링크를 만들면 해당 심볼릭 링크는 상대적입니다. 심볼릭 링크는 사용자가 제공 한 경로 만 저장합니다. 그들은 전체 경로로의 경로를 해결하지 않습니다. 달리는

$ 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

14

나는 같은 문제를 겪고 있었다. Google 은이 답변을 이끌어 냈지만 가장 간단한 해결책은 여기에 설명되어 있지 않습니다.

ln -sT 

-T는 트릭을 수행

남자 ln :

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

여기에 이것을 추가하면 같은 질문을 가진 사람이 이것을 찾을 수 있습니다 :)


9

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

-1

매우 간단하게 폴더에 대한 링크를 만들 수 있습니다. 내 명령을 봐

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.