如何查看完整的符号链接路径

154*_*12s 113 linux

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

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

Ian*_*sco 199

realpath并非所有Linux版本都可用,但readlink应该是.

readlink -f symlinkName
Run Code Online (Sandbox Code Playgroud)

以上应该可以解决问题.

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

python -c 'import os.path; print(os.path.realpath("symlinkName"))'
Run Code Online (Sandbox Code Playgroud)

  • 如果使用OSX,省略`-f`标志然后这可以工作.即`readlink symlinkName` (16认同)
  • 在OSX上省略-f标志只给出一个相对路径 (5认同)
  • 这个问题是关于Linux的,你们都是. (2认同)
  • 在 ubuntu 上我不需要 -f 标志 (2认同)
  • 在 osx 上为我工作 (2认同)

Jos*_*phH 25

realpath <path to the symlink file> 应该做的伎俩.

  • `man realpath` 在底部显示它是“GNU coreutils”的一部分,我很确定它总是出现在 Ubuntu 上,所以即使 @IanStapletonCordasco 说“`realpath` 不适用于所有 Linux 版本”,它我相信至少应该在所有 Ubuntu 和 Ubuntu 衍生版本上可用。 (2认同)

小智 9

unix flavors - > ll symLinkName

OSX - > readlink symLinkName

差异是第一种方式以闪烁的方式显示sym链接路径,第二种方式只是在控制台上回显它.


Aru*_*ius 7

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

script_home=$( dirname $(realpath "$0") )
Run Code Online (Sandbox Code Playgroud)

或者您可以使用任何其他文件名而不是$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
Run Code Online (Sandbox Code Playgroud)

GNU coreutils 部分是一些非常有用的命令:

$ realpath symlink
/home/test/realscript.sh
Run Code Online (Sandbox Code Playgroud)

另请参阅原文:

realpath realscript.sh
/home/test/realscript.sh
Run Code Online (Sandbox Code Playgroud)

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

$ dirname /home/test/realscript.sh
/home/test
Run Code Online (Sandbox Code Playgroud)

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

echo  $( dirname $(realpath "symlink") )
Run Code Online (Sandbox Code Playgroud)

或者获取并存储在变量真实脚本主目录中并保存代码以获取真实路径脚本 realscript.sh:

script_home=$( dirname $(realpath "$0") )
echo Original script home: $script_home
Run Code Online (Sandbox Code Playgroud)

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

为了测试所有内容,我们将符号链接放入 /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
Run Code Online (Sandbox Code Playgroud)

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

2021更新,还有命令:

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

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


use*_*349 6

您可以使用awk调用systemreadlink获取ls具有完整符号链接路径的等效输出。例如:

ls | awk '{printf("%s ->", $1); system("readlink -f " $1)}'
Run Code Online (Sandbox Code Playgroud)

将显示例如

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
Run Code Online (Sandbox Code Playgroud)


Eng*_*mon 5

查看信息的另一种方法是stat显示更多信息的命令。stat ~/.ssh我的机器显示屏上的命令

\n\n
File: \xe2\x80\x98/home/sumon/.ssh\xe2\x80\x99 -> \xe2\x80\x98/home/sumon/ssh-keys/.ssh.personal\xe2\x80\x99\n  Size: 34          Blocks: 0          IO Block: 4096   symbolic link\nDevice: 801h/2049d  Inode: 25297409    Links: 1\nAccess: (0777/lrwxrwxrwx)  Uid: ( 1000/   sumon)   Gid: ( 1000/   sumon)\nAccess: 2017-09-26 16:41:18.985423932 +0600\nModify: 2017-09-25 15:48:07.880104043 +0600\nChange: 2017-09-25 15:48:07.880104043 +0600\n Birth: -\n
Run Code Online (Sandbox Code Playgroud)\n\n

希望这可以帮助某人。

\n