前言:shell运行原理
基础概念:
首先要明白一个概念:我们所谈论的操作系统有两种理解方式:
- 广义上的操作系统:操作系统内核 + 外壳程序(Linux shell命令行,windows 图形化界面) + 必要软件。
- 狭义上的操作系统:操作系统内核。
我们程序员谈的操作系统都是狭义上的操作系统。
但是用户如果说直接和内核进行接触,这样计算机就变得非常的困难,就不是一般的人能够使用了,这也是为什么 windows 为什么会有图形化界面,Linux 会有 shell 命令行。

详解举例解释:



shell的一个具体实现:

总结:
总结:
- 用户不擅于和操作系统内核直接进行交互,于是有了shell外壳程序(命令行解释器),shell外壳程序不经帮助用户解决了交互的问题,还间接的保护了操作系统内核,为了不影响shell程序的运行shell通常采用创建子进程的方式来进行命令行解释。
- shell外壳程序的本质,就是shell外壳程序读取用户输入的字符串命令,交给操作系统内核做处理,操作系统内核做出处理后返回给shell外壳程序进而返回给用户。
一、权限是什么
1.1、对权限的基本理解
现实生活中也是存在权限的,就像我们学校中的不同成员,都有着不同的权力,有着不同的权力就可以做着不同级别的事情,从而也使着学校有序的运行着。
权限的本质是决定能不能进行访问。
对于计算机而言,同样存在着权限。计算机中的权限是这样的:权限 = 人 + 文件属性。
1.2、针对于权限的解释
权限是要依附于人的,在Linux操作系统中的体现为root用户和普通用户。
权限的目标主体为"文件",Linux下一切皆文件。目标主体必须要具有天然的属性,即r(可读),w(可写),x(可执行)。
二、为什么要存在权限
正是因为Linux操作系统是一款多用户的操作系统,存在root和普通用户的权限是为了方便操作系统对用户进行管理。
三、Linux权限是什么
前面我们谈过,Linux操作系统中的权限是这样的:权限 = 人 + 文件属性。即主要是将用户划分为root和普通用户分别赋予不同的权限,对文件进行操作。
下面我们将基于这样的三个方向,来将Linux权限分析清楚。
- Linux操作系统的用户问题。
- Linux操作系统的角色问题。
- Linux操作系统的文件属性问题。
3.1、Linux操作系统的用户问题
3.1.1、针对于用户问题的总体理解
首先我们需要知道的一个点是:Linux作为一款多用户的操作系统,在以后的工作中,一定是会有多个人来共同使用一个Linux操作系统的。所以必然会存在用户的管理问题。
Linux解决这个问题将用户划分为root用户和普通用户,这样进行对用户的管理。
root用户被称为超级管理员(Linux中的特权用户),可以行使绝大多数的权限,几乎不受任何权限的限制。而普通用户就不想root用户一样,普通用户是受各种各样的权限限制的,如果想要行使一些权限需要与root用户进行切换等操作。
下面来谈论如何进行用户之间的切换。
3.1.2、用户之间的切换问题
- root用户和普通用户之间的转化 —— 以root用户和dyh用户为例
- root最为超级用户是转化为其他用户是不需要密码的,这便是root作为超级用户的特权之一。

- 普通用户之间的转化 —— 以dyh和zhangsan两个普通用户为例

3.1.3、普通用户如何进行短暂的提权
Linux 作为一款多人的操作系统,最佳的实践就是,每一个人都安稳的使用自己的账号,只有管理员在进行管理的时候使用 root 账号即可。
那么会存在这样一个问题:存在一个这样的问题,就是 Linux 的用户中只有 root 用户才有特殊权限,那么普通用户想要做任何超出自己权限事情难道都要切换成 root 用户吗?就比如安装软件(将可执行文件拷贝在系统目录下)。遇到这样的一个问题的话,只能管理员进行安装吗?并不是的,实际上是有一个普通用户进行提权的命令的。只需要用到 sudo 命令即可。
- 首先看一下 sudo 指令的语法和使用时存在的问题:

