房屋出租网站模板/河南网站排名优化
Welcome to 9ilk's Code World
(๑•́ ₃ •̀๑) 个人主页: 9ilk
(๑•́ ₃ •̀๑) 文章专栏: Linux网络编程
🏠 shell命令以及运行原理
📌 引入例子理解shell
假设八里村有一个人叫张三,他的父亲是这个村的村长。张三喜欢隔壁的如花,但是张三本人不擅长交际,却想跟如花谈恋爱结婚,于是希望村里的王婆帮其说媒。在这个场景下,我们的张三相当于是用户,而如花相当于是系统内核,王婆相当于是外壳程序(kernel),张三想让王婆帮他和如花说媒相当于是用户想访问系统内核,需要通过指令让外壳程序帮我们返回内核。
Linux严格意义上说的是一个操作系统,我们称之为"核心(kernel)",但我们一般用户,不能直接使用kernel。而是通过kernel的"外壳"程序,也就是所谓的shell,来与kernel沟通。
📌 shell三问
- Q1 : 为什么需要外壳程序?
在上面这个例子中,张三不擅长跟人交流,需要王婆帮助他解释他的需求给如花。对应的,用户不擅长也无法直接访问内核,他需要外壳程序解释他的需求。
因此广义上Linux系统 = Linux内核 + 外壳程序。
而技术角度shell的最简单定义是命令行解释器,它包括:
1. 将使用者的命令翻译给核心(kernel)处理。
2. 同时将核心的处理结果翻译给使用者。
在这里shell这个命令行解释器就相当于王婆,将指令(也就是张三的要求)解释给内核(如花)。
注 :
1.对比Windows GUI,我们操作windows不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作。(比如我们进入D盘的操作通常是通过双击D盘盘符)。
2.shell对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果再通过内核运行出结果,通过shell解析给用户。
- Q2 :shell是如何进行指令解释的?
我们故事继续,王婆知道如花不喜欢张三,但是迫于张三的父亲是村长,怕自己说媒不成功丢了招牌,因此不管说媒结果如何都要办这件事,于是王婆决定成立说媒公司,她通过招实习生来帮助她给张三说媒,这样即使说媒没成功也可以说是实习生干的,同时不会丢了她自己的招牌。
从这个故事我们可以类比理解,其实外壳程序shell是通过创建子进程,让子进程来帮忙进行命令解释,以此来保证自身的安全和稳定性。
- Q3 : Shell和Bash是什么关系?
王婆她是个媒婆,媒婆是她们这一行的统称,而王婆是一个具体的媒婆;类比理解,其实王婆相当于是bash,而媒婆就是shell外壳。
也就是说,我们对不同平台的外壳程序统称为shell,它是包在操作系统外面的一个软件层,而Linux的外壳程序叫bash。
🏠 理解Linux权限
📌 一个认识
假设你是张三,是一个学校的校长,你能在学校活动发表讲话是因为你此时的身份是学校校长,而张三这两个字对你而言代表你是一个具体的人,校长代表的是你的角色/身份。
我们需要认识到:我们在现实生活什么可为什么不可为是由我们的身份/角色决定的。类似的,你在Linux系统中能做什么不能做什么也是由你的身份决定的。
📌 Linux下的用户
- Linux下分为两种用户:超级用户和普通用户。
1. 超级用户:可以在Linux系统下做任何事情,不受限制。
2. 普通用户:在Linux下做有限的事情。
超级用户的命令提示符是"#",而普通用户的命令提示符是"$"。
- 用户之间的切换
1. 普通用户->超级用户
su -
su root
su
注 : 由于超级用户权限大因此切换到root时需要输入密码。同时切换之后如果想退到上次登录可以使用ctrl + d和exit。
2. 超级用户->普通用户
su user
注 : 由于超级用户权限大,因此切换到普通用户不需要输入密码。
- 普通用户提权操作
若我们想让普通用户能使用一些超级用户才能使用的指令或想不切换为root用户而使用root权限做某些事,此时我们可以使用提权操作。
sudo + 命令
但是注意普通用户需要切换成root加进相关配置文件(/etc/sudoers
)才能用sudo进行超级用户权限执行。
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
tommy ALL=(ALL) ALL
在ubuntu系统使用sudo提权可能会出现这样错误:
此时可以先切换到root输入如下指令,将用户名添加到sudoers文件:
sudo adduser image sudo //image是你要恢复的用户名
然后su image切回到在使用的用户就可以正常使用了。
- 新建用户
adduser + 新建用户名 //新建用户
passwd + 用户名 //设置密码
🏠 Linux权限管理
📌 文件权限
📒 文件访问者的分类(人)
1. 文件和文件目录的所有者 : u --- User。
2. 文件和文件目录的所有者所在的组的用户 : g --- Group。
3. 其他用户 :o --- Others。
- Q1 : 为什么other没有被列出来呢?
对于文件,拥有者只有一个人,所属组只有一组,而other可以是多人不需要再列出,而且也没必要列出,因为不是拥有者和所属组就是other。
- Q2 :为什么文件访问者需要所属组?
假设张三和李四两个好朋友进入同一个公司且由于团队赛马,他们两分进了同一个项目,但是并未分进同一个组,张三在A组,李四在B组,哪组的成果比较好谁的成果就会被在项目上实施。A组组长让张三写了一个code.c,有一天组长想查看张三的代码进度,此时只有拥有者张三和other两个访问权限,想让组长看就只能让other也能看,但这样难免会被B组偷窥,因此我们需要一个所属组访问者分类,让A组的人都能看到。
由此我们可以理解到,所属组是为了进行更细粒度的权限管理。
- Q3 : 如何理解权限与访问者的关系?
所谓权限其实就是等于人 + 事物的属性。
比如我们程序员喜欢在leetcode上刷算法题,但是你不能在leetcode上看电影,为什么?那是因为leetcode这个网站没有对应的属性。也就是说,即使我是拥有者但是事物没有对应属性也是白费力气,即使这个事物有对应属性但是我的人所处的角色没有办法使用这些属性也是白搭。
同样的,常见的文件有读(r) , 写(w) , 执行(x)三种权限,权限 = 人 + 事物属性,我们的用户相当于是一个具体的人,而拥有者,所属组以及other是我们这些人在不同文件中扮演的不同角色,用户在文件中的权限就是看你这个用户在这个文件扮演的角色是否能使用这个文件对应的属性!
📒 文件类型和返回权限(事物属性)
在Linux中我们可以使用ll命令查看文件的相关属性:
- 文件类型
d:文件夹
-:普通文件l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
- 基本权限
i.读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限。
ii.写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限。
iii.执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限。
iv.“—”表示不具有该项权限。
-
Q1 : 如何描述一个文件?
描述文件从人和属性来描述,比如对于这个file.txt文件它对应的拥有者有可读可写不可执行权限,所属组有只读权限,其他用户只有可读权限。
- Q2 : 如何进行身份认证?
假如对于zqh这个普通用户它对于test.txt这个文件,它不是拥有者,也不是所属组,那他就是other,他就只能读文件。
注意:在进行身份认证时,只认证一次,认证顺序是拥有者,所属组,other前一个验证失败,才到下一个。
比如对于file.txt它的所属组和拥有者是file.txt,但是所属组有写权限,拥有者没有,当对zhuang用户进行身份认证时从左到右是将它认证成拥有者,因此他对于file.txt这个文件并没有写权限!
- 理解x(执行)权限
为什么对于main和file.txt他们都有x权限,但是一个可执行一个不可执行呢?
那是因为可执行权限和文件能不能执行无关,一个文件要被执行需要:1.具有可执行权限。2.本身是个可执行文件。
📒 文件权限的更改
我们怎么更改权限呢?
我们知道权限 = 人 + 属性 ,那么更改权限要么从角色入手要么从文件权限属性入手。比如对于zhuang用户要想对file读写,要么将拥有者修改为zhuang,要么更改他作为other的文件权限s属性。
✈️ 从属性入手
chmod
功能 : 设置文件的访问权限
格式 : chmod [参数] 权限 文件名
常用选项 : -R 递归修改目录文件的权限。
- chmod + u/g/o/a +/- rwx组合 + 文件名
字符说明:
1. u/g/o/a :
u表示拥有者
g表示所属组
o表示other
a表示所有用户
2. +/- :
+表示向权限范围增加权限代号所表示的权限
-表示向权限范围取消权限代号所表示的权限
注 : 可以一次性对多个角色进行权限更改,但是要用逗号隔开。
- 使用八进制:chmod 八进制 文件名
- 只有文件的拥有者和root才能改变文件的权限。
- 对于普通文件即使root是所属组且文件属性显示没有对应权限,它也能进行相关操作。
✈️ 从角色入手
1. chown
功能 : 修改文件的拥有者
格式 : chown [参数] 用户名 文件名
# chown user1 f1
# chown -R user1 filegropu1
2. chgrp
功能 : 修改文件或目录的所属组
格式 : chgrp [参数] 用户组 文件名
常用选项:-R 递归修改文件或目录的所属组
- 更改拥有者必需切换到原有的拥有者;更改所属组要么切换到原有所属组,要么切换到其拥有者。
但是注意对于root用户它可以无视上面规则:
- 普通用户在改变所属组/拥有者时需要sudo提权或者切换成root用户。
普通用户把文件给别人需要征求别人同意,而root可以强制给。
📌 目录权限
- 目录的可读权限
如果目录没有可读权限,则无法使用ls等命令查看目录中的文件内容。
- 目录的可写权限:如果目录没有可写权限,则无法在目录中创建文件/目录,也无法在目录中删除文件/目录。
拓展:我们可以得到一个文件的新建删除并不取决于这个文件的本身读写权限,而是取决于所在目录给它的权限。因此Linux系统里普通用户一般默认无法进入到另一个普通用户的家目录里,如果进入且在里面新建文件目录也没事,因为这个目录拥有者可以删除。
- 目录的可执行权限:如果没有可执行权限,则无法cd到目录中。
📒 权限掩码
为什么我们新建一个目录的默认权限是775,新建一个文件默认权限是664?其实不然。
最终权限 = 起始权限 & (~权限掩码)
其实目录的起始权限是777,普通文件的起始权限是666;当起始权限按位与权限掩码的取反时(二进制运算)才得到文件/目录的最终权限!
比如:起始权限是666 -> 110 110 110;umask为244 -> 010 100 100取反得到101 011 011
因此最终权限为100 010 010 也就是422
怎么查对应的权限掩码呢?
umask
将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002。
怎么修改对应的权限掩码呢?
umask 044//修改权限掩码
权限掩码有什么意义呢?
假设一个开发团队在同一个系统上工作,系统管理员可以设置一个合适的umask值,比如002,用来确保新文件和目录默认允许组内其他成员读取和写入,但禁止其他用户访问.这种设置可以有效的支持团队协作,同时保护文件 不被其他不相关用户访问。
🏠 file指令
功能 : 辨识文件类型。
语法 :file [选项] 文件/目录
常用选项:
1. -c : 详细显示指令执行过程,便于排错或分析程序执行的情形。
2. -z :尝试去解读压缩文件的内容。
🏠 粘滞位
- 加上粘滞位操作 : chmod +t 文件/目录
- 当一个目录/文件被设置成"粘滞位",则该目录下的文件只能由
1. 超级管理员root删除
2. 该目录的所有者删除
3. 该文件的所有者删除
需求:在一个目录下要求任何人都能进去新建文件/目录等,但不允许删除别人文件和文件夹时可以使用粘滞位。
总结:
1.shell是我们的指令解释器,是用户和内核之间沟通的桥梁。
2.Linux权限 = 人 + 事物属性,描述文件也要从人跟事物属性谈。
3.文件和目录对应的读写执行权限含义不同。
4.更改文件权限可以从角色入手(chown chgrp),也可以从属性入手(chmod)。
5.最终权限 = 起始权限 & ~(权限掩码)。
相关文章:

