bash symbolic Symlink roto justo después de la creación




windows create symbolic link to file (2)

Descargué el paquete linux Tor Browser, que es una carpeta independiente. Hice un enlace simbólico al script de ejecución:

$ ln -s torbrowser/start-tor-browser ~/bin/torbrowser

Sin embargo, el enlace se rompió en la creación. Todo lo que hice fue ejecutar ese comando, nada más, y se rompió. Hice ls y obtuve

lrwxrwxrwx 1 synful synful 28 Jul 18 21:52 torbrowser -> torbrowser/start-tor-browser

... lo cual es extraño porque torbrowser / start-tor-browser tenía 755 permisos. Además, corrí el file :

$ file ~/bin/torbrowser
bin/torbrowser: broken symbolic link to `torbrowser/start-tor-browser'

Hice un nuevo script de bash y un enlace simbólico para probar esto, y no tuve tales problemas. No estoy seguro de por qué solo está sucediendo con start-tor-browser. Tiene permisos normales y es solo un script bash normal (incluso de acuerdo con el comando de archivo).

...¿algunas ideas?


el uso anterior dado para ln:

ln -s OBJETIVO DE FUENTE

es correcto, pero confuso cuando se refiere a la página man:

En [OPCIÓN] ... [-T] TARGET LINK_NAME (1er formulario)

Como 'TARGET' tiene un significado diferente


Es importante saber que

ln -s SOURCE TARGET

cree un enlace simbólico llamado TARGET que está simbólicamente vinculado a la cadena SOURCE . Si SOURCE es una ruta relativa (es decir, no comienza con / ), entonces se interpreta en relación con el directorio en el que se encuentra TARGET . Si es una ruta absoluta, entonces es una ruta absoluta. Si es una cadena que no podría ser una ruta, o incluye una ruta o archivo que no existe, o si no es una cadena de ruta válida, no importa. ln -s no comprueba que SOURCE existe o incluso es una ruta válida. Podrías almacenar casi cualquier cadena corta que quisieras en el dirent.

Así que cuando haces esto:

$ ln -s torbrowser/start-tor-browser ~/bin/torbrowser

lo que estás haciendo es, aproximadamente:

  1. cree una entrada de directorio dentro de su subdirectorio bin con el nombre torbrowser .
  2. Convierta esa nueva entrada de directorio en un enlace simbólico (enlace simbólico) a la ruta (relativa) torbrowser/start-tor-browser

El nuevo enlace simbólico es una circular. ~/bin/torbrowser está vinculado a ~/bin/torbrowser/start-tor-browser , lo que significa que tienes que seguir el enlace simbólico para resolver el enlace simbólico. Si intentas usarlo, verás:

$ cat ~/bin/torbrowser
cat: /home/joshlf13/bin/torbrowser: Too many levels of symbolic links
$

A veces, a menudo, incluso, la capacidad de vincularse a una ruta relativa es extremadamente útil. Un uso común es deshacerse de los números de versión:

$ ln -s apps/my_fancy_app_v2.63.1 apps/my_fancy_app

Ahora, no solo puedo llamar a my_fancy_app sin recordar su versión de la cadena, también puedo mover la carpeta completa a otra parte, sin romper el enlace simbólico:

$ mv apps /usr/local/apps

Pero otras veces, como en su ejemplo, creo, necesita un enlace simbólico a una ruta absoluta.

En cuanto a los permisos, los enlaces simbólicos siempre tienen permisos lrwxrwxrwx porque los permisos reales utilizados por las operaciones de archivo son los permisos en el archivo real. (Puede pensar que eso significa que cualquiera puede seguir el enlace simbólico, pero eso no es del todo cierto: también necesitarían permisos de lectura para cualquier directorio que deban seguir. Más exactamente, cualquier persona que pueda ver el enlace simbólico puede ver su nombre). apunta a, incluso si no tienen acceso al archivo con ese nombre.





symlink