Digamos que configuré un enlace simbólico:
ln -s /root/Public/mytextfile.txt /root/Public/myothertextfile.txt
¿hay alguna manera de ver cuál es el objetivo de myothertextfile.txt
usar la línea de comando?
Digamos que configuré un enlace simbólico:
ln -s /root/Public/mytextfile.txt /root/Public/myothertextfile.txt
¿hay alguna manera de ver cuál es el objetivo de myothertextfile.txt
usar la línea de comando?
Use la -f
bandera para imprimir la versión canonicalizada. Por ejemplo:
readlink -f /root/Public/myothertextfile.txt
De man readlink
:
-f, --canonicalize
canonicalize by following every symlink in every component of the given name recursively; all but the last component must exist
readlink -f
.brew install coreutils
. Esto instala versiones básicas de GNU de comandos con el prefijo de la letrag
, es decirgreadlink -f somefile
Ubuntu 18.04.1 LTS (Bionic Beaver)
las páginas de manual de readlink hay una nota que dice "Note realpath (1) es el comando preferido para la funcionalidad de canonicalización".readlink es el comando que deseas. Debería mirar la página del manual para el comando. Porque si desea seguir una cadena de enlaces simbólicos al archivo real, entonces necesita el modificador -e o -f:
fuente
Esto también funcionará:
pero
readlink
sería preferible usarlo en un script en lugar de analizarlols
.fuente
Si desea mostrar el origen y el destino del enlace, intente
stat -c%N files*
. P.ejNo es bueno para analizar (usar
readlink
para eso), pero muestra el nombre del enlace y el destino, sin el desorden dels -l
-c
puede escribirse--format
y%N
significa "nombre de archivo citado con desreferencia si es un enlace simbólico".fuente
El
readlink
es una buena cosa, pero GNU-específica y la plataforma no cruz. Solía escribir scripts multiplataforma para/bin/sh
, por lo tanto, usaría algo como:o:
pero estos deben ser probados en diferentes plataformas. Creo que funcionarán, pero no estoy 100% seguro del
ls
formato de salida.El resultado de
ls
también se puede analizarbash
sin depender de un comando externo comoawk
,sed
operl
.Esta
bash_realpath
función resuelve el destino final de un enlace (enlace → enlace → enlace → final):fuente
Si no puede usar
readlink
, entonces el análisis del resultadols -l
podría hacerse así.El resultado normal sería:
Por lo tanto, queremos reemplazar todo antes de "->" y la flecha incluida. Podríamos usar
sed
para esto:fuente
La pregunta no es lo suficientemente precisa como para dar una respuesta simple como la de brian-brazil:
de hecho desreferenciará cada enlace simbólico involucrado en la construcción de la ruta al objetivo final detrás
some_path
.Pero un nivel de enlaces simbólicos en cascada es solo un caso particular entre otros en un sistema, el caso general es N niveles de enlaces simbólicos en cascada. Mira lo siguiente en mi sistema:
rwhich
es mi propia implementación recursivawhich
que imprime todos los enlaces simbólicos en cascada intermedios (a stderr) hasta el objetivo final (a stdout).Entonces si quiero saber qué es:
el objetivo de symlink / usr / bin / emacs **, la respuesta obvia para mí es la que me
/etc/alternatives/emacs
devuelve:El objetivo final detrás de los enlaces simbólicos en cascada / usr / bin / emacs, la respuesta será la siguiente
/usr/bin/emacs24-x
:fuente
ll
ols -l
debe enumerar los elementos del directorio, incluido su enlace simbólico y su destinocd -P /root/Public/myothertextfile.txt
(en su caso) debe apuntar a la ruta originalfuente
Si encuentra el destino de todos los enlaces dentro de una carpeta y su subcarpeta, use el
find . -type l -ls
comando con el tipo de enlace de la siguiente manera:Si desea el objetivo de un solo, entonces
ls -l
debería funcionar:fuente