题 通过命令行找出符号链接目标


假设我设置了一个符号链接:

ln -s /root/Public/mytextfile.txt /root/Public/myothertextfile.txt

有没有办法看到目标是什么 myothertextfile.txt 正在使用命令行?


105
2017-10-19 18:36






答案:


使用 -f 用于打印规范化版本的标志。例如:

readlink -f /root/Public/myothertextfile.txt

man readlink

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

142
2017-10-19 18:42



正如建议的那样 另一个问题,你可能想用 readlink -f。 - Denilson Sá Maia
要在Mac OS X上运行, brew install coreutils。这将安装前缀为字母的基本gnu版本命令 g,即 greadlink -f somefile - Mike D
使用-f开关,命令在我的情况下不返回任何内容.. - sotn
使用-f给了我想要的信息,即解析多个符号链接并显示最终目标。 - isapir


readlink是你想要的命令。您应该查看该命令的手册页。因为如果要跟随一系列指向实际文件的符号链接,则需要-e或-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

18
2017-10-19 19:03



第一个答案没有错,但这个更完整,更有帮助。 - Mike S


这也有效:

ls -l /root/Public/myothertextfile.txt

readlink 将首选用于脚本而不是解析 ls


4
2017-10-19 19:02





如果要显示链接的来源和目的地,请尝试 stat -c%N files*。例如。

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

它不适合解析(使用 readlink 为此,但它显示链接名称和目的地,没有杂乱的 ls -l

-c 可以写 --format 和 %N 表示“引用文件名,带引号,如果符号链接”。


4
2017-09-29 17:44





readlink 是一件好事,但GNU特定和非跨平台。我以前写过跨平台脚本 /bin/sh因此我会使用类似的东西:

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

要么:

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

但这些需要在不同的平台上进行测试。我认为他们会工作,但不要百分百肯定 ls 输出格式。


2
2018-04-17 21:35





如果你不能使用 readlink,然后解析结果 ls -l 可以这样做。

通常的结果是:

ls -l /root/Public/myothertextfile.txt
lrwxrwxrwx 1 root root 30 Jan  1 12:00 /root/Public/myothertextfile.txt -> /root/Public/mytextfile.txt

所以我们想要在“ - >”之前替换所有内容并包含箭头。我们可以用 sed 为了这:

ls -l /root/Public/myothertextfile.txt | sed 's/^.* -> //'
/root/Public/mytextfile.txt

1
2017-09-02 08:25





ll 要么 ls -l 应列出目录项,包括符号链接及其目标

cd -P /root/Public/myothertextfile.txt (在您的情况下)应指向原始路径


0
2018-05-02 13:48