Symlink在创建后就被破坏了

jos*_*hlf 36 bash symlink

我下载了linux Tor Browser软件包,它是一个独立的文件夹.我为运行脚本创建了一个符号链接:

$ ln -s torbrowser/start-tor-browser ~/bin/torbrowser
Run Code Online (Sandbox Code Playgroud)

然而,链接在创建时被打破.我所做的只是运行那个命令,没有别的,它被打破了.我做了并得到了:

lrwxrwxrwx 1 synful synful 28 Jul 18 21:52 torbrowser -> torbrowser/start-tor-browser
Run Code Online (Sandbox Code Playgroud)

...这很奇怪,因为torbrowser/start-tor-browser有755个权限.另外,我跑了file:

$ file ~/bin/torbrowser
bin/torbrowser: broken symbolic link to `torbrowser/start-tor-browser'
Run Code Online (Sandbox Code Playgroud)

我为它做了一个新的bash脚本和一个符号链接来测试它,并且没有这样的问题.我不确定为什么它只发生在启动器浏览器上.它具有正常的权限,只是一个普通的bash脚本(即使根据文件命令).

...有任何想法吗?

ric*_*ici 59

知道这一点很重要

ln -s SOURCE TARGET
Run Code Online (Sandbox Code Playgroud)

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

所以当你这样做时:

$ ln -s torbrowser/start-tor-browser ~/bin/torbrowser
Run Code Online (Sandbox Code Playgroud)

你在做什么,粗略地说:

  1. 在您的bin子目录中创建一个名称的目录条目torbrowser.
  2. 使该新目录条目成为(相对)路径的符号链接(符号链接) 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
$
Run Code Online (Sandbox Code Playgroud)

有时 - 通常,甚至 - 符号链接到相对路径的能力非常方便.一个常见的用途是摆脱版本号:

$ ln -s apps/my_fancy_app_v2.63.1 apps/my_fancy_app
Run Code Online (Sandbox Code Playgroud)

现在,我不仅可以在不记住版本字符串的情况下调用my_fancy_app,还可以将整个文件夹移动到其他地方,而不会破坏符号链接:

$ mv apps /usr/local/apps
Run Code Online (Sandbox Code Playgroud)

但有时候 - 就像你的例子,我认为 - 你需要符号链接到绝对路径.

对于权限,符号链接始终具有权限,lrwxrwxrwx因为文件操作使用的实际权限是对真实文件的权限.(您可以认为这意味着任何人都可以遵循符号链接,但这并不完全正确:他们还需要对他们需要遵循的任何目录的读取权限.更准确地说,任何能够看到符号链接的人都可以看到它的名称指向,即使他们无法访问具有该名称的文件.

  • 重要的是要放置完整路径,以免链接断开 (3认同)

Adi*_*aju 17

重要的是TARGET您在

ln -s TARGET LINK_NAME
Run Code Online (Sandbox Code Playgroud)

是文件/目录的完整路径。我遇到了这个问题,就我而言,当我cd进入目标目录并执行

ln -s ./eclipse.ini ~/Desktop/eclipse1 导致链接断开

在此处输入图片说明

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

在此处输入图片说明