ln
첫 번째 매개변수에서 소프트 링크를 따르지 않도록 강제할 수 있나요 ? 예를 들어 아래에서는 hard
하드 링크가 되고 싶습니다.소프트링크로soft
:
$ mkdir dir
$ ln -s dir soft
$ ln soft hard
ln: soft: Is a directory
알아요 . 하지만 추적 시 소프트 링크 ln -h
만 차단합니다.ln
두번째토론.
답변1
기본적으로 시스템에서는 ln
소스가 심볼릭 링크인 경우 소스가 완전히 확인됩니다. -P
이를 방지하는 표준 옵션이 있습니다 :
$ mkdir dir
$ ln -s dir soft
$ ls -l
total 4
drwxr-xr-x 2 myself wheel 512 Sep 21 22:39 dir
lrwxr-xr-x 1 myself wheel 3 Sep 21 22:39 soft -> dir
$ ln -P soft hard
$ ls -il
total 4
129605 drwxr-xr-x 2 myself wheel 512 Sep 21 22:39 dir
129606 lrwxr-xr-x 2 myself wheel 3 Sep 21 22:39 hard -> dir
129606 lrwxr-xr-x 2 myself wheel 3 Sep 21 22:39 soft -> dir
source_file이 심볼릭 링크인 경우:
이
-P
옵션이 적용되는 경우 인수 로 , 대상 경로를 인수로 , 인수 로 , 0을 인수로linkat()
사용하는 함수와 동일한 작업을 수행해야 합니다.source_file
path1
path2
AT_FDCWD
fd1
fd2
flag
linkat()
이것이 무엇인지 모르는 한, 이 기사의 대부분은 횡설수설입니다.OpenBSD 매뉴얼그것을 번역하다
-P
하드 링크를 생성하고 소스가 심볼릭 링크인 경우 심볼릭 링크 자체에 링크합니다. 이
-P
옵션은 이전-L
옵션보다 우선 적용됩니다.
... 그리고GNU 매뉴얼설명하다
-P
--physical
-s
적용되지 않고 소스 파일이 기호 링크인 경우 기호 링크 자체에 대한 하드 링크가 생성됩니다. 커널이 지원하지 않는 플랫폼에서 이 옵션은 동일한 내용의 심볼릭 링크를 생성합니다. 심볼릭 링크 내용은 편집할 수 없으므로 두 링크를 통해 수행되는 파일 이름 확인은 하드 링크가 생성된 것과 동일합니다.
ln
흥미롭게 도 (Ubuntu) Linux의 GNU 매뉴얼에는 다음과 같은 내용이 있습니다.
-s
무시-L
및 를 사용하십시오-P
. 그렇지 않으면TARGET
지정된 마지막 옵션이 a가 심볼릭 링크일 때 동작을 제어합니다.기본값은-P
.
그리고 OpenBSD와 macOS(및 아마도 다른 시스템)에서는 동일한 GNU ln
매뉴얼에 다음과 같이 나와 있습니다.
-s
무시-L
및 를 사용하십시오-P
. 그렇지 않으면TARGET
지정된 마지막 옵션이 a가 심볼릭 링크일 때 동작을 제어합니다.기본값은-L
.
(항상 일어나는 것처럼 보이는 인터넷의 임의의 페이지보다는 사용 중인 시스템의 설명서를 항상 읽어야 하는 또 다른 이유입니다.)