【Linux】权限

前言

对于linux的权限,我们要先问三个问题:

  1. 什么是权限?(是什么)
  2. 为什么要有权限?(为什么)
  3. 如何操作权限(怎么办)

首先,什么是权限?
① 权限是约束人的(某个人或某个群体)
② 目标对象本来就没有相应业务,自然所有人都没有这个权限(去腾讯视频做OJ题)
③ 权限:某些事情是否允许被谁做 文件权限 = 人 + 文件属性

我们再仔细思考一下,我们能在腾讯视频上看VIP的电影是因为我是张三或者李四么?并不是,而是因为我开了VIP,所以权限对应的并不是人,而是人扮演的角色,所以这里我们就引出了linux权限的第一个关键点,也就是文件对应的角色:

拥有者&所属组&其他人

先贴图:
在这里插入图片描述
这是linux系统下某个文件前面的拥有者(owner)和所属组(grouper)的内容,可以看到这个文件的拥有者是root,又因为当前组中只有一个人,所以所属组也是root,那么既不是拥有者又不是所属组的就是其他人。(other)

那么为什么要有所属组这个概念呢?
因为正常来说完成一个工程是需要多人合作,每个人负责某个部分的,所以有一些文件就要对组内的所有人可见,如果只有拥有者和其他人两个概念,那么要不就是只有一个人能看,要不就是所有人都能看,这是非常不合理的,因此就有了所属组这个概念。

文件属性

讲完了人的角色属性,我们再来说说文件的属性。文件属性一般包含四个,分别是类型、是否可读、是否可写和是否可执行,我们首先说说文件类型。

文件类型

在Linux系统中的文件类型和windows中的区别很大,我们知道windows系统中文件类型主要是通过文件后缀来确定的,而Linux中并不是这样,贴一张图:在这里插入图片描述
在Linux系统中,这个位置表示的是文件的类型,在图中,-表示的是普通文件(比如源代码、库文件、可执行程序、文件压缩包等等),d表示的是目录文件,这两种类型的文件是我们平常最常见的两种,除此之外,还有:

  1. c开头的:字符设备文件
  2. b开头的:块设备
  3. l开头的:链接文件
  4. p开头的:管道文件
  5. s开头的:socket文件等

file命令

通过file命令我们可以查看某个文件或者目录的类型:
在这里插入图片描述

文件权限

文件开头的这十个字符,除去第一个,还剩下九个,为什么是九个?这么巧?我们前面说过,对于一个文件来说,有三个角色,分别是拥有者、所属组和其他,而一个文件的权限又包含三个,分别是是否可读、是否可写和是否可执行,这样九个位置分别表示什么就明朗了,它们分别表示的是对应三种角色的三种操作权限

那么在上面这个图中,对于一个目录来说,拥有者和所属组的的三个权限是默认都有的,而对于其他人来说就没有写的权限,至于目录的写权限对应的是什么操作,我们后面再说;而对于一个普通文件来说,拥有者是可读写不可知性,所属组和其他人都是只可读不可写和执行,这两种文件的权限都是默认的,这个默认是如何确定的我们后面也会提到。而且每个角色的对应权限只有两种状态,要么有要么无,有的话就是对应权限的字母,没有的话就是一个“-”。

权限修改

对于一个文件来说我们可以从两个方向进行权限修改,一个是变换当前用户的身份,比如我是其他人,我把自己改成文件的拥有者,进而也就改变了我对于文件的操作权限;另一个就是在我这个身份的前提下改变我的操作权限,我们先讲讲第二个:

操作权限修改:chmod

先贴图:
在这里插入图片描述
这里我们修改的是文件拥有者的权限,所以使用到的命令为chmod u后面接权限,如果接减号和某些权限,那么就会去掉对应的权限;如果接加号和某些权限,那么就会加上对应的权限。此外还有一个命令就是 chmod a,这个命令后面加上减号或者加号以及某些权限,就会为三种用户都增加或者去掉对应的权限。

tips:比如我既是拥有者又是所属组,我在拥有者里被ban掉的权限,如果在所属组中没有被ban掉,那我可以作为所属组的角色来使用这种权限么?答案是不行。因为三种角色的判断是用if-else来判断的,而不是if-if。我们如果已经是拥有者了,那我们就只能用这个的权限了,不能再作为所属组来使用其权限。

操作权限修改:chmod之八进制实现

我们前面说过,每个角色的三个权限都是或是有或是无的,那么我们就可以用1和0来表示有无,这样每个角色的权限都可以用一位八进制数来表示,与此同时我们也可以用chmod来进行更加简便的权限修改,如图所示:
在这里插入图片描述
我们可以看到,修改之前test.c的权限是rwxr–r–,修改之后就变成了rwxrwxrwx,非常方便。

所有人权限修改:chown
chown [-cfhvR] [--help] [--version] user[:group] file...

这个能够用来改变文件的所有者,一般要在sudo命令下进行。

具体权限的限制作用

对于普通文件来说,读写执行的权限限制是很好理解的,不能读就是不可能打开看,不能写就是你不能去修改,不能执行就是字面意思。但是对于目录这里要讲一下,r权限对应在目录里能否查看文件列表,w权限对应在目录里是否可以创建新文件,而x权限则对应了是否能够打开目录。

umask

每当我们直接创建一个目录或者普通文件的时候,他们的默认权限是怎样确定的呢?对于一个目录来说,他的初始权限应该是777;对于一个普通文件来说,他的初始权限应该是666,但是我们看下面这张图:
在这里插入图片描述
对于这两个刚创建的,一个目录,一个普通文件,他们的初始权限却是755和644,这是为什么呢?

这里我们就要引入umask的概念了,umask是权限掩码,它会将某种类型的文件的默认权限去掉。我这里默认的掩码为0022,不看第一位的情况下,他就会将所属组和其他人的权限去掉。这个去掉并不是说将权限的数进行加减,而是将掩码转换为二进制之后,取反并和权限的二进制相来去掉的。

结束语

到此为止,关于linux权限的内容就结束了,希望能够对你有所帮助。如文章有不足或遗漏之处还请大家指正,笔者感激不尽;同时也欢迎大家在评论区进行讨论,一起学习,共同进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值