Tam sembolik bağlantı yolunu görme


128

Kullanırken ls -la symlinkNameveya stat symlinkNamekullanmadığımda tüm yol görüntüleniyor (örneğin ../../../one/two/file.txt)

Tam yolu ortaya çıkaran linux komutu nedir?


4
Burada dikkatli olunmalıdır: ls veya stat mutlak yol göstermediğinde - bağlantının mutlak yolu yoktur! Bu özellikle. cihaz örneğin farklı bir bağlamda monte edildiğinde önemlidir (örneğin, bir cd veya usb-stick'te bir şey varsa veya bazı bozuk hdd'leri kurtarmaya çalışıyorsanız). Bahsedilen tüm çözümler (realpath, readlink, ....) yalnızca bağlanmış bağlamdaki mutlak yolu gösterir.
flolo

Yanıtlar:


225

realpathtüm linux çeşitlerinde mevcut değildir, ancak readlinkolmalıdır.

readlink -f symlinkName

Yukarıdakiler hile yapmalı.

Alternatif olarak, yukarıdakilerden herhangi biri kurulu değilse, python 2.6 (veya üstü) kurulu ise aşağıdakileri yapabilirsiniz.

python -c 'import os.path; print(os.path.realpath("symlinkName"))'

16
OSX kullanıyorsanız, -fbayrağı atlayın ve ardından bu çalışır. yanireadlink symlinkName
Josh Davenport

6
OSX'te -f bayrağının çıkarılması yalnızca göreli bir yol verir
timoxley

2
Hepiniz bu soru Linux hakkındaydı.
Ian Stapleton Cordasco

27

realpath <path to the symlink file> hile yapmalı.


man realpathaltta bunun "GNU coreutils" in bir parçası olduğunu gösteriyor, ki her zaman Ubuntu'da geldiğinden eminim, bu yüzden @IanStapletonCordasco " realpathtüm linux çeşitlerinde mevcut değil " dese de en azından hepsinde mevcut olmalı Ubuntu ve Ubuntu türevi tatlara inanıyorum.
Gabriel Staples

10

unix aromaları -> ll symLinkName

OSX -> readlink symLinkName

Fark, 1. yol, sym bağlantı yolunu yanıp sönen bir şekilde görüntüler ve 2. yol, yalnızca konsolda yansıtır.


Soru özellikle tam / mutlak yolu soruyordu, göreli yolu değil (../../file.txt). Bu cevapların her ikisi de göreceli yolu verecektir.
bilgece

3

Bilgileri görmenin başka bir yolu, statdaha fazla bilgi gösterecek komuttur. stat ~/.sshMakinemin ekranındaki komut

File: ‘/home/sumon/.ssh’ -> ‘/home/sumon/ssh-keys/.ssh.personal’
  Size: 34          Blocks: 0          IO Block: 4096   symbolic link
Device: 801h/2049d  Inode: 25297409    Links: 1
Access: (0777/lrwxrwxrwx)  Uid: ( 1000/   sumon)   Gid: ( 1000/   sumon)
Access: 2017-09-26 16:41:18.985423932 +0600
Modify: 2017-09-25 15:48:07.880104043 +0600
Change: 2017-09-25 15:48:07.880104043 +0600
 Birth: -

Umarım bu birine yardımcı olabilir.


1

Tam sembolik bağlantı yollarına sahip bir çıktının eşdeğerini elde etmek için awkbir systemçağrı ile kullanabilirsiniz . Örneğin:readlinkls

ls | awk '{printf("%s ->", $1); system("readlink -f " $1)}'

Örneğin gösterecek

thin_repair ->/home/user/workspace/boot/usr/bin/pdata_tools
thin_restore ->/home/user/workspace/boot/usr/bin/pdata_tools
thin_rmap ->/home/user/workspace/boot/usr/bin/pdata_tools
thin_trim ->/home/user/workspace/boot/usr/bin/pdata_tools
touch ->/home/user/workspace/boot/usr/bin/busybox
true ->/home/user/workspace/boot/usr/bin/busybox

Bunu readlink olmadan yapabilir; sadece kullan ls -l. Bu da hiç çalışmaz, dizindeki her şeyde (bağlantı olmayanlar) yapmaya çalışır ve ls'niz renkleri kullanmak için yapılandırılmışsa awk tamamen kesilir. sadece kullanınfind . -maxdepth 1 -type l -ls | awk '{print $11 "\t" $12 "\t" $13}'
Hashbrown
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.