权限的种类
在linux下,我们把权限分为以下三个:读、写、执行。
读 :用户 或 用户组 是否可以读取该 文件 或 目录
写 :用户 或 用户组 是否可以对该 文件 或 目录 写入数据
执行 : 加在文件上时: 用户 或 用户组 是否可以执行该 文件 加在目录上时: 用户 或 用户组 是否可以进入该 目录
权限的两个书写方式
上面是linux下三个权限的中文名,但在实际工作中并不会写中文,而是用英文或者数字来表示,以下列出了三个权限的两个表示方法。
中文 | 英文 | 数字 |
---|---|---|
读 | r | 4 |
写 | w | 2 |
执行 | x | 1 |
可以看到读、写、执行 三个权限英文在linux中分别表示为r、w、x 他们的完整写法分别是:read , write , execute 可以发现 r 和 w 都是取首字母,但 x 是取中间的字母。死记就行了,linux就这么规定的。
那么接下来的 数字 表示方法也是很简单,如果记不住可以倒过来看。 执行,写,读分别是 1,2,4 可以发现最开始是从 1 开始的,后面依次 x2
英文 和 数字 的加粗样式写法都要记住,这在后面的学习中会频繁用到。
查看权限
通常会使用linux自带的命令 ls -l 来来查看当前目录下的 文件和目录 的权限
bash
ls -l
终端会输出一大堆内容,看起来很复杂,也许我不说只能看懂有 文件和目录 的名字还有日期。
那么以下是对于输出内容的大致图解:
权限详解
在上图的红色区域就是显示了该 文件/目录 的所有权限。
看起来有很多,其实里面分为 4 块:
我们所要关注的就是 权限位,所属用户,所属用户组,至于链接数不重要。
简单说下链接数吧,不想看可以跳过:
对于文件来说: 链接数指的是在磁盘中指向该文件的个数。而该文件被创建时,就已经给它了一个索引,用于找到该文件。所以对于文件来说,它的链接数至少有一个。我们也可以通过创建 软链接 的方式 添加该文件的索引数量(链接数),如下:

对于目录来说: 链接数指的是该目录下 第一层 的所有目录数量,包括 . 和 .. ,所以一个目录下至少存在 2 个链接数,可以通过在该目录的 第一层 创建目录来增加链接数,如下:

权限位

在权限位中看起来有很多看不懂的字母,但是我们可以看到之前所熟悉的,比如r,w,x这三个 不妨把他们拆开来看,以第一行为例:
bash
drwxr-xr-x
我们把它拆成4个部分来看:
这些权限应该结合后面 所属用户 和 所属用户组 来看
就像这样:
那么这一行输出内容的权限信息换成人话就是:
目录Desktop的所属的用户是cancerai , 所属的用户组是cancerai 用户cancerai 对目录Desktop所拥有的权限有 读,写,执行 用户组cancerai 对目录Desktop所拥有的权限有 读,执行 其他用户 对目录Desktop所拥有的权限有 读,执行
注:在权限为里显示 - 表示没有该权限,权限位每组的权限都是按照读,写,执行的顺序显示的。
读,写,执行 权限详解
读: 对于文件 可以读取该文件里面的所有内容
对于目录 可以看到该目录,注意是可以在当前目录内看到该目录,而不是能进入该目录内,如果需要进入该目录需要执行权限,举个例子(目录test没有执行权限,但有读权限):
可以发现,会显示Permission denied(权限不足),当我们再加上执行权限就可以进入了:

那么还有一种情况,当一个目录没有读权限,只有执行权限呢?

会发现,虽然可以进入test目录,但是不能访问test目录下的内容。
因此我们得到一个结论: 当一个目录同时有读,执行权限 时,可以进入并访问该目录下的内容 当一个目录只有读,但没有执行权限 时,可以进入并访问该目录下的内容 当一个目录没有读,但有执行权限时,可以进入但不能访问该目录下的内容
写: 对于文件 可以对该文件进行写入操作
对于目录 可以在该目录里写入(创建)文件或目录 注: 当一个目录没有写权限,但是这个目录里的文件有写权限,那么这个文件也是可以被写入数据的。如下:

