将 /home/myuser 硬链接到其新位置?

将 /home/myuser 硬链接到其新位置?

我使用 将我的主目录移动到了第二个(已安装)驱动器的子目录中usermod -d ... -m。现在,大多数程序都可以正常工作,但有一些(Dropbox 等)不能。我认为这是因为不再有 /home/myuser 目录,因此硬编码到那里查找的程序会失败。

我可以使用 创建硬链接吗ln -d? 硬链接似乎有问题,而且我甚至不确定是否可以跨磁盘创建它们。 但我希望尽快解决这个问题。

答案1

硬链接一般情况下不会出现特别的问题。但是硬链接到目录是,这就是为什么您必须使用标志-d来尝试创建一个,以及为什么您可能不会成功;内核可能被配置为(或硬编码,我不确定)禁止它们。

此外,正如你所怀疑的,你不能硬链接任何事物跨卷,因此您将无法硬链接/home/myuser到不同分区上的目录。

支持两种类型的链接ln命令 - 硬链接, 和软链接(也叫符号链接或者符号链接)。

A硬链接到文件文件。创建硬链接时,您创建的文件名称将由另一个文件名标识。Unix 风格的文件文件系统(喜欢ext4(Ubuntu 默认使用)通过其索引节点数字。当一个文件有多个名称,即多个硬链接(或者,我们可以说,只是多个链接)时,即使删除了其中一个或多个,只要至少有一个保留,它仍会继续存在。(然后它会继续存在于磁盘上,直到不再被任何进程打开。)执行以下工作的低级系统函数的名称rm叫做unlink为此原因。

A软链接不是文件。它是一种特殊的文件系统条目,通过目标文件的位置和名称指向文件。如果您删除软链接指向的文件,软链接不会导致文件继续存在。如果您删除或移动/重命名软链接指向的文件,软链接将无法访问该文件,并且被称为已损坏。

跨卷硬链接文件不起作用,因为硬链接文件,并且必须位于文件数据物理存储的卷上。

硬链接目录(即,有多个名称对应同一个目录 inode)通常不是一个好主意,通常是被禁止的,因为它可能会破坏关于目录行为的基本(和合理)假设。例如,假设我在一个名为的目录中,foocd到名为 的目录bar。如果不允许目录硬链接,那么我知道我可以用 回到foocd ..但如果允许目录硬链接,那么bar实际上可能是到其他地方的目录的硬链接。此外,更严重的是,硬链接是文件,并且到目录的硬链接就是目录,因此对于哪个目录真正是的父目录可能会产生歧义bar

另一方面,目录的软链接是完全允许的。目录foo可以包含一个名为的软链接,bar它链接到其他地方的目录,但这不会造成问题,因为要做什么总是很清楚。它总是很清楚,因为这个问题的答案我到底在哪个目录中?因此,当您将当前工作目录视为您用于访问该目录的名称时,它就是符号链接的名称。当您需要知道您实际位于哪个目录中时(例如,比较两个不同的路径以查看它们是否相同或一个位于另一个中),这也适用。

所以,您可以创建一个软链接或符号链接,从/home/myuser到新的主目录。要创建软链接,请使用。您不需要(也不应该)指定标志来创建目录软链接。ln -s target source-d

这可能有助于改善您的问题。您可以尝试一下。但解决问题本身会更好。我建议您发布一个新问题,询问如何解决由于您将主目录迁移到另一个分区(假设您这样做了)导致某些程序无法正常工作的问题。确保包含有关所有出现问题的程序的具体信息,包括任何错误消息的完整和准确文本,以及对触发这些问题的 Ubuntu 配置所做的更改的详细描述以及完整的内容/etc/fstab和的输出echo $USER $HOME。(您还应该链接到这个问题,这样人们就不会回答告诉您只需通过建立符号链接来解决问题。)

答案2

不要使用硬链接。使用符号链接。 ln -s /path/to/home /path/to/link硬链接可能会导致问题,尤其是当它指向目录时。

相关内容