Porque '.' é exibido por 'ls'?

7

Depois de ler a pergunta When você digita "ls -a", qual é o significado de "." e ".."? , eu tenho um similar.

Por que exibir . ? Quer dizer, existe algum diretório onde cd . não funcionaria? Como é útil para um usuário ver essa linha toda vez?

    
por Arseni Mourzenko 02.10.2011 / 02:06

2 respostas

16

O motivo por trás de ls -a mostrando . e .. não tem nada a ver com o utilitário e tudo a ver com sistemas de arquivos Unix (e Linux).

Tudo é um arquivo.

Diretórios são realmente arquivos que contêm listas de arquivos. "Dentro" qualquer diretório dado, porque essa é a perspectiva do usuário, se não exatamente a perspectiva do sistema de arquivos, existem dois arquivos especiais.

  • O primeiro, chamado . , é uma referência ao diretório de trabalho atual. Isso é usado por pessoas quase todos os dias, quando fazem coisas como executar um comando no diretório atual via ./scriptname .
  • O segundo, chamado .. , é uma referência ao diretório pai do CWD. Como . , .. é usado todos os dias por todos que desejam alterar os diretórios para o diretório pai por meio de cd .. .

A chamada do sistema getdents() , que é o cavalo de batalha no lado do sistema de ls , simplesmente enumera todos os arquivos em um diretório. (lembre-se: tudo é um arquivo. dispositivos, diretórios, soquetes, etc., para que todos apareçam)

Do lado do utilitário, o (s) autor (es) do comando ls forneceram várias opções e combinações de opções que nos permitem filtrar certas partes ou tipos de informações, por exemplo, @Gilles comentou acima que ls -A mostrará todos os dotfile, com as exceções de . e .. . Todas essas opções podem ser consideradas opções de pós-processamento. Eles afetam o que é exibido por ls , não o que é encontrado por ls .

Não há realmente nenhuma razão para listar explicitamente . e .. , por padrão, já que todos sabemos que estão lá, para que servem e quando usá-los.

Pode ser útil ser capaz de ter alguma opção para vê-los, quando você estiver solucionando problemas de permissões estranhos.

Confira a página de manual para getdents() ¹. Ele explica um pouco mais sobre como funciona e inclui o código-fonte de um programa de amostra que você pode compilar com gcc -Wall , que lista todos os arquivos em um diretório.

-
1. Pelo menos, a página de manual do Ubuntu para getdents() parece ter o código de exemplo.

    
por 02.10.2011 / 05:27
9

ls normalmente não exibe . e .. . Por padrão, ls oculta todos os arquivos cujo nome começa com . (arquivos de pontos) . ls -a os exibe porque você pediu para mostrar tudo. Algumas versões de ls têm uma opção um pouco diferente, ls -A , para mostrar todos os arquivos de ponto, mas não . ou .. .

Mostrar . pode ser útil se você listar mais que os nomes; por exemplo, ls -la relata as permissões e a propriedade do diretório atual e de seu pai ao longo dos arquivos no diretório.

    
por 02.10.2011 / 02:32