후행 슬래시 유무에 관계없이 디렉터리 소프트 링크를 만들 수 있는 이유는 무엇입니까?

후행 슬래시 유무에 관계없이 디렉터리 소프트 링크를 만들 수 있는 이유는 무엇입니까?

폴더에 대한 심볼릭 링크를 생성할 때 입력에 따라 후행 슬래시 유무에 관계없이 심볼릭 링크가 생성된다는 것을 발견했습니다. 예를 들어:

$ ln -sfv /ln-test/FOLDER/ test-tail
test-tail -> /ln-test/FOLDER/

$ ln -sfv /ln-test/FOLDER test-notail
test-notail -> /ln-test/FOLDER

$ ll /ln-test
total 16
drwxr-xr-x  2 user  wheel    68B  2 Aug 08:35 FOLDER
lrwxr-xr-x  1 user  wheel    15B  2 Aug 08:36 test-notail -> /ln-test/FOLDER
lrwxr-xr-x  1 user  wheel    16B  2 Aug 08:36 test-tail -> /ln-test/FOLDER/

내 Mac 및 Debian 시스템에서 테스트한 위의 예에서 생성된 링크는 입력의 후행 슬래시와 일치합니다.

내가 이해한 바에 따르면 이는 중요하지 않을 수 있지만 최근 Objective-c에서 후행 슬래시로 인해 발생하는 버그가 발생했습니다. 여전히 이 오류를 추적해야 하지만 후행 슬래시 없이 링크를 다시 생성하면 문제가 해결됩니다.

그래서 내 실제 질문은 디렉토리 링크에 슬래시가 있는지 여부가 중요합니까?

답변1

/심볼릭 링크를 통해 파일에 접근하는 것은 파일의 기본 이름이 (상대 링크)로 시작하지 않으면 심볼릭 링크 텍스트로 바꾸거나 심볼릭 링크가 (전체 경로)로 시작하면 심볼릭 링크 텍스트로 바꾸는 것과 같습니다. 파일) /절대 링크). 심볼릭 링크 텍스트에 후행 슬래시가 있는 경우 그렇게 하십시오.

파일 이름의 후행 슬래시는 "파일이 디렉터리여야 함"을 의미합니다. 링크의 대상이 디렉터리인 경우 그 안에 있는 파일에 액세스하면 두 개의 슬래시가 포함된 계산된 경로가 생성됩니다. 하나는 기호 링크 텍스트에서, 다른 하나는 디렉터리 구분 기호로 사용됩니다. 주어진

lrwxr-xr-x  1 user  wheel    15B  2 Aug 08:36 test-notail -> /ln-test/FOLDER
lrwxr-xr-x  1 user  wheel    16B  2 Aug 08:36 test-tail -> /ln-test/FOLDER/

그러면 test-notail/foo와 동등 /ln-test/FOLDER/foo하고 test-tail/foo동등합니다 /ln-test/FOLDER//foo.

여러 개의 슬래시는 하나의 슬래시와 같습니다.(한 가지 예외가 있습니다. 일부 시스템에서는 경로가 정확히 두 개의 슬래시로 시작됩니다.) 따라서 디렉터리 기호 링크의 후행 슬래시(또는 여러 개의 후행 슬래시)는 시스템에 영향을 주지 않습니다.

추가 슬래시가 애플리케이션에 영향을 미치는 경우 이는 애플리케이션의 버그입니다.

답변2

응용 프로그램의 경우 아니요. 이는 중요하지 않습니다. 뒤에 슬래시가 없는 링크(일반적으로 생각하는 것보다 낮은 수준)는 다음과 같습니다.문서라고 불리는 FOLDER파일은 디렉토리입니다. 명시적으로 후행 슬래시 점이 있는 링크목차반례로서 다음과 같습니다 FOLDER.

$ mkdir test
$ cd test
$ touch foo
$ ll
drwxrwxr-x.   2 jwbernin jwbernin  4096 Aug  2 09:33 .
drwx------. 102 jwbernin jwbernin 20480 Aug  2 09:33 ..
-rw-rw-r--.   1 jwbernin jwbernin     0 Aug  2 09:33 foo
$ ln -s foo/ TRAIL
$ ll
drwxrwxr-x.   2 jwbernin jwbernin  4096 Aug  2 09:33 .
drwx------. 102 jwbernin jwbernin 20480 Aug  2 09:33 ..
-rw-rw-r--.   1 jwbernin jwbernin     0 Aug  2 09:33 foo
lrwxrwxrwx.   1 jwbernin jwbernin     4 Aug  2 09:33 TRAIL -> foo/

색상 강조 표시가 표시되지 않지만 마지막 링크가 끊어졌습니다. 이렇게 하면 ln -s foo NOTRAIL해당 NOTRAIL항목은 파일에 대한 유효한 링크가 됩니다 foo. foo디렉토리가 아니기 때문에 후행 슬래시를 사용하는 링크는 결국 끊어집니다.

모든 디렉터리는 (운영 체제에 대한) 파일이지만 모든 파일이 디렉터리는 아닙니다.

관련 정보