Lorsqu'un fichier est déplacé et que le fichier de destination existe déjà et est en cours de lecture, l'opération réussira-t-elle? Cela dépendra-t-il de la durée de l'opération de lecture sur le fichier de destination?
la source
Lorsqu'un fichier est déplacé et que le fichier de destination existe déjà et est en cours de lecture, l'opération réussira-t-elle? Cela dépendra-t-il de la durée de l'opération de lecture sur le fichier de destination?
L'opération de lecture réussira, quel que soit le temps nécessaire pour terminer l'opération de lecture.
Pourquoi et comment ça marche?
Lorsque l'opération de lecture démarre, l' inode du fichier est utilisé comme poignée à partir de laquelle le contenu du fichier est lu.
Lorsque vous déplacez un autre fichier vers le fichier cible, le résultat sera un nouvel inode, ce qui signifie que le contenu physique du fichier sur le disque sera placé ailleurs et que le contenu original du fichier en cours de lecture ne sera pas touché.
La seule chose qu'ils ont en commun, c'est leur chemin / nom de fichier, tandis que l'inode sous-jacent et l'emplacement phyiscal sur le disque changent.
Une fois l'opération de lecture terminée (étant donné qu'aucun autre processus n'a encore de descripteur de fichier ouvert sur l'ancien fichier et qu'il n'y a aucun autre lien physique référençant son inode), les anciennes données seront supprimées.
Une fois l'opération de déplacement terminée, le fichier aura un nouveau numéro d'index d'inode.
Vous pouvez afficher le numéro d'index d'inode des fichiers à l'aide de ls -i /tmp/some-file
.
Pour la même raison que celle décrite ci-dessus, il est possible de supprimer des fichiers qui sont toujours utilisés par une application, car les applications utilisant le fichier liront simplement à partir de l'inode (pointant vers le contenu réel du fichier sur le disque) tandis que la référence des fichiers dans le système de fichiers est supprimé.