Linux命令运行原理及权限管理
目录
1.引言
2.shell命令以及运行原理
3.Linux权限
3.1Linux下的用户类型
3.2Linux权限管理
3.2.1文件访问者的分类(人)
3.2.2文件类型和访问权限(事物属性)
3.2.3文件权限值的表示方法
3.2.4文件访问权限的相关设置方法
4.总结
1.引言
我们通常在Linux下输入命令从而使用操作系统去完成相应任务,那么命令运行的原理是什么?操作系统可以直接看懂命令吗?当然是不能的,接下来要介绍的是命令运行原理和权限:
首先,补充一个知识点,关于Linux的大致组成结构:
1. Linux内核(Kernel):是操作系统的核心部分,负责管理系统的资源和提供基本的功能,例如进程管理、内存管理、文件系统等。
2. 系统库(System Libraries):提供各种函数和工具供应用程序调用,包括C标准库(libc)、数学库(libm)和网络库(libnet)等。
3. 命令行解释器(Shell):是用户与操作系统之间的接口,可以通过命令行输入指令,控制操作系统的行为。
4. 实用工具(Utilities):各种命令行工具,用于完成特定的任务,例如文件管理、进程管理、网络管理等。
5. 图形用户界面(GUI):提供了更友好的用户界面,支持图像、图标和窗口等元素,用户可以通过鼠标和键盘操作来管理和使用系统。
6. 应用程序(Applications):各种应用程序,例如文档处理、网页浏览、媒体播放等,为用户提供各种功能和服务。
了解过后,重点选取Kernel内核以及命令行解释器Shell进行讲解!
2.shell命令以及运行原理
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。 而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?
从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
将使用者的命令翻译给核心(kernel)处理。同时,将核心的处理结果翻译给使用者。
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
简单点来说:我们无法直接使用操作系统,这对于用户来说太过困难,因此需要一个媒介,充当一个助手,帮助我们使用操作系统,这个助手就是Shell,也叫命令行解释器,Shell只是一个统称,具体的存在形式有bash或sh!
这里命令行解释器Shell存在的意义有两个:
- 充当命令行解释器;
- 对于用户的非法请求,直接拦截,进而保护操作系统。
再来介绍一下命令的本质:下面的演示在XShell+root用户环境下!
演示:输入ll ../usr/bin列出所有命令
可以看到,这里列出的命令本质都是可执行文件,你输入的命令其实是运行一个可执行程序,通过命令行解释器建立起与操作系统内核Kernel的联系。
3.Linux权限
3.1Linux下的用户类型
Linux下有两种用户:超级用户(root)、普通用户:
-
超级用户:可以再linux系统下做任何事情,不受限制
-
普通用户:在linux下做有限的事情。
-
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”
当我们以root身份登录服务器后,可以进入/home查看用户信息:
因为我创建了两个普通用户,所以可以看到两个用户信息。
如果要切换用户怎么办呢?
命令:su [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。
补充:
- su 直接在当前用户下切换为root
- su - 在当前用户下重新登陆root
- root切换到普通用户不需要密码
- 普通用户相互切换需要密码
- 为执行一条指令暂时提权输入 sudo whoami 但前提是当前用户要在操作系统的受信任白名单中!
3.2Linux权限管理
3.2.1文件访问者的分类(人)
- 文件和文件目录的所有者:u---User(拥有者)
- 文件和文件目录的所有者所在的组的用户:g---Group(所属组)
- 其它用户:o---Others (其他人)
3.2.2文件类型和访问权限(事物属性)
当我们输入ll 可以查看一个文件的全部信息,举例:
接下来,我们对文件名前面的所有选项进行分析:
a) 文件类型(*要记住,其他的了解即可)
- d:文件夹*
- -:普通文件*
- l:软链接(类似Windows的快捷方式)
- b:块设备文件(例如硬盘、光驱等)
- p:管道文件
- c:字符设备文件(例如屏幕等串口设备)
- s:套接口文件
b)基本权限
- 读:Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
- 写:Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动修改目录内文件的权限
- 执行:execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
- “-”表示不具有该项权限
3.2.3文件权限值的表示方法
a)字符表示方法
拿上面test.c文件举例,将九个位置三个三个分为三组,分别是:rw-,rw-,r--,依次代表拥有者,所属组,其他人权限:
- 对于拥有者,具有r(读),w(写)的权限,没有x(执行)权限;
- 对于所属组,具有r(读),w(写)的权限,没有x(执行)权限;
- 对于其他人,具有r(读)的权限,没有w(写),x(执行)权限。
b)8进制数值表示方法
同一个例子分析:权限可以用二进制转八进制代表:
1 代表拥有某个权限,0 代表没有某个权限
- 对于拥有者,二进制表示权限:110,转为八进制:6;
- 对于所属组,二进制表示权限:110,转为八进制:6;
- 对于其他人,二进制表示权限:100,转为八进制:4。
3.2.4文件访问权限的相关设置方法
a)chmod
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项:
-
R -> 递归修改目录文件的权限
-
说明:只有文件的拥有者和root才可以改变文件的权限
chmod命令权限值的格式:
① 用户表示符+/-=权限字符
- +:向权限范围增加权限代号所表示的权限
- -:向权限范围取消权限代号所表示的权限
- =:向权限范围赋予权限代号所表示的权限
用户符号:
- u:拥有者
- g:拥有者同组用
- o:其它用户
- a:所有用户
演示:
②三位8进制数字
格式:chmod xxx 文件名
演示:
b)chown
功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
演示:如果想要把test.c的拥有者由drw1改为drw,直接输入可以吗?
这里直接拒绝了操作,这是因为用户将一个文件给另一个用户需要征得另一个用户的同意,就像你将棒棒糖给小明需要征得小明的同意一样。
正确的做法是:普通用户输入sudo whoami 进行提权操作,前面提到过进行提权的用户必须是受信任的用户!root用户就可以直接更改拥有者了,相当于强制塞给了用户。
这里使用su登录root就可以正常更改拥有者了!
c)chgrp
功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:
- -R 递归修改文件或目录的所属组
演示:
这里同样拒绝了操作,这是因为更改所属组也需要sudo命令,进行提权操作!
d)umask
功能: 查看或修改文件掩码
格式:umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002。这里四位数字是固定的格式:0xxx,x就代表权限二进制表示后转为八进制对应的数字。
补充:
1.默认给普通文件的起始权限其实是666,不能默认可执行,因为不是所有文件都是可以执行的
2.默认给目录文件的起始权限其实是777,不能默认不可进入,目录创建出来当然需要进入
3.凡是在umask中出现的权限,不会在最终的文件权限中出现!所以最终权限=起始权限&(~umask)
在工作中,通常要协作完成一个文档,因此选择在/home的上一级目录下创建一个共享文档shared进行模拟,(这个文档不可以创建到任意一个用户下,因为用户的目录权限没有x,一个用户不可能进入到另一个用户目录下)。
创建完成后,登录两个用户在目录下分别创建自己的文件,如果这时作为普通用户试图去删除另一个用户的文件,我们发现是可以删除的!这不是瞎搞吗,互删还得了,这就可以引入粘滞位了:
粘滞位:给目录设置t权限,一般是共享目录,允许用户在目录进行各自文件的增删查改,只允许文件拥有者或者root能删除文件,其他人没有权限。
演示:给shared目录加上t权限后
这时就无法互删了,顺利解决了这个问题!
4.总结
权限的一些重要知识点的总结:
-
文件权限:文件权限包括读(r)、写(w)和执行(x)权限。每个文件有3个权限集,分别对应文件的所有者、所属组和其他用户。通过修改文件权限,可以控制用户对文件的访问和操作。
-
文件所有者和所属组:每个文件都有一个所有者和一个所属组。所有者是创建或拥有文件的用户,所属组是所有者所属的用户组。文件权限可以对所有者、所属组和其他用户分别进行设置。
-
目录权限:目录权限和文件权限类似,也包括读(r)、写(w)和执行(x)权限。读权限允许用户列出目录中的文件,写权限允许用户在目录中创建、删除和重命名文件,执行权限允许用户进入目录。
-
umask:umask是一个权限掩码,用于确定新创建文件和目录的默认权限。umask的值是一个三位数,表示权限的屏蔽位。通过设置umask,可以限制新创建文件和目录的默认权限。
-
chmod命令:chmod命令用于修改文件或目录的权限。可以通过符号模式(例如+rw)或数字模式(例如777)来指定权限的修改。
-
chown和chgrp命令:chown命令用于修改文件的所有者,chgrp命令用于修改文件的所属组。这些命令可以用于更改文件的访问权限。
- - - - - -————————————本文结束————————————- - - - - -