详解Linux之权限理论操作结合篇

前言

在前面两次的学习中,我们学习了很多的Linux中常见的指令以及操作,相信对Linux的一些基本的操作有了一些初步的认识,今天我们将着重讲解Linux中的一些权限的相关问题

目录

Linux中的用户
Linux中的用户转换
Linux中文件的角色
文件的权限
普通文件的权限操作
目录文件的权限操作
权限掩码
粘滞位


正文

一、Linux中的用户

在学习Linux中权限的相关问题之前,首先我们要先了解Linux中会有哪些用户,Linux中的用户可以分为两类:root用户和普通用户
root用户:Linux中权力最大的用户,可以做任何的事情,权限不受约束,可以称为超级用户
普通用户:Linux中由用户自己创建的一些用户就称为普通用户,后面讲解的相关的权限约束也是针对普通用户进行展开的

二、Linux中的用户转换

当我们知道了Linux中会有root用户和普通用户之后,我们应该学会这两者应该如何进行转换,这个时候可以采用su指令

  • su -:可以转换为root用户,指令执行之后需要输入root用户的密码,即可转换为root用户(在Linux系统中,输入的密码是不会回显的,这是为了安全着想)
  • root用户转普通用户:如果原先是由普通用户转换成root用户,则可以采取回退的方法,即(Ctrl+d),一般情况的话,也可以采用**su**指令,即su 用户名即可,如:su hjt 就可以转换成hjt这个普通用户进行登录

三、Linux中文件的角色

在学习Linux中的权限之前,我们还需要学习Linux中相对于文件来说的几个重要角色:文件的拥有者(owner),所属组(grouper),其他人(other)

  • 文件的拥有者:即文件的主人,拥有文件的所有权
  • 文件的所属组:即文件的主人所在的一组,和拥有者同一组的人
  • 文件的其他人:即除了文件的拥有者和所属组之外的其他人

四、文件的权限

在Linux中,我们显示任何文件时,都会出现10个字母,如图:
在这里插入图片描述
在这10个字母中,第一个字母单独看,其他九个字母按照顺序依次分为三组,每组有三个字母
1. 第一个字母表示的是文件的类型,常见的文件类型有:

  • -:表示的是普通文件,如:源代码,可执行程序,第三方库,动静态库
  • d:表示的是目录文件
  • c:链接文件
  • p:管道文件
  • b:块设备文件,磁盘
  • c:字符设备文件

2. 其他九个字母分别为文件的拥有者(owner)所属组(grouper)和其他人(other)的权限,每一组的权限都是由三个字母(rwx)组成,并且字母的相对顺序是保持不变的,这三个字母分别为:r,w,x

  • r:表示读权限,对于文件而言一般可以采取cat,more,less进行读文件操作
  • w:表示是写权限,对于文件而言一般可以采取echo或者后面学习的各种编译器进行写入操作
  • x:表示的是可执行,一般是指可执行程序
    在这里插入图片描述

文件权限的特征

  • 约束人:不同的人访问同一个文件会受到权限的约束,比如前面说到的文件的拥有者,所属组和other,这三个角色访问文件的权限都是可以被设置的,我们可以通过对这三个人分别设置不同的权限从而来约束他们访问文件的权限
  • 具备对应的事物的属性:相应的文件必须本身具备相应的属性,当我们要执行一个文件的时候,这个文件必须首先具备可执行的属性,即x属性,如果这个文件本身就没有具备可执行的属性,那么我们再怎么设置权限,这个权限都不能被执行

思考:如何来描述一个文件的权限呢?
描述的时候应该针对人和属性展开,即人的话分为拥有者所属组和other,属性分为:rwx ,因此,我们在秒速一个文件的权限的时候应该描述什么人对这个文件具有什么样的权限

常见的文件属性
在这里插入图片描述
第一列表示的是文件的类型,其余分别表示的是拥有者所属组和other的权限,比如:这个文件的权限为:该文件是一个目录文件(d),其拥有者对该文件具有读写执行(rwx)的权限,所属组对该文件具有读和执行(rx)的操作,不具备写(w)的权限,其他人对该文件具有读和执行(rx)的权限,不具备写(w)的权限

五、文件的权限操作(重点)

