상대 경로는 어떻게 작동하나요 ln (-s or not)
? 예를 들어, 내가 입력하면 ln -s foo bar/banana.txt
이것은 무엇을 의미합니까? foo는 무엇과 관련이 있나요? 현재의 경로와는 아무 관련이 없는 것 같기 때문입니다. 그리고 삭제하는 것과 -s
삭제하지 않는 것의 차이가 있나요 ? 나는 이것을 테스트했는데 그 결과가 나에게 이해가 되지 않으며 매뉴얼 페이지에서도 이에 대해 설명하지 않는 것 같습니다. 누구든지 이것을 설명할 수 있나요?
답변1
있는 것과 없는 것에는 차이가 있습니다 -s
.
이내에 -s
:
ln -s path/to/file some/dir/link
path/to/file
심볼릭 링크 대상 some/dir/link
(또는 디렉터리인 some/dir/link/file
경우 )으로 설정합니다.link
기호 링크는 기호 링크의 대상인 경로(0이 아닌 바이트 배열일 수 있으며 일부 시스템에서는 빈 문자열도 허용함)를 /포함/하는 특수한 유형의 파일입니다. ln
첫 번째 매개변수로 설정합니다.
링크가 확인된 후(링크가 나중에 사용될 때) 경로는 (하드) 링크가 있던 디렉터리 path/to/file
(여기서는 해당 경로를 통해 액세스할 때)를 기준으로 합니다.link
some/dir
some/dir/link
some/dir/link
path/to/file
명령이 실행될 때(또는 항상) 존재할 필요는 없습니다 .ln
그리고:
ln path/to/file some/dir/link
이는 다음과 유사합니다:
cp path/to/file some/dir/link
path/to/file
실행 중인 프로세스의 현재 작업 디렉터리를 기준으로 합니다 ln
.
심볼릭 링크에 대한 여러 (하드) 링크를 생성하는 것을 막을 수 있는 방법은 없습니다. 예를 들어:
$ mkdir -p a b/c b/a
$ ln -s ../a b/L # b/L a symlink to "a"
$ ln b/L b/c/L
b/L
b/c/L
동일한 파일입니다. 동일한 inode이지만 두 개의 다른 디렉토리에 연결되어 있습니다 . 그것들은 모두 target 과의 심볼릭 링크입니다 ../a
. 그러나 b/L
구문 분석 하면 ./a
while 을 가리 b/c/L
킵니다 ./b/a
.