Necesito un enlace simbólico que se resuelva en relación con el directorio en el que se encuentra. ¿Qué comando se usa para crear tal cosa?
Necesito un enlace simbólico que se resuelva en relación con el directorio en el que se encuentra. ¿Qué comando se usa para crear tal cosa?
Respuestas:
ln -s ../some/other/file linkname
La ruta que proporciona se almacena con el archivo. Cuando accede al archivo, la ruta almacenada se busca y se expande en relación con el archivo. No sabe en qué directorio estaba cuando creó el enlace.
ln -s ../some/other/file /some/dir/linkname
ln -s ./file linkname
ya que se .
refiere al directorio actual.
ln -s somedir/original-dir link-name
No funciona. Crea un directorio con nombre link-name
que contiene un enlace no válido. El comando que funciona esln -sr somedir/original-dir link-name
Las versiones recientes de GNU coreutils 'ln (> = 8.16) admiten la opción --relative
(o -r
), lo que significa que puede llamar ln -s
con 2 rutas absolutas o relativas (con respecto a su directorio de trabajo) y descubrirá la ruta relativa correcta que debe ser escrito en el enlace simbólico.
-r
opción es útil cuando realiza una compilación cruzada y necesita rutas absolutas en el host de compilación, pero rutas relativas en el destino.
ln -r -s targetfile myalias
puede ayudarte a solucionarlo
Lo que necesita comprender es básicamente que un enlace simbólico se parece más a un archivo de texto que a una entrada de directorio que contiene un archivo. Así que si usted
echo ../poo >/file/name
entonces eso es bastante similar a
ln -s ../poo /file/name
Al sistema no le importa si /file/../poo
existe, es solo un fragmento de texto que se coloca en el enlace simbólico. Cuando algo intenta abrir el enlace simbólico, es cuando el sistema intenta resolverlo.
Si está utilizando un shell con finalización de nombre de archivo, esta característica puede confundir las cosas al permitirle completar un nombre de archivo relativo a su directorio de trabajo actual, incluso si luego termina usando eso como el objetivo de un enlace simbólico en otro directorio completamente diferente.
<
cambiar la forma en la memoria del sistema asignada. Por supuesto, no hay un nombre de archivo <
en ese directorio, es solo una forma barata de crear un archivo muy pequeño que tiene algunas propiedades atractivas sobre un archivo de texto normal en esa plataforma en particular.
Los enlaces relativos fueron difíciles para mí en OS X, es decir
~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin ~/bin
~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin/ ~/bin
ambos no funcionaron (se creó algo pero no era un directorio). Creé el enlace deseado usando rutas absolutas .
~/Dropbox/git/dave-bot $ ln -s ~/Dropbox/git/codyhess/bin/ ~/bin
ln -s Dropbox/git/codyhess/bin ~/bin
Solo quería explicar más a fondo cómo crear un enlace simbólico utilizando rutas relativas (con un ejemplo detallado).
Como Ignacio Vazquez-Abrams mencionó en los comentarios, debe especificar la ubicación del archivo / carpeta en relación con el lugar donde se creará el enlace simbólico, no en relación con su directorio actual.
EJEMPLO
Estás en /usr/share/nginx/html/_src/learn
Crearás un enlace simbólico coding
en/usr/share/nginx/html
Crear enlace simbólico relativo (teoría):
sudo ln -s /path/to/source/file-or-folder/relative/from/symlink /path/to/symlink/relative/to/current/location
Crear enlace simbólico relativo real:
sudo ln -s ./_src/learn/coding ../../coding
Más información (mismo ejemplo)
current path: /usr/share/nginx/html/_src/learn
symlink(to be) relative to current path: ../../coding
symlink location (absolute): /usr/share/nginx/html/coding
folder/file relative to symlink location: ./_src/learn/coding
folder/file absolute path: /usr/share/nginx/html/_src/learn/coding