vi编辑器强制写入wq!命令详解
已知
这篇博文是在参考了[https://www.cnblogs.com/dayoyan/p/8652158.html]的基础上展开的,赞一个
vi编辑器在编辑文件的过程中会在工作目录新建一个.swp的交换文件,不可见。举个例子,在vi vitest的时候,进入vi命令行键入! ls -al 会出现:
-rw------- 1 li li 12288 Mar 17 16:55 .vitest.swp
注意这个文件的全县只有他需要的rw
下面我们来试验一下,对于-r-----r-- 1 li root 35 Mar 17:45 vitest这个文件,强制写入后结果是什么样呢
分两种情况:
- 当文件owner是vi命令执行者时(li),编辑一个没有w权限的文件后执行wq!,ll显示
-r-----r-- 1 li root 35 Mar 17 16:57 vitest
这表示:
如果文件所有者是执行vi命令的执行者,虽然产生了swp文件,但最终wq!后还是原本的属性不会变,只是mtime变了。
猜测vi内部可能先chmod再写入《鸟哥linux私房菜》是这阳描述的,不过写的很模糊诶。
- 当文件owner(root)不是vi命令执行者时(li),编辑一个没有w权限的文件后执行wq!,ll显示
-r-----r-- 1 li li 41 Mar 17 17:11 vitest
这表示:
如果文件所有者不是执行vi命令的执行者,那么强制override的结果就是,通过swap文件,产生了所有者和用户组都是执行者的新文件,并且属性继承源文件.
猜测vi内部将原文件删除,然后将swap修改权限后,写入了该目录,因为这下chmod是没有权限的