GNU/Linux >> Znalost Linux >  >> Linux

Zjistěte symbolický cíl odkazu pomocí příkazového řádku

Řešení 1:

Použijte -f příznak pro tisk kanonizované verze. Například:

readlink -f /root/Public/myothertextfile.txt

Od man readlink :

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

Řešení 2:

readlink je příkaz, který chcete. Měli byste se podívat na manuálovou stránku příkazu. Protože pokud chcete sledovat řetězec symbolických odkazů na skutečný soubor, pak potřebujete přepínač -e nebo -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

Řešení 3:

Toto bude také fungovat:

ls -l /root/Public/myothertextfile.txt

ale readlink by bylo upřednostňováno pro použití ve skriptu před analýzou ls .

Řešení 4:

Pokud chcete zobrazit zdroj a cíl odkazu, zkuste stat -c%N files* . Např.

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

Není to dobré pro analýzu (použijte readlink za to), ale zobrazuje název a cíl odkazu bez změti ls -l

-c lze zapsat --format a %N znamená „název souboru v uvozovkách s dereferencí v případě symbolického odkazu“.

Řešení 5:

readlink je dobrá věc, ale je specifická pro GNU a není multiplatformní. Kdysi jsem psal skripty pro různé platformy pro /bin/sh , proto bych použil něco jako:

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

nebo:

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

ale je třeba je otestovat na různých platformách. Myslím, že budou fungovat, ale nejsem si 100% jistý pro ls výstupní formát.

Výsledek ls lze také analyzovat v rámci bash bez závislosti na externím příkazu jako awk , sed nebo perl .

Toto bash_realpath funkce, řeší konečný cíl odkazu (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. Linux – Jak zjistit rodinu architektury Intel z příkazového řádku?

  2. Vyhledání počtu procesů v Linuxu pomocí příkazového řádku

  3. zkrátit tabulku pomocí příkazového řádku v Linuxu

  1. 5 nástrojů příkazového řádku pro rychlé vyhledání souborů v systému Linux

  2. Jak změnit oprávnění a vlastníky pomocí příkazového řádku

  3. Jak zjistit, zda httpd běží nebo ne pomocí příkazového řádku?

  1. Jak zjistit, co dělá příkaz Linuxu

  2. Příkaz terminálu pro zjištění, zda je server virtuální nebo fyzický?

  3. Najděte verzi WordPress z příkazového řádku