La página de manual paracp(1)
dice
--no-clobber
no sobrescribir un archivo existente
Sin embargo, ¿no sería posible el siguiente escenario?
cp
comprueba la existencia del archivo, supongamos que el archivo no existe (todavía)- Algún otro proceso escribe en la misma ruta, por lo que ahora hay datos escritos en el archivo que antes no existía.
- Como
cp
no conoce el archivo ahora existente, sobrescribe los datos.
¿Es cp --no-clobber
vulnerable a esta condición de carrera? Y si no, ¿cómo se cp
evita la situación anterior?
Respuesta1
cp
no es vulnerable a esta condición de carrera. Cuando --no-clobber
está configurado, verifica si el destino ya existe; si determina que no es así y, por lo tanto, debe continuar con la copia, recuerda que se supone que debe copiar a un archivo nuevo. Cuando llegue el momento de abrir el archivo de destino,lo abre con banderas que imponen su creación,O_CREAT
yO_EXCL
; El sistema operativo luego verifica que el archivo no existe.mientras lo abrey falla ( EEXIST
) si lo hace.