修改权限用chmod, 命令简单本文不多说. 但是, 对于一个目录而言, 可执行的权限代表什么? 目录的写权限又是什么??? 对于一个文件而言, 重命名需要什么权限?
文件以及目录的权限控制是非常有必要的, 但是, 不要把有限的生命投入到无限的权限斗争中. 本文使用的Linux发行版本位Ubuntu18.04(虽然本文和不同发行版几乎没有任何关系, 但是写博客习惯介绍自己所使用的环境), shell为Bash, 默认以普通用户运行命令. 废话不多说, 正文开始
对于普通文件的权限
在 ls -l 的输出中, 某个记录的第一个字符是 -
对于普通文件, 有r w x三种权限, 比较简单, 但是需要注意以下几点:
- 复制文件需要r权限
- 执行脚本文件, 不仅需要x权限, 还需要r权限
- 重命名文件不需要普通文件的权限, 但是需要所在目录的w权限. 这个在后面会讲到
对于目录的权限
在 ls -l 的输出中, 某个记录的第一个字符是 d , 对应的的就是目录. 目录是一张表, 记录着其下的子目录和文件(重点!!!! 要考, 记下来!)
对于一个目录, 也有r w x三种权限, 先看下这三种权限有什么用:
- r 可以读取目录这张表, 比如读取目录下所有子目录及文件的名称
- w 更改目录这张表, 比如重命名目录下一个文件
- x 可以引用一个目录, 比如使用cd命令移动至目录
看的一头雾水? 没关系, 接下来看几个例子就明白了.
例子
现在有一个目录dire, 他的权限会随着情况不同而变化, dire下有一个权限为777的文件file1
- 当dire的权限为400即r--, 目录只可读. 可以执行 ls dire 命令, 但是不能执行 ls -l dire 命令或者 ls -s dire 命令. 我们执行执行 ls dire 命令的时候, 实际上并没有引用dire这个路径, 实际上读的是dire这个目录(即读的是dire这个表), 因为这个表中就已经记录了他的子目录和文件. 而执行 ls -l dire 命令或者 ls -s dire 命令时, 就引用了dire这个路径, 但是dire没有x权限, 所以执行不了.
- 当dire的权限为100即--x时. 我们可以通过cd命令进入到该目录. 不能使用ls命令, 原因上面说了, 因为目录没有r权限. 可以修改file1文件的内容, 修改file1文件的内容和目录的权限没有任何关系, 只和文件本身的权限有关, 但是, 当我们输入file然后按下<Tab>键想要自动补齐时, 却没有任何反应, 就像文件不存在一样, 同样, 这是因为目录没有r权限的关系.
- 当dire的权限为500即r-x时, 就只少了一个w权限, 我们是不是可以为所欲为了呢? 当然不行, 我们可以使用ls -l, cd, 修改文件内容... 但是, 不能重命名文件, 也不能新建/删除文件, 原因很简单, 如果这样做了, 就会改变表的内容, 只有目录拥有w权限才可以做上述操作.
总结
做了一张表, 仅供参考. 列出目录内文件即ls dire(读取目录), 列出目录内详情即 ls -l dire(读取并引用目录), 进入目录即 cd dire(引用目录), 创建文件(修改目录的内容), 打印目录内文件即cd dire; cat file1 或 cat dire/file1(引用目录)
写在最后: 不要把有限的生命投入到无限的权限斗争中.