本期我们来谈谈Linux上的权限:
在生活中我们处处都会遇到权限。权限是什么呢?
下面是对于权限的定义:
权限:一件事是否允许被“谁”做
简化一下就是:权限=人+事物属性
举个栗子:
非爱奇艺vip用户观看不了爱奇艺vip内容(这是用户不具备一定条件,属于“人”)
在爱奇艺app中我们不可以写代码(这是爱奇艺app不具备写代码的功能,属于“事物属 性”)
在Linux上的用户就属于“人”这个属性。
而Linux上的用户分为两大类:
root:root用户相当于Linux系统里的超级管理员,几乎可以干任何事情。
普通用户:普通用户则有很大的限制,例如不能修改系统关键配置文件,想查看其他用户的文件需要相应的权限,不能安装软件,甚至关机关机指令都需要以root身份执行。
Linux 中将文件的身份分为三个类别,分别是文件拥有者(owner),所属组(group),其他人(others),每个文件都可单独地对不同的身份执行不同的权限。
拥有者(owner):即文件的拥有者,文件拥有者可以对自己的文件设置权限,允许或者拒绝某些用户的访问。
所属组(group):所属组是一个组别,在同一组的用户都可以对在同一个组的文件进行访问,用户组在进行团队协作的时候会非常有用。当执行协作任务的时候,某些文件可能需要让多个用户进行共用,此时需要设置用户组的相应权限,以确保在用户组中的所有用户都有权限去访问对应的文件。
其他人(other):其他人就可以根据字面意思来理解。对于一个文件,如果该用户并不是文件的拥有者,又被排除在用户组之外,那么这个用户就被赋予了其他人的身份,因此不会享有用户拥有者和用户组成员的待遇。如果想要访问某个文件,则需要等待该文件针对其他人的权限被设置之后才能够进行访问。
我们使用普通用户登录时,有时因为权限原因需要root的身份,我们可以使用su指令来快速进行普通用户和root之间的切换:
在我们输入su指令之后,需要输入root账号的密码(密码不进行屏显),在输入完密码过后我们直接切换成了root的身份,但是可以注意到我们所在的当前路径并没有发生变化:
想要回到普通用户直接ctrl+D:
在su指令后加一个-,同样进行普通用户和root之间的切换,但是可以注意到我们所在的当前路径发生了变化(直接切换到家目录,相当于以root身份重新登陆):
想要回到普通用户直接ctrl+D:
在su指令后加上用户名是可以切换普通用户之间的切换(在普通用户身份下需要密码):
但是在root身份下就不需要密码了:
在Linux上“事物”相对应的是文件,而“事物属性”在Linux上就是文件的一系列属性。
Linux的文件属性可以有:读、写、执行。
在深入了解文件属性之前,我们需要详细谈谈文件类型和文件限权:
现在我们来查看一下当前路径下的文件:
发现除了文件名还有其他一些奇奇怪怪的东西
那么这些到底代表当前文件什么属性呢?请看下图:
对于开头的十个字符我们拿下来慢慢说:
开头十个字符的第一个字符表示的是文件类型(在Linux下不用文件后缀来区分文件类型而是用文件属性中第一列的第一个字符来区分文件类型)
下面对于开头十个字符的不同的第一个字符进行了介绍:
- |
表示普通文件,例如文本文件、可执行文件、归档文件(压缩包)等等 |
d |
表示目录 |
b(block) |
表示块设备,例如磁盘 |
c |
表示字符设备,即键盘或者显示器 |
p |
表示管道文件 |
s |
表示网络socket文件 |
Linux操作系统既然不以文件后缀来区分文件类型那我们该如何去看待Linux环境下文件名后缀呢?
自己想用就用,可以给别人看(有些指令不是以Linux环境来运行的,有时候需要文件名,例如gcc)
可以将后缀当做文件名的一部分
剩下的九个字符我们平均分成三组来看:
第二个到第四个字符表示的是拥有者的权限
第五个到第七个字符表示的是所属组的权限
第八个到第十个字符表示的是其他人(other)的权限
每组三个字符对应位置的含义是不变的:第一个字符代表是否可读,第二个字符表示是否可写,第三个字符表示是否可执行。
下面对于每个不同的字符进行了介绍:
r |
表示拥有可读权限 |
x |
表示拥有可执行权限 |
w |
表示拥有可写权限 |
- |
表示对应位置上没有权限 |
如果我是文件拥有者,那要怎么对文件的权限进行修改呢?
可以使用chmod指令来进行操作:
chomd 后面加u表示对文件的拥有者的权限进行修改
具体操作为:chmod u+想要添加的权限 要修改文件权限的文件名 或者chmod u-想要减少的权限 要修改文件权限的文件名
来看一下具体实例:
将test.c文件的拥有者增加可执行限权:
将test.c文件的拥有者减少可读和可写限权:
chomd 后面加g表示对文件的所属组的权限进行修改
具体操作为:chmod u+想要添加的权限 要修改文件权限的文件名 或者chmod u-想要减少的权限 要修改文件权限的文件名
来看一下具体实例:
将test.c文件的所属组增加可执行限权:
将test.c文件的所属组减少可执行限权:
chomd 后面加o表示对文件的其他人的权限进行修改
具体操作为:chmod u+想要添加的权限 要修改文件权限的文件名 或者chmod u-想要减少的权限 要修改文件权限的文件名
来看一下具体实例:
将test.c文件的其他人增加可写和可执行限权:
将test.c文件的其他人减少可读可写可执行权限:
我们还可以对文件的拥有者、所属组和其他人的限权一起进行进行操作:
直接上操作:
chomd 后面加a可以对文件的拥有者、所属组和其他人的某权限一起进行修改
具体操作为:chmod a+想要添加的权限 要修改文件权限的文件名 或者chmod a-想要减少的权限 要修改文件权限的文件名
将test.c文件的拥有者、所属组和其他人减少可写权限:
我们将文件的每一组三个字符是否拥有权限用0(无)和1(有)来表示:
例如
该test.c文件的每组的限权可以表示为:101 001 001
将每组的三位数(二进制)转换成八进制可以表示为:511
这样我们就可以使用3个八进制数来表示文件的拥有者、所属组和其他人的权限
具体操作为:chmod 八进制方案 要修改文件权限的文件名
例如:
我们一般使用chown指令来修改文件的拥有者
具体操作为:chown 想要修改的拥有者 要修改文件拥有者的文件名
现在我们来试试:
发现虽然我们是文件的拥有者,但要修改文件的拥有者是没有限权的(就像我们生活中将自己的物品赠与他人时,也需要得到他人的同意)
对于这种情况我们应该怎么办呢?
使用root身份强制修改!
这样就可以完成对文件拥有者的修改了
我们一般使用chgrp指令来修改文件的所属组
具体操作为:chgrp 想要修改的所属组 要修改文件所属组的文件名
现在我们来试试:
发现我们并没有权限,这时我们还得用root身份来进行对文件所属组的修改:
我们还可以使用chown指令来同时修改文件的拥有者和所属组(需要root身份)
具体操作为:chown 想要修改的拥有者:想要修改的所属组 要修改文件拥有者和所属组的文件名
我们下面拿root身份来实验一下:
此时文件的拥有者和所属组同时被修改为LHS和CC
在Linux环境下我们可以使用file指令来查看文件的属性
具体操作为:file 想要查看文件的文件名
下面来举例:
现在向test.c文件里写点内容:
现在再使用file指令来查看显示的就是文本文件了。
向test.c文件里写点代码:
现在使用file指令来查看显示的就是C源文件了。
现在我们编译一下:
最后使用file指令来查看a.out就是可执行文件了。
本期博客到这里又要大家说再见了。
在这里给大家拜个晚年,祝各位兔年大吉,一帆风顺,这一年一起努力加油呀!