当我在主目录中创建一个没有写权限的文件时:
$ umask 777; touch testfile
$ ls -ln testfile
---------- 1 1000 1000 0 2014-03-21 16:52 testfile
$
Run Code Online (Sandbox Code Playgroud)
..然后我仍然可以轻松删除该文件:
$ rm -fv testfile
removed `testfile'
$
Run Code Online (Sandbox Code Playgroud)
当我创建一个对我没有写权限的目录没有写权限的文件时,我无法删除这样的文件:
$ ls -lnd /var/
drwxr-xr-x 14 0 0 4096 2014-03-21 17:04 /var/
$ ls -ln /var/testfile
---------- 1 1000 1000 0 2014-03-21 17:04 /var/testfile
$ rm -vf /var/testfile
rm: cannot remove `/var/testfile': Permission denied
$
Run Code Online (Sandbox Code Playgroud)
我是否正确地认为写权限是从父目录继承的?读取和执行权限也是如此吗?
Kil*_*oth 16
不,权限不会以这种方式继承。原因略有不同:删除文件不算写文件——它算作写目录!这就是为什么即使您对文件内容没有权限也可以删除文件的原因。
删除整个文件被认为与编辑它有着根本的不同。对于没有目录写权限的文件,您可以做的最多的事情是清空其内容,但您无法删除目录条目,
删除文件的能力与文件的实际权限无关。包含管理此文件的目录的权限。
$ whoami
saml
$ ll -d adir/
drwxrwxr-x. 2 samtest samtest 60 Mar 21 14:35 adir/
$ rm adir/afile
rm: remove write-protected regular empty file ‘adir/afile’? y
rm: cannot remove ‘adir/afile’: Permission denied
Run Code Online (Sandbox Code Playgroud)
但是,如果我更改权限,使用户saml
对adir
.
$ sudo chmod o+w adir/
Run Code Online (Sandbox Code Playgroud)
现在,如果此用户尝试删除afile
:
$ rm adir/afile
rm: remove write-protected regular empty file ‘adir/afile’? y
$ ll adir/
total 0
Run Code Online (Sandbox Code Playgroud)
所以请记住,读/写/执行文件的能力通过其属性属于文件本身。但是,从目录中删除文件的能力受包含该文件的目录的权限控制。