O inode é o arquivo, que é identificado somente pelo seu número de inode. Um nome de arquivo é apenas um metadado no sistema de arquivos que se refere a um arquivo. Um único arquivo / inode pode ter vários nomes de arquivos referentes a ele:
$ touch foo
$ ln foo bar
$ ls -li foo bar
28098391 -rw-r--r-- 2 xxxxxxx xxxxx 0 Jul 6 22:15 bar
28098391 -rw-r--r-- 2 xxxxxxx xxxxx 0 Jul 6 22:15 foo
A primeira coluna é o número do inode; note que é o mesmo para os dois arquivos. O primeiro número após as permissões é a contagem de links; foo
e bar
têm uma contagem de links de 2 porque cada um dos dois nomes se refere ao mesmo arquivo.
$ rm foo
$ ls -li bar
28098391 -rw-r--r-- 1 xxxxxxx xxxxx 0 Jul 6 22:15 bar
rm foo
apenas remove esse link específico para o arquivo subjacente; bar
ainda se refere a ele (note que o número do inode não mudou, mas a contagem de links agora é 1 em vez de 2). Observe também que nem foo
nem bar
era o nome "real" do arquivo; o fato de que foo
foi criado primeiro não o tornou especial de forma alguma. Um arquivo não é removido até que todos os links sejam removidos (ou seja, até que a contagem de links seja reduzida a 0). Mesmo assim, o arquivo não é realmente removido; os blocos alocados para esse inode são simplesmente marcados como disponíveis para reutilização pelo sistema de arquivos.