Pregunta Encuentra el objetivo del enlace simbólico a través de la línea de comando


Digamos que configuro un enlace simbólico:

ln -s /root/Public/mytextfile.txt /root/Public/myothertextfile.txt

¿Hay una manera de ver cuál es el objetivo de myothertextfile.txt ¿Está utilizando la línea de comando?


105
2017-10-19 18:36


origen




Respuestas:


Utilizar el -f Bandera para imprimir la versión canonicalizada. Por ejemplo:

readlink -f /root/Public/myothertextfile.txt

Desde man readlink:

-f, --canonicalize
      canonicalize by following every symlink in every component of the given name recursively; all but the last component must exist

142
2017-10-19 18:42



Como se sugiere en otra pregunta, puedes querer usar readlink -f. - Denilson Sá Maia
Para que esto funcione en Mac OS X, brew install coreutils. Esto instala versiones básicas en gnu de comandos prefijados con la letra g, es decir greadlink -f somefile - Mike D
con el interruptor -f, el comando no devuelve nada en mi caso .. - sotn
El uso de -f me dio la información que quería, es decir, resolver múltiples enlaces simbólicos y mostrar el objetivo final. - isapir


readlink es el comando que desea. Debes mirar la página de manual del comando. Porque si desea seguir una cadena de enlaces simbólicos al archivo real, entonces necesita el modificador -e o -f:

$ ln -s foooooo zipzip   # fooooo doesn't actually exist
$ ln -s zipzip zapzap

$ # Follows it, but doesn't let you know the file doesn't actually exist
$ readlink -f zapzap
/home/kbrandt/scrap/foooooo

$ # Follows it, but file not there
$ readlink -e zapzap

$ # Follows it, but just to the next symlink
$ readlink zapzap
zipzip

18
2017-10-19 19:03



No hay nada malo con la primera respuesta, pero esta es más completa y útil. - Mike S


Esto también funcionará:

ls -l /root/Public/myothertextfile.txt

pero readlink Sería preferible para su uso en un script en lugar de analizar ls.


4
2017-10-19 19:02





Si desea mostrar el origen y el destino del enlace, intente stat -c%N files*. P.ej.

$ stat -c%N /dev/fd/*
‘/dev/fd/0’ -> ‘/dev/pts/4’
‘/dev/fd/1’ -> ‘/dev/pts/4’

No es bueno para analizar (usar readlink para eso), pero muestra el nombre del enlace y el destino, sin el desorden de ls -l

-c puede ser escrito --format y %N significa "nombre de archivo citado con diferencia en el enlace simbólico".


4
2017-09-29 17:44





los readlink Es algo bueno, pero específico de GNU y no multiplataforma. Solía ​​escribir scripts multiplataforma para /bin/sh, por lo tanto yo usaría algo como:

 ls -l /root/Public/myothertextfile.txt | awk '{print $NF}'

o:

 ls -l /root/Public/myothertextfile.txt | awk -F"-> " '{print $2}'

Pero estos deben ser probados en diferentes plataformas. Creo que funcionarán, pero no están 100% seguros de ls formato de salida.


2
2018-04-17 21:35





Si no puedes usar readlink, luego analizando el resultado de ls -l Se podría hacer así.

El resultado normal sería:

ls -l /root/Public/myothertextfile.txt
lrwxrwxrwx 1 root root 30 Jan  1 12:00 /root/Public/myothertextfile.txt -> /root/Public/mytextfile.txt

Así que queremos reemplazar todo antes de "->" y la flecha incluida. Podriamos usar sed para esto:

ls -l /root/Public/myothertextfile.txt | sed 's/^.* -> //'
/root/Public/mytextfile.txt

1
2017-09-02 08:25





ll o ls -l debe enumerar los elementos del directorio, incluido su enlace simbólico y su destino

cd -P /root/Public/myothertextfile.txt (en su caso) debe apuntar a la ruta original


0
2018-05-02 13:48