GNU/Linux >> Tutoriales Linux >  >> Linux

¿Está Mv Atomic en el Fs?

¿Cómo puedo verificar si mv es atómico en mi fs (ext4)?

El sistema operativo es Red Hat Enterprise Linux Server versión 6.8.

En general, ¿cómo puedo verificar esto? Miré a mi alrededor y no encontré si mi sistema operativo es POSIX estándar.

Respuesta aceptada:

Curiosamente, parece que la respuesta puede ser:"Depende".

Para ser claros, mv se especifica para

El mv La utilidad realizará acciones equivalentes a rename() función

La especificación de la función de cambio de nombre establece:

Este rename() La función es equivalente para archivos regulares a la
definida por el estándar ISO C. Su inclusión aquí expande esa definición
para incluir acciones en directorios y especifica el comportamiento
cuando el nuevo parámetro nombra un archivo que ya existe. Esa
especificación requiere que la acción de la función sea atómica.

Pero la última especificación ISO C para rename() estados:

7.21.4.2 El rename función

Sinopsis

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

Descripción

El rename La función hace que el archivo cuyo nombre sea la cadena a la que apunta old a partir de ahora conocido por el nombre
dado por la cadena a la que apunta new . El archivo llamado old ya no
es accesible con ese nombre. Si un archivo nombrado por la cadena apuntada
por new existe antes de la llamada a rename función, el comportamiento
está definido por la implementación.

Devoluciones

El rename la función devuelve cero si la operación tiene éxito, distinto de cero si falla, en cuyo caso, si el archivo existió
anteriormente, todavía se conoce por su nombre original.

Sorprendentemente, tenga en cuenta que no hay un requisito explícito para la atomicidad. Es posible que se requiera en otro lugar en el último estándar C disponible públicamente, pero no he podido encontrarlo. Si alguien puede encontrar tal requisito, las ediciones y los comentarios son más que bienvenidos.

Según la página del manual de Linux:

Si newpath ya existe, se reemplazará atómicamente, de modo que
no haya ningún punto en el que otro proceso intente acceder a newpath encontrará que falta. Sin embargo, probablemente habrá una ventana
en la que tanto oldpath y newpath consulte el archivo que se
renombrará.

La página de manual de Linux reclama el reemplazo del archivo será atómico.

Pruebas y verificando Sin embargo, esa atomicidad puede ser muy difícil, si eso es lo lejos que necesita llegar. No tiene claro lo que quiere decir con el uso de "¿Cómo puedo verificar si mv es atómico?". ¿Quiere requisitos/especificaciones/documentación de que es atómico, o realmente necesita probar eso?

Relacionado:¿Obtener el PID de una ventana haciendo clic en él?

Tenga en cuenta también que lo anterior supone los dos nombres de archivos de operandos están en el mismo sistema de archivos. No puedo encontrar ninguna restricción estándar en el mv utilidad para hacer cumplir eso.


Linux
  1. Copiar archivos en la terminal de Linux

  2. ¿Mostrar todo el archivo hasta el partido?

  3. ¿Cómo cambiar el nombre de un archivo en Linux?

  4. ¿Rename() es atómico?

  5. ¿mv con comodín sigue siendo atómico?

Introducción al sistema de archivos de Linux

Uso del archivo de configuración SSH

Cómo cambiar el nombre de un archivo (s) en Linux

El archivo de hosts en Linux

5 formas de contar el número de líneas en un archivo

No se puede cambiar el nombre de un archivo cuyo nombre comienza con un guión