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

s71maibg  于 2023-02-03  发布在  Linux
关注(0)|答案(9)|浏览(212)

使用ls -la symlinkNamestat symlinkName时,未显示所有路径(例如../../../one/two/file.txt
显示完整路径的linux命令是什么?

z0qdvdin

z0qdvdin1#

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

readlink -f symlinkName

上面的方法应该可以奏效。
或者,如果您没有安装上述任何一个,则可以在安装了python 2.6(或更高版本)的情况下执行以下操作

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

az31mfrm2#

realpath <path to the symlink file>应该可以做到这一点。

nnvyjq4y

nnvyjq4y3#

unix风格-〉ll symLinkName
OSX -〉1个月1个月1个月
不同之处在于,第一种方式将以 Flink 方式显示sym链接路径,而第二种方式将仅在控制台上显示。

pcrecxhr

pcrecxhr4#

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

dffbzjpn5#

查看信息的另一种方法是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: -

希望这能帮到什么人。

eblbsuwk

eblbsuwk6#

我将在这里给予简短的回顾和分析,但对于那些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") )

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

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

其中“$0”在shell脚本中定义为“self”。
为了测试一切,我们把符号链接到/home/test 2/,修改一些额外的东西,并运行/调用它从根目录:

$ /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)是用于规范化功能的首选命令。

qc6wkl3g

qc6wkl3g7#

在macOS Catalina 尝试-

readlink -n `which <command>`

输入示例-

readlink -n `which adb`

输出示例-

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

pexxcrt28#

在我的Mac上,我有以下内容:
例如,创建指向目录的符号链接: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

kqqjbcuj

kqqjbcuj9#

查找-最大深度1 -类型l -打印“%l\n”

相关问题