Estoy usando
ln -f -s /var/www/html/releases/build1390 aplicación-actual
para actualizar el enlace simbólico "app-current" con un nuevo destino. Sin embargo, esto no funciona, el enlace "aplicación actual" mantiene su destino original, sin embargo, no aparece ningún error...
Prefiero no eliminar el enlace y volver a crearlo, simplemente actualizar el destino de un enlace existente. ¿Es eso posible?
Respuesta1
Eso funciona para mí, ¿cuál es el resultado strace ln -f -s /var/www/html/releases/build1390 app-current
?
Oh, dado que es un directorio que debes agregar -n
para no desreferenciarlo y esto debería resolver el problema. -f
Es realmente más conveniente ya que agregar -f solo hace que se desvincule de todos modos. Aunque supongo que probablemente sucedería unos cientos de ms más rápido en un sistema con carga normal.
Por ejemplo, si arf ya apunta a /home:
traza con -n
:
strace ln -n -f -s / arf
...
symlink("/", "arf") = -1 EEXIST (File exists)
unlink("arf") = 0
symlink("/", "arf") = 0
traza Sin -n
:
strace ln -f -s / arf
...
write(2, "ln: "..., 4ln: ) = 4
write(2, "`arf/': cannot overwrite director"..., 34`arf/': cannot overwrite directory) = 34
write(2, "\n"..., 1) = 1
Entonces, sin -n
arf se elimina la referencia, por lo que In lo trata como arf como si realmente lo fuera /
. En su ejemplo particular, si no hay ningún error, creo que probablemente haya creado un nuevo enlace simbólico dentro /var/www/html/releases/build1390 app-current
y querrá limpiarlo.
Respuesta2
Puede utilizar -n
o --no-dereference
para evitar que se elimine la referencia al destino si es un enlace simbólico. También puede utilizar -T
o --no-target-directory
para asegurarse de que el archivo de destinosiempreser tratado como un archivo normal.
Estos producen un comportamiento ligeramente diferente, como muestra el siguiente ejemplo. Supongamos src
que es algún archivo, dirlink
es un enlace simbólico a un directorio y dir
es un directorio real.
Usando -n
:
ln -sfn src dirlink
lo sobrescribedirlink
y lo vincula asrc
ln -sfn src dir
crea enlacedir/src -> src
Usando -T
:
ln -sfT src dirlink
lo sobrescribedirlink
y lo vincula asrc
ln -sfT src dir
produce un mensaje de error:ln: ‘dir’: cannot overwrite directory