Nomes de arquivo de pontos principais
Resposta simples é porque esses nomes de arquivos começam com um ponto. Qualquer nome de arquivo que comece com um ponto é considerado um arquivo oculto no Linux (mesmo se, neste caso, o nome do arquivo em si é apenas um caractere longo) e é basicamente uma "tradição" que remonta ao primeiro Unix OS. Você pode visualizá-los com ls -a
.
Se você quiser saber por que, no nível de código, ele é definido como padrão no arquivo ls.c
de src/ls.c
no pacote coreutils:
638 static enum
639 {
640 /* Ignore files whose names start with '.', and files specified by
641 --hide and --ignore. */
642 IGNORE_DEFAULT,
643
644 /* Ignore '.', '..', and files specified by --ignore. */
645 IGNORE_DOT_AND_DOTDOT,
646
647 /* Ignore only files specified by --ignore. */
648 IGNORE_MINIMAL
649 } ignore_mode;
Aplicativos simples
Você perguntou:
É algo como, por padrão, eles são adicionados a todos os diretórios criados para facilitar a movimentação externa?
Sim, pois .
refere-se ao próprio diretório e ..
refere-se ao diretório pai. A exceção é o diretório /
, que é a raiz da árvore do sistema de arquivos. Nesse caso, ..
refere-se a /
em si, pois não há diretório acima dele. Em vez de memorizar cada caminho, a conveniência é que você pode subir um nível usando cd ..
. Simples, certo? Agora imagine que você tem um caminho muito longo. É inconveniente digitar o caminho completo para o diretório pai, enquanto ..
é muito mais simples. Ele também permite scripts simples, como essa função que eu mantenho em .bashrc
:
goup() {
num=
while [ $num -ne 0 ]
do
cd ..
num=$(expr $num - 1 )
done
}
Especificando goup 5
i pode ir até 5 diretórios, onde cada ..
se refere ao pai de um pai de um pai.
No caso de .
, ele pode ser usado por scripts para determinar sua localização atual, se necessário.
Em outros idiomas, utilitários
As conchas são de atenção óbvia. Seu comportamento é o mesmo de ls
, ignorando nomes de arquivos quando se usa glob
$ echo *
LICENSE README.md ayatana-indicator ayatana-indicator.desktop debian
star:
Podemos imitar ls -a
com o shell glob se adicionarmos .*
para incluir arquivos ocultos.
$ echo * .*
LICENSE README.md debian indicator-bulletin indicator-bulletin.desktop .git .gitignore
Por outro lado, alguns outros programas / utilitários e linguagens de programação não escondem esses itens (ou pelo menos não escondem .
). Sua finalidade, no entanto, é muito mais extensa do que simplesmente listar diretórios, e eles são muito mais adequados para analisar arquivos (Por favor, leia Por que você não deve analisar? a saída de ls (1) ).
$ find -maxdepth 1
.
./.git
./README.md
./LICENSE
./debian
./indicator-bulletin.desktop
./.gitignore
./indicator-bulletin
$ perl -le 'opendir(dh,$ARGV[0]);while( $file = readdir(dh) ){ print $file; }; closedir(dh);' "."
.git
..
README.md
LICENSE
debian
.
indicator-bulletin.desktop
.gitignore
indicator-bulletin
O os.listdir()
do Python é uma exceção notável - ele não mostra .
nem ..
. O módulo glob
pode ser usado para mostrar o mesmo comportamento que em shells.
$ python -c 'import os;print(os.listdir("."))'
['.git', 'README.md', 'LICENSE', 'debian', 'indicator-bulletin.desktop', '.gitignore', 'indicator-bulletin']
$ python -c 'import glob;print(glob.glob(".*"),glob.glob("*"))'
(['.git', '.gitignore'], ['README.md', 'LICENSE', 'debian', 'indicator-bulletin.desktop', 'indicator-bulletin'])