前几天,我像往常一样使用Vim,当时我发现有些奇怪的事情。这是我所做的:
~$ touch testfile
~$ ls -l | grep testfile
-rw-r--r-- 1 username groupname 0 Jul 23 10:00 testfile
~$ vim testfile
然后,我进行了更改,并保存并退出:wq
。很正常。然后,但是:
~$ sudo chown root:root testfile
~$ sudo chmod 644 testfile
~$ sudo -k
~$ ls -l | grep testfile
-rw-r--r-- root root 0 Jul 23 10:02 testfile
~$ vim testfile
因此,root用户应该具有r / w访问权限,而其他所有人都应该只能读取。编辑文件,尝试保存-您不能。很棒,按预期工作。但是,如果使用保存:w!
,vim会以某种方式将文件所有权更改回username:usergroup并保存文件。即使您这样做:
~$ sudo chmod 444 testfile
~$ sudo -k
~$ ls -l | grep testfile
-r--r--r-- 1 root root 0 Jul 23 10:06 testfile
~$ vim testfile
您仍然可以用覆盖:w!
!怎么了?vim如何违反这样的文件所有权和许可法律?我通过说在vim中查看了帮助页面:help :w
,发现了以下内容:
:w[rite]! [++opt] Like ":write", but forcefully write when 'readonly' is set or there is another reason why writing was refused.
Note: This may change the permission and ownership of the file and break (symbolic) links. Add the 'W' flage to 'cpoptions' to avoid this.
我以前不应该在以前无法在vim中写入文件,所以我想我的问题的真正核心是,如何使vim无法编辑文件,以及为什么不基于文件呢?就像我期望的那样,系统权限以及vim使用什么机制来编辑其他编辑器(gedit,nano)无法使用的文件?
编辑:我尝试过的计算机正在使用Linux内核3.15.5-2-ARCH。Vim的版本号是7.4.373-1,这是安装的版本pacman
-我没有使用任何特殊选项从头开始编译它。
我似乎无法重现该问题,除非采取此处
—
Davyzhu 2014年
我只是使用问题中的命令再次尝试了它,并且它以相同的方式发生了。我将编辑问题以添加有关我的计算机的详细信息,尽管这似乎可能取决于平台。
—
zrneely 2014年