Linux

Linux 符號連結未按預期工作

  • February 11, 2021

我之前已經多次實現了我的“目標”,但遇到了一個我以前從未遇到過的問題。我在 Ubuntu 12.04 LTS 上使用 Nginx 設置了網路伺服器。我按照通常的方式設置了系統,並嘗試為站點“虛擬主機”創建從站點可用到啟用站點的目錄的符號連結。通常,這是通過主 nginx 目錄中的以下內容(以 root 身份)實現的:

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

雖然我可以進入啟用的目錄並查看符號連結已“工作”,但當我嘗試直接在啟用站點的目錄中編輯文件時,我看到該文件為空白並被視為新文件。結果,我的伺服器無法按預期工作並且頁面無法載入。當我只是將文件硬複製或硬連結到目錄中時:

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

它可以正常工作。然而,我被同一個文件的兩個副本困住了,沒有符號連結。

到底給了什麼?

注意:這是我目前 Nginx 目錄的結構:

root@site.com:/etc/nginx# ls -l
共 44
drwxr-xr-x 2 root root 4096 Mar 4 17:28 conf.d
-rw-r--r-- 1 根 964 Feb 12 08:41 fastcgi_params
-rw-r--r-- 1 根 2837 Feb 12 08:41 koi-utf
-rw-r--r-- 1 根 2223 Feb 12 08:41 koi-win
-rw-r--r-- 1 根根 3463 Feb 12 08:41 mime.types
-rw-r--r-- 1 root root 1022 Mar 4 21:15 nginx.conf
-rw-r--r-- 1 根 596 Feb 12 08:41 scgi_params
drwxr-xr-x 2 root root 4096 Mar 4 21:15 站點可用
drwxr-xr-x 2 root root 4096 3 月 4 日 21:19 啟用站點
-rw-r--r-- 1 根 623 Feb 12 08:41 uwsgi_params
-rw-r--r-- 1 root root 3610 Feb 12 08:41 win-utf

提前感謝您的幫助!

編輯1:顯示sites-enabled文件夾的內容ls -l

root@site.com:/etc/nginx/sites-enabled# ls -l
共 0
lrwxrwxrwx 1 根 3 Mar 5 10:23 www -> www

最終答案

所以在@Insyte 和@Michael Hampton 的幫助下,我想出瞭如何偶爾重現我的錯誤。劇情如下:

root@site.com:/etc/nginx# cd sites-available
root@site.com:/etc/nginx/sites-available# ls
全球資訊網
root@site.com:/etc/nginx/sites-available# ln -s www /etc/nginx/sites-enabled/www
root@site.com:/etc/nginx/sites-available# cd /etc/nginx/sites-enabled
root@site.com:/etc/nginx/sites-enabled# ls -l
共 0
lrwxrwxrwx 1 根根 3 Mar 5 10:48 www -> www

我不知道“為什麼”,但事實證明,如果我每次都使用完整的絕對路徑,那麼問題就不存在了。

因此,您所擁有的是一個連結回自身的符號連結。我看不出您在問題頂部列出的命令是如何實現的,所以我懷疑這個特定的符號連結的創建方式不同。

我可以像這樣複製你的場景:

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

引用自:https://serverfault.com/questions/484678