Usando o comando ls com links simbólicos

4

Atualmente, não entendo o que está acontecendo quando tento encontrar o conteúdo ou as informações de um link simbólico para um diretório ao usar o comando ls . Eu entendo que há uma opção -H para o comando ls que seguirá os links simbólicos listados na linha de comando. O que a página de manual para ls não indica é que isso é necessário somente ao usar a opção -l . Se eu simplesmente fizer algo como ls symLinkToDir , irá listar o conteúdo dos diretórios vinculados sem opções adicionais. Mas, se eu fizer ls -l symLinkToDir , ele só exibirá informações sobre o link, A MENOS QUE eu inclua a opção -H também. Este exemplo é o que estou falando:

brian@LinuxBox:~$ ls playground/linkedDir
file4  file5
brian@LinuxBox:~$ ls -l playground/linkedDir
lrwxrwxrwx 1 brian brian 4 Feb 18 16:42 playground/linkedDir -> dir2
brian@LinuxBox:~$ ls -lH playground/linkedDir
total 0
-rw-rw-r-- 1 brian brian 0 Feb 18 16:41 file4
-rw-rw-r-- 1 brian brian 0 Feb 18 16:41 file5

Eu não estou entendendo alguma coisa aqui? Isso é apenas uma maneira estranha de como isso funciona? Se é assim que funciona, a página de manual não deve dizer que o link simbólico será seguido sob certas condições sem a necessidade da opção -H ? Agradecemos antecipadamente por sua entrada.

    
por bmcentee148 18.02.2018 / 23:03

2 respostas

1

O comportamento de ls em links simbólicos para diretórios depende de muitas opções, não apenas de -l e -H . Na ausência de opções de comportamento de link simbólico ( -L , -H ), ls symlinkToDir exibe o conteúdo do diretório, mas ls -l symlinkToDir , ls -d symlinkToDir e ls -F symlinkToDir all exibem informações sobre o link simbólico.

Se você está lendo a página man da implementação GNU de ls , não dá a história completa. As páginas de manual do GNU são apenas resumos. A documentação completa está no manual de informações ( info ls ), geralmente disponível em HTML nos dias de hoje. Eu não consigo encontrar o comportamento padrão em links simbólicos para diretórios no manual de informações, no entanto, isso pode ser um bug na documentação.

O Página man do FreeBSD , por exemplo, é mais preciso, mas você precisa ler a descrição da opção -H para encontrar o comportamento padrão.

-H Symbolic links on the command line are followed. This option is assumed if none of the -F, -d, or -l options are specified.

Se você quiser uma descrição mais formal (mas menos fácil de ler), leia a especificação POSIX . Isso não terá as extensões da sua implementação.

If one or more of the -d, -F, or -l options are specified, and neither the -H nor the -L option is specified, for each operand that names a file of type symbolic link to a directory, ls shall write the name of the file as well as any requested, associated information. If none of the -d, -F, or -l options are specified, or the -H or -L options are specified, for each operand that names a file of type symbolic link to a directory, ls shall write the names of files contained within the directory as well as any requested, associated information.

    
por 19.02.2018 / 00:25
1

Aparentemente, é exigido pelo POSIX :

If none of the -d, -F, or -l options are specified, or the -H or -L options are specified, for each operand that names a file of type symbolic link to a directory, ls shall write the names of files contained within the directory as well as any requested, associated information.

Eu só posso supor que está lá porque sem -F ou -l , um link para um diretório se parece com um diretório real e, portanto, ls $link_to_dir pode agir da mesma forma que ls $dir .

Com link apontando para dir , o dir e o link parecem o mesmo lado a lado em uma listagem, e eles agem da mesma forma quando usados na linha de comando:

$ ls
dir  link
$ ls dir
bar  foo
$ ls link
bar  foo

mas -F revela a diferença:

$ ls -F 
dir/  link@
$ ls -F dir
bar  foo
$ ls -F link
link@
    
por 19.02.2018 / 00:25