单个绑定安装的文件在linux中不同步
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了单个绑定安装的文件在linux中不同步,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3033字,纯文字阅读大概需要5分钟。
内容图文
![单个绑定安装的文件在linux中不同步](/upload/InfoBanner/zyjiaocheng/958/46c8752c8f794b98965403d72e3151cc.jpg)
我绑定将一个文件挂在另一个文件的顶部,并且在使用编辑器进行更改后,我没有在两个文件中看到修改.但是,如果我使用重定向对shell进行更改,例如>>,例如,我确实看到了两个文件中的更改.以下是一个示例:
第一种情况:
-bash-3.00# echo foo >| foo
-bash-3.00# echo bar >| bar
-bash-3.00# diff foo bar
1c1
< foo
---
> bar
-bash-3.00# mount --bind foo bar
-bash-3.00# echo modified >> foo
-bash-3.00# diff foo bar
-bash-3.00# umount bar
上述情况中的一切都如我所料;将“modified”附加到文件“foo”后,这两个文件没有显示差异.
但是,如果我执行相同的测试但使用vi编辑foo,我会得到不同的结果.
第二种情况:
-bash-3.00# echo foo >| foo
-bash-3.00# echo bar >| bar
-bash-3.00# diff foo bar
1c1
< foo
---
> bar
-bash-3.00# mount --bind foo bar
-bash-3.00# diff foo bar
-bash-3.00# vi foo
# append "modified with vi" and :wq vi
"foo" 2L, 21C written
-bash-3.00# cat foo
foo
modified with vi
-bash-3.00# cat bar
foo
-bash-3.00# diff foo bar
2d1
< modified with vi
-bash-3.00#
这里,两个文件是不同的,即使一个绑定安装到另一个上.这里的任何人都知道在这种情况下发生了什么?
谢谢!
解决方法:
发生的事情是vi正在创建一个新文件(inode),并且有效地撤消绑定,即使挂载仍然存在.追加使用现有文件(inode).
在我逐步完成测试时,使用ls -li查看文件的inode编号.
$echo foo > foo
$echo bar > bar
$ls -li foo bar # 2 inodes so 2 different files
409617 -rw-r--r-- 1 derek derek 4 Jul 31 12:56 bar
409619 -rw-r--r-- 1 derek derek 4 Jul 31 12:56 foo
$sudo mount --bind foo bar
$ls -li foo bar # both inodes are the same so both reference the same file (foo)
409619 -rw-r--r-- 1 derek derek 4 Jul 31 12:56 bar
409619 -rw-r--r-- 1 derek derek 4 Jul 31 12:56 foo
$echo mod >> foo
$ls -li foo bar # appending doesn't change the inode
409619 -rw-r--r-- 1 derek derek 8 Jul 31 12:57 bar
409619 -rw-r--r-- 1 derek derek 8 Jul 31 12:57 foo
$vi foo
$ls -li foo bar # vi has created a new file called foo (new inode)
# bar still points to the old foo
409619 -rw-r--r-- 0 derek derek 8 Jul 31 12:57 bar
409620 -rw-r--r-- 1 derek derek 14 Jul 31 12:57 foo
$sudo umount bar
$ls -li foo bar # umount uncovers the original bar. original foo has no references
409617 -rw-r--r-- 1 derek derek 4 Jul 31 12:56 bar
409620 -rw-r--r-- 1 derek derek 14 Jul 31 12:57 foo
您需要考虑底层的inode而不是文件名.你想做什么,用符号链接无法完成?
我试过一个变种,认为你可以做你想做的事.看一下以下……
$ls -li a/foo /mnt/c/foo
3842157 -rw-r--r-- 1 derek derek 17 Jul 31 19:45 a/foo
840457 -r--r--r-- 1 root root 6 Jul 31 19:41 /mnt/c/foo
$sudo mount --bind a/foo /mnt/c/foo
$ls -li a/foo /mnt/c/foo
3842157 -rw-r--r-- 1 derek derek 17 Jul 31 19:45 a/foo
3842157 -rw-r--r-- 1 derek derek 17 Jul 31 19:45 /mnt/c/foo
$vi /mnt/c/foo
$ls -li a/foo /mnt/c/foo
3842157 -rw-r--r-- 1 derek derek 22 Jul 31 20:02 a/foo
3842157 -rw-r--r-- 1 derek derek 22 Jul 31 20:02 /mnt/c/foo
$sudo umount /mnt/c/foo
$ls -li a/foo /mnt/c/foo
3842157 -rw-r--r-- 1 derek derek 22 Jul 31 20:02 a/foo
840457 -r--r--r-- 1 root root 6 Jul 31 19:41 /mnt/c/foo
当一个/ foo安装在只读文件/ mnt / c / foo上时,我可以编辑/ mnt / c / foo,它改变了/ foo的内容而不改变inode.
内容总结
以上是互联网集市为您收集整理的单个绑定安装的文件在linux中不同步全部内容,希望文章能够帮你解决单个绑定安装的文件在linux中不同步所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。