【Linux】-- Shell的运行原理、Linux当中的权限
目录
Shell的运行原理
Linux权限的概念
su命令
权限
文件访问权限的相关设置方法
chmod指令
chown指令
chgrp指令
sudo命令
文件的常见问题
umask
粘滞位
关于权限的总结
Shell的运行原理
Shell运行原理 —— 外壳程序。
#问:如何理解?为什么不能直接使用核心(kernel)?

#问:那么我们的如何访问操作系统的呢?那么图形化界面 && 指令操作究竟是什么东西呢?
- 将使用者的命令翻译给核心(kernel)处理。
- 同时,将核心的处理结果翻译给使用者。

- 创建子进程,让子进程进行命令行解释。
- 子进程出现任何问题,都不影响父进程Shell。
(用户让Shell(本身就是是一个进程 )去做的事情,可能会导致去执行的进程,出现错误,导致崩溃,所以让子进程进行命令)- 知道就可以了,父子进程学习的时候深论。
帮助理解:操作系统是银行的机器,Shell是银行职员,用户是办理服务的我们。我们对于机器操作不清楚的我们,于是请了一个银行职员帮助我们,比如我们想取钱,就告诉银行职员,让其帮我们进行取1000元,于是银行职员就去操作机器了,这个时候,机器说该用户余额不足无法取款,于是告诉操作它的银行职员,于是银行职员告诉我们。(这个时候就是操作系统层拒绝我们)
然后,我们又告诉银行职员我们就是要取1000,这个时候银行职员知道余额不足,就直接拒绝了。(这个时候就是Shell层拒绝我们)这个时候也就变相的保护了机器中的余额数据(Shell变相操作系统中的数据)

外壳程序shell的意义:
- 是用户和操作系统交互的中间软件层。
- 可以在一定程度,起到一定的保护操作系统的作用。

Linux权限的概念
Linux下有两种用户:超级用户(root)、普通用户。
- 超级用户:可以再linux系统下做任何事情,不受限制。
- 普通用户:在linux下做有限的事情。
所以:root <-切换-> 普通用户,潜台词就是切换我们当前的权限。超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
su命令

切换到超级用户root后切回刚刚的普通用户:Ctrl + d / logout


由超级用户root切换到普通用户:su 用户名
root是超级用户,无需输入普通用户密码。

权限
#问:是什么?
1. 文件访问者的分类(人)
- 文件和文件目录的所有者:u---User(中国平民 法律问题)
- 文件和文件目录的所有者所在的组的用户:g---Group(不多说)
- 其它用户:o---Others (外国人)
2. 文件类型和访问权限(事物属性)

用户:可以认为是一种角色或者身份:root && 普通用户(它们可以各自扮演下面的三个)
- 拥有者:文件属于谁。
- 所属组:文件属于哪一个组。
- other:不属于上面两种的任何一个,就是other。
root、普通用户是具体的用户,上面是它们所扮演的角色。
#问:为什么会有所属组这个概念?
在某个公司当中有两个小组团队(A组、B组)在同一个Linux服务器上进行着同一款项目的开发(赛马模式),而你就是A组当中的一员。

有一天,A组的领导来找你,想看看你写的代码。如果这个时候用户只有:拥有者和other,没有所属组。这个时候想让A组领导看见代码,就需要将other的权限打开。但是这个时候,作为B组的李四,也是other,就会导致李四也有权限。所以,如果只有拥有者和other,就会导致组内的成员无法看见代码,打开other权限,也就回导致所有人都会有权限。这就是有问题的,所以Linux映入了所属组。这个时候想让同组的人看见代码,只需将和我们属于同一组人的权限打开就可以了。
文件类型:
Linux下,不以文件后缀来区分文件类型(并不代表可以不使用,在系统层虽然没有意义,但是可以给自己看)。注意:gcc、g++等是Linux上的软件,它们是认文件后缀的!
- d:文件夹
- -:普通文件
- l:软链接(类似Windows的快捷方式)
- b:块设备文件(例如硬盘、光驱等)
- p:管道文件
- c:字符设备文件(例如屏幕等串口设备)
- s:套接口文件
基本权限:
- 读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限。
- 写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限。
- 执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限。
- “—”:表示不具有该项权限。
3. 文件权限值的表示方法
- 字符表示方法
| Linux表示 | 说明 | Linux表示 | 说明 |
|---|---|---|---|
| r - - | 只读 | - w - | 仅可写 |
| - - x | 仅可执行 | r w - | 可读可写 |
| - w x | 可写和可执行 | r - x | 可读可执行 |
| r w x | 可读可写可执行 | - - - | 无权限 |
文件访问权限的相关设置方法
于是更改权限的操作就有两类:
- 改用户
- 改属性
chmod指令
1. 用户表示符+/-=权限字符
- +:向权限范围增加权限代号所表示的权限。
- -:向权限范围取消权限代号所表示的权限。
- =:向权限范围赋予权限代号所表示的权限。
- 用户符号:
- u:拥有者
- g:拥有者同组用
- o:其它用户
- a:所有用户
举例:

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

