45 votos

cómo actualizar un enlace simbólico de destino (ln-f-s no funciona)

Estoy usando

ln-f-s /var/www/html/releases/build1390 app-actual

para actualizar el enlace simbólico "app-actual" con un nuevo destino. Sin embargo, esto no funciona, el enlace "app-actual" mantiene destino original, sin embargo, no me da ningún error...

No quiero quitar el enlace y volver a crearla, acabo de actualizar el destino de un vínculo existente. Es eso posible?

58voto

Kyle Brandt Puntos 50907

Que funciona para mí, ¿cuál es la salida de strace ln -f -s /var/www/html/releases/build1390 app-current ?

Oh, ya que es un directorio que usted necesita para agregar -n para no eliminar y esto debería resolver el problema. -f es realmente más de una comodidad, ya que la adición de la-f sólo hace que se desvincula de todos modos. Aunque supongo que probablemente sucedería unos pocos cientos de ms más rápido en una carga normal del sistema.

Por ejemplo, si arf ya apunta a /home:

strace Con -n:

strace ln -n -f -s / arf
...
symlink("/", "arf")           = -1 EEXIST (File exists)
unlink("arf")                           = 0
symlink("/", "arf")           = 0

strace 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

Así que sin la -n arf obtiene eliminan las referencias para ln trata como ira como si fueran /. En tu ejemplo, si no hay ningún error, creo que usted probablemente ha creado un nuevo enlace simbólico en el interior de /var/www/html/releases/build1390 app-current y se desea limpiar.

15voto

augurar Puntos 151

Usted puede utilizar -n o --no-dereference para evitar que el destino se eliminan las referencias si es un enlace simbólico. También puede utilizar -T o --no-target-directory para asegurar que el archivo de destino será siempre ser tratado como un archivo normal.

Estos producen comportamiento ligeramente diferente, como muestra el siguiente ejemplo. Supongamos src es algún archivo, dirlink es un enlace simbólico a un directorio, y dir es un directorio real.

El uso de -n:

  • ln -sfn src dirlink sobrescribe dirlink y enlaces a src
  • ln -sfn src dir crea enlace dir/src -> src

El uso de -T:

  • ln -sfT src dirlink sobrescribe dirlink y enlaces a src
  • ln -sfT src dir produce un mensaje de error: ln: ‘dir': cannot overwrite directory

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: