我可以写一个只有读权限的文件吗?

Rol*_*nez 0 permissions chmod fedora vi

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

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

sle*_*anc 5

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

这是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
...
Run Code Online (Sandbox Code Playgroud)

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