Cómo actualizar un destino de enlace simbólico (ln -f -s no funciona)
45
Estoy usando
ln -f -s / var / www / html / releases / build1390 app-current
actualizar el enlace simbólico "app-current" con un nuevo destino. Sin embargo, esto no funciona, el enlace "app-current" mantiene su destino original, sin embargo, no recibo ningún error ...
Prefiero no eliminar el enlace y volver a crearlo, solo actualizar el objetivo de un enlace existente. ¿Es eso posible?
Eso funciona para mí, ¿cuál es la salida de strace ln -f -s /var/www/html/releases/build1390 app-current?
Oh, dado que es un directorio que debe agregar -nsin desreferencia y esto debería resolver el problema. -fes realmente más conveniente ya que agregar el -f solo hace que se desvincula de todos modos. Aunque supongo que probablemente sucedería unos cientos de ms más rápido en un sistema normalmente cargado.
Entonces, sin que el -narf sea desreferenciado, entonces lo trata como un arf como si fuera realmente /. En su ejemplo particular, si no hay ningún error, creo que probablemente ha creado un nuevo enlace simbólico dentro /var/www/html/releases/build1390 app-currenty querrá limpiarlo.
Puede usar -no --no-dereferencepara evitar que el objetivo se desreferencia si es un enlace simbólico. También puede usar -To --no-target-directorypara asegurarse de que el archivo de destino siempre se tratará como un archivo normal.
Estos producen un comportamiento ligeramente diferente, como muestra el siguiente ejemplo. Supongamos que srces un archivo, dirlinkes un enlace simbólico a un directorio y dires un directorio real.
Utilizando -n:
ln -sfn src dirlinksobrescribe dirlinky lo vincula asrc
ln -sfn src dir crea enlace dir/src -> src
Utilizando -T:
ln -sfT src dirlinksobrescribe dirlinky lo vincula asrc
ln -sfT src dir produce un mensaje de error: ln: ‘dir’: cannot overwrite directory
tiene la respuesta más correcta y sucinta para los usuarios de Linux.
ross
¿Hay alguna forma de forzar la sobrescritura del directorio de destino para que no reciba el mensaje de error cannot overwrite directory?
gitaarik
@rednaw Puede hacer esto encadenando un par de comandos, pero en lnsí mismo no elimina los directorios; esto probablemente sería una mala idea, ya que requeriría la eliminación recursiva de una posible gran cantidad de archivos.
Puede usar
-n
o--no-dereference
para evitar que el objetivo se desreferencia si es un enlace simbólico. También puede usar-T
o--no-target-directory
para asegurarse de que el archivo de destino siempre se tratará como un archivo normal.Estos producen un comportamiento ligeramente diferente, como muestra el siguiente ejemplo. Supongamos que
src
es un archivo,dirlink
es un enlace simbólico a un directorio ydir
es un directorio real.Utilizando
-n
:ln -sfn src dirlink
sobrescribedirlink
y lo vincula asrc
ln -sfn src dir
crea enlacedir/src -> src
Utilizando
-T
:ln -sfT src dirlink
sobrescribedirlink
y lo vincula asrc
ln -sfT src dir
produce un mensaje de error:ln: ‘dir’: cannot overwrite directory
fuente
cannot overwrite directory
?ln
sí mismo no elimina los directorios; esto probablemente sería una mala idea, ya que requeriría la eliminación recursiva de una posible gran cantidad de archivos.