硬链接 /home/myuser 到它的新位置?

Ari*_*man 2 symbolic-link home-directory

我使用usermod -d ... -m. 现在,大多数程序都可以正常工作,但有一些(Dropbox 等)却不能。我相信这是因为不再有 /home/myuser 目录,因此硬编码以查看该目录的程序会失败。

我可以创建一个硬链接ln -d吗?看起来硬链接有问题,我什至不确定我是否可以跨磁盘创建它们。但我想尽快解决这个问题。

Eli*_*gan 5

一般来说,硬链接不是特别有问题。但是到目录的硬链接是,这就是为什么你必须使用-d标志来尝试创建一个,以及为什么你可能无论如何都不会成功;内核可能已配置(或硬编码,我不确定)以禁止它们。

此外,正如您怀疑的那样,您无法跨卷硬链接任何内容,因此您将无法硬链接/home/myuser到不同分区上的目录。

ln命令支持两种类型的链接——硬链接软链接(也称为符号链接符号链接)。

一个硬链接到一个文件文件。当您创建硬链接时,您正在创建它以便另一个文件名标识该文件。Unix 风格的文件系统(如ext4,Ubuntu 默认使用)中的文件由它们的inode number唯一标识。当一个文件有多个名称,即多个硬链接(或者,我们可以说只是多个链接)时,即使删除了其中一个或多个,只要至少保留一个,它就会继续存在。(然后它继续存在于磁盘上,直到它不再被任何进程打开。),做工作的低级系统函数的名称rm叫做unlink这个原因。

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

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

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

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

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

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