Compreendendo links físicos

Compreendendo links físicos

Criei um arquivo no diretório inicial.

touch demo
echo "This is demo" > demo

Agora criei um link físico em/tmp

ln /home/leo/demo demoLink

Agora, ao verificar o inode usando

ls -ltri demoLink

Ele mostra o mesmo número de inode do arquivo original. Eu posso digerir isso. Mas o tipo de arquivo do Hard Link é Regular! Como é um arquivo normal? Como é diferente do arquivo original? Eu li que um arquivo é uma bolha anônima de dados. Então esses dois arquivos estão apontando para os mesmos dados? O tamanho do arquivo do link físico e do arquivo original é o mesmo?

Responder1

O link físico não é realmente um "link". O primeiro, segundo, terceiro e enésimo link físico para o mesmo inode de arquivo são todos iguais entre si. Não há diferença entre uma "entrada original" e um "link físico".

Digamos que, se alguém criar o arquivo1 e, em seguida, adicionar o link físico arquivo2 ao mesmo inode do arquivo, não há método para descobrir qual link para o inode fornecido é original.

Ou seja

cryo@CryoNest:~ $ touch file1

cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 1 cryo cryo 0 кві  8 20:24 file1

cryo@CryoNest:~ $ ln file1 file2

cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 2 cryo cryo 0 кві  8 20:24 file1
9505656 -rw-r--r-- 2 cryo cryo 0 кві  8 20:24 file2

cryo@CryoNest:~ $ rm file1

cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 1 cryo cryo 0 кві  8 20:24 file2

cryo@CryoNest:~ $ ln file2 file1

cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 2 cryo cryo 0 кві  8 20:24 file1
9505656 -rw-r--r-- 2 cryo cryo 0 кві  8 20:24 file2

Como você pode ver, o número do inode (9505656) e todos os atributos armazenados no inode são iguais para todos os links físicos. Incluindo tamanho, data, modo, etc.

Preste atenção no terceiro campo, é uma série de links para o inode. Este campo pode ser usado para entender situações "místicas" quando alguém "exclui" um arquivo (na verdade, uma entrada de diretório dos links físicos), mas o uso do espaço não muda :)

Se alguém quiser encontrar todos os links físicos de um determinado arquivo, a ferramenta "find" tem a opção "-inum"

cryo@CryoNest:~ $ ln file1 tmp/file3

cryo@CryoNest:~ $ find . -maxdepth 2 -inum 9505656 -ls
  9505656  0 -rw-r--r--   2 cryo  cryo     0 кві  8 20:24 ./tmp/file3
  9505656  0 -rw-r--r--   2 cryo  cryo     0 кві  8 20:24 ./file1

informação relacionada