GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo se cambia atómicamente un enlace simbólico a un directorio en busybox?

Esta puede de hecho hacerse atómicamente con 02 , creando primero el nuevo enlace simbólico con un nombre temporal y luego sobrescribiendo limpiamente el antiguo enlace simbólico de una sola vez. Como dice la página del manual:

Si nueva ruta hace referencia a un enlace simbólico, el enlace se sobrescribirá.

En el shell, harías esto con 10 de la siguiente manera:

$ mkdir a b
$ ln -s a z
$ ln -s b z.new
$ mv -T z.new z

Puedes 23 ese último comando para asegurarse de que realmente está usando 35 bajo el capó:

$ strace mv -T z.new z
lstat64("z.new", {st_mode=S_IFLNK|0777, st_size=1, ...}) = 0
lstat64("z", {st_mode=S_IFLNK|0777, st_size=1, ...}) = 0
rename("z.new", "z")                    = 0

Tenga en cuenta que en lo anterior, tanto 42 y 52 son específicos de Linux.

En FreeBSD, use 69 alternativamente.


Retomando donde lo dejó Arto aquí, esto es completamente posible, incluso sin 76 , solo necesita crear un nuevo enlace simbólico con el mismo nombre que el directorio de destino y 82 en el directorio principal de su objetivo:

mkdir -p tmp/real_dir1 tmp/real_dir2
touch tmp/real_dir1/a tmp/real_dir2/a
# start with ./target_dir pointing to tmp/real_dir1
ln -s tmp/real_dir1 target_dir
# create a symlink named target_dir in tmp, pointing to real_dir2
ln -sf tmp/real_dir2 tmp/target_dir
# atomically mv it into ./ replacing ./target_dir
mv tmp/target_dir ./

Ejemplo de código tomado a través de (http://axialcorps.wordpress.com/2013/07/03/atomically-replacing-files-and-directories/)


¿Has probado 96? ?

La opción 108 sobrescribe el destino en lugar de escribir debajo de él cuando el destino es un enlace simbólico a un directorio.

Saludos


Linux
  1. Cómo actualizar un enlace simbólico de Linux

  2. Cómo cambiar todas las apariciones de una palabra en todos los archivos de un directorio

  3. ¿Cómo cambio el directorio en Git Bash con Git para Windows?

  4. ¿Cómo se cambia el directorio de inicio del usuario en Ubuntu 9.04?

  5. ldd no encuentra la ruta, cómo agregar

Cómo cambiar el directorio de inicio de Jenkins

Cómo usar el comando cd de Linux para cambiar de directorio

¿Cómo cambiar archivos o permisos de directorio en cPanel?

Cómo cambiar el directorio de complementos

¿Cómo se identifica la distribución de Linux en uso?

Enlace simbólico de una estación de trabajo a otra sin montaje