GNU/Linux >> Tutoriels Linux >  >> Linux

Découvrez la cible du lien symbolique via la ligne de commande

Solution 1 :

Utilisez le -f flag pour imprimer la version canonique. Par exemple :

readlink -f /root/Public/myothertextfile.txt

À partir 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

Solution 2 :

readlink est la commande que vous voulez. Vous devriez regarder la page de manuel de la commande. Parce que si vous voulez suivre une chaîne de liens symboliques vers le fichier réel, vous avez besoin du commutateur -e ou -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

Solution 3 :

Cela fonctionnera également :

ls -l /root/Public/myothertextfile.txt

mais readlink serait préférable pour une utilisation dans un script plutôt que d'analyser ls .

Solution 4 :

Si vous voulez afficher la source et la destination du lien, essayez stat -c%N files* . Par exemple

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

Ce n'est pas bon pour l'analyse (utilisez readlink pour cela), mais il affiche le nom du lien et la destination, sans l'encombrement de ls -l

-c peut s'écrire --format et %N signifie "nom de fichier entre guillemets avec déréférencement si lien symbolique".

Solution 5 :

Le readlink est une bonne chose, mais spécifique à GNU et non multiplateforme. J'avais l'habitude d'écrire des scripts multiplateformes pour /bin/sh , donc j'utiliserais quelque chose comme :

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

ou :

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

mais ceux-ci doivent être testés sur différentes plates-formes. Je pense qu'ils fonctionneront, mais je ne suis pas sûr à 100 % pour ls format de sortie.

Le résultat de ls peut également être analysé dans bash sans dépendre d'une commande externe comme awk , sed ou perl .

Ce bash_realpath fonction, résout la destination finale d'un lien (link→link→link→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 outils de ligne de commande pour trouver rapidement des fichiers sous Linux

  2. Linux - Comment découvrir la famille d'architecture Intel à partir de la ligne de commande ?

  3. Commande Terminal Pour Savoir Si Un Serveur Est Virtuel Ou Physique?

  4. Trouver la version de WordPress à partir de la ligne de commande

  5. Recherche du nombre de processus sous Linux via la ligne de commande

Comment créer un lien symbolique sous Linux à l'aide de la commande Ln

Comment trouver une adresse IP publique à partir de la ligne de commande sous Linux

Linux ln - Comment créer un lien symbolique sous Linux [Exemple de commande Bash]

Trouver la ligne de commande ?

Comment trouver une adresse IP dans la ligne de commande Linux

Comment :Général Linux - IPTables de base via la ligne de commande