GNU/Linux >> Tutoriels Linux >  >> Linux

Est-ce que Mv Atomic est sur le F?

Comment puis-je vérifier si mv est atomique sur mon fs (ext4) ?

Le système d'exploitation est Red Hat Enterprise Linux Server version 6.8.

En général, comment puis-je vérifier cela? J'ai regardé autour de moi et je n'ai pas trouvé si mon système d'exploitation était POSIX standard.

Réponse acceptée :

Chose intéressante, il semble que la réponse puisse être "Cela dépend".

Pour être clair, mv est spécifié pour

Le mv l'utilitaire doit effectuer des actions équivalentes à rename() fonction

La spécification de la fonction de renommage indique :

Ce rename() est équivalente pour les fichiers normaux à
celle définie par la norme ISO C. Son inclusion ici étend cette
définition pour inclure des actions sur les répertoires et spécifie le comportement
lorsque le nouveau paramètre nomme un fichier qui existe déjà. Cette
spécification exige que l'action de la fonction soit atomique.

Mais la dernière spécification ISO C pour rename() indique :

7.21.4.2 Le rename fonction

Synopsis

#include <stdio.h>
int rename(const char *old, const char *new);

Description

Le rename la fonction provoque le fichier dont le nom est la chaîne pointée par old être désormais connu sous le nom
donné par la chaîne pointée par new . Le fichier nommé old n'est
plus accessible par ce nom. Si un fichier nommé par la chaîne pointée
par new existe avant l'appel du rename fonction, le
comportement est défini par l'implémentation.

Retours

Le rename renvoie zéro si l'opération réussit, non nulle si elle échoue, auquel cas si le fichier existait
auparavant il est toujours connu sous son nom d'origine.

Étonnamment, notez qu'il n'y a pas d'exigence explicite d'atomicité. Il peut être requis ailleurs dans la dernière norme C accessible au public, mais je n'ai pas pu le trouver. Si quelqu'un peut trouver une telle exigence, les modifications et les commentaires sont plus que bienvenus.

Selon la page de manuel Linux :

Si newpath existe déjà, il sera remplacé de manière atomique, de sorte qu'
il n'y ait aucun point auquel un autre processus tente d'accéder à newpath le trouvera manquant. Cependant, il y aura probablement une
fenêtre dans laquelle les deux oldpath et newpath faire référence au fichier en cours de
renommage.

La page de manuel Linux revendique le remplacement du fichier sera atomique.

Test et vérifier cette atomicité peut être très difficile, cependant, si c'est jusqu'où vous devez aller. Vous n'êtes pas clair quant à ce que vous voulez dire dans votre utilisation de "Comment puis-je vérifier si mv est atomique". Voulez-vous des exigences/spécifications/documentation indiquant qu'il s'agit d'éléments atomiques, ou avez-vous réellement besoin de tester ça ?

Connexe :Obtenir le PID d'une fenêtre en cliquant dessus ?

Notez également que ce qui précède suppose les deux noms de fichiers d'opérandes se trouvent dans le même système de fichiers. Je ne trouve aucune restriction standard sur le mv utilitaire pour faire respecter cela.


Linux
  1. La fête ?

  2. Effectuer des opérations d'écriture atomique dans un fichier dans Bash ?

  3. Afficher tout le fichier jusqu'au match ?

  4. Est-ce que rename() est atomique ?

  5. Déplacer un fichier sous Linux en C

Introduction au système de fichiers Linux

Utilisation du fichier de configuration SSH

Comment renommer un ou plusieurs fichiers sous Linux

Le fichier Hosts sous Linux

5 façons de compter le nombre de lignes dans un fichier

Est-ce que mv avec joker est toujours atomique