Linux:shell命令运行原理和权限的概念
文章目录
- shell和kernel
- shell的概念和原理
- Linux的权限
- 文件的权限
- 文件的类型
- 文件的权限管理
- 权限的实战应用
shell和kernel
从狭义上来讲,Linux是一个操作系统,我们叫它叫kernel,意思是核心,核心的意思顾名思义,就是最关键的部分,而作为普通用户实际上是不可以使用kernel的,会借助一个外壳,这个外壳就是shell,简单来说,shell就是一层保护在kernel外面的保护层,一层外壳,那么为什么呢?为什么不能命令kernel?为什么要在外面加一层shell?这就需要更加深入理解shell了
shell的概念和原理
从技术角度来讲,shell其实就是一个翻译官,它负责把用户输入的指令输给核心,让核心进行处理,再把kernel处理的结果传递给用户,是一个中间人的作用
其实,Windows中也有类似的存在,这个东西叫做GUI:GUI是一个图形化接口,它也是起到了沟通用户和操作系统的作用,假设现在要访问一个文件夹,我们的操作通常是点击一下这个文件夹,而GUI就负责把这个命令传递给操作系统,操作系统接收到这个命令后就再传递回用户,告诉用户成功进入了
而shell对Linux来说就和这个一样,假如用户说我要
cat test.txt
那么这个shell外壳就把这个命令传递给kernel,kernel就做出回应,shell外壳再传给用户

上面所示的就是shell的作用实例
补充:
在实际应用中,shell也并非直接参与,而是创建一个一个的子进程,让子进程执行命令,而作为父进程的shell则继续进行命令行接受,防止有意外情况的发生导致外壳shell无法正常工作,后续在进程的篇章中会有更多解释
Linux的权限
Linux的权限是Linux的一大特色,理解好Linux的权限对于后面的学习是有很大意义的
首先,从大的方向上划分,Linux的用户主要有两种,root和普通用户
超级用户:可以做任何事情,只要有指令实现都可以
普通用户:局限性比较强,完成一些基本的操作
这里需要补充两个命令:
命令1:su 用户名
功能:用来切换用户

命令2:sudo root
功能:临时用root账号执行命令,sudo可以短时间内提升权力,但前提是要在sudo的名单内,否则也无法达成目的:

注意这里有一个细节,只需要用到free的密码,也就是说,不需要用root的密码也可以做到权限提升,那么这是为什么?
原因在于这样可以防止root账号的密码被滥用,实际上也是一种安全,root账号可以操控是否能使一个用户拥有root权力与否
文件的权限
Linux的权限往往是伴生于文件的,对于文件来说,权限是极其重要的,下面来进行权限和文件的理解
首先,对于一份文件,常常有下面的两类属性:
第一个是人属性,即该文件是谁写的,谁有权力看,在Linux中把人的属性分为三种,分别为拥有者,所属者和其他人
第二个是事物属性,即这份文件可以被什么人用什么方式访问,在Linux中把文件的属性分为三种,分别为可读,可写和可执行,分别对应的是rwx
文件的类型
在我们Windows中的使用中,假设我们要写一份C语言代码,我们会命名为test.c,如果要写一份文本文件,我们会写test.txt,这是因为在Windows中,一份文件的类型来源于它的后缀,后缀是什么样子的决定了这是一个什么样的文件,但在Linux中却并不是这样
在Linux中,文件的类型并不取决于后缀,而是取决于目录中的第一个字符,假设这里我们创建了一个文件test

而这里开头的 - 其实就代表了这到底是什么样子的文件
在Linux中有下面这些文件类型:
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
需要注意的是,Linux中的后缀的意义是给人看的,但如果是gcc编译器,也会对后缀做出一定的区分,但整体看Linux中并不太关心文件的后缀是什么形式
文件的权限管理
因此,这次就能观察它的前缀都代表什么意义

下面我们来一一看这些内容到底是什么意思

