하드링크에서 소프트링크로

하드링크에서 소프트링크로

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

ln이 유틸리티에 대한 POSIX 사양설명하다:

source_file이 심볼릭 링크인 경우:

-P옵션이 적용되는 경우 인수 로 , 대상 경로를 인수로 , 인수 로 , 0을 인수로 linkat()사용하는 함수와 동일한 작업을 수행해야 합니다.source_filepath1path2AT_FDCWDfd1fd2flag

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.

(항상 일어나는 것처럼 보이는 인터넷의 임의의 페이지보다는 사용 중인 시스템의 설명서를 항상 읽어야 하는 또 다른 이유입니다.)

관련 정보