디렉토리에 대한 심볼릭 링크에 후행 슬래시 /를 포함해야 합니까?

디렉토리에 대한 심볼릭 링크에 후행 슬래시 /를 포함해야 합니까?

디렉토리에 대한 심볼릭 링크는 I 또는 ls -l에 따라 다른 결과를 생성합니다 . 그러나 실제 차이점은 무엇입니까? 왜 어느 것을 선호해야합니까?ln -s dirln -s dir/

답변1

내가 생각할 수 있는 유일한 것은 슬래시를 추가하면 슬래시가 없는 링크가 여전히 작동하고 이제 (파일 대신) 다른 개체를 가리키기 때문에 누군가 실제 디렉터리를 삭제하고 파일로 바꾸는 것으로부터 사용자를 "보호"한다는 것입니다. 목차).

[user@host linktest]$ mkdir test
[user@host linktest]$ ln -s test/ slash
[user@host linktest]$ ln -s test noslash
[user@host linktest]$ ls -l
total 4
lrwxrwxrwx 1 paul paul    4 Feb 21 21:00 noslash -> test
lrwxrwxrwx 1 paul paul    5 Feb 21 21:00 slash -> test/
drwxrwxr-x 2 paul paul 4096 Feb 21 20:59 test
[user@host linktest]$ file *slash
noslash: symbolic link to `test'
slash: symbolic link to `test/'
[user@host linktest]$ rmdir test
[user@host linktest]$ file *slash
noslash: broken symbolic link to `test'
slash: broken symbolic link to `test/'
[user@host linktest]$ touch test
[user@host linktest]$ file *slash
noslash: symbolic link to `test'
slash: broken symbolic link to `test/'
[user@host linktest]$

슬래시 버전은 대상이 파일로 대체되면 중단됩니다.

답변2

다른 점이 없다.(대상이 기존 디렉터리가 아닌 경우 다릅니다.)

쉘 완성으로 인해 마지막 슬래시가 거기에 있을 수 있습니다. 일부 구성에서는 ln -s tarTabSpacelink완성이 ln -s target/ link.

답변3

귀하의 질문은 실제로 프로그램의 동작에 관한 것입니다 ls.

1) $dir이 실제로 심볼릭 링크인 작업을 수행하면 ls -l $dir심볼릭 링크에 대한 정보를 얻게 됩니다.

2) 이렇게 하면 ls -lL $dir$dir이 디렉토리에 대한 심볼릭 링크인 경우 대상 디렉토리에 대한 정보를 얻게 됩니다.

3) 이렇게 하면 ls -l $dir/.심볼릭 링크를 강제로 따르고 대상 디렉터리에 대한 정보를 제공합니다.

4) 이렇게 하면 사용된 버전 ls -l $dir/에 따라 1번, 3번과 같은 결과가 나올 수 있습니다 . ls나는 #1과 같은 작업을 수행하는 이전 버전의 Solaris와 #3과 같은 작업을 수행하는 Linux에 익숙했기 때문에 이것이 나를 놀라게 했습니다.

어느 것을 선택해야 하며 그 이유는 무엇입니까?

주어진 디렉토리 이름이 실제 디렉토리인지 아니면 디렉토리에 대한 심볼릭 링크인지에 대해 우려되는 경우에는 후행 슬래시가 필요하지 않습니다.

디렉토리 자체보다 디렉토리에 있는 파일에 더 관심이 있는 경우 뒤에 슬래시를 사용하십시오.

답변4

흥미로운 질문입니다. 나는 약간의 테스트를 수행했습니다.

$ mkdir dir
$ ln -s dir/ test_slash
$ ln -s dir test_noslash
$ ls -l
total 4
drwxr-xr-x 2 vrusinov vrusinov 4096 Feb 21 16:41 dir
lrwxrwxrwx 1 vrusinov vrusinov    3 Feb 21 16:41 test_noslash -> dir
lrwxrwxrwx 1 vrusinov vrusinov    4 Feb 21 16:41 test_slash -> dir/
$ strace ls test_slash 2> trace_slash
$ strace ls test_noslash 2> trace_noslash
$ wc -l trace_*
   79 trace_noslash
   79 trace_slash
$ diff -u trace_* | less

보시다시피 시스템 호출 수(적어도 ls의 경우)에는 차이가 없으며 추적도 매우 비슷해 보입니다. 그러나 이것은 단지 덤프 테스트일 뿐이므로 확실하지 않습니다. 약간의 차이가 있을 수 있습니다.

관련 정보