我可以仅使用读取权限来写入文件吗?

我可以仅使用读取权限来写入文件吗?

我刚刚使用 为文件设置了只读权限,chmod 400 filename.txt然后我通过 vi 编辑器打开文件并编辑,然后尝试使用 :w 保存,然后显示E45: 'readonly' option is set (add ! to override)我使用:w!。然后它会以只读权限保存编辑的文件?这怎么可能呢?

Ubuntu 和 Fedora 之间是否存在影响访问权限的差异?

答案1

vim使用运行strace。我在 /tmp 中创建了一个名为“abc”的文件,内容为“foo”,将其设置为只读 ( ),在( )chmod 400 abc中打开它并使用“:wq!”保存它。vimstrace -o vim.log vim abc

以下是strace日志:

...
getcwd("/tmp", 4096)                    = 5
write(1, "\33[?25l\"abc\"", 11)         = 11
stat("abc", {st_mode=S_IFREG|0400, st_size=4, ...}) = 0
getxattr("abc", "system.posix_acl_access", 0x7fff5725fd60, 132) = -1 ENODATA (No data available)
stat("abc", {st_mode=S_IFREG|0400, st_size=4, ...}) = 0
getuid()                                = 1000
chmod("abc", 0100600)                   = 0
open("abc", O_WRONLY|O_CREAT|O_TRUNC, 0600) = 9
write(9, "foo\n", 4)                    = 4
fsync(9)                                = 0
close(9)                                = 0
chmod("abc", 0100400)                   = 0
setxattr("abc", "system.posix_acl_access", "\x02\x00\x00\x00\x01\x00\x04\x00\xff\xff\xff\xff\x04\x00\x00\x00\xff\xff\xff\xff \x00\x00\x00\xff\xff\xff\xff", 28, 0) = 0
...

我们可以看到,vim调用stat来获取当前权限,然后相当于chmod(u+w),然后是写入,然后它会恢复原始权限(在本例中为chmod(400))。

答案2

如果文件属于您,您可以随时通过调用 来更改文件的权限chmod。我猜编辑器只是隐式地更改权限,保存并恢复权限。要真正禁止写入,您还应该更改文件所有者。

相关内容