Mover um arquivo para um arquivo que está sendo lido

10

Quando um arquivo é movido e o arquivo de destino já existe e está sendo lido, a operação será bem-sucedida? Dependerá de quanto tempo dura a operação de leitura no arquivo de destino?

    
por Desmond Hume 01.12.2013 / 16:22

1 resposta

10

A operação de leitura será bem-sucedida, independentemente do tempo necessário para concluir a operação de leitura.

Por que e como isso funciona?

Quando a operação de leitura é iniciada, o Inode do arquivo é usado como um identificador do qual o conteúdo do arquivo é lido.

Ao mover outro arquivo para o arquivo de destino, o resultado será um novo inode, o que significa que o conteúdo físico do arquivo no disco será colocado em outro lugar e o conteúdo original do arquivo que está sendo lido não será ser tocado.

A única coisa que eles têm em comum é seu caminho / nome de arquivo, enquanto a localização inode e phyiscal subjacente no disco muda.

Quando a operação de leitura terminar (dado que nenhum outro processo ainda possui um identificador de arquivo aberto no arquivo antigo e não há outros hardlinks que façam referência a seu inode), os dados antigos serão descartados.

Quando a operação de movimento estiver concluída, o arquivo terá um novo número de índice de inode.

Você pode exibir o número de índice do inode dos arquivos usando ls -i /tmp/some-file .

Pela mesma razão descrita acima, é possível excluir arquivos que ainda estão sendo usados por um aplicativo, já que os aplicativos que usam o arquivo apenas lerão do inode (apontando para o conteúdo real do arquivo no disco) enquanto o arquivo A referência dos arquivos no sistema de arquivos é deletada.

    
por 01.12.2013 / 16:40