2

我想要一个“readlink -f”版本,它可以跟踪它执行的每个单独的符号链接解析。就像是:

$ linktrace /usr/lib64/sendmail
/usr/lib64 -> lib
/usr/lib/sendmail -> ../sbin/sendmail
/usr/sbin/sendmail
$ 

我知道我过去在 linux 上使用过这个实用程序,并且还记得当时认为“这个工具的名称完全不直观,我会忘记它”。嗯,这一天已经到来。

4

3 回答 3

1

没有人获胜。正确答案是“namei”。

于 2013-02-20T02:07:18.537 回答
0

这个 Serverfault 答案(在 Bash 中)可能会有所帮助(尽管它并不声称可以处理所有边缘情况)。

于 2011-01-07T22:46:12.980 回答
0

编码高尔夫有人吗?

#!/usr/bin/perl

use File::Spec;
my $g;
my $f = shift;
while (1) {
    print $f;
    $g = readlink($f);
    last unless defined $g;
    printf " -> %s\n", $g;
    $f =~ s,/[^/]*$,,;
    $f = File::Spec->rel2abs($g, $f);
}
print "\n";

好的,这个怎么样:

#!/usr/bin/perl

use File::Spec;

sub r {
    my ($p, $s) = @_;
    my $l = readlink $p;
    if ($l) {
        printf "%s -> %s\n", $p, $l;
        $p =~ s,/[^/]*$,,;
        r("",File::Spec->rel2abs($l,$p) . $s)
    } else {
        $s =~ s!^(/?[^/]+)(.*)! r($p.$1, $2) !e;
    }
}
r("",shift);

输出与描述的不太一样,但可以理解。并挖掘那个疯狂的递归可执行正则表达式替换!

于 2011-01-07T22:49:19.533 回答