雙符號連結(用於分區和伺服器)

雙符號連結(用於分區和伺服器)

我希望這不是重複的,我搜尋過但找不到答案。

我正在使用 Linux Mint。我有一個在啟動時自動安裝的資料分割區。我已在我的資料夾上的該分割區建立了符號連結/home/user

問題是我的資料分區上有一個“www”資料夾(它是我需要恢復的網站的備份),我需要在/home/user.我還需要對其進行符號鏈接,/var/www/html以便可以對伺服器中的文件/資料夾進行更改。是否可以?最好的方法是什麼?

以前我直接保留“www”資料夾,/home/user因此我只需要一個符號連結。但現在我有一個單獨的資料分區,我不知道如何處理。我的伺服器只能有一個符號鏈接,但我必須手動複製/備份添加的任何新訊息,如果有辦法的話,我寧願自動執行此操作。

答案1

是的,可以將一個資料夾符號連結到多個位置。據我了解你的問題,你需要兩個符號連結:

/home/user/www -> /mnt/partition/www
/var/www/html -> /mnt/partition/www

如果情況有所不同,我很樂意調整我的答案。但是,一般程序應該是相同的。

 ln -s /mnt/partition/www /home/user/www
 ln -s /mnt/partition/www /var/www/html

/mnt/partition/www如果您需要under/var/www/html和的整個目錄結構/home/user,例如在兩個相同的「資料夾」中彼此保持同步,請查看綁定安裝。

答案2

如果我理解正確的話,你有(有點抽象):

/data/html/xyz.html

您的主目錄中有一個連結:

/home/user/html -> /data/html

所以資料實際上儲存在單獨的分區上/data

現在您可以透過連結使用 /var/www/html 中的 xyz.html 檔案:

/var/www/html -> /data/html

其命令為:

cd /home/user
ln -s /data/html .
cd /var/www
ln -s /data/html .

然而,我發現這個設定有兩個問題。

  1. 您的伺服器可能未設定為跟隨 下的連結/var/www。例如,Apache 需要+FollowSymLinks在其配置中包含該選項,因為這是潛在的安全風險。
  2. 每個編輯的變更都會立即「推送」到網頁伺服器。您可能應該透過某些修訂控制系統來執行此操作,以便最多提交的資料會出現在網站上。

解決上述問題有不同的方法。如果空間/是把所有東西都放在上面的原因,/data我會製作一個/data/www並從那裡擁有網絡伺服器伺服器/var/www(消除對以下符號鏈接的需要。我還會使用 Mercurial 來修訂控制下面的材料/data/html並將其克隆到默認位置/data/www,以便您可以從/data/html(或/home/user/html)提交,一旦事情穩定,您就可以提交並推送,以便從網站提供服務。

答案3

在 Linux 中,任何實體儲存都可以多次指派給檔案系統中的任何路徑。檔案路徑只是實體儲存的索引節點(句柄/指標)。您可以透過至少 3 種方式將相同的實體檔案/資料夾對應到不同的檔案系統路徑:

1)安裝。就像您可以將整個實體磁碟機安裝到目錄中一樣,您也可以將任何現有目錄安裝到另一個位置(綁定安裝)。這對於系統中的任何應用程式都是完全透明的,沒有程式實際上會注意到目錄中的內容是從其他位置安裝的。在你的情況下,你可以輕鬆地做到

mount --bind /mnt/partition/www/ /var/www/html/

這是執行此操作的最佳方法,因為預設情況下網頁伺服器通常不喜歡遵循符號鏈接,因為它們可以授予對不應訪問的檔案系統部分的存取權限。

您可以多次將任何資料夾裝載到任何其他資料夾。原始目錄甚至不知道它安裝在其他地方,作業系統會處理這個問題。

2) 符號連結。符號連結只是別名。這是最弱的結合。與安裝不同,符號連結僅包含(基本上以文字形式)它們指向的路徑。這意味著您不必在每次啟動時(或在需要時)安裝它,並且該路徑甚至可能不存在。它也可能會改變。大多數應用程式都像處理常規檔案一樣使用它們,但有一些注意事項:目錄符號連結存在一些問題,因為當您進入並再次返回時,您不一定會到達同一位置。此外,應用程式知道檔案/目錄是一個連結。為了避免循環,作業系統限制了要遵循的連結鏈的長度(幾乎從來都不是問題,除非您非常濫用它們)。當然,您可以擁有任意數量的鏈接,原始目錄甚至不知道它們。

ln -s /mnt/partition/www/ /var/www/html/

ln -s /mnt/partition/www/ /home/user/www/

3)硬連結。因為 Unix 上的檔案系統被設計為一組指向硬碟上實體位置的索引節點,所以每個索引節點只是一個到達那裡的位址。因此,您可以有許多 inode(在同一檔案系統中)指向相同位址。如果您不使用-sswitch onln命令,它會建立硬連結(如果可能)。指向同一實體儲存的所有檔案名稱實際上是等效的。沒有“原始”文件。它們都是同一個文件,只是同一件事有兩個或多個名稱。因為刪除實際上僅刪除索引節點(並且僅當沒有索引節點指向該空間時才將空間標記為空閒),因此刪除一個檔案並不會刪除另一個檔案。它只是刪除名稱。當然,如果刪除所有硬鏈接,則沒有 inode 告訴您在哪裡可以找到存儲,並且最終會丟失(檔案系統可以將該空間用於其他用途)。

在這種情況下這對你沒有幫助。硬連結只能在同一檔案系統(同一分割區)內工作,因為每個分割區都有自己的實體位址管理。但我將其包含在內只是為了完整性。

所以...將任何東西符號連結到任何東西,您甚至可以連結到另一個連結(這是大多數庫的/usr/lib連結方式,以便通用庫名稱連結到安裝的特定版本)。如果您具有 root 存取權限,我建議綁定安裝 Web 伺服器將使用的目錄,這是更正確的做法。您可能永遠不需要硬鏈接,但您應該知道它們存在。

相關內容