这里需要注意的是,第二列到第十列都属于的是拥有者,所属组,其他人的权限,而这些权限并不会因为没有就不显示,而是会以- 的形式存在,因此会出现rw- — r–等形式的存在
下面有一些对上图所示的知识的补充:
1. 用户和角色的联系?
用户和角色并没有太多的联系,一个普通用户在一个文件中是所属用户,也可能是所属用户组,root用户也可以既不是所属用户,也不是所属用户组
2. 所属组是什么?
所属组在开发项目的过程中有它的作用,一个组可以只有一个人,也可以有很多人,这些人都是该项目组的成员
3. 所属组有什么用?
简单来说,所属组就是用来给所属用户和其他人之间创建一个有部分权限的人,假设我有一份工程,我正在完善它的过程中,而此时有其他人要来看我的工作进度,我想给他开放阅读的权限,但并不想给其他人看,因此就可以让他进入我的所属组,并给他阅读的权限,这样就既达到了让他阅读的权限,又能让别人无法看到,我作为文件的所属者可以随时进行权力的增加,修改和删除,这也是Linux系统提高工作效率的表现之一
更改权限的指令
指令:chmod
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项:
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
权限的实战应用
在知道了权限的作用后,下面就进行对权限的更改方式和具体实践结果
首先,要创建这样的场景:

那么下面那么此时,test对于free的文件夹来说就是other的身份,现在创建一个test文件

根据上面所学的知道这里test文件对于拥有者来说有可读和可写的权力,对于所属组来说有可读和可写的权力,对于其他人来说有可读的权力,那么我们添加一下对于其他人访问该文件有写入的权限
chmod o+w test
于是在test用户下,他也可以用echo进行修改test中的内容
echo "hello" >> test

此时我不想让test用户再看到和写入我的文档了,我就可以对文档的other用户进行权限删减

此时如果test用户再继续访问,就会提示权限不足

