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