Shell的运行原理以及Linux中的权限问题

news2025/1/17 14:07:54

Shell的运行原理

Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。 而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel? 从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:

  • 将使用者的命令翻译给核心(kernel)处理。
  • 同时,将核心的处理结果翻译给使用者。

对比windows GUI,我们操作windows不是直接操作windows内核,而是通过图接口形,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结

果在通过内核运行出结果,通过shell解析给用户。

  • 帮助理解:如果说你是一个闷骚且害羞的程序员,那shell就像媒婆,操作系统内核就是你们村头漂亮的 且有让你心动的MM小花。你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫 它王婆,它对应我们常使用的bash。

具体图像理解

Shell的运行原理

1)创建子进程,让子进程进行命令行解释

2)子进程出现任何问题,都不影响父进程Shell

对比到Windows中当中就是,我们每运行一个程序就是创建一个子进程,例如:登录微信,qq。而这些子进程当中任何一个进程出现问题都不会影响父进程,例如,当你的qq出现卡死(程序异常)或你的qq被关掉(程序终止),但其他子程序仍然可以运行

注意:Shell只是所有外壳程序的统称,例如在centos7当中的外壳程序名叫bash

Linux权限的概念

Linux下有两种用户:超级用户(root)、普通用户。

超级用户:可以再linux系统下做任何事情,不受限制

普通用户:在linux下做有限的事情。

超级用户的命令提示符是“#”普通用户的命令提示符是“$”

如何实现用户账号之间的切换

命令:su [用户名] 或者 su - [用户名]

功能:切换用户。

例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。

从root切换为普通用户

从普通用户切换为root

注意:

1)从普通账号切换为root账号时,指令当中你的root可以省略,因为root账号只有一个,并且su默认就是切换到root

2) 该用户也可以从一个普通用户切换为另一个普通用户,输入待切换用户的密码就可以了

3)切换用户之后,若想切回上次的用户,可通过Ctrl + D或exit实现

如何提升指令的权限

在某些情况下,我们只想提升当前指令的权限,那么没必要切换到超级用户

语法:sudo指令

功能:提升当前指令的权限

例如,我现在要以一名普通用户的身份,修改另一个普通用户的账号密码

当你输入密码之后,可能会得到以下提示

出现该提示就说明你没有被超级用户(root)添加到信用列表当中,所以该指令的权限得不到提升,一般都不会让普通用户更改普通用户的权限吧,那岂不是人人都是root,只有当你被超级用户添加到信任列表之后,你才拥有提升当前指令权限的功能

Linux权限的管理

文件访问者的分类(人)

文件和文件目录的所有者:u---User(文件拥有者)

文件和文件目录的所有者所在的组的用户:g---Group(文件所属组)

其它用户:o---Others(other)

这里注意:

1)对于某一个文件来说,拥有者,所属组和other就是由超级用户(root)和普通用户所扮演的角色

2)所有角色都要隶属于某一个组,哪怕这个组只有你一个人(这时,你可以设置你的用户名为组名)

那为什么会有这个所属组的概念?

 在某个公司中,这个公司有两个小团队在同一个Linux服务器上进行者同一个项目的开发(赛马模式),而你就是A组当中的一员,你创建了一个文件,这个文件只有你(拥有者)能看到或者其他人(other)也能看到,而你希望的是你自己和你的小组成员能看到,剩下的人看不到

于是就有了所属组这个概念,你可以将你的小组成员的权限设置为所属组,而other不可见,这样就可以使团体协作更加灵活

我们可以通过指令ll来查看某一文件或文件目录的拥有者和所属组

注:除了文件拥有者和文件所属组之外都叫other

文件类型和访问权限

文件类型和访问权限(事物属性)

权限涉及某个具体的事物来说,我们还需要讨论事物本身的属性,以及是否具有可读,可读,可执行的属性

通过指令ll我们可以看到前面有一串字符,这字符串实际上就代表着该文件的类型和属性

可以看到上图有一堆信息,那么它们分别对应什么意思呢?

rwx分别代表的意思是:

r:代表该用户可以对文件读操作

