当我正在使用ls -la symlinkName或stat 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)
Jos*_*phH 25
realpath <path to the symlink file> 应该做的伎俩.
小智 9
unix flavors - > ll symLinkName
OSX - > readlink symLinkName
差异是第一种方式以闪烁的方式显示sym链接路径,第二种方式只是在控制台上回显它.
我将在这里进行简短的回顾和分析,但对于那些 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) 是用于规范化功能的首选命令。
您可以使用awk调用system来readlink获取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)
查看信息的另一种方法是stat显示更多信息的命令。stat ~/.ssh我的机器显示屏上的命令
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: -\nRun Code Online (Sandbox Code Playgroud)\n\n希望这可以帮助某人。
\n