Devo incluir uma barra à direita / em um symlink em um diretório?

25

Symlinking para um diretório gera resultados diferentes com ls -l , dependendo se eu ln -s dir ou ln -s dir/ . Mas qual é a diferença real, e qual devo preferir por quê?

    
por Tobias Kienzler 21.02.2011 / 14:02

4 respostas

9

Não há diferença. ( Haveria uma diferença se o destino não fosse um diretório existente.)

A barra final pode ter sido finalizada por causa da conclusão do shell: com alguma configuração, ln -s tar Tab Espaço link é completado como ln -s target/ link .

    
por 21.02.2011 / 22:03
24

A única coisa em que consigo pensar é que "protege" você de alguém que está excluindo o diretório e criando um arquivo.

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

A versão com a barra quebra quando o destino é substituído por um arquivo.

    
por 21.02.2011 / 22:03
3

Interessante pergunta. Eu fiz um pequeno teste:

$ 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

Como você pode ver, não há diferença no número de chamadas do sistema (pelo menos para ls) e os rastreamentos parecem muito semelhantes. No entanto, isso é apenas teste de despejo e não tenho certeza - pode haver algumas diferenças.

    
por 21.02.2011 / 14:48
2

Sua pergunta é realmente sobre o comportamento do programa ls .

1) Se você usa ls -l $dir onde $ dir é um link simbólico, você obtém informações sobre o link simbólico.

2) Se você usa ls -lL $dir onde $ dir é um link simbólico para um diretório, você obtém informações sobre o diretório de destino.

3) Se você ls -l $dir/. forçar o symlink a ser seguido e fornecer informações sobre o diretório de destino.

4) Se você fizer ls -l $dir/ , os resultados podem ser iguais a # 1 ou podem ser os mesmos que # 3 dependendo de qual versão de ls está sendo usada. Eu estava acostumada a uma versão mais antiga do Solaris fazendo isso como # 1 e fiquei surpresa com o Linux fazendo como # 3.

and which one should I prefer why?

Sem barra final, se você estiver preocupado se um nome de diretório é um diretório real versus um link simbólico para um diretório.

Com barra final, se você estiver mais preocupado com os arquivos no diretório em vez do próprio diretório.

    
por 24.03.2012 / 00:24