Never foget your dream, never ~
对于一个文件来说,我们都知道,RWX 三个permission 分别对应读、写 和执行权限。但是对于目录来说,它又不能被执行,它的 X 权限有何用呢?如果没有 X 权限,是否可以修改目录中的文件呢?
让我们来实验一下:
1
2
3
| $ mkdir fz
$ ls -ld fz
drwxrwxr-x 2 goodluck goodluck 4096 2014-05-12 21:57 fz
|
创建成功,默认权限775
添加几个文件进来
1
2
3
4
5
6
7
8
| $ cd fz/
$ touch a b c
$ ls -al fz
drwxrwxr-x 2 goodluck goodluck 4096 2014-05-12 21:59 .
drwxr-xr-x 8 goodluck goodluck 4096 2014-05-12 21:59 ..
-rw-rw-r-- 1 goodluck goodluck 0 2014-05-12 21:59 a
-rw-rw-r-- 1 goodluck goodluck 0 2014-05-12 21:59 b
-rw-rw-r-- 1 goodluck goodluck 0 2014-05-12 21:59 c
|
让我们对fz单独设置 RWX 权限来看看是什么效果。
-R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| $ sudo chmod 444 fz #修改 folder 的 permission 需要 root
$ ls -ld fz
dr--r--r-- 2 goodluck goodluck 4096 2014-05-12 21:59 fz
$ ls -al fz
ls: cannot access fz/.: Permission denied
ls: cannot access fz/..: Permission denied
ls: cannot access fz/a: Permission denied
ls: cannot access fz/c: Permission denied
ls: cannot access fz/b: Permission denied
total 0
d????????? ? ? ? ? ? .
d????????? ? ? ? ? ? ..
-????????? ? ? ? ? ? a
-????????? ? ? ? ? ? b
-????????? ? ? ? ? ? c
$ cat fz/a
cat: fz/a: Permission denied
$ cd fz
bash: cd: fz: Permission denied
|
只有 R 权限的话,只能知道 fz 里面有 . .. 两个目录和 a b c 三个文件。文件属性和文件的内容都不能读取,当然也不能写。
-W
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| $ sudo chmod 222 fz
$ ls -ld fz
d-w--w--w- 2 goodluck goodluck 4096 2014-05-12 21:59 fz
$ ls fz
ls: cannot open directory fz: Permission denied
$ cat fz/a
cat: fz/a: Permission denied
$ echo "aaa" >fz/a
bash: fz/a: Permission denied
mv fz/a fz/d
mv: accessing `fz/d': Permission denied
$ cd fz
bash: cd: fz: Permission denied
|
只有 W 权限,啥也干不了
-X
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| $ sudo chmod 111 fz
$ ls -ld fz
d--x--x--x 2 goodluck goodluck 4096 2014-05-12 21:59 fz
$ ls -al fz
ls: cannot open directory fz: Permission denied
$ echo "aaa" > fz/a #success
$ cat fz/a
aaa
chmod +x fz/a #success
$ ls -l fz/a
-rw-rw-r-- 1 goodluck goodluck 4 2014-05-12 22:16 fz/a
$ rm fz/a
rm: cannot remove `fz/a': Permission denied
$ cd fz
$ cd fz
$ ls
ls: cannot open directory .: Permission denied
$ touch ff
touch: cannot touch `ff': Permission denied
$ chmod 775 fz/a #fail but not prompt error
$ echo $?
0 #seems success but not changed
-rw-rw-r-- 1 goodluck goodluck 11 2014-05-12 22:26 fz/a
|
只有X权限可以读,写,修改内部文件内容,修改内部文件属性,不能rename/delete/create 文件,chmod 没有报错,却也没有生效
-RX
1
2
3
4
5
6
7
8
9
10
| $ sudo chmod 555 fz
$ ls -ld fz
dr-xr-xr-x 2 goodluck goodluck 4096 2014-05-12 22:19 fz
$ ls -al fz
total 12
dr-xr-xr-x 2 goodluck goodluck 4096 2014-05-12 22:19 .
drwxr-xr-x 8 goodluck goodluck 4096 2014-05-12 21:59 ..
-rw-rw-r-- 1 goodluck goodluck 11 2014-05-12 22:26 a
-rw-rw-r-- 1 goodluck goodluck 0 2014-05-12 21:59 b
-rw-rw-r-- 1 goodluck goodluck 0 2014-05-12 21:59 c
|
可以正常读、写、执行文件,cd 到目录,查看文件属性。不能 rename/delete/create 文件
奇怪的一点是在 cd 到 fz 可以使用 chmod 修改 a 文件的permisson, 但是在 fz 外面目录则不生效,奇怪!
-RW
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| $ sudo chmod 666 fz
$ ls -al fz
ls: cannot access fz/.: Permission denied
ls: cannot access fz/..: Permission denied
ls: cannot access fz/a: Permission denied
ls: cannot access fz/c: Permission denied
ls: cannot access fz/b: Permission denied
total 0
d????????? ? ? ? ? ? .
d????????? ? ? ? ? ? ..
-????????? ? ? ? ? ? a
-????????? ? ? ? ? ? b
-????????? ? ? ? ? ? c
$ rm fz/a
rm: cannot remove `fz/a': Permission denied
$ touch fz/d
touch: cannot touch `fz/d': Permission denied
|
基本上和只有 R 权限一样,只能获取目录里面文件的文件名,不能读、不能写、不能执行、不能获取文件属性、不能 delete/rename/create 文件。
看得出来,没有 X 的 W 没有什么作用
-WX
1
2
3
4
5
6
7
8
9
10
11
12
13
| $ sudo chmod 333 fz
$ ls -ld fz
d-wx-wx-wx 2 goodluck goodluck 4096 2014-05-12 22:19 fz
$ cat fz/a
echo aaa
$ ls -al fz/a
-rwxrwxrwx 1 goodluck goodluck 9 2014-05-12 22:38 fz/a
$ echo "bbb"> fz/b
$ cat fz/b
bbb
$ rm fz/b #success
$ touch fz/e #success
$ cd fz #success
|
只是不能获取目录中的文件名列表,如果你已经知道某个文件的名字,那么则可以读、写、执行、获取属性、delete/rename/create 都没问题。
总结一下,linux 下,目录的权限属性:
- R 读取目录中包含的文件名和文件类型
- W create/rename/delete 目录中的文件(仅在同时有 X 权限的时候生效)
- X access/search 目录中的文件