Diretório atual (.) e respectivo pai (..) mostrados numa pasta

Olá.

Ao utilizar o comando ls -a na pasta raiz (/), observei o ponto(.) e os dois pontos(…) que representam, respectivamente, o diretório atual e o seu pai. Se o que escrevi estiver certo, por que esse comando mostra o "próprio diretório dentro de si (é o que parece) e qual o “diretório pai” do root? Root tem pai?

Eu, de fato, gostaria de entender isso, mesmo se tudo que escrevi for bobagem.

Segue imagem.

Carlos_Ubuntu

Rapaz sabe que eu tmb não sei, boa pergunta. e quando digita “$ cd …/” nada acontece.
Se digita $ basename …/ aparece …
se digita $ dirname …/ aparece .
Isso mostra que foi intencional ser assim, não sei o porque, mas o … aponta para o próprio /

O meu palpite é para se a pessoa por exemplo estiver em /cdrom se ela der “$ cd …/…/…/” vc vê que eu dei 2 …/ a mais, sem o … apontar para o / ou seja o barra não apontar para o barra o comando daria diretório não existente.

Olá, @aguamole . Obrigado pelo retorno. Vamos ver se alguém desvenda esse mistério para nós.

Só um comentário: eu e você digitamos dois pontos - como aqui (…). Enquanto escrevo, aparecem dois, mas no texto publicado aparecem 3 pontos. Acho que seria bom se o pessoal do site soubesse disso.

rascunho

Carlos-Ubuntu

Salve Carlos, por definição todo diretório tem o . e o … dentro deles. A questão é que tudo começa no / (root) e não existe nada antes dele, é o big bang, inicio de tudo, então o . e o … do root é ele mesmo, vamos dizer assim. Só tá lá pela definição da estrutura de diretórios do Unix.

1 curtida

Olá, @EntusiastaDeVelharia . Obrigado pelo retorno.

Faz sentido ser assim? Identificar o próprio diretório? Deve haver alguma motivação para isso. Você saberia me dizer qual?

Carlos-Ubuntu

Eu nunca fui atrás pra ver a história, mas usamos essa referência do próprio diretório em alguns casos, como executar programas/scripts que estão na pasta atual ou quando precisamos que no script ele execute algo que está na pasta atual sem precisar chamar o caminho todo, por exemplo. Acho que o / ter o “.” e o “…” é mais pela definição dos diretórios do Linux, todo diretório tem os arquivos especiais . e … dentro deles e o / é um diretório, logo tem que ter o “.” e o “…”. Minha resposta tá um pouco rasa mas aguardo os companheiros instruidos na arte Linux aqui pra uma resposta mais elaborada hehe. Abraços

o ideal para falar de comandos linux é colocar ele dentro do bloco de codigo

cd …/
vs
cd ../

usando esse botão de contexto aqui
image

ou colocando ` entre o comando
image

1 curtida

A motivação eu expliquei acima na primeira resposta. Se o diretorio atual já estiver em / e e usar o cd para ir para / ele não retorna erro, veja a imagem.


Isso é útil na linguagem de script Shell.

Faz se você entender os axiomas:

  • Todo diretório tem um diretório pai
  • … faz referência ao diretório pai do diretório de referência
  • / é o diretório que parte todos os diretório

/ é uma singularidade, ele é pai dele mesmo porque ele é a raiz e ao mesmo tempo um diretório logo tem um diretório pai

É básico do sistema de arquivos ter esses dois diretórios especiais.

Lembrem-se que, eu posso tirar o disco do computador A e levar a outro B, e então montar o sistema de arquivos raiz do computador A no computador B em /mnt/A . Nesse caso o diretório especial .. vai ter sim significado e vai listar o diretório anterior, ou seja, /mnt

Já quando se está na raiz do sistema de arquivos, não há como voltar mais, então ele aponta para ele mesmo. Ou seja, o significado do diretório .. é dado pelo sistema operacional, não como algo escrito no próprio arquivo. Tanto que as permissões desse diretório é na verdade as permissões do diretório pai. Já as permissões do diretório . ficam salvas no próprio sistema de arquivos, indicado pelo diretório. Nesse ponto quando, em um diretório vc lista as permissões dos subdiretórios, o sistema operacional pega a informação desse . de cada subdiretório, mesmo que ele esteja numa partição em separado e montado ali.

Oi Carlos.

. significa o diretório atual
.. significa o diretório superior a ele

É por isso que para executar um arquivo um script local você usa:

./script

E é por isso que para voltar um diretório você usa “cd ..

Esses são, até onde eu sei, atalhos relativos à pasta que você está, e não significam um local pré-definido, por isso eles te levam para locais diferentes.

Se você der um “cd .

" vai perceber que não vai mudar de pasta, afinal o ponto significa o diretório atual, e não vai receber nenhum erro.

Você pode entender esses pontinhos como se fossem a “seta de voltar” num gestor de arquivos com interface, eles estão ali para navegação simplesmente.

Eles são listados porque eles são “ponteiros” para essas funcionalidades, é como quando você dá um “ls” num diretório, por trás dos panos é o mesmo que “ls .”

Faça um teste, por exemplo, vá até a sua home “cd home

Depois rode um “ls ..” e você vai ver que ele vai fazer a listagem da raiz. E eles são ocultos por padrão também porque o nome deles começa com um ponto.

Não sei se a explicação vai algo além de “porque programaram para funcionar assim”, mas o “ponto” e o “ponto-ponto” são caminhos relativos do filesystem.

1 curtida

Ah, lembrando que tem a complicação onde é possível criar arquivos especiais que são links simbólicos e links físicos, que são arquivos mas na prática agem como diretórios. O próprio sistema operacional é que vai ler o conteúdo desses arquivos e verificar para onde apontam e pegar as permissões para mostrar ao usuário.

Esse assunto de sistema de arquivos é bem extenso e inclusive há alguns recursos avançados que apenas alguns tipos de sistema de arquivos têm, como por exemplo subvolumes ou arquivos deduplicados.

1 curtida

Complementando, para ser possível utilizar esse tipo de atalho, subir de diretório (../) é preciso ter instalado o bd na distro (base Debian).

Normalmente, as distribuições já veem com ele, mas acabei tendo problema em uma instalação mínima do Xubuntu, quando não o tinha e o comando não funcionava:

Fonte: How To Navigate Directories Faster In Linux - OSTechNix

Em sistemas Unix-like, como o Ubuntu mostrado na sua imagem, o diretório “.” representa o diretório atual, e “…” representa o diretório pai.

Quando você usa o comando ls -a na pasta raiz (/), você verá os dois diretórios listados:

  • O “.” é a própria pasta raiz, por isso parece que ela está listando a si mesma. Isso é útil para operações que envolvem o diretório atual.
  • O “…” também aponta para a própria pasta raiz quando você está nela. Isso ocorre porque a pasta raiz (/) é o diretório mais alto na hierarquia de arquivos do sistema operacional e, portanto, não tem um “diretório pai” acima dela. Assim, em /, o “…” simplesmente referencia a própria raiz.

Esse comportamento serve para garantir que operações envolvendo caminhos relativos sempre tenham uma referência válida, mesmo no topo da árvore de diretórios.