1. 前言
在之前的博客中已经学习了一些相关的操作,这次来分享的是与Linux的权限有关的一些笔记。 在正片开始之前,先来讲讲外壳(shell)。
2. shell
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。
我们知道:
- 在Linux上面,大部分指令就是文件。
- 用户在执行某种功能的时候,不是直接让操作系统执行对应的指令的,而是先交给外壳程序。 这句话是什么意思呢?
实际上用户是不能直接访问操作系统的,一般在操作系统外面都会封装一层外壳程序,也就是shell程序。
最典型的外壳有两种,一种是图形化界面,另一种是命令行。有的将图形化界面直接写道操作系统里面,比如windows。 就像我们电脑在开机的时候,最后一步就是在加载图形化界面。
shell是什么呢? 介于用户和操作系统之间的软件,也就是命令解释器。 它的作用是:
- 将使用者的命令翻译给核心(kernel)处理。
- 同时,将核心的处理结果翻译给使用者。
那为什么会有shell?
- 用户不善于和操作系统(OS)之间交互。
- shell外壳的存在,可以对请求进行合法性检查,变相的保护OS。
bash不会直接执行命令,它会创建一个子进程,让子进程去执行。 这个子进程会帮用户进行命令行解释。 而真正的bash只需要等待就行。
总结: 对于大部分操作系统,在它的软件外层还有一个外壳层。这个外壳层通常进行命令行解释。 在用户和操作系统之间加一层软件层,主要将命令翻译给核心,同时将对应的操作系统执行结果翻译给用户。 其中这个外壳程序就叫做shell外壳,常见的外壳有图形化界面和命令行。
shell和bash有什么区别呢? 也就是说shell是所有外壳程序的统称,bash是具体的一款外壳程序。 命令行解释器在不同的操作系统中,有不同的种类,像sh。
3. 权限介绍
Linux下有两种用户:超级用户(root)、普通用户。
- 超级用户:可以再linux系统下做任何事情,不受限制,命令提示符是“#”。
- 普通用户:在linux下做有限的事情,普通用户的命令提示符是“$”。
3.1 什么是权限
权限就是通过一定的条件来拦住一部分人,给一部分人权利,来访问某种资源。
就和门禁和vip的道理相同。 权限的有无,就是能或者不能的问题。
3.2 权限的本质
- 权限和人有关,就像在视频网站上有的视频只能是vip才能看。
- 权限也与事物的属性有关,就像不能在视频网站什么刷题是一样的,它没有这个属性。
也就是说:权限=人+事物的属性有关
这个“人”,并不是指的具体某一个人,而是一种角色。 就像是在学校的校门的门禁一样,并不是说你叫张三就能进入学校,而是说,你是这个学校的学生,是这个角色,才能进学校。
3.3 Linux中的用户
Linux下有两种用户:超级用户(root)、普通用户。
我们大部分用的就是root。
在Linux中root是超级管理员,所以它不受权限约束。
那么普通用户怎么将自己变成超级用户呢? 我们先使用普通账号
将普通用户变成root,直接su
,这里提示要输入密码
那么这里输入哪个的密码? 我们登录的是root当然就是输入root的密码。 所有建议普通用户和root的密码不要设置成一样的。
此时就变成了root。
那么怎么退回普通用户呢? 直接ctrl+D
就变成普通用户。
普通用户变成超级用户还有一种方式就是su -
此时输入的还是root的密码,但是多了一条提示信息。
su
和su -
的区别是什么?
su
是就是直接将当前角色的身份变成root。
su -
是相当于是让root重新做登录了。
此时路径会发生变化,直接到root的家目录下面了。
但是如果我们单纯的用su,所处的路径不会发生变化。
如果要将普通用户切换为root,建议直接su就行。
如果超级管理员想变成普通用户怎么办呢?
如果想变成指定的用户,直接su+指定用户
就行。
退出直接ctrl+D就行了。
如果不想直接变成root,但想以root的身份执行一个工作该怎么做? 在创建的文件前面加sudo
这里输入的是普通用户自己的密码。 这种操作叫做指令提权。
那为什么sudo对指令进行提权的时候,输入的是普通用户自己的密码?
一般普通用户是没有权限去执行这个的,会报错。在云服务器上默认是不行的。
默认普通用户目前是无法执行sudo,在之后的学习vim,再来解决这个问题。
所以目前我们想以root的身份执行一个工作时,直接变成root就行。
3.4 Linux中文件的权限
在Linux中有三种“人”: 拥有者 所属组 other
但是我们看不见other啊? 在Linux下是有组的概念的,一般情况下自己就是一组。 other是匹配完拥有者和所属组后,剩下的不匹配的都是other了。
为什么会有所属组的概念? 举个例子;在一家公司里可能会有两组人做同时一个项目,如果这两组都在同一个服务器上做。当某一天,如果领导需要看第一组的源代码时,当放开的时候,另外一组可能会看到第一组的源代码。所以在Linux系统中就得有所属组。 当第一组组内在所属组内放开权限时候,另外一组也看不到。 所属组就是为了在多人协作的时候,更好的进行权限管理。
Linux中具体的角色是需要具体的人来扮演的。
我们会发现前边有10个字符,第一列的第一个字符,就表示文件的类型。-:表示普通文件;d:表示目录文件。
剩下的9个字,33为一组,分别对应拥有者,所属组,other。
所以说: 权限=用户角色(具体的人)+文件权限属性
对于这三个字符,所对应的位置是固定的。 没有就用-,有就对应相关那个字符。
如果有错误请指出,大家一起进步!