Você está confundindo dois contadores diferentes: o contador de links do sistema de arquivos e o contador de referência do descritor de arquivos.
-
O contador de links do sistema de arquivos conta quantos links para um inode estão no próprio sistema de arquivos. O inode é a estrutura que contém os metadados do arquivo. Nos sistemas de arquivos ext *, esse contador é armazenado no próprio sistema de arquivos.
Você pode verificar quantos links tem um inode usando
ls -l
. Além disso, você pode usarls -i
para obter o número de inode de um arquivo. Por exemplo. tente multiplicar os links para um arquivo usandoln
e verifique se todos os links têm o mesmo número de inode.andcoz@tseenfoo:~/refcount> ls -li total 40 2248813 -rw-r--r-- 1 andcoz users 40960 7 feb 21.34 test andcoz@tseenfoo:~/refcount> ln test test2 andcoz@tseenfoo:~/refcount> ln test test3 andcoz@tseenfoo:~/refcount> ls -li total 120 2248813 -rw-r--r-- 3 andcoz users 40960 7 feb 21.34 test 2248813 -rw-r--r-- 3 andcoz users 40960 7 feb 21.34 test2 2248813 -rw-r--r-- 3 andcoz users 40960 7 feb 21.34 test3
-
O contador de referência do descritor de arquivo conta quantas vezes um arquivo é aberto por um processo ou, mais formalmente, quantos descritores de arquivo fazem referência a esse inode. Esta informação é armazenada na memória do kernel.
Você pode obter uma aproximação desse valor usando o comando
fuser
. Este comando lista todos os processos que possuem um arquivo aberto. Observe que um único processo pode abrir o mesmo arquivo várias vezes, portanto, o tamanho da lista de fusores é menor ou, geralmente, igual ao contador de referência.andcoz@tseenfoo:~/refcount> tail -f test & [3] 4226 andcoz@tseenfoo:~/refcount> fuser test /home/andcoz/refcount/test: 4226 andcoz@tseenfoo:~/refcount> tail -f test2 & [4] 4354 andcoz@tseenfoo:~/refcount> fuser test /home/andcoz/refcount/test: 4226 4354
Um arquivo é removido do sistema de arquivos quando ambos os contadores são zero.