Rai*_*ter 3 solaris hard-link mount symlink bind-mount
我有 2 个现有文件:abcd和xyz.
$ cat abcd
abcd
$ cat xyz
xyz
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试软链接这些文件时,我收到以下消息:
ln: cannot create xyz: File exists
Run Code Online (Sandbox Code Playgroud)
我不想使用
ln -sf abcd xyz
Run Code Online (Sandbox Code Playgroud)
命令,它将覆盖的内容xyz与的abcd。
我要的是:既abcd和xyz一旦解除连结应该显示自己的原创内容。
或者换句话说,我只想临时链接这两个文件。
请建议除了使用 mount 等软/硬链接之外是否还有其他解决方案。
编辑:我使用Solaris OS这对于喜欢命令没有手工录入mount --bind,mount -B,bindfs,fusermount,等
另外,我尝试使用 :mount -o bind abcd xyz并且它给出了以下 msg : cannot open /etc/vfstab。我检查并发现/etc/vfstab只能Root访问。
Mar*_*elo 17
这不是ln应该做的。 ln创建现有文件的硬链接,即两个(或更多)指向磁盘中同一个文件的目录条目。链接文件的工作方式是编辑一个文件会影响所有文件。
您想要的功能不是 Unix 原生的东西(链接文件,以便它们显示为一个,以便以后可以取消链接)。 不过,Linux(几年前)已经实现了一种称为绑定挂载的东西,允许将一个文件或目录挂载到另一个文件或目录之上(文件位于文件之上,目录位于目录之上)。
建议的解决方案:如果您希望文件暂时“成为”另一个文件,则使用绑定挂载 ( mount -B file1 file2)。这将安装file1在file2. 稍后卸载后,这两个文件将再次显示为它们原来的存在。
# echo A >A
# echo B >B
# mount -B A B
# cat A
A
# cat B
A
# umount B
# cat A
A
# cat B
B
Run Code Online (Sandbox Code Playgroud)
如果您希望“链接”文件显示为两者的串联,则必须创建第三个文件并稍后将其删除。
小智 6
这个命令:
ln -sf abcd xyz
Run Code Online (Sandbox Code Playgroud)
不会覆盖的内容xyz与的abcd,因为你的想法。符号链接不是文件,因此它不包含任何内容。
如果您想在不丢失内容的情况下临时链接xyz,abcd则需要以某种方式存储内容。
现在我将演示最后一个。您有abcd和xyz,如您的问题中所述。
硬链接xyz有zyx,以使内容物保持在zyx让你操纵xyz。
$ ln xyz zyx
Run Code Online (Sandbox Code Playgroud)
此时xyz和zyx是包含 data的inode 的两个硬链接xyz,如您的问题所述。您可以通过以下方式检查:
$ cat zyx
xyz
Run Code Online (Sandbox Code Playgroud)现在zyx已经到位,您可以强制重新链接xyz到abcd。
$ ln -sf abcd xyz
Run Code Online (Sandbox Code Playgroud)
zyx仍然保留字符xyz。您可以通过以下方式检查:
$ cat zyx
xyz
Run Code Online (Sandbox Code Playgroud)
虽然xyz现在软链接到abcd. 要检查运行这个:
$ cat xyz
abcd
Run Code Online (Sandbox Code Playgroud)一旦要恢复起始状态,请重新链接xyz到原始内容。也就是说,将其重新链接到原始 inode。
$ ln -f zyx xyz
Run Code Online (Sandbox Code Playgroud)
要检查它是否有效:
$ cat xyz
xyz
Run Code Online (Sandbox Code Playgroud)
现在您可以取消附加硬链接的链接zyx:
$ rm zyx
Run Code Online (Sandbox Code Playgroud)
或者保留它以备将来操作。无论哪种方式,xyz仍然包含它在开始时所做的。
$ rm zyx
$ cat xyz
xyz
Run Code Online (Sandbox Code Playgroud)