[oracle@localhost ~]$ lsb_release -a
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.7 (Final)
Release: 6.7
Codename: Final
Linux中目录权限十分重要, 往往一点的疏忽会造成错误。
首先用root用户在公共可用的目录tmp下建目录a,然后再建文件b:
[root@localhost ~]# cd /tmp
[root@localhost tmp]# mkdir a
[root@localhost tmp]# chmod 700 a 赋予权限700
[root@localhost tmp]# cd a
[root@localhost a]# touch b
[root@localhost a]# chmod 700 b 赋予文件权限是700
此时切换到oracle用户,但是oracle用户不在root用户组
[root@localhost a]# su - oracle
[oracle@localhost tmp]$ id oracle
uid=501(oracle) gid=503(oinstall) 组=503(oinstall),502(dba)
[oracle@localhost ~]$ cd /tmp
[oracle@localhost tmp]$ cd a
-bash: cd: a: 权限不够
[oracle@localhost tmp]$ ls -al a 此时oracle用户不能进入目录a,和我们预想的一样
ls: 无法打开目录a: 权限不够
[oracle@localhost tmp]$ exit
logout
[root@localhost a]# cd ..
[root@localhost tmp]# chmod 704 a 此时切换到root用户并授予该目录704权限
[root@localhost tmp]# su - oracle
[oracle@localhost ~]$ cd /tmp
[oracle@localhost tmp]$ ls -al a 此时oracle用户还是对该目录没有访问权限
ls: 无法访问a/b: 权限不够
ls: 无法访问a/..: 权限不够
ls: 无法访问a/.: 权限不够
总用量 0
d????????? ? ? ? ? ? .
d????????? ? ? ? ? ? ..
但是可以罗列出该目录下文件的目录名字 ,其他内容都是?????表示
-????????? ? ? ? ? ? b
[root@localhost tmp]# chmod 706 a 切换到root授予a706权限
[root@localhost tmp]# exit
logout
[root@localhost 桌面]# su - oracle
[oracle@localhost ~]$ cd /tmp
[oracle@localhost tmp]$ ls -al a/ 此时还是无法进入目录a
ls: 无法访问a/b: 权限不够
ls: 无法访问a/..: 权限不够
ls: 无法访问a/.: 权限不够
总用量 0
d????????? ? ? ? ? ? .
d????????? ? ? ? ? ? ..
-????????? ? ? ? ? ? b
root@localhost 桌面]# cd /tmp
[root@localhost tmp]# chmod 705 a 此时授予a 705权限,可以进入该目录,说明进入该目录必须有X权限
[root@localhost tmp]# su - oracle
[oracle@localhost ~]$ ls -al /tmp/a/
总用量 8
drwx---r-x. 2 root root 4096 9月 13 13:02 .
drwxrwxrwt. 29 root root 4096 9月 13 13:22 ..
-rwx------. 1 root root 0 9月 13 13:02 b
[root@localhost tmp]# chmod 703 /tmp/a 此时授予703权限,不能进入
[root@localhost tmp]# su - oracle
[oracle@localhost ~]$ ls -al /tmp/a/
ls: 无法打开目录/tmp/a/: 权限不够
从上面总结一下:
r (read contents in directory):
表示具有读取目录结构列表的权限,所以当你具有读取一个目录的权限时,表示你可以查询该目录下的文件名数据。 所以你就可以利用 ls 这个指令将该目录的内容列表显示出来!
w (modify contents of directory):
这个可写入的权限对目录来说,是很了不起的! 因为他表示你具有异动该目录结构列表的权限,也就是底下这些权限:
建立新的文件与目录;
删除已经存在的文件与目录(不论该文件的权限为何!)
将已存在的文件或目录进行更名;
搬移该目录内的文件、目录位置。
x (access directory):
目录只是记录文件名而已,总不能拿来执行吧?没错!目录不可以被执行,目录的x代表的是用户能否进入该目录成为工作目录的用途!如果在某目录下不具有x的权限, 那么就无法切换到该目录下,也就无法执行该目录下的任何指令,即使你具有该目录的r的权限。