【Linux网络编程】 --- Linux权限理解
Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: Linux网络编程 🏠 shell命令以及运行原理 📌 引入例子理解shell 假设八里村有一个人叫张三,他的父亲是这个村的村长…...

Qt/C++ 调用迅雷开放下载引擎(ThunderOpenSDK)下载数据资源
目录导读 前言ThunderOpenSDK 简介参考 xiaomi_Thunder_Cloud 示例ThunderOpenSDK 下载问题 前言 在对以前老版本的exe执行程序进行研究学习的时候,发现以前的软件是使用的ThunderOpenSDK这个迅雷开放下载引擎进行的项目数据下载,于是在网上搜索一番找到…...

深入详解 Java - Spring MVC
在 Java 企业级开发领域,Spring MVC 是一个极为重要的框架,它为构建强大、灵活且高效的 Web 应用程序提供了坚实的基础。本文将深入详解 Java 之 Spring MVC,带你领略其强大之处。 一、Spring MVC 概述 Spring MVC 是 Spring 框架的一个重要模块,全称为 Spring Web Model-V…...

Spring Boot技术中小企业设备管理系统设计与实践
6系统测试 6.1概念和意义 测试的定义:程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为: 目的:发现程序的错误; 任务:通过在计算机上执行程序,暴露程序中潜在的错误。 另一个…...

