【Hello Linux】 Linux的权限以及Shell原理
作者:@小萌新
专栏:@Linux
作者简介:大二学生 希望能和大家一起进步!
本篇博客简介:介绍Linux的基础命令
Linux的权限以及Shell原理
- Shell的运行原理
- 权限
- Linux中权限的概念
- 如何切换用户
- 如何提升当前操作的权限
- 如何添加信任关系
- 权限管理
- 文件访问者的分类 (人)
- 文件类型和访问权限 (事务)
- 文件权限值的表示方法
- 文件访问权限的修改
- 如何修改文件的权限
- 修改文件权限的两种格式
- 如何修改文件的拥有者
- 如何修改文件的所属组
- 如何修改文件的掩码
- 目录的权限
- 粘滞位
Shell的运行原理
Linux 从广义上来理解它是一个操作系统 而从狭义上来理解它则是一个核心 (kernel)
针对Linux这个核心 程序员或商业公司们制作出各种不从的发行版本 比如说 centos retcap ubuntu kail等等
所以说我们用户在操作的时候并不是直接操作Linux kernel 而是通过kernel的外壳程序来和kernel沟通
shell是什么?
shell的中文翻译是外壳 我们一般认为它是一个命令解释器 用来连接用户和 linux kernel
为什么要设置一个shell外壳而不让用户直接来和 linux kernel沟通呢?
我们下面使用一个小故事来帮助理解一下
你(用户)是一个害羞的程序员 那shell就像媒婆 linux kernel就是让你心动的妹妹 假设她的名字叫小花 你不好意思开口向人家表白 那你就让你家人找媒婆帮你提亲 所有的事情你都直接跟媒婆沟通 由媒婆转达你的意思给小花
那么我们为什么要设置一个shell外壳的原因就很明显了
因为用户不擅长直接和 linux kernel进行沟通
同样的对于小花来说 她根本不清楚你是一个什么样的人 有了媒婆的信任背书 能够保护她的安全
所以说我们这里总结下设置shell的两点原因
- 因为用户不擅长直接和 linux kernel 沟通 所以设置shell方便用户操作
- 保护 linux kernel
shell的原理是什么
shell的原理部分涉及进程相关知识 在我们学习到相关内容后会再做解释
此外shell是对于所有外壳程序的统称 在centos中这个外壳程序是 bash
shell和bash之间的关系就像是程序员和你之间的关系 它是对于一个抽象概念的实例化
权限
Linux中权限的概念
Linux系统中有两种用户 它们分别是超级用户(以下简称root)和普通用户
- root的权限非常高 几乎可以在linux系统下做任何事情
- 普通用户可以在linux系统下做有限的事情
我们可以用命令提示符来区分这两个用户
root的命令提示符是 ‘#’
普通用户的命令提示符是 ‘$’
如何切换用户
切换用户的情况分两种
- 从root切换为普通用户
- 从普通用户切换为另外的用户(包括root)
root用户切换为普通用户只需要 su + 用户名就好了
普通用户切换为其他用户需要输入其他用户的密码
如何提升当前操作的权限
我们可以使用sudo命令来提升当前操作的权限 即使用root权限来执行当前操作
在通常情况下普通用户是没有权限去修改其他用户的密码的
但是我们这里使用了sudo命令 即这条命令是用root权限去操作的
敲完这行命令之后系统提示要我们敲出自己的密码
但是敲完之后我们发现 我们并没有被添加至信任名单当中 也就无法执行sudo操作
这个信任名单系统显然是合理的 因为如果我们不设置它 人人都能使用sudo操作 那么系统就要乱套了
那么我们应该如何添加这个信任关系呢?
如何添加信任关系
首先我们需要将我们的用户切换至超级用户 因为只有超级用户才具有这个权限
接着我们需要敲出下面的指令
vim /etc/sudoers
打开文档之后我们跳到100行左右的位置
接下来我们只要按照第一行的格式 将需要添加信任关系的用户名添加进去就好了
权限管理
文件访问者的分类 (人)
权限可以将用户分为三大类
- 文件和文件目录的所有者 : u - user
- 文件和文件目录的所有者所在的组的用户 : g - group
- 其他人 o - others
文件的访问者分类和我们上面提到的两种用户有什么分别嘛?
实际上文件的访问者是一种身份 而我们说的用户一般特指一个人
拿现实生活来比较 一个人可以是爸爸身份 可以是老师身份 也可以是学生身份
对应到这里 用户可能是文件的所有者 所属组 或者是others
为什么要设置文件的所属组
在某些大厂内部 针对同一个业务 可能有两个不同的工作室做出不同的产品来竞争这条业务线
而这两个工作室可能共用一个linux服务器
当组长创建了一个文件的时候 他可能有这样子的一个需求
想要自己和组内的人员能够看到这份文件 但是对于其他人来说不可见
很显然如果没有所属组这一概念的话 我们就无法完成这一需求了
有什么办法来区分others呢?
既不是所属组又不是所有者就是others
文件类型和访问权限 (事务)
我们离开文件单纯讨论人的权限并没有意义
文件的权限有三种
- 是否可读
- 是否可写
- 是否可执行
映射到三种不同身份上就有九种组合
那么我们怎么能看到这九种组合呢?
我们敲出ll指令 可以发现最前面有一串字符 这一串字符就代表着文件的类型和属性
这一串字符由十个字符组成 我们可以将这十个字符分为两部分
其中第一个字符为一部分 后面九个字符为一部分
如上图所示 第一个字符标识文件类型 剩下九个字符标识三种身份的三种权限是否存在
第一个字符代表文件类型 大致有以下几种 其中最前面两种尤其重要 需要记住
- -:代表普通文件
- d:代表目录
- l:代表链接文件(类似于Windows当中的快捷方式)
- b:代表块设备文件(例如硬盘、光驱等)
- p:管道文件
- c:字符设备文件
- s:套接口文件
而剩下的九个字符 三个为一组 分别代表该文件相对于其拥有者 所属组以及other是否拥有某种属性
其中各个字符的解释如下
- r 代表读权限
- w 代表写权限
- x 代表执行权限
- -符号 代表没有该权限
注意 这里的rwx顺序不能乱!!
还是以上面的图为例来分析
首先这是一个普通文件
他的所有者具有读写执行权限
他的所属组具有读写执行权限
其他人具有读和执行权限 并没有写权限
文件权限值的表示方法
文件权限的表示方法一共有两种 我们下面使用两张表来表示
字符表示法
字符表示法 | 说明 |
---|---|
r - - | 仅可读 |
- w - | 仅可写 |
- - x | 仅可执行 |
r w - | 可读可写 |
r - x | 可读可执行 |
- w x | 可写可执行 |
r w x | 可读可写可执行 |
- - - | 无权限 |
八进制数值表示法
字符表示 | 二进制 | 八进制 | 说明 |
---|---|---|---|
r - - | 100 | 4 | 仅可读 |
- w - | 010 | 2 | 仅可写 |
- - x | 001 | 1 | 仅可执行 |
r w - | 110 | 6 | 可读可写 |
r - x | 101 | 5 | 可读可执行 |
- w x | 011 | 3 | 可写可执行 |
r w x | 111 | 7 | 可读可写可执行 |
- - - | 000 | 0 | 无权限 |
文件访问权限的修改
如何修改文件的权限
我们一般在linux中使用下面的语法格式来修改文件的权限
chmod 选项 权限 文件名或目录名
这里要注意的是 只有root用户才有修改文件权限的权力 如果普通用户想要做这种操作需要使用sudo命令
修改文件权限的两种格式
格式一: 用户符号 +/-/= 权限字符
用户符号如下
- u – 拥有者
- g – 所属组
- o – 其他人
- a – 所有人
权限字符就是我们说的 rwx
下面是具体的操作示例
格式二 : 使用三位八进制数字
每一位八进制数字可以表示一个身份的三种权限
比如说 7的二进制是 111 即可以表示三种权限都存在的状态 rwx
6的二进制是110 则可以表示rw-
下面是具体的操作示例
如何修改文件的拥有者
我们一般在linux中使用下面的语法格式来修改文件的拥有者
chown 选项 用户名 文件名或目录名
这里要注意的是 只有root用户才有修改文件权限的权力 如果普通用户想要做这种操作需要使用sudo命令
而如果想要递归修改所有文件的拥有者则需要使用 -R选项
下面是使用示例
如何修改文件的所属组
我们一般在linux中使用下面的语法格式来修改文件的所属组
chgrp 选项 用户名 文件名或目录名
这里还有一种比较特殊的修改方式
就是当我们使用chown的时候 可以使用分号的方式指定两个用户 分别修改文件的拥有者和所属组
如何修改文件的掩码
我们查看新建的文件和目录 它们都有自己默认的权限
其中新建文件的默认权限是 0666
新建目录的默认权限是 0777
第一位的0我们直接忽略 后面三位实际上就对应着三种身份的rwx权限
但是我们实际上创建文件或者目录的时候缺发现这不符合我们的理论
我们发现我们创建的目录 others并没有写权限
那么这是为什么呢?
实际上这是因为权限掩码的存在
我们假设默认权限是mask 掩码是umask 那么最后的文件的权限是 mask & (~umask)
我们可以通过umask指令来查看文件的默认掩码
我们可以发现刚好符合我们新创建的文件的权限 这也验证了我们的理论
与此同时我们可以设置权限掩码
其中超级用的默认掩码是0022 普通用户的默认掩码是0002
目录的权限
对于目录来说它的可读可写可执行权限分别对应下面的内容
- 可读权限: 如果用户没有该目录的可读权限 则无法通过ls指令查看目录中的文件内容
- 可写权限: 如果用户没有该目录的可写权限 则无法通过一系列指令在目录中创建文件或删除文件
- 可执行权限: 如果用户没有该目录的可执行权限 则无法通过cd指令进入到目录当中
但是这里就会有一个问题
只要用户有当前目录的可写权限 那么它就可以删除目录内的所有文件 哪怕它没有文件的可写权限
这显然是很不合理了
于是linux中引入了一个叫做粘滞位的概念
粘滞位
它的语法格式如下
chmod +t 目录名
当一个目录被加上粘滞位之后 就算我们拥有这个目录的可写权限也无法删除了
这里我们可以发现虽然other用户具有w权限 但是无法删除目录里面的文件了
当一个目录被设置为粘滞位只有三种情况能够被删除
- 超级用户删除
- 该目录的拥有者删除
- 该文件的拥有者删除
这里最后还有一点值得注意的是
粘滞位只会影响删除 其他用户如果拥有w权限 仍然可以在该目录下创建文件
相关文章:

