동일한 디렉토리에 심볼릭 링크 생성

동일한 디렉토리에 심볼릭 링크 생성

링크를 만드는 데 문제가 있습니다. 다음을 만들고 싶습니다.

ls -la /usr/pkgs/python3/
total 44
drwxr-xr-x   5 root root 4096 Sep  3  2020 .
drwxrwxr-x 259 root root 20480 Feb 16 06:49 ..
drwxr-xr-x   7 root root 4096 Jan  9  2018 3.6.3
lrwxrwxrwx   1 root root    5 Nov  8  2018 3.6.3a -> 3.6.3

난 달린다:

ln -s /usr/pkgs/python3/3.6.3 /usr/pkgs/python3/3.6.3a

그러나 다음을 생성합니다.

ls -la /usr/pkgs/python3/
total 0
drwxrwxr-x 3 root root 20 Mar 27 23:47 .
drwxrwxr-x 3 root root 21 Mar 27 23:47 ..
drwxrwxr-x 4 root root 41 Mar 27 23:47 3.6.3a

ls -la /usr/pkgs/python3/3.6.3a/
total 0
drwxrwxr-x 4 root root 41 Mar 27 23:47 .
drwxrwxr-x 3 root root 20 Mar 27 23:47 ..
lrwxrwxrwx 1 root root 29 Mar 27 23:48 3.6.3 -> /usr/pkgs/python3/3.6.3

위의 예와 같은 상대 경로가 아닌 링크의 실제 경로를 사용하고 싶습니다 3.6.3a -> 3.6.3. 내가 무엇을 놓치고 있나요?

답변1

이는 이름이 지정된 3.6.3a디렉토리가 이미 존재하기 때문에 발생합니다 /usr/pkgs/python3/.

ln명령에는 두 가지 이상의 형식이 있습니다. 인용하다POSIX 사양(강조):

요약

ln [-fs] [-L|-P] source_file target_file
ln [-fs] [-L|-P] source_file... target_dir

설명하다

첫 번째 요약 양식에서 ln유틸리티는 다음으로 지정된 대상 경로에 새 디렉토리 항목(링크)을 생성해야 합니다.대상 파일 피연산자. 이 옵션을 지정 하면 -s지정된 파일에 대한 심볼릭 링크가 생성됩니다.소스 파일피연산자. 첫 번째 요약 양식마지막 피연산자가 기존 디렉터리의 이름을 지정하지 않는 경우 가정해야 합니다.;

두 번째 요약 형식에서 ln유틸리티는 새 디렉토리 항목(링크)을 생성하거나 -s이 옵션이 지정된 경우 기호 링크를 생성해야 합니다.소스 파일대상 경로에 위치한 피연산자기존의디렉토리 이름은대상 디렉토리.

이름이 지정된 파일(넓은 의미에서 일반 파일일 필요는 없음)이 있고 이름이 지정된 파일이 없는 경우 3.6.3실행 /usr/pkgs/python3/하는 3.6.3a명령은 예상한 결과를 제공합니다.

메모( 3.6.3존재하고 3.6.3a존재하지 않는 것으로 가정)

ln -s /usr/pkgs/python3/3.6.3 /usr/pkgs/python3/3.6.3a

동안 절대 경로에 대한 링크를 만듭니다.

ln -s 3.6.3 /usr/pkgs/python3/3.6.3a

3.6.3a3.6.3링크 자체와 동일한 디렉터리에 있어야 하는 파일 이름을 딴 상대 링크를 만듭니다 . (물론 ln -s ../path/to/3.6.3 /usr/pkgs/python3/3.6.3a다른 디렉토리에 있는 파일에 대한 상대 링크를 만드는 데에도 사용할 수 있습니다).
GNU 구현에는 절대 경로에서 상대 링크를 만들 수 있는 옵션이 ln있습니다 .-r

$ cd /tmp/
$ mkdir dir dir/subdir
$ touch file
$ ln -sr /tmp/file dir/subdir/link_to_file
$ ls -gG /tmp/dir/subdir/link_to_file 
lrwxrwxrwx 1 10 Mar 28 01:31 /tmp/dir/subdir/link_to_file -> ../../file

답변2

가장 쉬운 방법은 해당 디렉터리로 이동하여 링크를 만드는 것입니다.

cd /usr/pkgs/python3/
ln -sf  3.6.3  3.6.3a
cd -

또는 서브쉘을 사용하십시오:

( cd /usr/pkgs/python3/ ; ln -sf  3.6.3  3.6.3a )

관련 정보