双符号链接(用于分区和服务器)

双符号链接(用于分区和服务器)

我希望这不是重复的,我搜索过但找不到答案。

我正在使用 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 服务器将使用的目录,这是更正确的做法。您可能永远不需要硬链接,但您应该知道它们存在。

相关内容