Symlink在创建后就被破坏了

时间:2013-07-19 02:10:10

标签: bash symlink

我下载了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脚本(即使根据文件命令)。

......任何想法?

4 个答案:

答案 0 :(得分:55)

了解

非常重要
ln -s SOURCE TARGET

创建一个名为TARGET的符号链接,它符号链接到字符串 SOURCE。如果SOURCE是相对路径(也就是说,它不是以/开头),那么它将相对于TARGET所在的目录进行解释。如果它是绝对路径,那么这是一条绝对的道路。如果它是一个不能是路径的字符串,或包含不存在的路径或文件,或者不是有效的路径字符串,则无论如何。 ln -s不检查SOURCE是否存在或甚至是有效路径。你可以在dirent中存储你想要的几乎任何短的字符串。

所以当你这样做时:

$ ln -s torbrowser/start-tor-browser ~/bin/torbrowser

你在做什么,粗略地说:

  1. 在名为bin的{​​{1}}子目录中创建一个目录条目。
  2. 将新目录条目设为符号链接(符号链接)到(相对)路径torbrowser
  3. 新的符号链接是循环的。 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导致链接断开

enter image description here

但是当我这样做时ln -s $(pwd)/eclipse.ini ~/Desktop/eclipse起作用了!

enter image description here

答案 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

起作用