为什么我可以修改只读文件?

Modified on: Sat, 09 Jun 2018 09:05:23 +0800

简短问题:

为什么我们可以使用操作Vim中的只读文件: + w + q + 即使不是管理员?

长问题:

我有一个只读给所有人的文本文件(myFile.txt):

navid@navid-ThinkPad-T530:~/ubuntuTest$ ls -l myFile.txt 
-r--r--r-- 1 navid navid 26 Aug 22 21:21 myFile.txt

我可以在没有管理员权限的情况下使用Vim打开它:

navid@navid-ThinkPad-T530:~/ubuntuTest$ vi myFile.txt 

我修改它并按: Esc + + w + q + Enter < / kbd>我看到此错误消息:

E45: 'readonly' option is set (add ! to override)

到目前为止,一切都有道理。
但是当我按下时: Esc + + w + q + + 输入,Vim保存更改。

我正在使用Ubuntu 16.04和VIM 7.4。

最佳答案

由于@Rob已经提及,因此只有对包含该文件的目录具有写入权限时才能执行此操作。尝试对文件执行相同操作(例如/etc)将失败。

至于 vim如何执行此操作,它会删除该文件并重新创建它。为了测试这个,我创建了一个由root拥有的文件:

echo foo | sudo tee fff

然后按照您描述的方式继续使用vim编辑文件,但将过程附加到strace以查看发生的情况:

strace vim fff 2> strace.out

然后我检查了strace.out并找到了:

unlink("fff")                           = 0
open("fff", O_WRONLY|O_CREAT|O_TRUNC, 0644) = 4
write(4, "foasdasdao\n", 11)            = 11

因此,首先删除了文件(unlink("fff")),然后创建了一个同名的新文件(open("fff", O_WRONLY|O_CREAT|O_TRUNC, 0644))和我所做的修改都被写入了它(write(4, "foasdasdao\n", 11))。如果您在家中尝试此操作,您将看到在使用vim编辑它之后,该文件现在将属于您而不是root。

因此,严格来说,vim不会编辑您没有写入权限的文件。它正在从您具有写访问权限的目录中删除文件,然后再创建一个新文件,您也可以对该文件具有写访问权限。

作者:Community,terdon

相关问答

添加新评论