实习遇到需要检测目录的可用性, 这里记录一下Linux系统下r,w,x权限对目录和文件的意义, 以前看unix环境高级编程的时候好像看过, 不过印象不深, 这里记录一下.
首先简单介绍一下文件的权限, 在Linux下, 一切皆文件, 当然也包括目录, 这里我们说下文件, 先上个例子, 下面是我们该目录下文件的关系图:
, 然后我们用ll指令列出该目录下文件的权限, 如下图所示:
我们可以看到, 在Linux下文件的权限有10位, 第一位代表的是文件的类型, 如果是目录的话就是d,也就是英文目录的首字母, 如果只是普通文件的话就是-, 如果是其他类型文件的话还可能有其他的标志, 这里不具体介绍, 不过由于Linux下一切皆文件, 所以类型还是蛮多的, 比如有l是符号链接文件, 字符设备是c, 块设备文件是b, 其他不多介绍. 后来的几位是共9位, usr, group, all各三位, 三位分别表示rwx, 也就是所谓的读写执行权限,权限对目录的意义
- 首先要明白的是目录主要的内容是记录文件名列表和子目录列表,而不是实际存放数据的地方。
- r权限:拥有此权限表示可以读取目录结构列表,也就是说可以查看目录下的文件名和子目录名,注意:仅仅指的是名字。
- w权限:拥有此权限表示具有更改该目录结构列表的权限,总之,目录的w权限与该目录下的文件名或子目录名的变动有关,注意:指的是名字。具体如下:
- 在该目录下新建新的文件或子目录。
- 删除该目录下已经存在的文件或子目录(不论该文件或子目录的权限如何),注意:这点很重要,用户能否删除一个文件或目录,看的是该用户是否具有该文件或目录所在的目录的w权限。
- 将该目录下已经存在的文件或子目录进行重命名。
- 转移该目录内的文件或子目录的位置。
- x权限:拥有目录的x权限表示用户可以进入该目录成为工作目录,能不能进入一个目录,只与该目录的x权限有关,如果用户对于某个目录不具有x权限,则无法切换到该目录下,也就无法执行该目录下的任何命令,即使具有该目录的r权限。且如果用户对于某目录不具有x权限,则该用户不能查询该目录下的文件的内容,注意:指的是内容,如果有r 权限是可以查看该目录下的文件名列表或子目录列表的。所以要开放目录给任何人浏览时,应该至少要给与r及x权限。
- 我们来做个简单的测试来看看是不是这样, 加深一下印象, 先是正常的访问:
然后我们修改一下test目录的权限:
然后我们再查看test目录下的东西,可以发现
这个比较有趣的是我们可以看到test目录下有什么, 但是不知道这个文件的任何别的信息, 更进一步, 我们试试查看这个文件的信息,
可以看到除了文件名, 任何信息我们都无法获取到.
另外一种情况是如果有x权限没有r权限会怎么样呢, 这个情况其实很简单, 连读的权限都没有的话,我们可以是无法知道这个文件目录下有什么了, 但是注意的是我们可以进入这个目录, 如果有w权限的话, 我们也可以随意创建文件,甚至可以删除所有文件(坏笑).
这里简单总结一下, 对于目录来说, r权限指的是对目录的读权限, 注意这里的读权限是限于文件名的, 目录下文件的内容和其他相关信息都是不属于读权限管理的,写权限还是和我们之前写的那样, 如果想对目录做出改变, 比如创建新的文件目录, 删除文件或者目录, 都是受w权限控制的, 如果希望进入该目录下执行命令的话或者获得该目录下文件相关信息的话, 这就是x权限控制的了.这里其实w权限比较明了, r和x权限倒是比较容易弄混, 值得注意.
权限对文件的意义
这个比较简单明了, 因为文件是存放数据的地方, 所以权限也都是和文件相关的:- r权限:用于此权限表示可以读取此文件的实际内容。
- w权限:拥有此权限表示可以编辑、添加或者是修改该文件的内容。但是不包含删除该文件,因为由上面权限对于目录的意义得知删除文件或目录的条件是什么。
- x权限:表示该文件具有可以被系统执行的权限。文件是否能被执行就是由该权限来决定的,跟文件名没有绝对的关系。
access函数介绍
这个函数很简单, 因为我们对一个目录或者文件的访问权限也就是由我们上面看到的访问位实现的, 所以也就是将用函数实现命令行的功能而已.
这里我也是参考一个博客, 写的很清晰, 所以下面直接就贴上来, Linux c函数access函数介绍总结
到这里就差不多了, 文章简单介绍了Linux下文件权限相关的知识, 顺便熟悉了一些Linux下的指令.