디렉토리에 대한 심볼릭 링크는 ls -l
I ln -s dir
또는 에 따라 다른 결과를 제공합니다 ln -s dir/
. 그러나 실제 차이점은 무엇이며 어떤 이유를 선호해야합니까?
디렉토리에 대한 심볼릭 링크는 ls -l
I ln -s dir
또는 에 따라 다른 결과를 제공합니다 ln -s dir/
. 그러나 실제 차이점은 무엇이며 어떤 이유를 선호해야합니까?
답변:
차이가 없습니다. 대상이 기존 디렉토리가 아닌 경우 차이가 있습니다.
쉘 완료로 인해 최종 슬래시가 발생했을 수 있습니다. 일부 구성에서는으로 ln -s tar
TabSpacelink
완료됩니다 ln -s target/ link
.
foo -> bar/
다음 foo/qux
과 같습니다 bar//qux
. 공식적으로 말하면 질문의 제목에는을 포함하지 않지만 foo -> bar/
거기에 대한 답변에서 그 사건에 대해서도 논의합니다.
내가 생각할 수있는 유일한 것은 디렉토리를 삭제하고 파일을 만드는 누군가로부터 당신을 "보호"한다는 것입니다.
[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]$
대상을 파일로 바꾸면 슬래시가있는 버전이 중단됩니다.
흥미로운 질문. 나는 작은 테스트를했다 :
$ 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, 이것은 단지 덤프 테스트이며 확실하지 않습니다-약간의 차이가있을 수 있습니다.
귀하의 질문은 실제로 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처럼하는 것에 놀랐다.
그리고 나는 왜 어느 것을 선호해야합니까?
제공 디렉토리 이름이 실제 디렉토리인지 디렉토리에 대한 심볼릭 링크인지에 대해 우려 할 경우 슬래시없이
디렉토리 자체가 아닌 디렉토리의 파일에 더 관심이있는 경우 슬래시를 사용하십시오.