Quando un file viene spostato e il file di destinazione esiste già e viene attualmente letto, l'operazione avrà esito positivo? Dipenderà dalla durata dell'operazione di lettura sul file di destinazione?
Quando un file viene spostato e il file di destinazione esiste già e viene attualmente letto, l'operazione avrà esito positivo? Dipenderà dalla durata dell'operazione di lettura sul file di destinazione?
Risposte:
L'operazione di lettura avrà esito positivo, indipendentemente dal tempo necessario per completare l'operazione di lettura.
Perché e come funziona?
All'avvio dell'operazione di lettura, l' Inode del file viene utilizzato come handle da cui viene letto il contenuto del file.
Quando si sposta un altro file nel file di destinazione, il risultato sarà un nuovo inode, il che significa che il contenuto fisico del file sul disco verrà posizionato altrove e il contenuto originale del file che viene letto non verrà toccato.
L'unica cosa che hanno in comune è il loro percorso / nome file, mentre l'inode sottostante e la posizione fitologica sul disco cambiano.
Al termine dell'operazione di lettura (dato che nessun altro processo ha ancora un handle di file aperto sul vecchio file e non ci sono altri collegamenti fissi che fanno riferimento al suo inode), i vecchi dati verranno eliminati.
Una volta completata l'operazione di spostamento, il file avrà un nuovo numero di indice dell'inode.
È possibile visualizzare il numero indice dell'inode dei file utilizzando ls -i /tmp/some-file
.
Per lo stesso motivo descritto sopra, è possibile eliminare i file che sono ancora in uso da un'applicazione, poiché le applicazioni che usano il file leggeranno semplicemente dall'inode (indicando il contenuto del file effettivo sul disco) mentre il riferimento ai file nel filesystem viene eliminato.