$ 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! 时写入具有相同文件名的新文件。给出。