问题
我们常使用linux以下命令
cd 进入目录
ls 列出目录中的文件
或者直接打开目录中的文件
以上操作对于目录权限位的设置来说,是有一定迷惑性的,如表格所示
cd打开目录 | ls列出文件 | 操作目录内文件(读/写/执行) | |
r | No | No | No |
w | No | No | No |
x | Yes | No | Yes |
可以看见,当目录只有读取权限的时候,是无法用cd打开、ls列出或者操作目录内的文件的;
而事实上当目录具备读取权限时,实际上是可以读取到该目录信息,并且列出当前目录的文件的。
那么,为什么这里无法用cd进入目录呢?因为cd其实就是chdir,我们看看下面这段话对chdir行为的描述:
chdir函数用于改变当前工作目录。调用参数是指向目录的指针,调用进程需要有搜索整个目录的权限。每个进程都具有一个当前工作目录。在解析相对目录引用时,该目录是搜索路径的开始之处。如果调用进程更改了目录,则它只对该进程有效,而不能影响调用它的那个进程。在退出程序时,shell还会返回开始时的那个工作目录。 |
chdir实际上就是修改进程当前工作目录从当前目录改变到目标目录,如果目标目录不具备执行权限就无法应用chdir函数;
实际上ls无法执行,和无法操作目录内的文件,也是因为这个原因,因为不具备执行权限所以系统无法对该目录应用搜索,也就定位不到该文件,所以无法进行下一步操作,只能抛出permission denied.