Linux hardlink confusion

6

Estou confuso com o link do Linux,

Eu criei um hardlink com este comando na minha caixa Ubuntu,

ln f1 f2

Então f2 deve ser um hardlink de f1, mas por que eu mudei f2 com emacs e salvei f2, f1 não mudou nada. Meu entendimento é que f1 deveria ter qualquer mudança que fiz em f2.

    
por Weiwei 18.06.2011 / 07:45

1 resposta

8

Eu fiz alguns testes e descobri o que aconteceu. Primeiro, o comando ls -li mostra o número do inode na primeira coluna, dois hardlinks para o mesmo arquivo terão o mesmo número de inode:

$ echo hi > f1
$ ln f1 f2
$ ls -li
total 8
1646595 -rw-r--r-- 2 randy randy 3 2011-06-18 06:50 f1
1646595 -rw-r--r-- 2 randy randy 3 2011-06-18 06:50 f2

Os arquivos f1 e f2 têm o número de inódo 1646595, são hardlinks para os mesmos dados. Eu usei o emacs para editar f1 e salvar:

$ ls -li
total 12
1646597 -rw-r--r-- 1 randy randy 9 2011-06-18 06:51 f1
1646595 -rw-r--r-- 2 randy randy 3 2011-06-18 06:50 f1~
1646595 -rw-r--r-- 2 randy randy 3 2011-06-18 06:50 f2

Agora, f1 ~ e f2 têm o mesmo número de inode e f1 tem um novo número de inode.

O que o emacs fez quando você salvou é renomeado de f1 para f1 ~ e criou um novo arquivo f1. f1 ~ permaneceu hardlinked para f2, enquanto f1 sendo um novo arquivo não está ligado em nenhum outro lugar.

Não sei se há uma configuração no emacs para alterar esse comportamento.

    
por 18.06.2011 / 07:53