Primer problema:
Citandote:
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.
El problema con la estructura de directorios dada:
~ / 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
y usando el comando:
ln -s /remote_loc/site1 test_link
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:
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?
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:
- Lo que se puede actualizar y
- Lo que no se puede actualizar sin usar los interruptores adecuados.
Actualización de enlaces simbólicos con objetivos que no son directorios.
ln -sf:
La fuerza -f o --force elimina los archivos de destino existentes. Esto se utiliza para actualizar el destino o el destino de un enlace.
Ejemplo:
ln -sf /tmp/test /tmp/test.link; ls -go /tmp |grep test
-rw-r--r-- 1 0 Jun 8 17:19 test
lrwxrwxrwx 1 9 Jun 8 17:27 test.link -> /tmp/test
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:
ln -sfr:
El relativo -r o --relativo crea enlaces simbólicos relativos a la ubicación del enlace.
Ejemplo:
ln -sfr /tmp/test /tmp/test.link ; ls -go /tmp| grep test
-rw-r--r-- 1 0 Jun 8 17:19 test
lrwxrwxrwx 1 4 Jun 8 17:27 test.link -> test
Pero, actualizar un enlace a un directorio no funcionará si el destino es un directorio.
Ejemplo:
ln -sf /tmp/testdir /tmp/testdir.link ; ls -go /tmp |grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 7 Jun 8 17:47 testdir.link -> testdir
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:
ln -sfrn:
-n o --no-dereference trata a LINK_NAME como un archivo normal si es un enlace simbólico a un directorio.
Ejemplo:
ln -sfn /tmp/testdir /tmp/testdir.link; ls -go /tmp| grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 12 Jun 8 17:48 testdir.link -> /tmp/testdir
En contraste con:
ln -sfnr /tmp/testdir /tmp/testdir.link; ls -go /tmp| grep testdir
drwxr-xr-x 2 4096 Jun 8 17:48 testdir
lrwxrwxrwx 1 7 Jun 8 17:48 testdir.link -> testdir
unlink
lugar derm
. Conunlink
usted nunca corre el riesgo de perder ningún archivo en un directorio fuente al usar accidentalmente interruptores incorrectos.