创建后符号链接断开

Eks*_*psy 1 linux bash ln

  • 链接在我创建后立即断开。
  • 我使用ln正确。ln -s SOURCE TARGET

创建符号链接

$ sudo ln -s ./sites-available/examble.domain.com ./sites-enabled
Run Code Online (Sandbox Code Playgroud)

编译 NGINX - 由于符号链接损坏而失败

注意: 问题与NGINX无关,NGINX编译只是为了帮助我意识到问题的存在。下面描述的解决方案适用于任何其他相关问题。

$ sudo nginx -t
nginx: [emerg] open() "/etc/nginx/sites-enabled/example.domain.com" failed (2: No such file or directory) in /etc/nginx/nginx.conf:62
nginx: configuration file /etc/nginx/nginx.conf test failed
Run Code Online (Sandbox Code Playgroud)

确认符号链接已损坏

$ file ./sites-enabled/example.domain.com
./sites-enabled/example.domain.com: broken symbolic link to ./sites-available/example.domain.com
Run Code Online (Sandbox Code Playgroud)

Eks*_*psy 6

问题是SOURCE放置到目标目录时不会重新解释。

因此,如果您要链接的文件是~/file并且您希望将其链接到~/folder使用:

ln -s ./file ./folder/
Run Code Online (Sandbox Code Playgroud)

然后符号链接会认为file是在~/folder/file而不是~/file

因此,您必须进入目录~/folderln从那里执行命令。

所以,问题是...

ln需要相对SOURCE目录到TARGET目录。不是SOURCE当前目录的相对目录。

最终解决方案

# Getting into the folder
cd ./sites-enabled

# Creating symbolic link
ln -s ../sites-available/example.domain.com ./
Run Code Online (Sandbox Code Playgroud)

  • 当然你也可以使用 `ln -s ../sites-available/example.domain.com sites-enabled`,而不使用 `cd`。这个解决方案的巧妙之处在于,如果你首先 *do* `cd` 到目录,你可以使用任何制表符可完成的路径,因为它已经相对于正确的目录。 (2认同)