w:代表该用户可以对文件进行写操作

x:代表该文件可以执行

-: 该用户没有这个位置的权限

不同的字符代表不同的文件类型:

1)d:文件夹

2)-:普通文件

3)l:软链接(类似Windows的快捷方式)

4)b:块设备文件(例如硬盘、光驱等)

5)p:管道文件

6)c:字符设备文件(例如屏幕等串口设备)

7)s:套接口文件

注:在Linux中文件类型于文件后缀无关

文件权限值的表示方法

1) 字符表示方法

ll指令打印文件权限值时的表示方法就是字符表示法

字符表示法说明
r--仅可读
-w-仅可写
--x仅可执行
rw-可读可写
r-w可读可执行
-wx可写可执行
rwx可读可写可执行
---无权限

2)八进制表示法

字符表示法中的每一个字符所在位置所表示的结果只有两种可能,要么为真要么为假,因此我们可以将这三个字符换位三个二进制位,进而换为一个八进制为进行表示

权限符号(读,写,执行)八进制二进制
r        4100
w2010
x1001
rw6110
rx5101
wx3011
rwx7111
---0000

文件访问权限的相关设置方法

如何改变文件的访问权限

语法:chmod 选项 权限 文件名或目录名

功能:设置文件的访问权限

常用选项:

R -> 递归修改目录文件的权限 说明:只有文件的拥有者和root才可以改变文件的权限

chmod指令权限值得格式

① 用户表示符+/-/=权限字符 

+:向权限范围增加权限代号所表示的权限

-:向权限范围取消权限代号所表示的权限

=:向权限范围赋予权限代号所表示的权限

用户符号:  

u:拥有者

g:所属组

o:其它用户

a:所有用户

若要同时设置不同类用户的访问权限,则需用逗号隔开

我们还可以使用八进制的数字来设置对应的权限值

将对应的八进制转换为二进制,进而设置对应的权限值

如何改变文件的拥有者

语法:chown 选项 用户名 文件名或目录名

功能:修改文件的拥有者

常用选项:-R 递归修改目录文件的拥有者

 

注意:修改拥有者需要root账户,或者使用sudo给这条指令进行提权

使用chown指令同时修改文件的拥有者和所属组,将拥有者和所属组的用户名用冒号隔开即可

如何改变文件所属组

语法:chgrp [参数] 用户组名 文件名

功能:修改文件或目录的所属组

常用选项:-R 递归修改文件或目录的所属组

注意:修改所属组也需要进行权限提升或者使用root身份进行

如何修改文件的掩码

我们查看新创建的文件或者目录它们都有自己默认的权限

实际上,新建文件的默认权限为0666,新建目录的默认权限为0777。其中第一位的0与特殊权限有关,这里就不深究了,而后面三位就是权限的八进制数值表示方法,我们将其翻译为字符表示方法

但实际上你会发现,你所创建出来的文件和目录的权限值并不是我们所翻译出来的值原因就是创建目录或文件的时候还会受到umask的影响,假设默认权限是mask,则实际创建出来的文件权限是:mask&(~umask)

umask

功能: 查看或修改文件掩码

新建文件夹默认权限=0666

新建目录默认权限=0777

但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到 umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask

格式:umask 权限值

说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值0022普通用 户默认0002。

所以我们实际创建出来的文件和目录的权限值还需要进一步换算才能得出,首先我们将掩码的后三位八进制换算为二进制,然后对其进行按位取反

将文件和目录的默认权限值分别与它进行按位与操作

通过计算最终可以得到文件和目录真正的默认权限

新建文件:rw- rw- r--

新建目录:rwx rwx rwx  

因此我们也可以通过修改umask来设置文件的访问权限

目录的权限

对于文件来说,其可读可写可执行的属性我们都知道分别代表着什么对应的操作,那对于目录来说可读可写可执行又代表着什么呢?

1)可读权限:如果用户没有该目录的可读权限,则无法通过ls指令查看目录中的文件内容

2)可写权限:如果用户没有该目录的可写权限,则无法通过一系列指令在目录中创建文件或删除文件

