大家先了解一些背景知识:
1) 给文件增加了i权限,那文件不能被更改,不能删除,也不能修改名字以及权限。
2) 给文件增加a权限,文件可以追加内容,不能删除,不能修改内容,不能修改名字以及权限。
3) vim一个文件,如果不正常退出,再次编辑时是会提示一些信息的,并且有一个隐藏的文件.xxx.swp
了解以上知识后,再来看下面的现象:
1) 如果给一个文件增加a权限,用vim编辑文件,增加内容(注意是在文件末尾增加内容,不要修改其他内容),并不会成功。
2) 如果给一个目录增加i权限或者a权限,在该目录下面vim一个文件,更改文件内容可以正常保存。
既然a权限可以追加内容,那为何vim一个文件在末尾增加内容不能成功?既然i权限不能修改,那为何在目录里面变更文件内容却可以成功?
关于这两点,你有没有疑惑?下面我们来分析原因。
先不管i或者a权限,
在一个没有i或者a权限的目录下,编辑一个没有i或者a权限的文件,
用strace来查看其执行过程。
mkdir /tmp/test
strace vim /tmp/test/aminglinux.txt 2>/tmp/vim.log
写入一个数字1,然后保存退出。再来查看vim.log的内容。
less /tmp/vim.log
大部分内容你不用关心,只需要看这几行:
stat("/tmp/test/aminglinux.txt", 0x7fff072ecb10) = -1 ENOENT (No such file or directory)
access("/tmp/test/aminglinux.txt", W_OK) = -1 ENOENT (No such file or directory)
open("/tmp/test/aminglinux.txt", O_RDONLY) = -1 ENOENT (No such file or directory)
readlink("/tmp/test/aminglinux.txt", 0x7fff072eb360, 4095) = -1 ENOENT (No such file or directory)
open("/tmp/test/.aminglinux.txt.swp", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/tmp/test/.aminglinux.txt.swp", O_RDWR|O_CREAT|O_EXCL, 0600) = 3
open("/tmp/test/.aminglinux.txt.swx", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/tmp/test/.ami