현재 작업 디렉토리의 파일을 가리키는 심볼릭 링크를 만들고 싶습니다.
다음과 같은 최상위 트리가 있다고 가정해 보겠습니다.
.
├── dir1
│ └── hello.so
└── dir2
2 directories, 1 file
작업 디렉토리를 로 변경했습니다 . 이제 에 대한 심볼릭 링크를 dir1
만들고 싶습니다 .hello.so
dir2
한번 시도해 보겠습니다 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
첫 번째 매개변수는 심볼릭 링크 자체의 "콘텐츠"입니다(소위원천설명서에 있음). 이 경우 파일 위치에 대한 상대 경로를 사용하여 파일을 가리킵니다. 두 번째 매개변수는 심볼릭 링크가 배치되어야 하는 위치입니다.