我有一个目录,我想为其创建符号链接。我使用的命令是:
cd workspace_b4a
cd android-sdk-linux
ln -sv build-tools/20.0.0/lib/ platform-tools/lib
输出为:
‘platform-tools/lib’ -> ‘build-tools/20.0.0/lib/’
但是,Nautilus 提示说这platform-tools/lib
是一条断开的链接,并将和ls -l platform-tools/lib
都显示为红色。我做错了什么?build-tools/20.0.0/lib/
platform-tools/lib
答案1
感谢大家的建议。我发现最容易理解如何做到这一点(尽管我仍然不明白其背后的逻辑):
cd ~/workspace_b4a
cd android-sdk-linux
cd platform-tools
ln -sv ../build-tools/20.0.0/lib/ .
答案2
假设您在目录中/path/to/common/root
:
$ pwd
/path/to/common/root
其中有一个子目录build-tools/20.0.0/lib
:
$ readlink -e build-tools/20.0.0/lib
/path/to/common/root/build-tools/20.0.0/lib
和子目录platform-tools
,但没有文件或目录platform-tools/lib
:
$ ls -d platform-tools
platform-tools
$ ls platform-tools/lib
ls: cannot access platform-tools/lib: No such file or directory
并且您想要创建platform-tools/lib
一个符号链接build-tools/20.0.0/lib
,那么您可以将其设置为绝对链接:
$ ln -s /path/to/common/root/build-tools/20.0.0/lib platform-tools/lib
$ ls -l platform-tools/lib
lrwxrwxrwx 1 user user 72 Sep 16 12:57 platform-tools/lib -> /path/to/common/root/build-tools/20.0.0/lib
$ readlink -e platform-tools/lib
/path/to/common/root/build-tools/20.0.0/lib
或者你可以把它变成相对链接:
$ ln -s ../build-tools/20.0.0/lib platform-tools/lib
$ ls -l platform-tools/lib
lrwxrwxrwx 1 user user 25 Sep 16 12:58 platform-tools/lib -> ../build-tools/20.0.0/lib
$ readlink -e platform-tools/lib
/path/to/common/root/build-tools/20.0.0/lib
同时注意相对链接必须是相对于符号链接文件本身,而不是运行命令的位置ln -s
。为了确保您不会出错(并且因为您可以使用方便的制表符补全),有两个选项:
首先转到符号链接的目录,然后在那里创建符号链接:
$ cd platform-tools
$ ln -s ../build-tools/20.0.0/lib lib # The last lib is optional
或者使用该-r
选项ln
在指定相对于当前目录的路径时找出相对路径:
$ ln -sr build-tools/20.0.0/lib platform-tools/lib
答案3
您可以链接到不存在的路径(文件或目录)
abox $ ls
abox $ ln -s foo bar
abox $ ls
bar (<- in red)
abox $ ls -l
total 0
lrwxrwxrwx 1 archemar archemar 3 sept. 16 10:47 bar -> foo ## both foo and bar in red
为什么有人会这么做?
后者,我可以创建 foo 文件/目录,并且链接将有效。
当目录build-tools/20.0.0/lib/
不存在时,您的链接将被断开。
答案4
我假设你在一个目录中
/媒体/约翰/Android/workspace_b4a/Android-sdk-linux/
并且您想要为 '/build-tools/20.0.0/lib' 目录创建一个符号链接。您可以通过以下方式实现
ln -sv /media/john/android/workspace_b4a/android-sdk/build-tools/20.0.0/lib platform-tools/lib
编辑:输出
ls -l platform-tools/lib
也将会改变。