在Bash中,如何安全地确定软链接指向的内容?

时间:2010-07-18 16:56:25

标签: bash symlink

我需要处理许多目录,确定它们中的哪些文件是符号链接,以及它们链接到哪些文件。这听起来很简单,但我无法控制文件名中控件或其他字符的存在,我需要一个强大的解决方案。

因此,给定一个任意名称的文件,如何在链接目的地也可以包含任意内容时如何安全地确定链接的内容?

3 个答案:

答案 0 :(得分:45)

readlink -f <linkname>

答案 1 :(得分:1)

stat <linkname>

示例:

stat /usr/local/cuda

前2行将显示:

File: '/usr/local/cuda' -> 'cuda-8.0'
Size: 8             Blocks: 0          IO Block: 4096   symbolic link
...

答案 2 :(得分:-1)

Python 2脚本,用于跟踪/跟踪作为参数提供的符号链接。

listSymLink.py

import os.path as OSPath
import os
import sys

for arg in sys.argv[1:]:
    if OSPath.exists(arg):
        pathTrail = [OSPath.abspath(arg)]
        while OSPath.islink(pathTrail[-1]):
            linkTarget = os.readlink(pathTrail[-1])
            if not OSPath.isabs(linkTarget):
                linkTarget = OSPath.join(os.path.dirname(pathTrail[-1]), linkTarget)
            pathTrail.append(linkTarget)
        print " -> ".join(map(lambda x: "\"" + x + "\"", pathTrail))
    else:
        print "\"" + arg + "\" path doesn't exist"

示例

python listSymLink.py /usr/bin/c++

打印

"/usr/bin/c++" -> "/etc/alternatives/c++" -> "/usr/bin/g++" -> "/usr/bin/g++-8" -> "/usr/bin/x86_64-linux-gnu-g++-8"