这里做一下声明,使用虚拟机的用户没有这个限制。
- 这是如何进行解决问题:
我们只需要通过root用户将信得过的人或者说是有合作关系的人放在这个白名单中即可。下面是执行的操作:

3.2、Linux操作系统的角色问题
3.2.1、对角色的理解
- 在现实生活中,存在着不同的角色,我们行使不同的权力就是依附于角色的。比如,在学校,我们作为学生形式学生的权力,老师行使老师的权力,教给学生知识,校长行使校长的权力,管理整个学校。这个学校能够有条不紊的运行,就是依赖于各种不同的角色来行使不同的权力。
- 在计算机中是一样的,对于Linux而言,当我们是超级管理员root时,我们可以行使自己的特权,并且可以管理普通用户,当我们是普通用户的时候就没有root用户的权力大。所以在计算机操作系统中,不同的用户也是扮演者不同的角色,被赋予不同的权力。
3.2.2、对Linux中角色的深入理解


3.3、Linux操作系统的文件属性
3.3.1、Linux文件权限的了解

3.3.2、Linux文件权限修改操作
输出一个必须知道的问题:只有拥有者和超级用户root才能修改文件权限
(1)、第一种修改文件权限的方式:

(2)、输入一个对于root特权的理解:

(3)、权限的验证只会验证一次:
为了保护文件,确保文件的安全性,有时候通常会将拥有者的权限也全部删除。在这种情况下,可以证明权限的验证只会进行一次。下面进行证明。

(4)、第二种修改文件权限的方式:
先输出一定的理论知识:

具体的使用指令:

3.3.3、对于文件可执行权限的理解
理解起来常见的三个权限,应该只有可执行权限是难以理解的。对于可执行权限的理解我做如下解释:
首先我们要明白的一点是,每个文件都可以被赋予可执行权限,并不是说这个文件被赋予可执行权限就是可执行的,原因很简单,一个文件的本质是不可执行的,即使给了他可执行的权限,依旧不可以被执行,这就有点想现实中的给你机会你也不中用。因为本质在,即使表面功夫做得再好,本质不能完成的事就是不能完成。
3.3.4、文件的类型

在刚开始学习Linux的时候,输出了这样的一个概念:Linux操作系统并不以文件后缀来判断文件的类型,而是通过最前面的那个字符来分别文件的类型。
常见的文件类型有:(Linux下一切皆文件)
- '-':代表普通文件,包括源文件,文本文件,可执行的二进制文件,动静态库。
- 'd':代表目录文件。
- 'l':链接文件。—— 软连接类似于快捷方式
- 'p':管道文件。—— 和通信相关
- 'c':字符文件(设备)。—— 终端文件,在Linux下一般事键盘显示器

- 'b':块设备文件。—— Linux下的磁盘,类似于windows下的 C/D盘 我们称为块设备
- 之所以称为块设备就是应为磁盘是允许随机读写,随机读写是以块为单位的,一个单位大小为4kb

3.4、修改"人"的权限
修改人的权限的方式:
下面的操作是使用 root 用户进行操作的

细节问题:
1、为什么没有修改 other 的命令呢?
我们可以这样理解:即除了我们认识的人其他的人都是other,所以我们只需要处理我们认识的人即可,根本没有必要处理other,所以说没有修改other的命令存在也是合理的。
2、如果不使用 root 用户进行修改会出现什么情况?这样情况的原因是什么呢?能够说明什么样的问题呢?

四、三个子问题(面试常问)
4.1、进入一个目录需要什么权限(本质对于目录和文件权限的认识)

4.2、为什么我们新建一个文件是我们看到的样子(umask掩码 + 运算)


4.3、如果没有rwx权限能否删除文件(粘滞位)





Linux权限详解与应用
2861

被折叠的 条评论
为什么被折叠?