动态渲染组件
引言 在现代前端开发中,动态渲染组件是一种常见的需求,特别是在构建复杂的应用程序时。动态渲染组件允许我们在运行时根据不同的条件或数据来决定渲染哪个组件,从而提高代码的灵活性和可维护性。本文将详细介绍如何在 Vue.js 中实现动态渲染…...

一个神秘的新图像生成模型red_panda出现 轻松击败Midjourney与OpenAI
一个神秘的新图像生成模型在众包人工分析基准测试中击败了 Midjourney、黑森林实验室和 OpenAI 的模型。这个名为"red_panda"的模型在人工分析的文本到图像排行榜上领先排名第二的黑森林实验室的 Flux1.1 Pro 约 40 个 Elo 分数。 Artificial Analysis 使用 Elo&…...

云计算平台上的DevOps实践
文章目录 什么是DevOps云计算平台上的DevOps优势自动化部署弹性伸缩地理分布 实施DevOps的关键组件版本控制系统持续集成/持续交付工具配置管理工具监控和日志管理 实践案例使用AWS CodePipeline进行持续集成/持续交付利用AWS Auto Scaling实现弹性使用AWS CloudFormation进行基…...

JS新功能之:全新 Set 方法
JavaScript 的内置Set类将新增一些方法,以便执行集合论中常见的操作,包括: Set.prototype.intersection(other):返回两个集合的交集。 Set.prototype.union(other):返回两个集合的并集。 Set.prototype.difference(o…...

Flume的安装配置
一、上传解压 tar -zxvf apache-flume-1.9.0-bin.tar.gz -C /usr/local/soft/#***在环境变量中增加如下命令,可以使用 soft 快速切换到 /usr/local/soft***alias softcd /usr/local/soft/ 二、配置环境变量 soft #重命名 mv apache-flume-1.9.0-bin/ flume-1.9.0…...

3.1.3 虚存页面的映射
3.1.3 虚存页面的映射 文章目录 3.1.3 虚存页面的映射3.1.3 虚存页面的映射MmCreateVirtualMapping()MmCreateVirtualMappingUnsafe()MiFlushTlb()MmDeleteVirtualMapping()MmPageOu…...

【SSM详细教程】-14-SpringAop超详细讲解
精品专题: 01.《C语言从不挂科到高绩点》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482 02. 《SpringBoot详细教程》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12789841.html?spm1001.20…...

虚拟机桥接模式连不上,无法进行SSH等远程操作
说明:以下情况在window10上遇到,解决后顺便做了个笔记,以防后续再次用到,也给同道中人提供一个解决方案 一、首先按照以下步骤进行检查 1、是否连接了对应的wifi 2、是否设置了桥接模式 3、上述1、2确认无误的情况下请查看右上…...

jmeter基础01-1_环境准备-windows系统安装jdk
课程大纲 一、步骤解说 step1. jdk官网下载 Java Downloads | Oracle step2. 安装/解压(二选一) 1. 安装包格式(后缀.exe/.msi/.dmg):双击跟随界面向导安装,可以指定安装位置等。 2. 压缩包格式(后缀.z…...

第六天: C语言核心概念与实战技巧全解析
1 主函数(main) 大家好,今天我们来深入探讨一下C语言中非常特殊的一个函数——main函数。虽然大家对它并不陌生,但是它的重要性和特殊性值得我们再次回顾。 main函数的定义 main函数是我们整个C源程序的入口点。计算机在运行程…...

初始JavaEE篇——多线程(5):生产者-消费者模型、阻塞队列
找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏:JavaEE 文章目录 阻塞队列生产者—消费者模型生产者—消费者模型的优势:生产者—消费者模型的劣势: Java标准库中的阻…...

2024年下教师资格证面试报名详细流程❗
⏰ 重要时间节点: (一)下半年笔试成绩查询:11月8日10:00 (二)注册报名:11月8日10:00-11日18:00 (三)网上审核:11月8日10:00-11日18:00 (四&#x…...

软考:常用协议和端口号
常用协议及其对应的端口号如下: TCP/IP协议: TCP(传输控制协议):端口号为6UDP(用户数据报协议):端口号为17 网络应用协议: HTTP(超文本传输协议)…...

Linux更改符号链接
目录 1. 删除旧链接 2. 创建新的符号链接 例如我的电脑上有两个版本的cuda,11.8和12.4 1. 删除旧链接 rm cuda 2. 创建新的符号链接 ln -s /usr/local/cuda-11.8/ /usr/local/cuda...

int main(int argc,char* argv[])详解
#include <stdio.h> //argc 是指命令行输入参数的个数; //argv[]存储了所有的命令行参数, //arg[0]通常指向程序中的可执行文件的文件名。在有些版本的编译器中还包括程序文件所在的路径。 //如:"d:\Production\Software\VC_2005_Test\Win32控制台应用程序\Vc_T…...

单片机原理及应用笔记:C51流程控制语句与项目实践
作者介绍 周瑞康,男,银川科技学院,计算机人工智能学院,2022级计算机科学与技术8班本科生,单片机原理及应用课程第八组。 指导老师:王兴泽 电子邮箱2082545622qq.com 前言: 本篇文章是参考《…...

大数据日志处理框架ELK方案
介绍应用场景大数据ELK日志框架安装部署 一,介绍 大数据日志处理框架ELK(Elasticsearch、Logstash、Kibana)是一套完整的日志集中处理方案,以下是对其的详细介绍: 一、Elasticsearch(ES) 基本…...

VQGAN(2021-06:Taming Transformers for High-Resolution Image Synthesis)
论文:Taming Transformers for High-Resolution Image Synthesis 1. 背景介绍 2022年中旬,以扩散模型为核心的图像生成模型将AI绘画带入了大众的视野。实际上,在更早的一年之前,就有了一个能根据文字生成高清图片的模型——VQGAN…...

docker中使用ros2humble的rviz2不显示问题
这里写目录标题 docker中使用ros2humble的rviz2不显示问题删除 Docker 镜像和容器删除 Docker 容器Linux服务器下查看系统CPU个数、核心数、(make编译最大的)线程数总结: RVIZ2 不能显示数据集 docker中使用ros2humble的rviz2不显示问题 问题描述: roo…...

【AIGC】2024-arXiv-Lumiere:视频生成的时空扩散模型
2024-arXiv-Lumiere: A Space-Time Diffusion Model for Video Generation Lumiere:视频生成的时空扩散模型摘要1. 引言2. 相关工作3. Lumiere3.1 时空 U-Net (STUnet)3.2 空间超分辨率的多重扩散 4. 应用4.1 风格化生成4.2 条件生成 5. 评估和比较5.1 定性评估5.2 …...

正则表达式:文本处理的强大工具
正则表达式是一种强大的文本处理工具,它允许我们通过定义一系列的规则来匹配、搜索、替换或分割文本。在编程、文本编辑、数据分析和许多其他领域中,正则表达式都扮演着重要的角色。本文将介绍正则表达式的基本概念、语法和一些实际应用。 正则表达式的…...

Doris单机安装
1、安装包下载 官网地址:https://doris.apache.org/zh-CN/docs/gettingStarted/quick-start/ 下载地址:https://apache-doris-releases.oss-accelerate.aliyuncs.com/apache-doris-3.0.2-bin-x64.tar.gz 2、操作系统环境准备 #环境准备 cat /proc/cp…...

ubuntu内核更新导致显卡驱动掉的解决办法
方法1,DKMS指定内核版本 用第一个就行 1,借鉴别人博客解决方法 2,借鉴别人博客解决方法 方法2,删除多于内核的方法 系统版本:ubuntu20.24 这个方法是下下策,如果重装驱动还是不行,就删内核在…...

【Java数据结构】树】
【Java数据结构】树 一、树型结构1.1 概念1.2 特点1.3 树的类型1.4 树的遍历方式1.5 树的表示形式1.5.1 双亲表示法1.5.2 孩子表示法1.5.3 孩子双亲表示法1.5.4 孩子兄弟表示法 二、树型概念(重点) 此篇博客希望对你有所帮助(帮助你了解树&am…...

Java面试题——微服务篇
1.微服务的拆分原则/怎么样才算一个有效拆分 单一职责原则:每个微服务应该具有单一的责任。这意味着每个服务只关注于完成一项功能,并且该功能应该是独立且完整的。最小化通信:尽量减少服务之间的通信,服务间通信越少,…...

Python 中 print 函数输出多行并且选择对齐方式
代码 # 定义各类别的标签和对应数量 categories ["class0", "class1", "class2", "class3", "class4", "class5"] counts [4953, 547, 5121, 8989, 6077, 4002]# 设置统一的列宽 column_width 10# 生成对齐后…...