我刚刚使用 为文件设置了只读权限,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!”保存它。vim
strace -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
。我猜编辑器只是隐式地更改权限,保存并恢复权限。要真正禁止写入,您还应该更改文件所有者。