相关文章:
Linux:shell命令运行原理和权限的概念
文章目录 shell和kernelshell的概念和原理Linux的权限文件的权限文件的类型文件的权限管理权限的实战应用 shell和kernel 从狭义上来讲,Linux是一个操作系统,我们叫它叫kernel,意思是核心,核心的意思顾名思义,就是最关…...
Javascript -- 数组prototype方法探究
一、数组prototype方法探究 1、不改变原数组 1. concat() 这个是数组拼接方法,可以将两个数组或多个数组拼接并返回一个包含两个数组或多个数组内容的新数组,不会改变原数组 方法里面理论上可以写入n个参数, const arr [1,2]; var str …...
android stduio 打开工程后直接报Connection refused解决
报错如下:Connection refused 解决方案: 打开gradle-wrapper.properties修改distributionUrl 将: distributionUrlhttp\://localhost/gradle/distributions/gradle-6.5-bin.zip 替换为: distributionUrlhttps\://services.gradle.org/distributions/gradle-6.5-bin.zip 错…...
搜索与图论(一)
一、DFS与BFS 1.1深度优先搜索(DFS) DFS不具有最短性 //排列数字问题 #include<iostream> using namespace std;const int N 10; int n; int path[N]; bool st[N];void dfs(int u) {if(u n){for(int i 0;i < n;i) printf("%d",path[i]);puts("&qu…...
百题千解计划【CSDN每日一练】“小明投篮,罚球线投球可得一分”(附解析+多种实现方法:Python、Java、C、C++、C#、Go、JavaScript)
这个心上人,还不知道在哪里,感觉明天就会出现。 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌟[2] 2022年度博客之星人工智能领域TOP4🌟 🏅[3] 阿里云社区特邀专家博主🏅 🏆[4] CSDN-人工智能领域优质创作者�…...
lemon框架开发笔记
lemon框架开发笔记 JudgeUtils.isBlank() 字符串为 null 或者 "" ----返回true JudgeUtils.isNotBlankAll() 字符串全部不为 null 或者 "" ----返回true JudgeUtils.isBlankAll() 字符串全部为 null 或者 "" ----返回true// isBlank 是在isEmpt…...
Spark SQL快速入门
1. 了解Spark SQL 1.1 什么是Spark SQL Spark SQL是spark的一个模块,用于处理海量的结构化数据。 1.2 Spark SQL有什么特点?优点是什么? 特点: Spark SQL支持读取和写入多种格式的数据源,包括Parquet、JSON、CSV、…...
linux+Jenkins+飞书机器人发送通知(带签名)
文章目录 如何使用在linux 上安装python 环境发送消息python脚本把脚本上传倒linux上 jenkins 上执行脚本 如何使用 自定义机器人使用指南飞书官网https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot 在linux 上安装python 环境 yum install python3 python…...
react hooks
1 useEffect(setup,dependencies) 使用object.is来比较每个依赖项和它先前的值 依赖项为空数组的effect不会在组件任何props和state发生改变时重新运行 当useEffect依赖于外部传入props对象时,容易造成死循环 需要对依赖对象进行深比较 import { isEqual } from…...
一起学数据结构(1)——复杂度
目录 1. 时间复杂度: 1.1 时间复杂度的概念: 1.2 时间复杂度的表示及计算: 1.3 较为复杂的时间复杂度的计算: 2. 空间复杂度: 2.1 空间复杂度的概念: 2.2 空间复杂度的计算: 1. 时间复杂度…...
<el-date-picker>组件选择开始时间,结束时间自动延长30min
背景:选择开始时间,结束时间自动增加30分钟,结束时间也可重新选择,如图: <el-form-item label"预约开始时间" prop"value1"><el-date-pickersize"large"v-model"ruleForm…...
eslint-webpack-plugin
说明:现在eslint已经弃用了eslint-loader,如果要安装来使用的话,会报错,烦死人 大概的报错信息如下: ERROR in ./src/index.js Module build failed (from ./node_modules/eslint-loader/dist/cjs.js): TypeError: Cannot read …...
logback中文一直是乱码,logback中文问号
logback一直是乱码 方案一加上UTF-8 方案二我这边方案一不行 在启动参数加上 -Dfile.encodingutf-8 这个竟然就可以了...
C++之文件操作
1.C文件操作 C中文件操作头文件:fstream。 文件类型:文件文件和二进制文件。 文件操作三大类: ofstream 写操作 ifstream 读操作 fstream:读写操作 文件打开方式: 标志说明ios::in只读ios::out只写,文件不存在则…...
CentOS 7.6安装 MongoDB 5.0.2
https://developer.aliyun.com/article/983777 我遇到的问题:如何以集群的方式启动,使用replSet的方式进行启动: 需要在配置文件上加上replSet的信息 port27017 #端口 bind_ip0.0.0.0 #默认是127.0.0.1 dbpath/usr/local/mongodb/data #数据…...
Windows下安装python3教程
参考:https://blog.csdn.net/kailingr/article/details/128193083 一、安装步骤图解 准备工作: 进官网https://www.python.org/下载Python 安装包,注意:Python 3.9不能在Windows 7或更早版本上使用 安装: 1.下载完之后双击该文…...
opencv-27 阈值处理 cv2.threshold()
怎么理解阈值处理? 阈值处理(Thresholding)是一种常用的图像处理技术,在机器学习和计算机视觉中经常被用于二值化图像或二分类任务。它基于设定一个阈值来将像素值进行分类,将像素值大于或小于阈值的部分分为两个不同的类别&…...
AAOS 音频焦点请求
文章目录 前言基本概念提供给应用来获取音频焦点的apiAAOS中的音频焦点管理交互矩阵duck的实现流程AAOS 测试应用kitchensink焦点相关 前言 本文章的目标是首先了解Android中音频焦点的基本概念,理解代码中相关音频焦点的使用方法。其次理解AAOS 中相关交互矩阵概念…...
订单系统中的幂等实现
一.订单提交的例子 一个订单生成并支付的过程,大致为:用户点击前端页面提交订单->后端根据此次提交信息生成订单->用户确认订单并进行支付操作->支付成功。 主要分为前端层面,后端系统层面,数据库层面。前端层面不详述…...
三个常用查询:根据用户名 / token查询用户信息+链表分页条件查询
目录 1.根据用户名或者token查询用户信息 会员信息实体类 统一状态Result类 controller层 service层及实现类 dao层 测试: 2.链表分页条件查询 会员等级实体类 封装条件类PageVo controller层 service层及实现类 dao层 Mapper.xml层 测试 vue前端参考 1.根据用户名…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
EasyRTC音视频实时通话功能在WebRTC与智能硬件整合中的应用与优势
一、WebRTC与智能硬件整合趋势 随着物联网和实时通信需求的爆发式增长,WebRTC作为开源实时通信技术,为浏览器与移动应用提供免插件的音视频通信能力,在智能硬件领域的融合应用已成必然趋势。智能硬件不再局限于单一功能,对实时…...
