Nos sistemas estilo Unix, a estrutura de dados que representa os objetos do sistema de arquivos (em outras palavras, os dados sobre um arquivo) é armazenada no que é chamado de "inode".
Um nome de arquivo é apenas um link para este inode e é chamado de "link físico". Não há diferença entre o primeiro nome dado a um arquivo e qualquer link subsequente. Portanto, a resposta é "sim": um link físico é um arquivo regular e, de fato, um arquivo comum é um link físico.
O ls
comando mostrará quantos links físicos existem para o arquivo.
Por exemplo:
seumasmac@comp:~$ echo Hello > /tmp/hello.txt
seumasmac@comp:~$ ls -l /tmp/hello.txt
-rw-rw-r-- 1 seumasmac seumasmac 6 Oct 4 13:05 /tmp/hello.txt
Aqui nós criamos um arquivo chamado /tmp/hello.txt
. O 1
resultado da saída ls -l
indica que há 1 link físico para este arquivo. Esse link físico é o próprio nome do arquivo /tmp/hello.txt
.
Se agora criarmos outro link físico para este arquivo:
seumasmac@comp:~$ ln /tmp/hello.txt /tmp/helloagain.txt
seumasmac@comp:~$ ls -l /tmp/hello*
-rw-rw-r-- 2 seumasmac seumasmac 6 Oct 4 13:05 /tmp/helloagain.txt
-rw-rw-r-- 2 seumasmac seumasmac 6 Oct 4 13:05 /tmp/hello.txt
agora você pode ver que os dois nomes de arquivos indicam que existem 2 links físicos para o arquivo. Nenhum desses é o nome de arquivo "adequado", ambos são igualmente válidos. Podemos ver que ambos apontam para o mesmo inode (neste caso, 5374043):
seumasmac@comp:~$ ls -i /tmp/hello*
5374043 /tmp/helloagain.txt 5374043 /tmp/hello.txt
Existe um equívoco comum de que isso seja diferente para diretórios. Ouvi pessoas dizerem que o número de links retornados por ls
um diretório é o número de subdiretórios, incluindo .
e o ..
que está incorreto . Ou, pelo menos, apesar de fornecer o número correto, é correto pelos motivos errados!
Se criarmos um diretório e fizermos um ls -ld
, obteremos:
seumasmac@comp:~$ mkdir /tmp/testdir
seumasmac@comp:~$ ls -ld /tmp/testdir
drwxrwxr-x 2 seumasmac seumasmac 4096 Oct 4 13:20 /tmp/testdir
Isso mostra que existem 2 links físicos para este diretório. Esses são:
/tmp/testdir
/tmp/testdir/.
Observe que não/tmp/testdir/..
é um link para este diretório, é um link para . E isso diz a você por que a coisa "número de subdiretórios" funciona. Quando criamos um novo subdiretório:/tmp
seumasmac@comp:~$ mkdir /tmp/testdir/dir2
seumasmac@comp:~$ ls -ld /tmp/testdir
drwxrwxr-x 3 seumasmac seumasmac 4096 Oct 4 13:24 /tmp/testdir
agora você pode ver que existem 3 links físicos para o /tmp/testdir
diretório. Esses são:
/tmp/testdir
/tmp/testdir/.
/tmp/testdir/dir2/..
Portanto, cada novo subdiretório aumentará a contagem de links em um, devido à ..
entrada que ele contém.