=Start=
缘由:
最近在通过看一些面试题来测试自己对Linux系统的了解程度,其中有一道是关于Linux下目录权限的问题的。虽然之前(对该问题)有过一定了解,但时间久了现在记得不太清楚了,所以这次刚好就温习一遍,还挺有意思的。
正文:
先说结论:在Linux中,文件的可执行权限(x)表示该文件可以被系统解释并执行;目录的可执行权限(x)表示允许用户通过cd命令将工作目录改到该目录(反过来说,如果你对目录没有可执行权限,你将无法`cd`进入该目录,且最多只能知道该目录下有哪些文件(最多知道文件名,无法知道文件的其它信息),但是无法查看/修改文件内容(即便你有该文件的读写权限))。
下面看看具体的实验过程:
##测试目录的可执行权限(x)## 结论:如果你对目录没有可执行权限,则你无法`cd`进入该目录,且最多只能知道该目录下有哪些文件(仅限于文件名,无法知道文件的其它信息),但是无法查看/修改文件内容(即便你有该文件的读写权限)。 [user@crazyof]~/test_s$ mkdir dir_without_x [user@crazyof]~/test_s$ ll drwxr-xr-x 2 user users 4.0K 6月 11 19:34 dir_without_x #新建目录的默认权限为`755` [user@crazyof]~/test_s$ echo "hi" > dir_without_x/a.txt [user@crazyof]~/test_s$ echo "hey" > dir_without_x/b.txt [user@crazyof]~/test_s$ ll dir_without_x 总用量 8.0K -rw-r--r-- 1 user users 3 6月 11 19:35 a.txt -rw-r--r-- 1 user users 4 6月 11 19:35 b.txt [user@crazyof]~/test_s$ ls -alt drwx------ 20 user users 4096 6月 11 19:35 .. drwxr-xr-x 2 user users 4096 6月 11 19:35 dir_without_x drwxr-xr-x 4 user users 4096 6月 11 19:34 . [user@crazyof]~/test_s$ chmod a-x dir_without_x #去掉所有人(除root外)对目录的可执行权限 [user@crazyof]~/test_s$ ll drw-r--r-- 2 user users 4.0K 6月 11 19:35 dir_without_x #目录的权限变为`644` [user@crazyof]~/test_s$ cd dir_without_x #无法`cd`至该目录 cd: 权限不够: dir_without_x [user@crazyof]~/test_s$ ll dir_without_x #只能列出该目录下对该用户可见的文件/目录名 ls: 无法访问dir_without_x/b.txt: 权限不够 ls: 无法访问dir_without_x/a.txt: 权限不够 总用量 0 -????????? ? ? ? ? ? a.txt -????????? ? ? ? ? ? b.txt [user@crazyof]~/test_s$ echo `date` >> dir_without_x/a.txt #无法修改该目录下的文件 bash: 权限不够: dir_without_x/a.txt [user@crazyof]~/test_s$ cat dir_without_x/a.txt #无法读取该目录下的文件 cat: dir_without_x/a.txt: 权限不够 ##测试目录的可读权限(r)## 结论:如果你对目录没有可读权限,则你无法知道该目录下有哪些文件,不过你可以通过暴力猜解来获取该目录下(对你开放了读/写权限的)文件名列表(如果某个文件对你开放了读/写权限,你还可以查看/修改该文件)。 [user@crazyof]~/test_s$ chmod a+x dir_without_x #恢复对该目录的可执行权限 [user@crazyof]~/test_s$ ll dir_without_x 总用量 8.0K -rw-r--r-- 1 user users 82 6月 11 19:38 a.txt -rw-r--r-- 1 user users 4 6月 11 19:35 b.txt [user@crazyof]~/test_s$ cat dir_without_x/a.txt hi [user@crazyof]~/test_s$ chmod a-r dir_without_x #去掉所有人(除root外)对该目录的可读权限 [user@crazyof]~/test_s$ ll dir_without_x ls: 无法打开目录dir_without_x: 权限不够 [user@crazyof]~/test_s$ cd dir_without_x #可以通过`cd`命令切换到该目录下 [user@crazyof]~/test_s/dir_without_x$ pwd /home/user/test_s/dir_without_x [user@crazyof]~/test_s/dir_without_x$ ll #但无法查看该目录下的文件/子目录 ls: 无法打开目录.: 权限不够 [user@crazyof]~/test_s/dir_without_x$ cat a.txt #如果知道具体文件名的话,可以直接指定 hi [user@crazyof]~/test_s/dir_without_x$ echo `date +%F` >> a.txt [user@crazyof]~/test_s/dir_without_x$ cat a.txt hi 2016-06-11 ##测试目录的可写权限(w)## 结论:如果你对目录没有可写权限,则你无法在该目录下新建/删除文件。 [user@crazyof]~/test_s$ chmod a+r,a-w dir_without_x #恢复对该目录的读权限,删除对该目录的写权限 [user@crazyof]~/test_s$ cd dir_without_x [user@crazyof]~/test_s/dir_without_x$ ll #可以查看该目录下有哪些文件/子目录 总用量 8.0K -rw-r--r-- 1 user users 82 6月 11 19:38 a.txt -rw-r--r-- 1 user users 4 6月 11 19:35 b.txt [user@crazyof]~/test_s/dir_without_x$ cat a.txt #可以查看该目录下有读权限的文件内容 hi [user@crazyof]~/test_s/dir_without_x$ echo "xyz" >> a.txt #可以修改该目录下有写权限的文件内容 [user@crazyof]~/test_s/dir_without_x$ ll 总用量 8.0K -rw-r--r-- 1 user users 86 6月 11 19:55 a.txt -rw-r--r-- 1 user users 4 6月 11 19:35 b.txt [user@crazyof]~/test_s/dir_without_x$ cat a.txt hi xyz [user@crazyof]~/test_s/dir_without_x$ echo "xyz" >c.txt #无法在该目录下新建文件(也无法删除已有文件) bash: 权限不够: c.txt
通过上面的命令可知,对于一个目录来说,可执行权限可是相当重要!
参考链接:
- http://zhidao.baidu.com/question/139156810.html
- http://vbird.dic.ksu.edu.tw/linux_basic/0210filepermission.php#filepermission_dir
- http://www.68idc.cn/help/server/linux/20141224149936.html
- http://blog.csdn.net/czp11210/article/details/8784648
=END=