3)可执行权限:如果用户没有该目录的可写执行权限,则无法通过cd指令进入到目录当中

那么这就会引发一个问题:

只要用户拥有某目录的可写权限,就可以删除该目录当中的文件而不论该用户是否拥有该文件的可写权限,这显然是不合理的

为了解决这个问题Linux中引入了粘滞位

粘滞位

语法:chmod + t 目录名

功能: 该目录加上粘滞位

当一个用户将某一个粘滞位后该目录的权限值最后一位会变成字符 “t”

此时计算另一个用户有该目录的可写权限也删除无法删除该目录下的文件

当一个目录设置了粘滞位,则该目录只能由

1)超级用户删除

2)该目录的拥有者删除

3)该文件的拥有者删除

注意:虽然目录被加上了粘滞位,但如果用户有该目录的可写权限,则不影响其在该目录下创建文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2278036.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【0x0084】HCI_Set_Min_Encryption_Key_Size命令详解

目录 一、命令概述 二、命令格式及参数 2.1 HCI_Set_Min_Encryption_Key_Size命令格式 2.2. Min_Encryption_Key_Size 三、生成事件及参数 3.1. HCI_Command_Complete 事件 3.2. Status 四、命令的执行流程 4.1. 主机端准备阶段 4.2. 命令发送阶段 4.3. 控制器接收和…

【MATLAB代码】CV和CA模型组成的IMM(滤波方式为UKF),可复制粘贴源代码

该代码实现了一维无迹卡尔曼滤波器(UKF)与交互式多模型(IMM)结合的状态估计。代码分为多个部分,主要功能包括参数定义、观测数据生成、状态估计、模型更新以及结果可视化。 文章目录 运行结果程序代码主要功能代码结构应用场景注意事项运行结果 程序代码 下方源代码直接粘…

机器视觉4-损失函数与梯度计算

机器视觉4-损失函数与梯度计算 损失函数定义公式及变量含义整体理解 多类支撑向量机损失正则项与超参数什么是超参数一、与模型参数的区别二、常见的超参数三、调参方法 什么是优化一、参数优化的重要性二、利用损失函数进行反馈三、调整分类器参数的方法 优化的目标一、最小化…

极客说|Azure AI Agent Service 结合 AutoGen/Semantic Kernel 构建多智能体解决⽅案

作者:卢建晖 - 微软高级云技术布道师 「极客说」 是一档专注 AI 时代开发者分享的专栏,我们邀请来自微软以及技术社区专家,带来最前沿的技术干货与实践经验。在这里,您将看到深度教程、最佳实践和创新解决方案。关注「极客说」&am…

sparkRDD教程之基本命令

作者:nchu可乐百香果 指导者:nchu-YoungDragon 1.前期准备 (1)从迅雷网盘上面下载这个项目,并且把scala,maven和java环境配置好 网盘链接: 分享文件:SparkRDD.zip 链接&#xf…

基于 Electron 应用的安全测试基础 — 提取和分析 .asar 文件

视频教程在我主页简介或专栏里 目录: 提取和分析 .asar 文件 4.1. .asar 文件提取工具 4.1.1. 为什么选择 NPX? 4.2. 提取过程 4.3. 提取 .asar 文件的重要性 4.3.1 关键词 4.3.2 执行关键词搜索 4.3.2.1 使用命令行工具“grep”进行关键词搜索 4.3.2…

C# 获取PDF文档中的字体信息(字体名、大小、颜色、样式等

在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响。然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文档。获取PDF中的字体信息可以解决这个问题,让我们能够更好地处理这些文件。…

Django框架:python web开发