知道了什么是文件的权限之后,我们需要学会对权限进行相应的操作,即学习如何修改文件的权限,对文件权限的操作可以分为:修改文件的属性,修改对应的人
1. 修改文件的属性:使用chmod指令
假如现在有一个文件名为file.txt,我们要对其文件属性做相关操作

  • 去掉文件相应的属性
    我们知道文件中有三个角色,即文件的拥有者,所属组和other,在这里,文件的拥有者我们用u表示,所属组用g表示,其他人(other)用o表示

    • chmod u-r file.txt:表示的是对file.txt这个文件的拥有者去掉读权限
      在这里插入图片描述

    • chmod g-r file.txt:表示的是对file.txt这个文件的所属组去掉读权限
      在这里插入图片描述

    • chmod o-r file.txt:表示的是对file.txt这个文件的other去掉读权限
      在这里插入图片描述

    总结:chmod的用法:chmod 角色(ugo)-权限(rwx) 文件名

  • 增加文件相应的属性

    • chmod u+r file.txt:表示的是对file.txt这个文件的拥有者增加读权限
      在这里插入图片描述

    • chmod g+r file.txt:表示的是对file.txt这个文件的所属组增加读权限
      在这里插入图片描述

    • chmod o+r file.txt:表示的是对file.txt这个文件的other增加读权限
      在这里插入图片描述

总结:chmod的用法:chmod 角色(ugo)-权限(rwx) 文件名

  • 复合写法
    chmod u-wx,g-w,o-rw file.txt:对这个文件的拥有者,所属组和other的权限同时进行操作(注意:中间是用,隔开),这个命令的意思是:对file.txt这个文件的拥有者去掉写和执行的权限,对所属组去掉写权限,对other去掉读和写的权限
    在这里插入图片描述

2. 修改文件的属性:使用chmod指令+八进制的形式

每组的权限都是由三个字母构成:分别是r,w,x,并且它们的相对顺序还是保持不变的,在每一组的r权限位置中,要么就是有读权限,即r,要么就是没有读权限即-,在写权限的位置中,要么就是有写权限,即w,要么就是没有写权限即-,在执行权限的位置中,要么就是有执行权限,即w,要么就是没有执行权限,即-,因此,这三个权限其实可以用0和1来进行表示,当有相应的权限的时候对应的位置就用1表示,如果没有对应的权限,对应的位置就用0表示

这样一来,rwx就可以表示为:111,—就可以表示为000,因此,一个角色的权限的取值范围为二进制为[000,111]换算成八进制就是[0,7],总权限(拥有者所属组和other合起来的权限)的范围就是[000,777],其中从左边开始第一个数字表示的是拥有者的权限,第二个表示的是所属组的权限,第三个数字表示的是other的权限

  • chmod 000 file.txt:将文件的属性改成000,对应的就是文件的拥有者所属组和other都没有相关的属性
    在这里插入图片描述

  • chmod 777 file.txt:将文件的属性改成777,对应的就是文件的拥有者所属组和other同时具备读写和执行等属性
    在这里插入图片描述

总结:这种方法一般需要预先确定要将文件的属性改成什么,然后通过这个属性计算出对应的八进制数字,进而就可以使用命令(chmod 属性结果 文件)进行文件属性的修改
3. 修改文件中的角色:修改文件的拥有者所属组和other
这里需要使用到两个指令**:chown和chgrp**,基本的用法就是:指令 修改结果 文件名

  • 单独修改文件的拥有者或者所属组
    • chown hjt file.txt:将文件的拥有者改成hjt
      在这里插入图片描述

    • chgrp hjt file.txt:将文件的所属组改成hjt
      在这里插入图片描述

需要注意的是以上命令可能没法正常进行,若无法正常执行,则需要在root用户下才能够正常执行,也可以在普通用户状态下在命令前加上sudo,加上sudo的作用就是让普通用户在短暂的时间内可以像root用户一样执行命令(提升权限),不受约束

  • 同时修改文件的拥有者和所属组
    • chown root:root file.txt:将file.txt文件的拥有者和所属组同时改成root用户
      在这里插入图片描述

    • chown hjt:hjt file.txt:将file.txt文件的拥有者和所属组同时改成hjt用户
      在这里插入图片描述

4.同时修改文件的拥有者所属组和other的属性权限
chmod a=r file.txt:同时给file.txt文件的拥有者所属组和other添加读属性 (a表示的是all的意思)
在这里插入图片描述

