Por que o mcedit recomenda remover hardlinks ao salvar um arquivo?

5

Sempre que eu uso o mcedit para editar um arquivo com link fixo em algum lugar e quero salvar o arquivo, o editor pergunta se eu quero remover os links físicos. Esse comportamento é comum no Linux ou é mcedit "especial" ao fazer isso? Por que aplicativos regulares (não fsck ou outras ferramentas administrativas) se preocupam com links físicos?

    
por f.ardelian 12.05.2013 / 23:18

3 respostas

5

Quando você deseja modificar um arquivo, você tem duas opções, cada uma com seus benefícios e desvantagens.

  • Você pode substituir o arquivo no lugar. Isso não usa nenhum espaço extra e conserva os hard links, permissões e qualquer outro atributo além do conteúdo do arquivo existente. A principal desvantagem de fazer isso é que, se acontecer alguma coisa enquanto o arquivo estiver sendo gravado (o aplicativo falha ou a energia é desligada), você acaba com um arquivo parcialmente gravado.
  • Você pode gravar a nova versão do arquivo em um novo arquivo com um nome diferente e movê-lo para o lugar. Isso usa mais espaço e quebra links físicos e, se você tiver permissões de gravação em um arquivo, mas não no diretório que ele contém, não será possível fazer isso. Por outro lado, a versão antiga do arquivo é atomicamente substituída pela nova versão, portanto, a cada momento, o nome do arquivo aponta para uma versão completa e válida do arquivo.

Mcedit está perguntando qual estratégia escolher. Estranhamente, porém, a estratégia padrão do mcedit, para arquivos com uma única entrada de diretório, é truncar o arquivo existente, colocando seus dados em risco. Somente quando a estratégia segura romper um link rígido, você terá a oportunidade de usá-la. Você pode alterar isso na caixa de diálogo “Edit save mode” do menu Options: “quick save” significa sobrescrever, “safe save” significa salvar em um arquivo temporário e depois renomear. Quando o modo de segurança é escolhido, você não tem a opção de não quebrar os links simbólicos.

(Observações feitas no mc 4.8.3. Se este ainda é o caso na versão mais recente, considere relatá-lo como um bug de design - "modo de segurança" deve ser o padrão, e você deve ter uma opção para não quebrar links nesse caso.)

Bons editores como o Vim ou o Emacs permitem escolher a estratégia padrão.

    
por 13.05.2013 / 01:25
0

É incomum; Eu suspeito que foi colocado em um por um desenvolvedor que continuou se atirando no pé.

Se você gravar em um arquivo com mais de um link (um arquivo "regular" é vinculado ao seu diretório), você estará alterando um arquivo que pode existir em outro caminho. Você teria o mesmo problema com links simbólicos, mas o link para o arquivo não sabe que tem links simbólicos apontando para ele.

Se você gravar em um arquivo com múltiplas conexões, ele altera o conteúdo visto através de outros caminhos de arquivo; esse é o objetivo de vários links.

    
por 13.05.2013 / 00:22
0

Isso faz uma grande diferença ao criar arquivos de backup antes de salvar (o que eu suponho que mcedit também faz). Dependendo do manuseio de hardlinks, os outros caminhos para esse inode podem apontar para o arquivo errado. Veja isto .

Se isso não é sobre arquivos de backup, então pode ser apenas um aviso, leia-o como: "Apenas no caso de você ter esquecido: você está prestes a mudar não apenas / foo / bar mas também /bar/baz."

    
por 13.05.2013 / 00:23