Ao listar arquivos em detalhes, você verá muitas informações. Vamos analisar um exemplo anterior de informações de inode do comando ls -li:
pete@icebox:~$ ls -li
140 drwxr-xr-x 2 pete pete 6 Jan 20 20:13 Desktop
141 drwxr-xr-x 2 pete pete 6 Jan 20 20:01 Documents
Anteriormente, ignoramos o terceiro campo nesta saída. Este campo é a contagem de links.
A Contagem de Links no Linux
A contagem de links no linux é o número total de hard links que um arquivo possui. Para entender o que isso significa, primeiro precisamos discutir o que são links. No Linux, existem dois tipos de links: links simbólicos (symlinks) e hard links.
Entendendo Symlinks
No sistema operacional Windows, você tem atalhos, que são essencialmente aliases que apontam para outros arquivos. No Linux, o equivalente é um link simbólico, também conhecido como link suave ou symlink. Um symlink é um tipo especial de arquivo que aponta para outro arquivo ou diretório pelo seu nome.
Vamos ver isso na prática. Criaremos alguns arquivos e, em seguida, um symlink.
pete@icebox:~/Desktop$ echo 'myfile' > myfile
pete@icebox:~/Desktop$ echo 'myfile2' > myfile2
pete@icebox:~/Desktop$ echo 'myfile3' > myfile3
pete@icebox:~/Desktop$ ln -s myfile myfilelink
pete@icebox:~/Desktop$ ls -li
total 12
151 -rw-rw-r-- 1 pete pete 7 Jan 21 21:36 myfile
93401 -rw-rw-r-- 1 pete pete 8 Jan 21 21:36 myfile2
93402 -rw-rw-r-- 1 pete pete 8 Jan 21 21:36 myfile3
93403 lrwxrwxrwx 1 pete pete 6 Jan 21 21:39 myfilelink -> myfile
Aqui, criamos um link simbólico chamado myfilelink que aponta para myfile. Quando você usa ls para ver um ls symlink, ele é claramente identificado pelo l no início da string de permissões e pelo símbolo -> apontando para o alvo. Observe que o symlink tem seu próprio número de inode exclusivo (93403). Como os symlinks apontam para nomes de arquivos em vez de inodes, eles podem abranger diferentes sistemas de arquivos.
Entendendo Hard Links
O outro tipo de link é o hard link. Um hard link cria outra entrada de arquivo que aponta diretamente para o mesmo inode do arquivo original.
Vamos criar um hard link para myfile2:
pete@icebox:~/Desktop$ ln myfile2 myhardlink
pete@icebox:~/Desktop$ ls -li
total 16
151 -rw-rw-r-- 1 pete pete 7 Jan 21 21:36 myfile
93401 -rw-rw-r-- 2 pete pete 8 Jan 21 21:36 myfile2
93402 -rw-rw-r-- 1 pete pete 8 Jan 21 21:36 myfile3
93403 lrwxrwxrwx 1 pete pete 6 Jan 21 21:39 myfilelink -> myfile
93401 -rw-rw-r-- 2 pete pete 8 Jan 21 21:36 myhardlink
Observe que myhardlink compartilha o mesmo número de inode (93401) que myfile2. A contagem de links para ambos os arquivos também aumentou para 2. Isso ocorre porque duas entradas de arquivo agora apontam para o mesmo inode. Se você modificar o conteúdo de myfile2, as alterações serão refletidas em myhardlink, e vice-versa. Se você excluir myfile2, os dados do arquivo ainda estarão acessíveis através de myhardlink. O inode e seus dados só são removidos do disco quando a contagem de links cai para zero. Como os hard links apontam para inodes, que são exclusivos dentro de um único sistema de arquivos, eles não podem abranger diferentes sistemas de arquivos.
Criando Symlinks e Hard Links
Você pode criar ambos os tipos de links usando o comando ln. A sintaxe é simples.
Para criar um link simbólico, use a flag -s:
ln -s /caminho/para/original /caminho/para/link
Para criar um hard link, omita a flag -s:
ln /caminho/para/original /caminho/para/link
Usar os comandos ls symlinks ou ls links em geral com a opção -l é essencial para gerenciar e identificar esses diferentes tipos de arquivos.