我下载了linux Tor Browser软件包,这是一个独立的文件夹。我为运行脚本创建了一个符号链接:
$ ln -s torbrowser/start-tor-browser ~/bin/torbrowser
但是,链接在创建时被破坏了。我所做的只是运行那个命令,没有别的,它被打破了。我做了并且得到了:
lrwxrwxrwx 1 synful synful 28 Jul 18 21:52 torbrowser -> torbrowser/start-tor-browser
...这很奇怪,因为torbrowser / start-tor-browser有755个权限。另外,我跑了file
:
$ file ~/bin/torbrowser
bin/torbrowser: broken symbolic link to `torbrowser/start-tor-browser'
我为它做了一个新的bash脚本和一个符号链接来测试它,并且没有这样的问题。我不确定为什么它只发生在启动器浏览器上。它具有正常的权限,只是一个普通的bash脚本(即使根据文件命令)。
......任何想法?
答案 0 :(得分:55)
了解
非常重要ln -s SOURCE TARGET
创建一个名为TARGET的符号链接,它符号链接到字符串 SOURCE
。如果SOURCE
是相对路径(也就是说,它不是以/
开头),那么它将相对于TARGET
所在的目录进行解释。如果它是绝对路径,那么这是一条绝对的道路。如果它是一个不能是路径的字符串,或包含不存在的路径或文件,或者不是有效的路径字符串,则无论如何。 ln -s
不检查SOURCE是否存在或甚至是有效路径。你可以在dirent中存储你想要的几乎任何短的字符串。
所以当你这样做时:
$ ln -s torbrowser/start-tor-browser ~/bin/torbrowser
你在做什么,粗略地说:
bin
的{{1}}子目录中创建一个目录条目。torbrowser
新的符号链接是循环的。 torbrowser/start-tor-browser
与~/bin/torbrowser
相关联,这意味着您必须按照符号链接才能解析符号链接。如果您尝试使用它,您会看到:
~/bin/torbrowser/start-tor-browser
有时 - 通常,甚至 - 符号链接到相对路径的能力非常方便。常见的用途是摆脱版本号:
$ cat ~/bin/torbrowser
cat: /home/joshlf13/bin/torbrowser: Too many levels of symbolic links
$
现在,我不仅可以在不记住版本字符串的情况下调用my_fancy_app,还可以将整个文件夹移动到其他位置,而不会破坏符号链接:
$ ln -s apps/my_fancy_app_v2.63.1 apps/my_fancy_app
但有时候 - 就像你的例子中一样,我认为 - 你需要符号链接到绝对路径。
对于权限,符号链接始终具有权限$ mv apps /usr/local/apps
,因为文件操作使用的实际权限是对真实文件的权限。 (您可以认为这意味着任何人都可以遵循符号链接,但这并不完全正确:他们还需要对他们需要遵循的任何目录的读取权限。更准确地说,任何能够看到符号链接的人都可以看到它的名称指向,即使他们无法访问具有该名称的文件。
答案 1 :(得分:1)
上述用于ln的用法:
ln -s SOURCE TARGET
是正确的,但在引用手册页时会感到困惑:
ln [OPTION] ... [-T] TARGET LINK_NAME(第1版)
as' TARGET'有不同的含义
答案 2 :(得分:1)
重要的是,您在
中指定的TARGET
ln -s TARGET LINK_NAME
是文件/目录的完整路径。
在我cd
进入目标目录并完成
ln -s ./eclipse.ini ~/Desktop/eclipse1
导致链接断开
但是当我这样做时ln -s $(pwd)/eclipse.ini ~/Desktop/eclipse
起作用了!
答案 3 :(得分:0)
注意:这也可能由于权限而发生 例如。如果您尝试
sudo ln -s /home/somesuperuser/commonfile /home/somenormaluser/commonfile
这暂时不起作用
sudo mv /home/somesuperuser/commonfile /usr/share/commonfile
sudo ln -s /usr/share/commonfile /home/somenormaluser/commonfile
sudo ln -s /usr/share/commonfile /home/somesuperuser/commonfile
起作用