六、目录文件的权限操作

目录文件权限的常规操作和普通文件的操作基本一致,只需要将普通文件的文件名改成目录文件的名字即可,这里需要知道一个点:如果我们需要进入一个目录,这个目录必须具有可执行的权限即x权限
对于目录中的读写可执行权限的解读

  • 当一个目录只不具有读权限:可以进入这个目录,允许进行创建新文件,但是不允许查看这个目录的文件列表
  • 当一个目录只不具有写权限:可以进入这个目录,允许查看这个目录的文件列表,但是不允许在这个目录中创建新文件
  • 当一个文件同时不具有读写权限不允许在这个目录文件中创建新文件,也不允许查看这个目录中的文件列表

这里需要注意:在目录文件中,我们说目录中的文件指的是文件的属性,而不是文件内容,文件内容是否具有读写权限应该由普通文件自己的权限来进行决定
特殊情况:如果一个目录文件没有读权限,但是里面的文件具有读权限,这种情况下一般是不允许访问这个文件的,因为,我们要访问一个文件,一般是需要先找到这个文件,而我们一般是通过路径来寻找文件,现在这个目录不具有读权限,因此,理论上我们是没有办法找到这个文件的,那么我们就没有办法访问这个文件的内容了

七、权限掩码

在Linux中,通过上面的学习,我们会觉得当我们创建一个目录文件和一个普通文件的时候,默认的权限应该分别为:777和666,但是实际上的结果是如下图:
在这里插入图片描述
我们会发现,实际上的结果并不是如我们想象的那样子,这是为什么呢???
实际上是因为,在Linux存在一个东西,叫做:权限掩码(umask),那么什么是权限掩码呢???
权限掩码:创建出的目录文件和普通文件的默认文件不再是777和666了,最终的权限是默认权限去掉权限掩码中的权限之后的权限(这里需要注意:所谓的去掉权限掩码中的权限首先要创建出的目录文件或者普通文件具有权限掩码中相应的权限,否则不需要去掉)
我们可以查看当前的权限掩码,只需要使用umask指令即可
在这里插入图片描述
此时,我们可以观察到当前系统的权限掩码是022,代表的意思是:权限掩码中拥有者的权限为0(八进制)二进制为000,所属组的权限:八进制为为2,二进制为010,other的权限:八进制为2,二进制为010,因此,权限掩码组合起来的权限为000 010 010,我们知道:

  1. 我们创建的目录文件的默认权限是:111 111 111(777),现在需要去掉权限掩码中的权限:111 101 101,对应的权限用rwx表示最终结果为:rwx r-x r-x,即为最终权限
  2. 我们创建的普通文件的默认权限是:110 110 110 ,现在需要去掉权限掩码中的权限:110 100 100.用rwx进行表示的最终结果为:rw- r-- r-- 即为最终权限

上述的计算方法是其中一种文件最终权限的计算方法,还有另一种方法如下:
1. 对权限掩码进行按位取反
3. 文件的默认权限与第一步计算的结果进行&,即可得到最终结果

设置权限掩码
在这里插入图片描述

八、粘滞位

粘滞位一般是针对目录文件而言的,一般情况下,我们创建一个目录文件,任何人都可以在这个文件中创建普通文件或者其他文件,也可以通过设置自己创建的文件中的权限从而限制其他用户对该文件的权限,但是这种情况的话,当其他用户无法正常访问别人的文件的时候,可能会出现一个问题:会将别人的文件进行rm(删除),因此,为了避免这种情况的发生,我们可以通过root用户在该目录下添加粘滞位,使用的命令为:chmod +t 目录文件
在这里插入图片描述

九、总结

今天我们学习了文件中的相关权限以及如何修改文件的权限从而约束人的读写以及执行操作,修改文件的权限可以通过文件的属性进行修改,也可以通过修改文件的拥有者所属组来修改,还介绍了权限掩码的相关内容,即我们创建一个文件的时候,其默认的权限并不是就是最终的文件权限,而应该先去掉权限掩码中的权限之后的权限才是文件的最终权限,最后,还介绍了工程中可能会用到的粘滞位的概念,在一个小组中,可能会在同一个工作目录中进行创建文件和删除文件,那么为了防治别人删除其他人创建出的文件,此时应该对该目录文件在root用户下添加粘滞位

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值