二、Linux中权限、shell命令及运行原理
shell命令及运行原理
我们使用Linux时,并不是直接访问操作系统,为什么不是直接访问操作系统呢?
如果用户直接访问操作系统,不仅使用难度大,而且不安全,容易把系统文件损坏。
那么我们通常是如何访问操作系统的呢?
我们一般是通过shell外壳程序来访问操作系统的。(图形化界面和指令操作都是操作系统提供的一种外壳程序)
shell外壳的主要功能:
1.将用户的命令进行解析,翻译给操作系统来处理
2.将操作系统的处理结果通过内核进行解析、然后翻译给使用者。
(外壳程序做命令行解析并不是自己做,它主要是接受用户的需求,通过派生子进程的方式,让子进程进行命令行解析以及程序的相关执行。)
简单来说,shell是一种命令行解释器
有时shell会在操作系统不知情的情况下,直接拒绝用户的严重非法请求,以此来保护操作系统。有时,当shell被我们强制要求做一些自己办不成的事,它仍会去尝试。
操作系统有权利拒绝我们做一些指令(例如我们没权限却仍要执行某些操作)。
在Linux中我们主要是使用命令行操作,在Windows中我们主要是使用图形化界面。
我,银行卡,ATM机
我:用户
银行卡:shell外壳程序
ATM机:操作系统
外壳程序(操作系统外壳)存在的意义:
1.做用户与操作系统交互的中间软件层(交互)
2.可以在一定程度起到保护操作系统的作用(不一定是直接保护)
echo $BASH 查看外壳
媒婆:shell
王婆:bash
bash是shell的一种。shell是对bash的统称。
如花:操作系统
张三:用户
王婆:shell外壳程序
权限
Linux是一个多用户的操作系统,可以同时存在多个用户。
root:只有一个,具有Linux下的最高权限
普通用户:可以有多个,但要受权限的约束
权限的核心:用户类别+事物(文件)属性
权限分为对人操作、对角色和文件操作
权限=人+事物属性(r读w写x执行)事物的属性决定其相关权限。
文件类型及权限 用户的拥有者/所属组/other 文件大小 创建/最近修改时间 文件名
1表示为链接文件。
Linux中,不以文件后缀来区分文件类型
文件类型有:
d:目录
-:普通文件
p:管道文件
b:块设备。最典型的块设备就是磁盘设备
c:字符设备。最典型的字符设备就是键盘或显示器
gcc不是Linux系统,它是Linux上的一个软件,它对后缀是有要求的
人:root或其他被添加的用户
拥有者:文件属于谁
所属组:文件属于哪一个组
other:不属于上面两种的任何一个,就是other
rwx分别表示权限读、写、执行
那么如何改权限呢?
改人或改属性都可以。
1.改属性
u/g/o/a:拥有者/所属组/other/全部
chmod u/g/o/a +/- r/w/x filename
即使删除了拥有者的所有权限,拥有者照样可以给自己对该文件加权限。
2.改拥有者、所属组
chown、chgrp
进入一个目录,需要什么权限?x
查看目录下面的文件列表:r
要在目录下创建文件或目录:w
需要超级用户才能直接改拥有者和所属组
Linux默认:一个目录被创建,起始权限是777,一个普通文件被创建,起始权限是666
umask是权限掩码,凡是在umask中出现的权限,都不应该在最终权限中出现。umask最开始那个0先不谈
最终权限=起始权限&(~umask)
如果别人在我的目录下创建了文件,即使我们没有该文件的任何权限(即我们不能对它读写执行),但我们还是可以删掉它的。
我们设置权限用来限制互相之间的读、写、执行,但是我们限制不了别人删除文件。因为这不取决于文件的属性,而是取决于该文件所在目录对于该用户的权限。我们只要将目录对于他们的权限去掉,就可以不用担心别人删掉我们的文件了。
所以我们担心的是与别人在系统某一特定路径特定目录里共同维护文件时,发生互相删除的事情。这种情况下,我们虽然可以不让别人看,但是阻止不了别人删我们的文件。(即大家所有用户都在一个共同的路径下,且对该目录都具有读写执行权限的情况。)
系统中的tmp目录就是系统中存在的所有用户共享的目录,几乎包含所有用户形成的临时文件
我们想要实现有多个用户共享一个目录,且需要在该目录下进行读、写、创建、删除文件的情况,只能让他们自己删除自己的文件,不能删除别人的文件,使用粘滞位就可以。
最后一位为t,这个t是x的一种特殊情况。设置了之后,就只能自己删除自己的文件了。
注意,粘滞位只能给目录设置,且其他用户是不能去掉你的目录的粘滞位的。粘滞位一般是谁设置,谁取消(root)
当一个目录被设置为粘滞位,则该目录下的文件只能由
1.超级管理员删除
2.该目录的所有者删除
3.该文件的所有者删除
进入一个目录,需要什么权限?x
查看目录下面的文件列表:r
要在目录下创建文件或目录:w
写一个简易的shell
第十九节1:45:00-2:48:00 + 第二十节
为什么要程序替换?
程序替换和应用场景有关,我们有时候必须要求子进程执行新的程序
(第二十节 0:00:00 - 2:18:00 一段很重要的复习)
复习
myshell的优化
shell的环境变量是从哪来的呢?环境变量是写在配置文件中的,shell启动的时候,通过读取配置文件来获得起始环境变量
相关文章:
二、Linux中权限、shell命令及运行原理
shell命令及运行原理 我们使用Linux时,并不是直接访问操作系统,为什么不是直接访问操作系统呢? 如果用户直接访问操作系统,不仅使用难度大,而且不安全,容易把系统文件损坏。 那么我们通常是如何访问操作系统…...
【RabbitMQ上手——单实例安装5种简单模式实现通讯过程】
【RabbitMQ入门-单实例安装&5种简单模式实现通讯过程】 一、环境说明二、安装RabbitMQ三、用户权限及Virtual Host设置四、5种简单模式实现通讯过程的实现五、小结 一、环境说明 安装环境:虚拟机VMWare Centos7.6 Maven3.6.3 JDK1.8RabbitMQ版本:…...
python+pytest接口自动化之HTTP协议基础
HTTP协议简介 HTTP 即 HyperText Transfer Protocol(超文本传输协议),是互联网上应用最为广泛的一种网络协议。所有的 WWW 文件都必须遵守这个标准。 设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。HTTP 协议在 OSI 模型…...
【技巧】如何保护PowerPoint不被改动?
PPT,也就是PowerPoint,是很多小伙伴在工作生活中经常用到的图形演示文稿软件。 做好PPT后,担心自己不小心改动了或者不想他人随意更改,我们可以如何保护PPT呢?下面小编就来分享两个常用的方法: 1. 将PPT改…...
【APITable】教程:创建并运行一个自建小程序
1.进入APITable,在想要创建小程序的看板页面点击右上角的【小程序】,进入小程序编辑页面。 2.创建一个新的小程序区。 点击【 添加小程序】 点击创建小程序,选择模板,输入名字。 3.确定后进入小程序部署引导页面。 4.打开Xshell 7…...
使用MyBatis操作数据库
hi,大家好,今天为大家带来MyBatis操作数据库的知识 文章目录 🐷1.根据MyBatis操作数据库🧊1.1查询操作🍇1.1.1无参查询🍇1.1.2有参查询 🧊1.2删除操作🧊1.3修改操作🧊1.4增加操作🧊…...
SSM(Vue3+ElementPlus+Axios+SSM前后端分离)--功能实现[五]
文章目录 SSM--功能实现实现功能09-带条件查询分页显示列表需求分析/图解思路分析代码实现测试分页条件查询带条件分页查询显示效果 实现功能10-添加家居表单前端校验需求分析/图解思路分析代码实现完成测试测试页面效果 实现功能11-添加家居表单后端校验需求分析/图解思路分析…...
Qt应用程序窗体最大化失效问题的解决方法
记录一个在Qt开发过程中遇到的问题: 【问题描述】在showEvent中调用showMaximized(),应用程序窗体仍然无法最大化。 【定位分析】在Qt应用程序中,如果窗体最大化失效,可能是因为在窗体的showEvent事件中使用了showMaximized()方…...
python怎么判断变量的数据类型
在编程的世界里,了解各种数据类型是非常重要的。在Python中,有着丰富的数据类型用于存储和处理不同类型的数据。掌握这些数据类型的定义和作用,我们能够更好地在程序中管理和操作数据,提高代码的效率和可读性。 Python中常见的数据…...
FastAPI 构建 API 高性能的 web 框架(二)
上一篇 FastAPI 构建 API 高性能的 web 框架(一)是把LLM模型使用Fastapi的一些例子,本篇简单来看一下FastAPI的一些细节。 有中文官方文档:fastapi中文文档 假如你想将应用程序部署到生产环境,你可能要执行以下操作&a…...
如何实现 Java SpringBoot 自动验证入参数据的有效性
Java SpringBoot 通过javax.validation.constraints下的注解,实现入参数据自动验证 如果碰到 NotEmpty 否则不生效,注意看下 RequestBody 前面是否加上了Valid Validation常用注解汇总 Constraint详细信息Null被注释的元素必须为 nullNotNull被注释的元…...
golang学习随记
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 go学习快捷键及快速生成代码片段go基础循环流程控制关键字切片,拷贝函数闭包 defer语句格式化输出go语言随机数rand.seed() 包管理并发编程goroutinecha…...
【PCL-6】PCL基于凹凸型的分割算法(LCCP)
凹凸型分割算法适用于颜色类似、棱角分明的物体场景分割。LCCP方法不依赖点云颜色,只使用空间信息和法线信息。 算法流程: 1、基于超体聚类的过分割; 2、在超体聚类的基础上再聚类。 算法思路: 1、基于CC和SC判断凹凸性&…...
多进程并发服务器
文章目录 思路问题多进程并发回环服务器代码客户端代码 思路 每当一个客户端连接服务器后,创建一个子进程负责与该客户端通信,客户端断开连接之后,服务器回收子进程资源。 问题 问题1:父进程阻塞在等待连接(accept())处…...
2021秋招总结
2021 秋招总结 作为星球第一批准备秋招的人,经过这几个月的面试之后,感觉也算是有一些小小的经验了吧,就做一个简单的记录,希望能够为星球中准备秋招的伙伴们提供一些参考吧~ 序 4月初加入星球,到9月底,一…...
Linux6.34 Kubernetes yaml文件详解
文章目录 计算机系统5G云计算第三章 LINUX Kubernetes yaml文件详解一、yaml文件概述1.查看 api 资源版本标签2.写一个yaml文件demo 计算机系统 5G云计算 第三章 LINUX Kubernetes yaml文件详解 一、yaml文件概述 Kubernetes 支持 YAML 和 JSON 格式管理资源对象 JSON 格式…...
防火墙笔记
什么是防火墙 在计算机网络中是指设置在可信任的内部网络和不可信任的外部网络之间的屏障,通过强化边界控制保障内容安全,同时不妨碍内部对外部的访问。 20世纪80年代,最早的防火墙几乎与路由器同时出现,第一代防火墙主要基于包过…...
使用代码下载开源的大模型文件示例以及中文微调llama资源汇总:
一、下载示例 from huggingface_hub import snapshot_downloadrepo_id "THUDM/chatglm2-6b" local_dir ./chatglm2-6b/ cache_dir local_dir "/cache" while True:try:snapshot_download(cache_dircache_dir,local_dirlocal_dir,repo_idrepo_id,loca…...
Wav2vec2 论文阅读看到的一些问题
Wav2vec2 论文阅读看到的一些问题 这里只是简单的思考一下论文的一些问题,不是论文解读。 Q1. 为什么wav2vec依旧需要Transformer来做推理,而不直接使用VQ生成的内容? A1. Transformer在更长的序列上有更好的编码效果,例如论文也写…...
爬虫学习记录(持续更新)
一、问题记录 1.使用webdriver报错AttributeError: str object has no attribute capabilities 解决:目前使用的selenium版本是4.11.2,可以不必设置driver.exe的路径,selenium可以自己处理浏览器和驱动程序,因此,使用…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...