执行: 对于文件 在linux下一个文件能不能执行不是取决于后缀名,而是取决于权限中是否有 执行 权限 举个例子,下面有个名为demo.sh的文件,里面是正确的shell代码,但没有执行权限:

可以看到,虽然后缀名是sh,但是没有给执行权限还是显示Permission denied(权限不足) 当我们给它权限后就可以成功执行了:

总的来说: 在linux下不像windows中关注扩展名,在linux中关注的是权限,要有执行权限才能是该文件执行起来。
对于目录: 关于目录执行权限的,之前在读权限已经讲过了,没注意看的可以再返回去看看。
修改权限
前面已经说过了每个权限对于文件和目录的一些知识点,细心的会发现,在我上面演示的文件和目录中,权限经常在变。这就需要讲到文件/目录权限的修改,基本命令很简单,语法如下:
bash
chmod 权限码 文件/目录名
其中文件/目录名很好理解,那么权限码是什么? 还记得最开始让你们记的权限的数字表达形式吗,没错就和那个有关
中文 | 英文 | 数字 |
---|---|---|
读 | r | 4 |
写 | w | 2 |
执行 | x | 1 |
英文那一列就不用管了,主要看中文和数字的对照表 举个例子来说吧:
bash
chmod 553 file
553分别代表了用户,用户组,其他用户的权限,对照者上面的表格就能发现553的由来: 5 = 4(读) + 1(执行) 5 = 4(读) + 1(执行) 3 = 2(写) + 1(执行)
翻译成人话就是: 该文件所属的用户对该文件所拥有的权限有 读 和 执行 该文件所属的用户组对该文件所拥有的权限有 读 和 执行 其他用户对该文件所拥有的权限有 写 和 执行
这下应该能恍然大悟了 总结来说就是:每一组的权限位都是每种权限对应的数字之和。 注:当权限位显示 - 时,用0表示
举个例子: 使用 ls -l 输出以下内容:
bash
drwxr-xr-x 1 cancerai cancerai 1 Jan 16 15:58 file
那么把权限用英文转换为数字 先看用户权限: r(4) + w(2) + x(1) = 7 接着用户组权限: r(4) + 0 + x(1) = 5 最后其他用户权限: r(4) + 0 + x(1) = 5 最后得到 rwxr-xr-x 转换为权限码就是 755
以下是修改权限的一些案例,自己可以跟着练习下:
bash
把 test 文件的权限改成
用户可读,可写,可执行
用户组可读,可写,不可执行
其他用户可读,不可写,不可执行
答案:
bash
chmod 764 test
还是比较简单的。 注:之前一直都在说文件的权限修改,目录的权限修改也是一模一样的,没有任何区别。 在修改目录的权限中有一个常用的参数,-R,语法如下:
bash
chmod -R 权限码 文件/目录名
它可以遍历该目录下所有的文件和目录(包括所有子目录),把他们的权限都改成指定的权限,例如以下:

修改所属用户/用户组
修改用户或用户组就简单多了,不用管权限什么的,直接放语法:
bash
#修改所属用户
#chown全名change owner,译为修改拥有者
chown 用户名.用户组 文件/目录名
#修改所属用户组
#chgrp全名change group,译为修改组
chgrp 用户组 文件/目录名
这时候会发现,chown不仅可以修改用户还能修改用户组,没错哈 不仅chown可以修改这两个,还能只修改用户组,或者只修改用户:
bash
#只修改用户
chown 用户 文件/目录名
#只修改用户组
chown .用户组 文件/目录名
你没看错,只用chown修改用户组,但和chgrp不同的是,在chown中修改用户组需要在前面加个点 " . ",用哪个都是一样的。
以下是关于这两个命令的示例用法:
用chown只修改用户,因为我这边是修改成root,所以需要root权限才行,前面加个sudo

用chown只修改用户组

用chown只修改 用户 和 用户组

用chgrp修改用户组

总结
那么到这里所有的关于linux下管理权限常用的命令全部讲解完,如有不对的可以在评论区指出,欢迎大家提出错误 喜欢我的文章就点个赞+收藏+关注吧