GNU/Linux >> Znalost Linux >  >> Linux

readlink -fa -e popis volby není jasný

První komponenta zde znamená prvek cesty. Příklad :

/home/user/.ssh => <component1>/<component2>/<component3>

1- Předpokládejme, že máme strukturu adresářů takto:

lols
├── lol
├── lol1 -> lol
└── lol2 -> lol1

A také neexistující adresář zde bude lols/lol3Takže můžete porovnat výstup každého příkazu:

readlink -f lols/lol1 : /lols/lol
readlink -e lols/lol1 : /lols/lol

Výstup zde bude stejný, protože všechny komponenty cesty existují.

readlink -f lols/lol8 : lols/lol8
readlink -e lols/lol8 : <empty outpyt>

Výstup je zde odlišný, protože s -f zobrazí výsledek, protože existuje jedna komponenta který existuje alespoň v cestě, která je lols a s -e výstup bude prázdný, protože všechny komponenty cesty musí existovat .

A poslední je s několika neexistujícími adresáři:

readlink -f lols/lol8/lol10 : <empty output>
readlink -e lols/lol8/lol10 : <empty output>

Zde bude výstup prázdný, protože jak je popsáno na stránce mapy :-f :musí existovat všechny komponenty kromě poslední => Nerespektováno-o :všechny komponenty musí existovat => Nerespektováno

2- Proč nepoužít pouze ls -l :

Předpokládejme, že vytvoříme soubor s názvem soubor1 a vytvoříme asymlink na tento soubor s názvem link1 az odkazu1 vytvoříme další symbolický odkaz link2 :

touch file1 : file1 
ln -s file1 link1 : link1 -> file1
ln -s link1 link2 : link2 -> link1

Poté pomocí ls -l link2 výstup bude:link2 -> link1A pokud použijeme readlink link2 výstup bude:link1; stejné jako ls -lAle pokud použijeme readlink -f|-e link2 výstup bude:soubor1; takže bude ukazovat na zdroj soubor.

Kdy tedy použít readlink místo ls ?Když jsou vnořené symlinky (Rekurzivní čtení). Když jsou soubory/adresáře na jiném místě.

Proto je lepší použít readlink místo ls abyste se vyhnuli chybám.


To má smysl pro odkazy sledující trasu přes více než jeden skok až do svého konečného cíle. Například:

touch test_file

ln -s test_file test_link
ln -s non_existing_target dead_link

ln -s test_link link1
ln -s dead_link link2

Ve výše uvedeném link1 se konečně připojuje k souboru prostřednictvím test_link , takže -f a -e by dal stejný výsledek. link2 ukazuje na mrtvý odkaz a vidíte, že:

> readlink -e link2
> readlink -f link2
/home/thanasis/temp/non_existing_target

dead_link je "poslední komponenta" ve výrazu "musí existovat všechny komponenty kromě poslední". -f řeší na cíl, který neexistuje, zatímco -e nedává žádný výstup.

Všimněte si, že man readlink doporučuje to

realpath je preferovaný příkaz k použití pro funkci kanonizace

V tomto příkladu realpath -m , (--missing ) by dal stejný výstup na readlink -f . Obecně realpath -e je způsob, jak otestovat, zda lze odkaz přeložit na konečný existující cílový soubor, který zde vrací očekávanou chybu:

> realpath -e link2
realpath: link2: No such file or directory

Zatímco ls -l vrátí všechny výsledky a pravděpodobně má výstup v červené barvě pro všechny nefunkční odkazy. Také možnost -L existuje, pro dereferencování odkazů a zobrazení jejich cíle je to pro lidi ke čtení, nikdy nepoužívejte ls rozhodnout o čemkoli o odkazu uvnitř skriptu.


Linux
  1. Přesměrování a výstup potrubí?

  2. Proč možnost Ssh -t přidává Cr &Lf do přesměrovaného výstupu?

  3. Iptables a transparentní proxy?

  1. Linux – sluchátka nefungují Linux Mint 18?

  2. Proč je to Rm -rf a ne Rmdir -rf?

  3. 7 Linux Grep OR, Grep AND, Grep NOT Příklady operátorů

  1. tmux:zamrzne a nenačte se a nereaguje na žádný příkaz volby

  2. Různé barvy pro příkaz a výstup

  3. Proč používáme su – a nejen su?