디렉토리의 심볼릭 링크에 슬래시 (/)를 포함시켜야합니까?


30

디렉토리에 대한 심볼릭 링크는 ls -lI ln -s dir또는 에 따라 다른 결과를 제공합니다 ln -s dir/. 그러나 실제 차이점은 무엇이며 어떤 이유를 선호해야합니까?

답변:


9

차이가 없습니다. 대상이 기존 디렉토리가 아닌 경우 차이가 있습니다.

쉘 완료로 인해 최종 슬래시가 발생했을 수 있습니다. 일부 구성에서는으로 ln -s tarTabSpacelink완료됩니다 ln -s target/ link.


연결된 질문은 경로의 여러 연속 슬래시에 관한 것으로 보이지만 링크의 슬래시 뒤에는 아닙니다. 나는 여기에 말할 것이 확실하지 않습니다.
mwfearnley

사실, 나는 그렇게 말해서는 안됩니다. 이 질문과 밀접한 관련이있는 일반적인 관심사에 대해서는 말할 것도 꽤 있습니다. 그래도 이것이이 결론에 이르는 것은 아니라고 생각합니다.
mwfearnley

@mwfearnley 논리적 인 결과입니다. 그렇다면 foo -> bar/다음 foo/qux과 같습니다 bar//qux. 공식적으로 말하면 질문의 제목에는을 포함하지 않지만 foo -> bar/거기에 대한 답변에서 그 사건에 대해서도 논의합니다.
Gilles 'SO- 악마 그만'

안녕하십니까, 응답 해 주셔서 감사합니다. 심볼릭 링크를 포함한 경로는 동일합니다. 필자가 슬래시없이 심볼릭 링크에 액세스 할 때 어떤 일이 발생하는지 반드시 알려주지는 않으며, 유닉스 전문가가 아니더라도 '동등성'이 무엇을 의미하는지 또는 어떤 의미인지 반드시 알 필요는 없습니다.
mwfearnley

차이가 나는 가장자리 케이스가 하나 이상 있으므로이 답변을 하향 조정해야했습니다.
Flimm

27

내가 생각할 수있는 유일한 것은 디렉토리를 삭제하고 파일을 만드는 누군가로부터 당신을 "보호"한다는 것입니다.

[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]$

대상을 파일로 바꾸면 슬래시가있는 버전이 중단됩니다.


3

흥미로운 질문. 나는 작은 테스트를했다 :

$ 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) 트레이스는 매우 유사합니다. Howewer, 이것은 단지 덤프 테스트이며 확실하지 않습니다-약간의 차이가있을 수 있습니다.


나는 또한 궁금하네요 경우 실제로 차이가 있지만, 그 이유는 추가 슬래시는 저장됩니다?
Tobias Kienzler

2

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

1) ls -l $dir$ dir이 실제로 심볼릭 링크 인 경우 심볼릭 링크에 대한 정보를 얻습니다.

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

3) 그렇게 ls -l $dir/.하면 symlink를 따르고 대상 디렉토리에 대한 정보를 제공합니다.

4) 할 경우 사용중인 ls -l $dir/버전에 따라 결과가 # 1과 같거나 # 3과 같을 수 있습니다 ls. 나는 # 1처럼 솔라리스의 구버전에 익숙했고 리눅스가 # 3처럼하는 것에 놀랐다.

그리고 나는 왜 어느 것을 선호해야합니까?

제공 디렉토리 이름이 실제 디렉토리인지 디렉토리에 대한 심볼릭 링크인지에 대해 우려 할 경우 슬래시없이

디렉토리 자체가 아닌 디렉토리의 파일에 더 관심이있는 경우 슬래시를 사용하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.