Rol*_*nez 0 permissions chmod fedora vi
我只是设置了一个文件的只读权限,chmod 400 filename.txt然后我通过 vi 编辑器打开文件并编辑并尝试使用 :w 保存然后说E45: 'readonly' option is set (add ! to override)所以我使用:w!. 然后它以只读权限保存编辑过的文件?怎么可能?
Ubuntu 和 Fedora 之间是否存在影响访问权限的差异?
我跑了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))。
| 归档时间: |
|
| 查看次数: |
2144 次 |
| 最近记录: |