当我使用 ls -la symlinkName或 stat symlinkName时,不会显示所有的路径 (例如 ../../../one/two/file.txt)
ls -la symlinkName
stat symlinkName
../../../one/two/file.txt
揭示完整路径的 linux 命令是什么?
realpath <path to the symlink file>应该可以。
realpath <path to the symlink file>
realpath并不适用于所有 Linux 版本,但 readlink应该适用。
realpath
readlink
readlink -f symlinkName
以上这些应该可以解决问题。
或者,如果您没有安装上述任何一个,那么如果您安装了 python 2.6(或更高版本) ,则可以执行以下操作
python -c 'import os.path; print(os.path.realpath("symlinkName"))'
Unix 风味-> ll symLinkName
ll symLinkName
OSX-> readlink symLinkName
readlink symLinkName
不同的是第一种方式将显示系统链接路径在一个闪烁的方式和第二种方式将只是回声出来的控制台。
您可以将 awk与 system调用 readlink一起使用,以获得具有完整符号链接路径的 ls输出的等价物。例如:
awk
system
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命令,它将显示更多信息
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
ln -s /Users/test/play/game game
然后如果我使用符号链接去 dir: cd game 如果我发出 cmd: pwd,那么您所在的实际目录是: ~
cd game
~
如果由于某种原因决定实际更改为 dir: /Users/test/play/game,那么在。设置 bash _ profile:
/Users/test/play/game
alias cdp='cd -P $(basename `pwd`)'
在使用上面的 cdp别名之后,接着是 pwd命令,当前的目录是: /Users/test/play/game
cdp
pwd
我将在这里给出简短的回顾和分析,但是对于那些 TL,DR 在这里是 bash 的一行程序,对于锚定工作目录很有用:
script_home=$( dirname $(realpath "$0") )
或者您可以使用任何其他文件名而不是 $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
$ 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)是用于规范化功能的首选命令。