Linux符号链接不按预期工作

我以前曾经多次达到我的“目标”,但却遇到了我以前从未遇到过的一个问题。 我在Ubuntu 12.04 LTS上安装了Nginx的networking服务器。 我有我的系统设置的方式,我通常会试图创build一个符号链接的网站“虚拟主机”从站点可用的站点启用目录。 通常,这是从主nginx目录(以root用户身份)实现的:

  ln -s /etc/nginx/sites-available/site.com /etc/nginx/sites-enabled/site.com 

虽然我可以进入启用的目录,并查看符号链接“工作”,当我尝试直接在启用站点的目录中编辑文件时,我看到该文件是空白的,并被视为新文件。 因此,我的服务器不能按预期工作,页面不加载。 当我只是硬拷贝或硬链接到目录的文件:

  l /etc/nginx/sites-available/site.com /etc/nginx/sites-enabled/site.com 

它没有任何问题。 然而,我坚持使用同一个文件的两个副本,而且没有符号链接。

这是怎么回事?

注意:这里是我当前的Nginx目录的结构:

 [email protected]:/ etc / nginx#ls -l
总计44
 drwxr-xr-x 2 root root 4096 Mar 4 17:28 conf.d
 -rw-r  -  r-- 1 root root 964 Feb 12 08:41 fastcgi_params
 -rw-r  -  r-- 1 root root 2837 Feb 12 08:41 koi-utf
 -rw-r  -  r-- 1 root root 2223 Feb 12 08:41 koi-win
 -rw-r  -  r-- 1 root root 3463 Feb 12 08:41 mime.types
 -rw-r  -  r-- 1 root root 1022 Mar 4 21:15 nginx.conf
 -rw-r  -  r-- 1 root root 596 Feb 12 08:41 scgi_params
 drwxr-xr-x 2 root root 4096 Mar 4 21:15 sites-available
 drwxr-xr-x 2根root 4096 Mar 4 21:19 sites-enabled
 -rw-r  -  r-- 1 root root 623 Feb 12 08:41 uwsgi_params
 -rw-r  -  r-- 1 root root 3610 Feb 12 08:41 win-utf

提前感谢您的帮助!

编辑1:用ls -l显示sites-enabled文件夹的内容:

 [email protected]:/ etc / nginx / sites-enabled#ls -l
总计0
 lrwxrwxrwx 1 root root 3 3月5日10:23 www  - > www

最终答案

所以在@Insyte和@Michael Hampton的帮助下,我想出了如何偶然地重现我的错误。 情况如下:

 [email protected]:/ etc / nginx#cd sites-available
 [email protected]:/ etc / nginx / sites-available#ls
万维网
 [email protected]:/ etc / nginx / sites-available#ln -s www / etc / nginx / sites-enabled / www
 [email protected]:/ etc / nginx / sites-available#cd / etc / nginx / sites-enabled
 [email protected]:/ etc / nginx / sites-enabled#ls -l
总计0
 lrwxrwxrwx 1 root root 3 3月5日10:48 www  - > www

我不知道“为什么”,但事实certificate,如果我每次使用完全绝对path,那么问题就不存在了。

所以你有什么是一个链接到自身的符号链接。 我不明白你在问题顶部列出的命令是如何实现的,所以我怀疑这个特殊的符号链接是以不同的方式创build的。

我可以像这样复制你的场景:

 sazerac:~ insyte$ cd testlinks/ sazerac:~/testlinks insyte$ ls sazerac:~/testlinks insyte$ ln -s www www sazerac:~/testlinks insyte$ ls -l total 8 lrwxr-xr-x 1 insyte staff 3 Mar 5 10:33 www -> www 

我们来试一下实验。 完全按照列出的方式执行以下命令:

 echo "hello insyte" > /etc/nginx/sites-available/insyte ln -s /etc/nginx/sites-available/insyte /etc/nginx/sites-enabled ls -l /etc/nginx/sites-enabled|grep insyte cat /etc/nginx/sites-enabled/insyte 

你已经设法build立一个链接到自己的符号链接。 我甚至不知道你能做到这一点,但我相当确定它不会有你想要的结果。

要修复它,删除符号链接并正确地重新创build它。

 rm -f /etc/nginx/sites-enabled/www 

或者只是使用-f选项,它可能会删除无效的符号链接。

 ln -fs /etc/nginx/sites-available/www /etc/nginx/sites-enabled/www