Existe uma maneira de criar referências de arquivo que não serão quebradas quando arquivos e diretórios forem renomeados ou movidos?

2

Existe uma maneira de criar referências de arquivo que não serão quebradas quando arquivos e diretórios forem renomeados ou movidos? Por exemplo, referências que se referem a arquivos por algo como um inode em vez de um nome?

    
por Gavin 14.09.2018 / 21:48

2 respostas

2

Sim, várias maneiras.

  1. Links físicos: ln file1 file2 . Agora file2 será outro nome para file1 , e não importa o nome para o qual você renomeou file1 , ou mesmo se você excluí-lo, file2 sempre funcionará para acessá-lo (a menos que você renomeie / exclua também) obviamente). Isso funciona apenas para arquivos, não para diretórios, e todos os links precisam estar no mesmo sistema de arquivos.
  2. Vincular montagens: mount --bind file1 file2 . Isso funciona como hard links, exceto que ele também funciona para diretórios e não possui a mesma restrição de sistema de arquivos. A desvantagem é que é uma operação privilegiada, portanto, você precisa ser raiz (ou estar em seu próprio usuário e nos namespaces de montagem).
  3. Descritores de arquivos: exec {foo}</some/file . Uma vez que você fizer isso, /proc/self/fd/$foo será um link simbólico "mágico" para o arquivo (é "mágico" no sentido de que ele não quebrará como os links simbólicos regulares seriam, e é possível devido ao pseudo-sistema de arquivos especial / proc) . Isso funciona para arquivos e diretórios, não requer privilégios especiais e é automaticamente herdado e utilizável por processos filhos. As desvantagens são que isso dura apenas até o processo que saiu e você não tem muito controle sobre o caminho para ele.
  4. name_to_handle_at / open_by_handle_at : atende aos seus requisitos literais, mas é mais complicado do que qualquer um dos acima e é uma operação privilegiada. A única vantagem é que o identificador é um dado regular e não requer nenhum estado para ser mantido.
por 14.09.2018 / 22:53
0

Em um sistema de arquivos EXT, você pode usar o comando debugfs para recriar um link diretamente para um inode:

debugfs -w /dev/mapper/vg0-root -R 'link <16> myfile'

Que criará um "arquivo" chamado myfile e apontando para o inode 16.

No entanto, se você excluir esse arquivo, ele ainda será removido, mas, se for movido, permanecerá o mesmo.

para obter o inode de um arquivo, um olhar aqui ...

Source

    
por 14.09.2018 / 23:58

Tags