Symlink "ln" 도트-슬래시 확장

Symlink "ln" 도트-슬래시 확장

현재 작업 디렉토리의 파일을 가리키는 심볼릭 링크를 만들고 싶습니다.

다음과 같은 최상위 트리가 있다고 가정해 보겠습니다.

.
├── dir1
│   └── hello.so
└── dir2

2 directories, 1 file

작업 디렉토리를 로 변경했습니다 . 이제 에 대한 심볼릭 링크를 dir1만들고 싶습니다 .hello.sodir2

한번 시도해 보겠습니다 ln -s ./hello.so ../dir2/. 그런데 ./hello.so의도한 대로 확장 되지 않고 링크가 생성되기 때문에 작동하지 않습니다 ../

ln -s ${PWD}/hello.so ../dir2/잘 작동하지만 약간 장황합니다.

확장 프로그램이 무엇인지 오해한 것은 아닐까 걱정이 되지만 ./, 어디가 잘못되었는지 파악하지 못했습니다.

이것이 내 환경과 관련된 문제라면 Bash 5.0.2를 사용하고 있습니다. ln이 사람에게서는 어떤 멋진 표시도 찾을 수 없었습니다 .

답변1

./확장이 아니라 문자 그대로의 상대 경로입니다. .현재 디렉토리에서 호출된 항목을 찾아 이를 디렉토리( /)로 처리하고 hello.so거기에서 계속 찾습니다.

각 디렉토리에는 .자신을 가리키는 항목이 있습니다. 각 디렉토리에는 ..상위 디렉토리(루트 디렉토리 제외)를 가리키는 항목도 있습니다. 이는 특별히 특별하지는 않습니다. 자동으로 생성된다는 점을 제외하면 일반 파일 및 디렉터리와 마찬가지로 일반 디렉터리 항목입니다.

심볼릭 링크는단어그 안에 문자열 값을 저장하고 ln -s아무런 처리 없이 사용자가 제공한 값을 정확하게 저장합니다. 이것이 당신이 보는 것입니다: ./hello.so당신이 지시한 대로 정확하게 링크를 넣는 것입니다.


링크에 전체 경로를 포함하려면 직접 $PWD작성 하거나 $(pwd)직접 작성하여 전체 경로를 제공해야 합니다.

그러나 경로는 위치를 기준으로 해석되므로 다음은 파일에 대한 유효한 링크입니다.

ln -s ../dir1/hello.so dir2/hello.so

또는 링크하려는 위치에 대한 다른 경로는 ../dir1/hello.so모두 동일한 방식으로 링크에 저장됩니다.

이 경우 링크에 액세스하면 ../dir1/hello.so링크 위치를 기준으로 검색이 수행되어 파일을 찾습니다. 전체 디렉토리 트리가 이동되는 경우 이는 강력하지만 절대 경로는 그렇지 않습니다. 달성하려는 목표에 따라 이들 중 하나가 귀하에게 적합한 옵션이 될 수 있습니다.

답변2

에서 dir1:

ln -s ../dir1/hello.so ../dir2

에서 dir2:

ln -s ../dir1/hello.so .

(마지막 점은 선택사항입니다.)

최상위 디렉토리에서:

ln -s ../dir1/hello.so dir2

첫 번째 매개변수는 심볼릭 링크 자체의 "콘텐츠"입니다(소위원천설명서에 있음). 이 경우 파일 위치에 대한 상대 경로를 사용하여 파일을 가리킵니다. 두 번째 매개변수는 심볼릭 링크가 배치되어야 하는 위치입니다.

관련 정보