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'])