如何列出符号链接链?

Kal*_*ser 40 linux shell symbolic-link

鉴于这个例子:

mkdir a
ln -s a b
ln -s b c
ln -s c d
Run Code Online (Sandbox Code Playgroud)

如果我执行:

ls -l d
Run Code Online (Sandbox Code Playgroud)

它会显示:

d -> c
Run Code Online (Sandbox Code Playgroud)

有没有办法ls或任何其他linux命令来d -> c -> b -> a代替显示?

小智 77

只需使用namei

$ namei d
f: d
 l d -> c
   l c -> b
     l b -> a
       d a
Run Code Online (Sandbox Code Playgroud)

  • 直到。这是一个*酷*命令。*赞成* (5认同)

Pau*_*aul 20

readlink -e <link>

阅读链接 [选项]... 文件

  • -e, --canonicalize-existing
    通过递归遵循给定名称的每个组件中的每个符号链接来规范化,所有组件都必须存在
$ mkdir testlink
$ cd testlink
pjb@pjb-desktop:~/testlink$ ln -s c b
pjb@pjb-desktop:~/testlink$ ln -s b a
pjb@pjb-desktop:~/testlink$ ls -l 
total 0
lrwxrwxrwx 1 pjb pjb 1 2010-02-23 08:48 a -> b
lrwxrwxrwx 1 pjb pjb 1 2010-02-23 08:48 b -> c
pjb@pjb-desktop:~/testlink$ echo foo > c
pjb@pjb-desktop:~/testlink$ cat a
foo
pjb@pjb-desktop:~/testlink$ readlink -e a
/home/pjb/testlink/c
Run Code Online (Sandbox Code Playgroud)

注意: readlink a 本身返回 b

注意#2:与 find -l 一起,可以很容易地用 perl 编写列出链的实用程序,但还必须足够智能以检测循环

如果您有循环, readlink 将不会输出任何内容。我想这比被卡住要好。

pjb@pjb-desktop:~/testlink$ ln -sf a c
pjb@pjb-desktop:~/testlink$ ls -l 
total 0
lrwxrwxrwx 1 pjb pjb 1 2010-02-23 08:48 a -> b
lrwxrwxrwx 1 pjb pjb 1 2010-02-23 08:48 b -> c
lrwxrwxrwx 1 pjb pjb 1 2010-02-23 09:03 c -> a
pjb@pjb-desktop:~/testlink$ readlink -e a
pjb@pjb-desktop:~/testlink$ # (note: no output)
Run Code Online (Sandbox Code Playgroud)