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)