如何查看完整的符号链接路径


128

当我使用ls -la symlinkNamestat symlinkName不显示所有路径时(例如../../../one/two/file.txt

显示完整路径的linux命令是什么?


4
这里应该要当心:当ls或stat显示没有绝对路径时-链接没有绝对路径!这是。重要的是,例如在不同的环境中安装设备时(例如,如果您在CD或USB记忆棒上有东西,或者尝试恢复损坏的硬盘)。所有提到的解决方案(realpath,readlink等)仅显示已安装上下文中的绝对路径。
flolo 2013年

Answers:


225

realpath并非在所有Linux版本上都可用,但readlink应该可用。

readlink -f symlinkName

以上应该可以解决问题。

另外,如果您没有安装上述任何一种软件,那么如果您安装了python 2.6(或更高版本),则可以执行以下操作

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

16
如果使用OSX,则省略该-f标志,然后它可以工作。即readlink symlinkName
Josh Davenport 2014年

6
在OSX上,省略-f标志只会给出一个相对路径
timoxley '16

2
大家都问这个问题。
伊恩·斯台普顿·科尔达斯科

27

realpath <path to the symlink file> 应该可以。


man realpath在底部显示它是“ GNU coreutils”的一部分,我敢肯定它总是在Ubuntu上出现,因此即使@IanStapletonCordasco表示“ realpath并非在所有linux版本中都可用”,至少它应该在所有版本中都可用我相信Ubuntu和Ubuntu衍生风格。
加布里埃尔·斯台普斯

10

Unix风味-> ll symLinkName

OSX-> readlink symLinkName

区别在于,第一种方法将以闪烁的方式显示符号链接路径,第二种方法只是在控制台上将其回显。


问题是专门询问完整/绝对路径,而不是相对路径(../../file.txt)。这两个答案都将给出相对路径。
wisbucky

3

查看信息的另一种方法是stat显示更多信息的命令。stat ~/.ssh我的机器显示屏上的命令

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: -

希望这可以帮助某人。


1

您可以将其awksystem调用readlink一起使用,以获取ls具有完整符号链接路径的输出的等效项。例如:

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

将显示例如

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

ls无需readlink就可以做到;只是使用ls -l。这也根本不起作用,尝试对目录中的所有内容(非链接)执行此操作,并且如果将ls配置为使用颜色awk,则完全中断。只使用find . -maxdepth 1 -type l -ls | awk '{print $11 "\t" $12 "\t" $13}'
Hashbrown
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.