GNU/Linux >> Tutoriales Linux >  >> Linux

Averigüe el destino del enlace simbólico a través de la línea de comando

Solución 1:

Utilice 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

Solución 2:

readlink es el comando que desea. Debe buscar en la página del manual para el comando. Porque si desea seguir una cadena de enlaces simbólicos al archivo real, 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

Solución 3:

Esto también funcionará:

ls -l /root/Public/myothertextfile.txt

pero readlink sería preferible para usar en un script en lugar de analizar ls .

Solución 4:

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

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

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

-c se puede escribir --format y %N significa "nombre de archivo entrecomillado sin referencia si es un enlace simbólico".

Solución 5:

El readlink es algo bueno, pero específico de GNU y no multiplataforma. Solía ​​escribir scripts multiplataforma para /bin/sh , por lo tanto, 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 probarse en diferentes plataformas. Creo que funcionarán, pero no estoy 100 % seguro para ls formato de salida.

El resultado de ls también se puede analizar dentro de bash sin depender de un comando externo como awk , sed o perl .

Este bash_realpath función, resuelve el destino final de un enlace (enlace→enlace→enlace→final):

bash_realpath() {
  # print the resolved path
  # @params
  # 1: the path to resolve
  # @return
  # >&1: the resolved link path

  local path="${1}"
  while [[ -L ${path} && "$(ls -l "${path}")" =~ -\>\ (.*) ]]
  do
    path="${BASH_REMATCH[1]}"
  done
  echo "${path}"
}

Linux
  1. 5 herramientas de línea de comandos para encontrar archivos rápidamente en Linux

  2. Cómo cambiar permisos y propietarios a través de la línea de comandos

  3. Linux:¿cómo averiguar la familia de arquitectura Intel desde la línea de comandos?

  4. Encuentra la versión de WordPress desde la línea de comandos

  5. Encontrar el recuento de procesos en Linux a través de la línea de comandos

Cómo crear un enlace simbólico en Linux usando el comando Ln

Cómo averiguar la dirección IP pública desde la línea de comandos en Linux

Linux ln:cómo crear un enlace simbólico en Linux [Ejemplo de comando Bash]

¿Encontrar la línea de comando?

Cómo encontrar la dirección IP en la línea de comandos de Linux

Cómo:Linux General - IPTables básicos a través de la línea de comandos