Vim 在没有权限的情况下写入文件

Vim 在没有权限的情况下写入文件
$ ls sess.vim -lh              
-rw-r--r-- 1 root root 11K Feb 26 18:52 sess.vim

我希望这个文件对每个人都可读,但任何人都不可写(root 除外)。因此我将其权限644和所有权设置为root:root.

$ echo "text" >> sess.vim      
zsh: permission denied: sess.vim

看起来不错。在 vim 中进行一些更改后,我执行:w!(强制写入)并且文件已成功保存。现在:

$ ls sess.vim -lh
-rw-r--r-- 1 MY_USERNAME users 11K Feb 26 19:06 sess.vim

重量..为什么?如何?

答案1

在vim中使用:w!类似如下:

echo 'test' > sess.vim.temp
mv sess.vim.temp sess.vim

这些mv命令只关心目录权限,与文件的权限无关。这是因为您正在修改目录,而不是写入文件。为了实现您的目标,您还需要调整文件所在目录的权限。

答案2

这是有效的,因为父目录的用户和组所有权是 your-username:your-group-name

如果用户是目录的所有者并且具有该目录的写权限,则允许他删除其中包含的任何文件(无论文件的权限如何)。我怀疑 vim 取消链接(删除)它编辑的文件,并在 :wq! 时写入具有相同文件名的新文件。给出。

相关内容