GNU/Linux >> Linux Esercitazione >  >> Linux

Scopri la destinazione del collegamento simbolico tramite la riga di comando

Soluzione 1:

Usa il -f flag per stampare la versione canonizzata. Ad esempio:

readlink -f /root/Public/myothertextfile.txt

Da man readlink :

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

Soluzione 2:

readlink è il comando che desideri. Dovresti guardare la pagina man per il comando. Perché se vuoi seguire una catena di collegamenti simbolici al file effettivo, allora hai bisogno dell'opzione -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

Soluzione 3:

Funzionerà anche:

ls -l /root/Public/myothertextfile.txt

ma readlink sarebbe preferito per l'uso in uno script piuttosto che nell'analisi di ls .

Soluzione 4:

Se vuoi mostrare la fonte e la destinazione del collegamento, prova stat -c%N files* . Ad esempio

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

Non va bene per l'analisi (usa readlink per quello), ma mostra il nome del collegamento e la destinazione, senza la confusione di ls -l

-c può essere scritto --format e %N significa "nome file tra virgolette con dereferenza se collegamento simbolico".

Soluzione 5:

Il readlink è una buona cosa, ma specifica per GNU e non multipiattaforma. Ero solito scrivere script multipiattaforma per /bin/sh , quindi userei qualcosa come:

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

oppure:

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

ma questi devono essere testati su piattaforme diverse. Penso che funzioneranno, ma non sono sicuro al 100% per ls formato di output.

Il risultato di ls può anche essere analizzato all'interno di bash senza dipendere da un comando esterno come awk , sed o perl .

Questo bash_realpath funzione, risolve la destinazione finale di un collegamento (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 strumenti da riga di comando per trovare rapidamente file in Linux

  2. Trova la versione di WordPress dalla riga di comando

  3. Trovare il conteggio dei processi in Linux tramite la riga di comando

  4. troncare la tabella tramite la riga di comando in Linux

  5. Come scoprire se httpd è in esecuzione o meno tramite la riga di comando?

Come creare un collegamento simbolico in Linux usando il comando Ln

Come scoprire l'indirizzo IP pubblico dalla riga di comando su Linux

Linux ln – Come creare un collegamento simbolico in Linux [Esempio di comando Bash]

Trova la riga di comando?

Come trovare l'indirizzo IP nella riga di comando di Linux

Procedura:Linux Generale – IPTable di base tramite riga di comando