2. 八进制
权限只有:有、没有,两个状态。这也就是位图的原理,二进制表示,为0即否,为1即是。于是便有了八进制的表现。
- 8进制数值表示方法

#问:如果没有权限是什么样子?

这个时候就是,根本原因:我们虽然是这个文件的所属组,但是,我们依旧不具备任何权限,因为拥有者的权限被我们清掉了。即使是我们的文件,但是没有权限就是不行。

#问:root是超级管理员,他的权限受不受约束?

这个时候,文件的拥有者和所属组都不是root,是不是root就是other用户了?此时是不是什么权限都没有了?但是,可以发现root用户是可以进行任何操作的。

并且还能更改该文件的权限。

Note:
root用户的权限十分的大!几乎是不受权限的约束的!权限就是用来限制普通用户。所以用户的密码十分重要。
chown指令

可以发现直接使用这个指令,报错:这个操作是不被允许的。因为我们给别人东西是需要得到别人的同意的。
如何让对方同意?
很简单,强迫对方同意!直接换成root进行操作。

chgrp指令

Note:
这个时候就使用chown、chgrp指令,改变了用户,这个时候普通用户qcr就变为了other。
sudo命令
除了用root超级用户压着对方强行移动文件还可以使用sudo。
Note:
如果用户想执行sudo,提升权限,需要该用户在信任列表里面,才可以执行sudo,添加用户到信任列表是需要root身份的!
首先你得先切换到超级用户,只有超级用户才有权力将普通用户添加到信任列表。切换到超级用户后,我们使用vim打开文件sudoers进行添加。
注意:普通用户打开文件sudoers是空白什么都看不到。
添加完毕后,该用户就可以使用sudo指令,也就是拥有提升当前指令权限的能力了。

文件的常见问题
1. 目录权限。
Note:
权限对于用户,如果是拥有者和所属组,只看拥有者权限,与所属组没有关系。不是拥有者是所属组,那只看所属组权限。因为权限只会认证一次。
- 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中。
- 可读权限:如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容。
- 可写权限:如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件。
umask
Linux默认:
- 一个目录被创建,起始权限是:777
- 一个普通文件被创建,起始权限是:666

但是我们会发现,我们创建的目录、文件一个是775、664.。并不是前面所提的起始权限。
#问:为何我们创建一个目录或者文件,默认权限是你所看到的样子?
因为有umask的存在。
- 查看或修改文件掩码。
- 新建文件夹默认权限=0666,新建目录默认权限=0777,但实际上我们所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask

只需要关心umask的后三位。但第 1 个数代表的是文件所具有的特殊权限(SetUID、SetGID、Sticky BIT)此文不涉及讲解。
Note:
凡是在umask中出现的权限,都不应该在最终权限中出现。
我们实际创建出来的文件和目录的权限值并不是开始的起始权限,是还需要进行进一步umask换算才能得出 —— 掩码的的后三位八进制换算为二进制,然后对其进行按位取反。最终权限 = 起始权限 & (~umask)。


粘滞位
#问:当一个普通文件,不具备任何权限,我们是否能够删除它?

可以发现,我们可以利用读写权限阻挡别人阅读,但是我们没有办法阻挡别人删除。因为一个文件被删除并不是一个文件本身的属性,而是,文件所在的目录中用户是否具有写权限。所以也不用担心别人将我们的文件删除,因为该文件所在的目录是属于我们的。
结论:
- 删除一个文件,并不是这个文件说的算,而是这个文件所处的目录说的算。
- 该文件也处于,自己的目录下,所以也不用担心别人删除。(前提该目录就只属于你自己)
所以需要担心的是,未来我们与某一个人一起在一个目录下(特定路径下),共同在一个目录里维护一堆文件的时候,这个时候我们可以不给别人看的权限,但是我们架不住别人来删除。
于是在一个场景下:
大家所有的用户都在一个共同的路径下,对该目录具有读写执行权限。
有一个在根目录下的目录就是这样的:tmp
比如:我们创建了一个拥有者和所属组都是root的目录后,在该目录中使用两个普通用户创建普通文件。


