如何看到一个符号链接的完全绝对路径

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

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

297219 次浏览

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

realpath并不适用于所有 Linux 版本,但 readlink应该适用。

readlink -f symlinkName

以上这些应该可以解决问题。

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

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

Unix 风味-> ll symLinkName

OSX-> readlink symLinkName

不同的是第一种方式将显示系统链接路径在一个闪烁的方式和第二种方式将只是回声出来的控制台。

您可以将 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

另一种查看信息的方法是 stat命令,它将显示更多信息

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

希望这能帮到别人。

在 macOS Catalina 尝试-

readlink -n `which <command>`

例子输入-

readlink -n `which adb`

示例输出-

/usr/local/Caskroom/android-platform-tools/31.0.1,d027ce0f9f214a4bd575a73786b44d8ccf7e7516/platform-tools/adb

在我的 Mac 电脑上,我有以下内容:

例如,创建指向 dir 的 symlink: ln -s /Users/test/play/game game

然后如果我使用符号链接去 dir: cd game 如果我发出 cmd: pwd,那么您所在的实际目录是: ~

如果由于某种原因决定实际更改为 dir: /Users/test/play/game,那么在。设置 bash _ profile:

alias cdp='cd -P $(basename `pwd`)'

在使用上面的 cdp别名之后,接着是 pwd命令,当前的目录是: /Users/test/play/game

我将在这里给出简短的回顾和分析,但是对于那些 TL,DR 在这里是 bash 的一行程序,对于锚定工作目录很有用:

script_home=$( dirname $(realpath "$0") )

或者您可以使用任何其他文件名而不是 $0来确定它的实际位置。

不仅要确定某些文件的实际路径,特别是某些脚本需要通过符号链接从另一个位置调用,并且需要引用与其实际工作目录相关的其他资源。

让我们假设我们有真正的脚本或文件和符号链接到它:

$ ls -la
-rwxr-xr-x 1 root    root  0 Mar 20 07:05 realscript.sh
lrwxrwxrwx 1 root    root 10 Mar 20 07:05 symlink -> realscript.sh

GNU coreutils 的部分是几个非常有用的命令:

$ realpath symlink
/home/test/realscript.sh

请参阅原文:

realpath realscript.sh
/home/test/realscript.sh

在脚本中使用 dirname也是非常好的组合

$ dirname /home/test/realscript.sh
/home/test

所以为了总结起来,您可以在脚本中使用

echo  $( dirname $(realpath "symlink") )

或者获取并存储在可变 real script home dir 中,然后保存代码以获取 real path script realscript.sh:

script_home=$( dirname $(realpath "$0") )
echo Original script home: $script_home

其中“ $0”在 shell 脚本中定义为“ self”。

为了测试所有内容,我们将 symlink 放入/home/test2/中,修改一些附加内容并从根目录运行/调用它:

$ /home/test2/symlink
/home/test
Original script home: /home/test
Original script is: /home/test/realscript.sh
Called script is: /home/test2/symlink

请尝试写你自己的修改输出:)

更新2021,还有一个命令:

Readlink-打印已解析的符号链接或规范文件名

描述 注意 realpath (1)是用于规范化功能的首选命令。