【Hello Linux】 Linux的权限以及Shell原理
作者:小萌新 专栏:Linux 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:介绍Linux的基础命令 Linux的权限以及Shell原理Shell的运行原理权限Linux中权限的概念如何切换用户如何提升当前操作的权限如何添加信任…...

【STM32】【HAL库】遥控关灯2 分机
相关连接 【STM32】【HAL库】遥控关灯0 概述 【STM32】【HAL库】遥控关灯1主机 【STM32】【HAL库】遥控关灯2 分机 【STM32】【HAL库】遥控关灯3 遥控器 需求 接收RF433和红外信号,根据信号内容控制舵机 硬件设计 主控采用stm32F103c6 STM32 433接收 其他接口 软件设计 接…...

代码随想录算法训练营第27天|● 93.复原IP地址 ● 78.子集 ● 90.子集II
93.复原IP地址 看完题后的思路 典型分割问题略lue略剪枝条件 sub: 1) 不是一位首字母为0 2)大于三位 3)介于0-255之间 4) 当已分割得到3个时,第四个直接从startIndex到末尾就行 代码 ArrayList<String> slist…...
Unity UI合批的问题
今天看到一个问题,主要说的是Unity中的UI资源合批的问题之前一直以为主要和UI资源在Hierarchy中的排列顺序有关,但其实这并不是最主要的,因为Unity会对同一个Canvas下的UI进行排序(注:不同Canvas下的资源是不能够合批的…...

MWORKS--系统建模与仿真
MWORKS--系统建模与仿真1 系统定义特征2 系统研究2.1 特点与原则2.2 方法百度百科归纳同元杠归纳3 系统建模与仿真3.1 系统、模型、仿真的关系3.2 系统建模4 建模方法4.1 方法4.2 一般流程4.3 目的5 仿真方法5.1 方法5.2 流程参考1 系统定义 系统是由相互作用相互依赖的若干组…...
PC端开发GUI
PC端开发GUI 一、搭建PC端环境:常规方式1、Python2、Pycharm二、搭建PC端环境:创建虚拟环境1、创建文件夹存放虚拟环境相关2、配置环境变量3、创建.ui文件4、.ui文件转成.py文件5、打包.py文件来发布.exe一、搭建PC端环境:常规方式 1、Python 注意Python版本不能超过3.9,…...

解读手机拍照的各个参数(拍照时,上面会有6个符号)
1第一个符号是闪光灯符号,如下图所示。有四种模式, 手机的闪光灯分别为关闭、自动、开启和常亮四种状态。 关闭:就是在任何情况下都不会闪光 自动:由手机来判断此时的光线强弱,若手机测光认为光线太弱,则…...
数字钥匙最新进展文章
在未来出行上,智能汽车越来越卷。 新车除了拼高精度激光雷达、堆大算力芯片、标配辅助驾驶、智能语音识别,还在车钥匙上展开了激烈角逐,越来越多的厂商开始在量产车型上搭载数字钥匙,实现无钥匙进入车内。 去年1月蔚来发布轿车E…...

如何在VMware虚拟机上安装运行Mac OS系统(详细图文教程)
一、安装前准备 虚拟机运行软件:VMware Workstation Pro,版本:16.0.0 。VMware Mac OS支持套件:Unlocker。Mac OS系统镜像。 如果VMware 在没有安装Unlocker的情况下启动,在选择客户机操作系统时没有支持Mac OS的选项…...
C++中的强制类型转换
接触过C语言的朋友都知道,C语言中也有强制类型转换,但是C语言中的强制类型转换会有一些问题,比如: int a 0x1234; char b (char)a; 上述的代码出现一个问题就是a 这个int型强制转化成b 这个char型时损失了一些精度,…...
任何人都可以学习Rasa之优秀Rasa学习资源推荐
任何人都可以学习Rasa之优秀Rasa学习资源推荐 欢迎同学们报名Gavin老师的Rasa系列课程,任何人都可以学习Rasa之优秀Rasa学习资源推荐: 1.NLP on Transformers高手之路137课 2 .Rasa 3.X 智能对话机器人案例开发硬核实战高手之路 (7大项目Ex…...

数据中心的 TCP-Delay ACK 与 RTO, RACK
TCP 对 RTO 有个最小值限制,一般限制为 MIN_RTO 200ms。之所以有这个限制,在于要适应 Delay ACK,而 Delay ACK 的意义,不多说,摘自 RFC1122: MIN_RTO 应该足够大,以覆盖 Delay ACK 的影响&…...
MySQL与常见面试题
目录 事务概述ACIDAUTOCOMMIT总结并发一致性问题丢失修改读脏数据不可重复读幻读原因和解决方法隔离级别未提交读(READ UNCOMMITTED)提交读(READ COMMITTED)可重复读(REPEATABLE READ)可串行化(SERIALIZABLE)加锁封锁粒度封锁类型读写锁意向锁...
FFmpeg进阶: 采用音频滤镜对音频进行转码
文章目录采样位数采样率声道布局码率使用FFmpeg音频滤镜进行转码参考链接很多时候为了让视频文件适应不同的播放领域,我们需要对音频文件进行转码操作,转码操作其实主要就是修改音频文件的各种参数包括:采样位数、采样率、音频布局、码率等等。下面分别介…...

C++:AVL树
AVL树的概念 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下,时间复杂度为O(N); 两位俄罗斯的数学家G.M.Ade…...

Docker中安装Oracle-12c
前言 MySQL和Oracle是开发中常用到的两个关系型数据库管理系统,接上一期内容,这一期在Docker中完成oracle-12c的安装和配置。 安装oracle-12c 1、拉取oracle-12c镜像 启动Docker Desktop后在cmd窗口中执行docker search oracle命令,搜索O…...

教你如何用Python分析出选注双色球号码
前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 数据集介绍 找从19年到现在的开奖历史数据,我们首先要把这个历史数据拿到, 拿到我们再进行做分析,分析每个号码出现的频率是多少, 哪个多&#x…...

elasticsearch映射及字段类型
查询映射关系类型上对字段的类型进行映射,我们前面知道可以通过get方法请求_mapping查询指定类型的映射关系:此语句可以查询get-together索引下的group类型的映射关系更新映射关系使用put方法可以更新类型的映射这里指定了new-events类型的字段映射关系&…...
1493围圈报数(队列)
题目描述 有n个人依次围成一圈,从第1个人开始报数,数到第m个人出列,然后从出列的下一个人开始报数,数到第m个人又出列,…,如此反复到所有的人全部出列为止。…...

【ArcGIS Pro二次开发】(2):创建一个Add-in项目
Add-In即模块加载项,是一种能够快速扩展桌面应用程序功能的全新扩展方式。 一、创建新项目 1、打开VS2002,选择创建新项目。 2、在搜索框中输入“arcgis pro”,在搜索结果中选择【ArcGIS Pro 模块加载项】创建项目,注意选择语言应…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...