这个时候由于test_dirw目录的拥有者和所属组即使都是root,但是放开了对于other的写权限,所以一个普通用户是可以将另一个普通用户的文件删除的。

有个最直接的方法,就是将test_dirw目录的other的写权限关闭。

这个时候,倒是解决了别人删我们的文件的问题,但是对于我们来说,我们也没有了删除的权限了,毕竟在这个拥有者与所属组都是root的目录下,作为普通用户的我们来说,我们就是other,other的写权限被我们关闭了。

因为怕别人删,反而导致了自己没法删除。
总结:
- 当多个用户共享一个目录,需要在该目录下,进行读写,创建删除文件。
- 但是自己只能删除自己的,而不能删除别人的。(w:可以互相删除)
所以便有了新的一个属性:粘滞位。
说白了就是:既能保证用户们在一个目录下,你创建你的、我创建我的,你读写你的。又能保证其他人,无法删除你的文件,你还能正常使用。

这个时候 t 是 x 的特殊情况,这个时候它的表现形式就是。

当一个目录被设置为"粘滞位" ( 用chmod + t ) ,则该目录下的文件只能由:
- 超级管理员删除。
- 该目录的所有者删除。
- 该文件的所有者删除。
Note:
粘滞位只能给目录设置,因为一个文件能否被删除本身就是目录的权限。
#问:会不会出现别的用户将粘滞位取消后,跑过来将我们的文件删除吗?
不可以,因为对于这种共享目录,一般都是拥有者和所属组都是root。而粘滞位只能够谁加的,谁来取。所以也不用担心别人讲目录的粘滞位取消掉,因为要不就是root的目录,要么就是我们的目录。
(root不用想了,它在服务器的机器上无所不能,它当然可以取消你设置的粘滞位)不是完全的无所不能,比如他删不掉一个正在被访问的文件。
关于权限的总结
- 目录的可执行权限是表示你可否在目录下执行命令。
- 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)。
- 而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限。
- 所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。
相关文章:
【Linux】-- Shell的运行原理、Linux当中的权限
目录 Shell的运行原理 Linux权限的概念 su命令 权限 文件访问权限的相关设置方法 chmod指令 chown指令 chgrp指令 sudo命令 文件的常见问题 umask 粘滞位 关于权限的总结 Shell的运行原理 Shell运行原理 —— 外壳程序。 Linux严格意义上说的是一个操作系统&…...
MOS管选型参数:VGS(th)
MOS管选型参数:VGS(th) VGS(th):开启电压(阀值电压)。当外加栅极控制电压 VGS 超过 VGS(th) 时,漏区和源区的表面反型层形成了连接的沟道。应用中,常将漏极短…...
二.线性表之顺序表
文章目录前言一.顺序表的概念及结构二.顺序表的接口实现1.顺序表的动态存储2.顺序表的初始化3.顺序表尾插#封装:扩容函数4.顺序表尾删5.顺序表头插6.顺序表头删7.顺序表查找8.顺序表在pos位置插入x9.顺序表删除pos位置的值10.顺序表销毁11.顺序表打印三.源1.Seqlist…...
ElasticSearch - SpringBoot整合ElasticSearch实现文档的增删改
文章目录1. ElasticSearch和kibana的安装和配置2. SpringBoot 项目环境搭建3. 创建索引4. 索引文档5. 更新文档6. 删除文档https://www.elastic.co/guide/en/elasticsearch/reference/current/search-your-data.htmlhttps://www.elastic.co/guide/cn/elasticsearch/guide/curre…...
JavaScript 库
文章目录JavaScript 库JavaScript 框架(库)jQueryPrototypeMooTools其他框架CDN -内容分发网络引用 jQuery使用框架JavaScript 库 JavaScript 库 - jQuery、Prototype、MooTools。 JavaScript 框架(库) JavaScript 高级程序设计…...
云解析DNS为什么要配置默认线路?
传统解析技术不会判断访客IP,而是会随机选择一个IP返回给访问者,这样就有可能造成移动用户访问电信服务器IP,北京用户访问深圳服务器IP这种跨域跨网访问的情况,产生非常大的延迟,带来很不好的访问体验。 而云解析DNS会…...
Linux命令之awk
awk是一个有强大的文本格式化能力的linux命令,早期是在Unix上实现的,linux后来也可以使用了,我们在Linux上使用的awk是gawk(GNU awk的意思) 语法 awk [option] 模式{动作} file option表示awk的可选参数,可…...
实战-缓存数据一致+binlog初始+cannel监听+数据迁移,数据一致性架构设计
前言 一. 解决缓存不命中(高并发操作击穿打挂DB的风险) 当并发量打的时候,当我们的缓存过期时,就算到数据库的比例偏小的时候,我们的请求时比较大的。那也会存在数据库崩掉的情况。解决方案想法如下(总体…...
nginx配置中proxy_pass反向代理502的bug
记录一个坑人的bug, 我今天在一台新的liunx上运行nginx来进行反向代理时候,发现怎么测都是502 我把配置全部删了从头开始配置,发现80端口正常,80端口index.html正常,反向代理转向http://127.0.0.1/也正常,…...
JavaScript 两种方案打开文件对话框
JavaScript 两种方案打开文件对话框 文章目录JavaScript 两种方案打开文件对话框一、文件对话框二、传统方案表单元素🌈三、文件系统访问API💦四、更进一步使用六、代码仓库🌐七、参考资料💘七、推荐博文🍗一、文件对话…...
Pycharm远程服务器常见问题
2023年02月23日 问题描述:Pycharm远程服务器跑代码时,不小心把Pycharm关掉了,但服务器代码还在运行? 解决办法:kill进程 先用watch -n 0.5 nvidia_smi查看进程,然后kill -9 <进程> 1、nvidia-smi…...
内容团队如何快速出稿
对于内容团队而言,每个内容选题就相当于一个小项目,它们并非简单的线性工作流,相反其复杂程度不亚于一个小型工厂。一个内容选题会涉及内容形式,选题类型等多个变量,这些变量因素组合起来就是十几种不同类型的工作流。…...
es-08索引的批量操作
索引的批量操作 批量查询和批量增删改 批量查询 GET /_mget#批量查询 GET product/_search GET /_mget {"docs": [{"_index": "product","_id": 2},{"_index": "product","_id": 3}] }GET product/_mge…...
诈金花的概率
游戏使用一副除去大小王的扑克牌,共4个花色52张牌。 1、豹子(AAA最大,222最小)。2、同花顺(AKQ最大,A23最小)。3、同花(AKQ最大,352最小)。4、顺子ÿ…...
ESP32设备驱动-MLX90393磁场传感器驱动
MLX90393磁场传感器驱动 文章目录 MLX90393磁场传感器驱动1、MLX90393介绍2、硬件准备3、软件准备4、驱动实现1、MLX90393介绍 MLX90393 磁场传感器可以在运行时重新编程为不同的模式和不同的设置。 该传感器使用 Melexis 专有的 Triaxis 技术提供与沿 XYZ 轴感应的磁通密度成…...
Java面试题-Spring框架
Spring框架 1. BeanFactory和ApplicationContext有何区别 BeanFactory是Spring最底层的接口,是IoC的核心,定义IoC的基本功能。 BeanFactory具有:延迟实例化的特性。在启动的时候,不会实例化Bean,只有有需要从容器…...
【计算机物理模拟】-力矩、转动惯量和角速度之间的关系
力矩和角速度之间的关系可以通过牛顿第二定律和角动量定理来描述。 牛顿第二定律表明,物体的加速度与作用在物体上的合力成正比,加速度的方向与合力的方向相同。而对于旋转运动的物体,其加速度可以表示为半径 rrr 乘以角加速度 α\alphaα&a…...
async和await用法理解和快速上手 , 同步任务和异步任务顺序安排和轻松理解 , js代码执行顺序表面知道
学习关键语句 : async , await 用法 await 怎么使用 同步任务和异步任务 微任务和宏任务 js中代码执行顺序 写在前面 虽然说 async 和 await 是 Promise 的语法糖 , 但是用惯了Promise 的人(我) , 还真不能超快速使用上这个语法糖 , 所以赶紧写一篇文章出来让各位了解了解这个…...
Linux下java服务占用cpu过高如何处理
Linux下java服务占用cpu过高如何处理 top命令查看进程信息 top按下shiftp,按cpu使用率排行,可见进程1932占用最高,并且是一个java服务 使用jps命令确认java服务 [rootVM-16-16-centos ~]# jps 1011 Jps 9462 yuan_back-0.0.1-SNAPSHOT.jar 1932 spigot-1.18.jar查找异常进程中…...
ros下用kinectv2运行orbslam2
目录 前提 创建工作空间 orbslam2源码配置、测试: 配置usb_cam ROS功能包 配置kinect 前提 vim 、 cmake 、 git 、 gcc 、 g 这些一般都装了 主要是Pangolin 、 OpenCV 、 Eigen的安装 18.04建议Pangolin0.5 创建工作空间 我们在主目录下创建一个catkin_…...
工业机器人嵌入式系统建模与自动化工具项目三基于RAPID指令的故障排查与项目实施
目录 一、 项目背景与研发目标 1.1 项目研发背景 1.2 项目核心目标 二、 项目全周期进展 2.1 需求分析与环境搭建阶段(完成度100%) 2.2 核心模块编码开发阶段(完成度100%) 2.3 功能调试阶段(核心故障爆发…...
AI命理工具实测:主流大模型八字紫微能力对比及避坑指南
1. AI命理新风向:当大模型碰撞传统术数 最近身边刮起了一阵“AI命理”的热潮:做开发的朋友电脑里存着排盘工具包,运营岗的同事午休时在研究紫微斗数星曜含义,就连开策划会的间隙,都有人拿着AI输出的六爻结果讨论项目走…...
【数据结构】红黑树(Red-Black Tree)
前言在上一篇博客中,我们学习了 AVL 树,为了保持绝对的平衡,它在插入和删除时会疯狂地进行左旋和右旋。但在现代的Java集合框架中(如 TreeMap、TreeSet,以及 Java 8 之后的 HashMap),并没有选择…...
效率提升:基于快马平台为dc=y103pc=类参数快速打造调试工具
效率提升:基于快马平台为dcy103&pc类参数快速打造调试工具 在日常开发中,我们经常需要处理各种URL参数,尤其是类似"dcy103&pctest"这样的查询字符串。手动解析和修改这些参数不仅效率低下,还容易出错。最近我在…...
FreeRTOS实战:如何用TIM2定时器精准统计任务运行时间(附完整代码)
FreeRTOS任务性能调优实战:基于硬件定时器的精准统计与优化 在嵌入式系统开发中,任务执行时间的精确测量是性能调优的基础。想象一下,当你发现系统响应变慢时,如何快速定位哪个任务消耗了过多CPU资源?或者当系统出现偶…...
基于GOOSE - Transformer - LSTM的数据回归预测探索
基于GOOSE-Transformer-LSTM的数据回归预测 模型结合Transformer的全局注意力机制和LSTM的短期记忆及序列处理能力 首先,采用Transformer自注意力机制捕捉数据的全局依赖性,并输出一个经过全局上下文编码的表示;然后,采用2024年最…...
AutoSAR从入门到精通:构建标准化汽车软件架构的完整指南
1. 为什么汽车软件需要AutoSAR? 十年前我刚入行汽车电子时,每个OEM厂商的ECU软件都是独立开发的"黑盒子"。同一款车窗控制功能,在德系、日系、美系车型上要用完全不同的代码实现。更痛苦的是,当需要升级ADAS功能时&…...
INNISO1接口模块
INNIS01 接口模块INNIS01 是一款应用于工业自动化控制系统中的接口模块,主要用于实现控制系统内部或与外部设备之间的信号连接与数据交互,属于系统中的通信与接口扩展单元。一、基本概述INNIS01 接口模块通常用于连接控制器与现场设备或其他功能模块&…...
数据仓库核心建模:星型模型与雪花模型全面对比与实战选择
数据仓库核心建模:星型模型与雪花模型全面对比与实战选择一、引言二、定义:什么是星型模型?什么是雪花模型?2.1 星型模型:定义2.2 雪花模型:定义三、结构流程图:直观对比两种模型3.1 星型模型流…...
保姆级教程:在PX4 SITL仿真中为Iris无人机挂载Kinect、RPLidar和FPV摄像头
PX4仿真环境多传感器集成实战:从零搭建SLAM无人机开发平台 无人机仿真开发中最令人头疼的,莫过于将各类传感器完美集成到飞行平台上。我曾花了整整两周时间调试Kinect和RPLidar在Gazebo中的兼容性问题,直到找到这套经过验证的解决方案。本文将…...




