最近备考需要系统的复习下Linux,在复习到inode/block/权限等概念的时候,遇到了如下疑问:
已知:
# 对于目录这种特殊文件来说,权限的意义是:
r:读取目录结构,就是可以获取目录下的文件名/子目录名等数据,即可以用ls列出来。
w:更改目录结构,可以在目录下新增、删除文件、修改文件名、子目录名等。
x:可以进入目录成为当前目录。
# 目录的结构数据存在block里,inode里只存放属性、权限以及存放数据的block号。结合上面的权限,可知:
r:可以读取目录的block里的数据,自然就可以获取目录的结构列表。
w:可以修改目录block里的数据,自然就可以更改目录的结构。
x:我目前的理解貌似跟block没啥关系。

但我的疑问就来了,为啥我把一个dir的权限设置的只剩下x,还能读取目录里一个文件的内容?
i@laptop:/tmp/study$ ls -li ./ ./dir/
./:
total 4
659970 drwxr-xr-x 2 i i 4096 Dec 17 10:14 dir

./dir/:
total 4
659971 -rw-r--r-- 1 i i 6 Dec 17 10:14 file
i@laptop:/tmp/study$ cat dir/file
12345
i@laptop:/tmp/study$ chmod a=x dir/
i@laptop:/tmp/study$ ls -li ./ ./dir/
./:
total 4
659970 d--x--x--x 2 i i 4096 Dec 17 10:14 dir
ls: cannot open directory ./dir/: Permission denied
i@laptop:/tmp/study$ cat dir/file
12345

按理说dir的r权限去掉了,根据目录树读取的顺序,先用inode到inode表里取出了dir的权限,发现没有r,就没法去block里读数据了啊。
更奇怪的是,我把x也去掉,才不能读文件:
i@laptop:/tmp/study$ chmod a= dir/
i@laptop:/tmp/study$ ls -li ./ ./dir/
./:
total 4
659970 d--------- 2 i i 4096 Dec 17 10:14 dir
ls: cannot open directory ./dir/: Permission denied
i@laptop:/tmp/study$ cat dir/file
cat: dir/file: Permission denied

真是百思不得其解,这个x不是只控制dir能否成为当前目录的吗?跟读取里面的文件有啥关系呢?
-------------- 下一部分 --------------
一个HTML附件被移除...
URL: 
<https://lists.ubuntu.com/archives/ubuntu-zh/attachments/20121217/dc379a84/attachment.html>
-- 
ubuntu-zh mailing list
ubuntu-zh@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-zh

回复