1.环境搭建: (a)开发环境:pycharm (b)虚拟环境(可有可无,优点:使用虚拟环境可以把使用的包自动生成一个文件,其他人需要使用时可以直接选择导入包&#xff…

2024最新版JavaScript逆向爬虫教程-------基础篇之Chrome开发者工具学习

目录 一、打开Chrome DevTools的三种方式二、Elements元素面板三、Console控制台面板四、Sources面板五、Network面板六、Application面板七、逆向调试技巧 7.1 善用搜索7.2 查看请求调用堆栈7.3 XHR 请求断点7.4 Console 插桩7.5 堆内存函数调用7.6 复制Console面板输出 工…

联通用户管理系统(一)

#联通用户管理系统(一) 1.新建项目 如果你是windows的话,界面应该是如下的: 2.创建app python manage.py startapp app01一般情况下:我们是在pycharm的终端中运行上述指令,但是pychrm中为我们提供了工具…

【网络编程】基础知识

目录 网络发展史 局域网和广域网 局域网(LAN) 广域网(Wan) 光猫 路由器 网线 设备通信的要素 IP地址 基本概念 地址划分 特殊地址(后续编程使用) IP地址转换 字节序 网络模型 网络的体系结…

生产环境中常用的设计模式

生产环境中常用的设计模式 设计模式目的使用场景示例单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点- 日志记录器- 配置管理器工厂方法模式定义一个创建对象的接口,让子类决定实例化哪个类- 各种工厂类(如视频游戏工厂模式创…

C#读写ini配置文件保存设置参数

本示例使用设备:https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1b5P5rkA&ftt&id22173428704 [DllImport("kernel32", CharSet CharSet.Unicode)] public static extern uint GetPrivateProfileString(string lpAppName, stri…

C# .NetCore 使用 Flurl.Http 与 HttpClient 请求处理流式响应

AI对话接口采用流式返回&#xff1a; 1、使用Flurl处理返回的数据流 using Flurl; using Flurl.Http; [HttpPost] public async Task<string> GetLiushiChatLaw() { //1、请求参数&#xff0c;根据实际情况 YourModel request new YourModel();string allStr …

ResNet (Residual Network) - 残差网络:深度卷积神经网络的突破

一、引言 在计算机视觉领域&#xff0c;图像识别一直是一个核心且具有挑战性的任务。随着深度学习的发展&#xff0c;卷积神经网络&#xff08;CNN&#xff09;在图像识别方面取得了显著的成果。然而&#xff0c;随着网络深度的增加&#xff0c;出现了梯度消失或梯度爆炸等问题…

C#--在多线程中使用任务并行库(TPL)--15

目录 一.任务并行库的概念以及定义 二.主要特性 三.代码使用示例 1.最基础的Parallel.For使用方式 2.使用 ParallelOptions 来控制并行执行 3.Parallel.ForEach的使用(用于处理集合) 4.带有本地变量的并行循环(用于需要累加或统计的场景) 5.结合Task和Parallel的高级示…

python 寻找数据拐点

import numpy as np import cv2 from scipy.signal import find_peaks# 示例数据 y_data [365.63258786, 318.34824281, 258.28434505, 228.8913738, 190.87220447, 158.28434505, 129.53035144, 111.95846645, 111.95846645, 120.26517572, 140.71246006, 161.79872204, 180.…

论文笔记-arXiv2025-A survey about Cold Start Recommendation

论文笔记-arXiv2025-Cold-Start Recommendation towards the Era of Large Language Models: A Comprehensive Survey and Roadmap 面向大语言模型&#xff08;LLMs&#xff09;时代的冷启动推荐&#xff1a;全面调研与路线图1.引言2.前言3.内容特征3.1数据不完整学习3.1.1鲁棒…

设计模式03:行为型设计模式之策略模式的使用情景及其基础Demo

1.策略模式 好处&#xff1a;动态切换算法或行为场景&#xff1a;实现同一功能用到不同的算法时和简单工厂对比&#xff1a;简单工厂是通过参数创建对象&#xff0c;调用同一个方法&#xff08;实现细节不同&#xff09;&#xff1b;策略模式是上下文切换对象&#xff0c;调用…

飞机电气系统技术分析:数字样机技术引领创新

现代飞机正向着更安全、环保和经济的方向发展&#xff0c;飞机系统的设计日益复杂&#xff0c;对各子系统的性能和可靠性也提出了更高要求。作为飞机的重要组成部分&#xff0c;电气系统&#xff08;Electrical System&#xff0c;ES&#xff09;不仅负责为各类机载设备提供稳定…