Quando um arquivo é movido e o arquivo de destino já existe e está sendo lido no momento, a operação será bem-sucedida? Depende de quanto tempo dura a operação de leitura no arquivo de destino?
Quando um arquivo é movido e o arquivo de destino já existe e está sendo lido no momento, a operação será bem-sucedida? Depende de quanto tempo dura a operação de leitura no arquivo de destino?
Respostas:
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 a partir 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á tocado.
A única coisa que eles têm em comum é o caminho / nome do arquivo, enquanto o inode subjacente e a localização phyiscal no disco são alterados.
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 referenciando seu inode), os dados antigos serão descartados.
Quando a operação de movimentação estiver concluída, o arquivo terá um novo número de índice de inode.
Você pode exibir o número do índice do inode dos arquivos usando ls -i /tmp/some-file
.
Pelo mesmo motivo descrito acima, é possível excluir arquivos que ainda estão em uso por um aplicativo, pois os aplicativos que usam o arquivo apenas lêem do inode (apontando para o conteúdo real do arquivo no disco) enquanto a referência dos arquivos no sistema de arquivos é excluído.