Estoy tratando de usar enlaces simbólicos. Leí un poco y encontré los siguientes comandos:
Creation -> ln -s {/path/to/file-name} {link-name}
Update -> ln -sfn {/path/to/file-name} {link-name}
Deletion -> rm {link-name}
Las creaciones y eliminaciones funcionan bien. Pero las actualizaciones no funcionan. Después de ejecutar este comando, el enlace simbólico deja de ser válido.
He leído aquí y allá que no es posible actualizar / anular un enlace simbólico. Por lo tanto, hay información contradictoria en la red. ¿Quién tiene la razón? Si un enlace simbólico se puede actualizar / anular, ¿cómo puedo lograrlo?
Actualizar
Aquí está mi estructura de directorios:
~/scripts/test/
~/scripts/test/remote_loc/
~/scripts/test/remote_loc/site1/
~/scripts/test/remote_loc/site1/stuff1.txt
~/scripts/test/remote_loc/site2/
~/scripts/test/remote_loc/site2/stuff2.txt
~/scripts/test/remote_loc/site2/
~/scripts/test/remote_loc/site3/stuff3.txt
Desde ~/scripts/test/
, cuando realizo:
ln -s /remote_loc/site1 test_link
una test_link
se crea, y puedo ls -l
, pero que parece roto (al contrario de lo que he dicho anteriormente en mi pregunta).
¿Cómo puedo realizar un enlace de nivel de directorio múltiple?
fuente
unlink
lugar derm
. Conunlink
usted nunca corre el riesgo de perder ningún archivo en un directorio fuente al usar accidentalmente interruptores incorrectos.-n
? (puede ser el problema) Además, si su ln es compatible, úselo-t
, para estos casos, y /-T
odestination/
para otros casos.Respuestas:
Usar
-f
conln
sobrescribirá cualquier enlace que ya estaba allí, por lo que siempre que tenga los permisos correctos, debería funcionar ... Siempre me ha funcionado. Qué sistema operativo estás usando?fuente
ln
parámetros, como soy propenso a hacer, ¿el-f
interruptor destruirá sus archivos existentes (objetivos de enlace)? En cualquier caso, también tenemos el-i
parámetro (que solicitará al usuario que se sobrescriba), si desea un poco de seguridad.-f
solo llamaunlink()
ylink()
está oculto : stackoverflow.com/a/1466570/157385 . Sin embargo, ¡desearía recordar el orden correcto!-n
. Ver respuesta aceptada.Ok, encontré dónde está mi error: uno no debe poner el primero
/
en la ruta.En otras palabras, los comandos en mis preguntas deberían ser:
en lugar de
considerando mi caso
fuente
relative
ruta (sin el / principal) y la otra es unaabsolute
ruta (con el / principal). Si está administrando un sistema Linux, es CRÍTICO que comprenda las diferencias. Por ejemplo, la diferencia entrerm -rf ./*
yrm -rf /.*
decide si mantienes tu trabajo o no :)-n
parámetro para reemplazar el enlace del símbolo.Primer problema:
Citandote:
El problema con la estructura de directorios dada:
y usando el comando:
Es que crea un enlace simbólico en su $ PWD, o directorio de trabajo actual, que apunta a un archivo no existente fuera de /, o root, en / remote_loc / site1
Si su PWD está en ~ / scripts /, entonces debería haber usado esto:
ln -s remote_loc/site1 test_link
de lo contrario, podría haber utilizado la ruta absoluta completa como:
ln -s /home/yourusername/remote_loc/site1 test_link
Segundo problema:
Citandote:
Para responder a su pregunta "Quién tiene razón", no estoy seguro de qué es exactamente lo que leyó o cómo se entendió. Pero, lo siguiente debería ayudar a aclarar:
Actualización de enlaces simbólicos con objetivos que no son directorios.
Ejemplo:
Pero, como puede ver, dará la ruta absoluta si las rutas absolutas están en
ln
los argumentos. Es necesario dar una ruta completa cuando el directorio de trabajo actual es diferente del directorio principal del enlace.Caminos relativos:
Ejemplo:
Pero, actualizar un enlace a un directorio no funcionará si el destino es un directorio.
Ejemplo:
Como puede ver, a pesar de usar nombres de ruta absolutos dados en
ln
el argumento anterior sin la opción -r, el enlace simbólico sigue siendo relativo al enlace.Actualizar enlaces a directorios:
Ejemplo:
En contraste con:
fuente
fuente