Linux权限理解【Shell的理解】【linux权限的概念、管理、切换】【粘滞位理解】

news2024/11/13 15:47:34

目录

  • Linux权限理解
    • 1.Xshell命令以及运行原理
    • 2.linux权限的学习
      • 2.1linux权限的切换
      • 2.2linux权限的概念
      • 2.3linux权限管理
        • 2.3.1linux中文件访问者的分类
        • 2.3.2文件类型和访问权限(文件属性)
          • 2.3.2.1文件类型
          • 2.3.2.2文件权限
            • 拓展—文件的起始权限
        • 2.3.3文件权限管理
        • 2.3.4文件权限的应用
        • 2.3.5文件访问者的管理
      • 2.4目录的权限问题
      • 2.5粘滞位
        • 2.5.1添加粘滞位
    • 3.学习完要问自己的问题

Linux权限理解

在学习linux的权限之前我们先来看看我们一直使用的Xshell是如何运行的。

1.Xshell命令以及运行原理

Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?

从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)

(shell是外壳的统称,我的服务器(Centos 7)的linux系统的外壳是bash【shell有很多种,bash只是其中一种,还有一些linux系统用的外壳是sh】)

我的所有指令都会交给bash这个shell来处理

image-20240914194651274

shell会干两件事情:

  • 将使用者的命令翻译给核心(kernel)处理。

  • 同时,将核心的处理结果翻译给使用者。

对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。

shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。

看图可以方便理解:

image-20240914191816719

其实用户也不是不能和操作系统交互,但是比较麻烦,不方便。

注意:

这里还有一个小概念,就是如果用户输入的指令/程序会让shell出问题的话,shell就会通过派生子进程的方式去执行用户的指令,shell本身不会执行用户的指令。这样子进程挂了,shell本身不会有问题。这里的详细细节以后会学习

2.linux权限的学习

linux是一个多用户操作系统,因此权限的学习非常重要

2.1linux权限的切换

Linux下有两种用户:超级用户(root)、普通用户

  • 超级用户:可以在linux系统下做任何事情,不受限制
  • 普通用户:在linux下做有限的事情

超级用户的命令提示符是“#”,普通用户的命令提示符是“$”

如何切换呢?

命令:su[用户名]

例如:要从root用户切换到普通用户user,则使用 su user。并且不用user的密码, 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令,输入root的密码

如果我想用普通权限,用root权限调用一个命令,但是我不切换成root身份的话,需要用sudo。

sudo就是普通用户不切换身份的同时又能以root的身份去执行sudo后面的指令。

这个时候系统会让你输入用户的密码

image-20240917153512346

这里我们会发现好像有一点问题,**普通用户以root的身份去执行指令,但是输入的是自己的密码?**这岂不是说所有普通用户都能以root身份执行指令吗?

实际上不是这样的。当我们输入完密码的时候会发现

image-20240917153732315

这里的意思就是说,Yaj这个用户是不被系统信任的,它不能借用root的身份去执行指令

实际上,如果一个用户能执行sudo的话,说明他是被系统信任的用户。这个需要用户存在于/etc/sudoers这个目录下。这个东西有点类似白名单——给受信任的用户,提供最少的执行障碍

2.2linux权限的概念

什么是权限呢?

  1. 权限是约束一个身份(人)的,这个人能干什么事情,取决于它的身份带给他的权限。
  2. 目标对象是否存在对应的属性给人去做。

其实权限简单来说就是——一件事情是否允许被谁做

这个谁就是人(身份),做就是这个事情本身是否能够做这个事情。

举个很简单的例子来说:

一个人能去学校上课,跟这个人没关系,是因为这个人是学生,并且学校能够提供上课属性给学生上课、

再举一个例子:

作为一个视频会员拥有者,我能看vip电影是因为我的会员身份,跟我人这个体是没有关系的,我说我是谁谁谁,系统不认,它只认你是否是会员。是会员,才能拥有会员的权限。

linux当中的文件权限==角色/身份+文件属性

假如我是root身份/用户,那我就会拥有root身份/用户的权限,但是某个文件的属性本身就是不可以访问的,(比如一个不是可执行的文件)那么即便我拥有root的权限,但是我还是无法访问这个文件。如下图所示

image-20240918195709176

但是一个文件的属性是——只能被root用户查看,那么root用户就可以访问这个文件,普通用户就不行。这里体现的就是权限对人(身份)的约束。

2.3linux权限管理

2.3.1linux中文件访问者的分类

linux在判断一个具体用户的权限的时候,会先将这个具体的用户分类,分类完之后根据身份去给与相对应的权限。

具体在linux中,会将用户分类成三类身份。

  • 文件和文件目录的所有者:u—User(中国平民 法律问题)

谁创建的文件和文件目录,谁就是所有者——user

拥有者只能是一个具体的用户。

  • 文件和文件目录的所有者所在的组的用户:g—Group(不多说)

user和other的概念都很好理解,这个group怎么看呢?

所属组group的存在能解决一个问题——一个文件只能给拥有者(user)查看或者给全部人(other)查看

举个例子:一个项目,有A\B两个组的人去一起开发,谁开发的好用谁的。一个A组的人想把自己的代码给组内的伙伴查看,如果没有group,它直接放开了other的权限,那么所有人都可以来看他的代码,这样就不合理了

  • 其它用户:o—Others (外国人)

除了user和group的其他人就是others。

2.3.2文件类型和访问权限(文件属性)
2.3.2.1文件类型

我们要如何查看文件的类型和权限呢?

输入ll就行了,文件名前面的一长串就是这个文件的属性

image-20240917193834880

关于这个文件属性如何看,我们可以看下面这个图。

image-20240917193622938

我们先来看文件属性第一位所表示的文件类型:

  • 文件的类型

要注意:在linux中文件后缀对于linux区分这个文件的类型完全无关。在linux中,文件后缀本质也是文件名字的一部分。但是作为用户来说,我可以通过后缀去帮助我区别文件类型.

d:文件夹

-:普通文件(源代码,库文件,可执行程序,文档压缩包等)

image-20240917195603840

l:软链接(类似Windows的快捷方式)

image-20240917200014936

b:块设备文件(例如硬盘、光驱等)【这个删除了就出问题了】

p:管道文件

image-20240917200234877

c:字符设备文件(例如屏幕等串口设备)

s:套接口文件

我们也可以通过file来查看文件类型

file 文件名

image-20240918123935338

2.3.2.2文件权限

知道了文件类型之后,我们再来看文件属性第2~10位所表示的文件权限

  • 文件的基本访问权限
  1. 读®—Read对文件而言,具有读取文件内容的权限;对目录而言,具有浏览该目录信息的权限
  2. 写(w)—Write对文件而言,具有修改文件内容的权限;对目录而言,具有删除或移动目录内文件的权限
  3. 执行(x)—execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
  4. "—"表示不具有该权限

首先我们知道文件属性的第一位是文件类型,那为什么是9位来表示文件的权限呢?

因为是每三位为一组来表示对应身份所拥有的权限。

image-20240917202726219

我们以上图file这个文件的属性为例来解析一下其第2~10位所表达的文件权限

image-20240917203601041

因此我们要描述file这个文件的属性我们应该这样说:file这个文件的类型是目录,它的拥有者是root,所属组是root,对于拥有者来说它的权限是可读可写可执行,对于所属组来说,它的权限是可读不可写可执行。对于其他人来说,它的权限是可读不可写可执行。

下图是三位权限的各种情况:

字符表示法:

image-20240917204357096

8进制数值表示法:

image-20240917204515455

拓展—文件的起始权限

我们创建一个普通文件,它创建出来的权限如下图所示:

image-20240918125434943

这里有个问题:为什么普通文件的创建出来的权限是644?

这里需要引入一个权限掩码(umask的概念)

umask

功能

查看或修改文件掩码

  • 新建文件夹默认权限=0666

  • 新建目录默认权限=0777

但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & (~umask)

格式:umask 权限值

说明:将现有的存取权限去掉权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002

实例如下图所示

这里创建了一个普通文件test.txt和目录dir

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注意,这里默认权限去掉权限掩码的运算过程不是减法,是mask & (~umask)

也就是**(默认权限的二进制码)&( 按位取反的权限掩码的二进制码)**

什么意思呢?

如图所示:

image-20240918200114195

这样做的目的就是:

umask:默认要去掉的权限位是1,要保留的是0

~umask:要去掉的权限位就变成0,任何数&上0都是0,从而实现去掉权限,要保留的权限位就是1,如果本来就有这个权限,那么1&1还是1,从而实现权限的保留

2.3.3文件权限管理

知道了文件属性当中是如何表达文件权限的。现在就可以学习如何管理文件权限了、

要想对文件权限进行修改,要不就是root用户,要不就是文件的所有者。

要对文件权限进行管理,需要用到指令chmod:

chmod

**功能:**设置文件的访问权限

**格式:**chmod [参数] 权限 文件名

常用选项:

R -> 递归修改目录文件的权限

说明:只有文件的拥有者和root才可以改变文件的权限

用chmod来管理权限的格式:

用户表示符+/-=权限字符

+:向权限范围增加权限代号所表示的权限

-:向权限范围取消权限代号所表示的权限

=:向权限范围赋予权限代号所表示的权限

用户符号:

u:拥有者

g:拥有者同组用

o:其它用户

a:所有用户

实例:

我们以下面这个文件为例子,来对其权限进行管理/修改。

image-20240917205841582

我们想把user的权限修改成不可读不可写,输入chmod u-rw test.txt

这里的这个u指的就是user的权限,-代表删除权限,u-rw就是删除user的可读可写权限。u-rw test.txt就是删除user对test.txt这个文件的可读可写权限

image-20240917210441255

把user的权限修改为可读可写可执行,输入chmod u+rwx test.txt

image-20240917210753762

这里虽然我们把拥有者的权限修改为可读可写可执行,但是并不是一定就能执行出结果。这个文件本身没有可执行内容,即便执行了也不会有结果

image-20240917211235575

如上图所示,执行了没有反应。说明这个文件本身不应该是可执行的

修改用户组和其他人的权限也是类似,把相应的u改成g和o就行了

image-20240917211921145

如果想一次性去除多个身份的相同权限也是可以做到的,在中间加个逗号就可以了。

image-20240917212038931

意思就是去除拥有者和用户组的所有权限。

一次性同时管理多个用户的不同权限也可以,如下图所示:

image-20240917212212437

也可以通过-a选项来一次性修改所有身份的权限
image-20240917212610691

当然,也可以用8进制表示法来修改文件的权限:

image-20240917204515455

例如下图:

image-20240918010307519

这里的第一个7表示的是修改拥有者的权限,7等价于u+rwx,即可读可写可执行

这里第二个7表示修改的是所属组的权限,等价于g+rwx,即可读可写可执行

第三个0表示修改其他人的权限,等价于o-rwx,即不可读不可写不可执行

image-20240918011032214

在把权限改回去

2.3.4文件权限的应用

现在我们已经能对一个文件的权限进行管理了。那不同身份下的各种权限到底有什么区别呢?使用的时候是什么样子的?我们来看下面这个例子:

这里是使用者是否拥有各种权限的例子:

这里test.txt的文件对user的权限是rw-,也就是可读可写不可执行。

因此下图我们也对文件内容进行修改和读取的时候没有问题,在执行的时候报错显示Permission denied,意思就是没有权限。

因为这个文件本身的属性不提供可执行权限给你,即便是root权限也没办法执行。

image-20240917213051573

root权限是不受约束的,我们看下图:

image-20240917214839927

即便test.txt的对拥有者的权限是不可读不可写的,但是root仍然可读可写、

这里有个例子要注意:

这里有个普通账户whb,有个普通文件test.txt,这个文件对拥有者的权限是仅可读,对用户组的权限是可读可写。

image-20240917214036491

但是我们实际操作却发现,whb这个用户在对text.txt写的时候,发生了没有权限的事情。

这里可能有个问题:明明whb也是用户组里面的,虽然你对拥有者的权限是不可写,但是whb是用户组的呀,用户组的权限是可写的,那为什么没有权限呢?

这是因为linux底层再对你的用户权限进行匹配的时候,是从左到右进行匹配的,并且是if else,如果匹配到你是拥有者,那么就匹配拥有者的权限,除非你不是拥有者,才去判断你是不是用户组。

2.3.5文件访问者的管理

chown

功能:修改文件的拥有者

格式:chown [参数] 用户名 文件名

实例:

将f1这个文件的拥有者改成user1

# chown user1 f1 

递归修改filegroup1这个目录下的文件的拥有者,都改成user1。

# chown -R user1 filegroup1

要注意:

如果不是root权限去执行这个指令的话,将拥有者改为user1,需要经过user1的同意才可以。

chgrp

功能:修改文件或目录的所属组

格式:chgrp [参数] 用户组名 文件名

常用选项:-R 递归修改文件或目录的所属组

实例

将f1文件的所属组改为user1

# chgrp user1 f1 

递归修改filegroup1这个目录下的文件的所属组,都改成user1。

# chgrp -R user1 filegroup1

要注意:

如果不是root权限去执行这个指令的话,将所属组改为user1,也需要经过user1的同意才可以。

并且用chown也可以修改所属组,如下图所示:
image-20240918002423454

其他人ohers不存在修改的指令。因为拥有者,和所属组,都是具体的人,但是其他人指除了所有者和所属者的其他所有用户。

2.4目录的权限问题

目录的权限:

  • 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中.

  • 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.

  • 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件

面试题:

1.进入一个目录要什么权限?

需要x——可执行权限

2.为什么linux规定目录的起始权限是777?

因为任何一个目录被创建出来都需要能够被进入,也就是x权限

总结:

  1. 目录的可执行权限是表示你可否在目录下执行命令以及进入目录
  2. 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
  3. 而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限,无法浏览目录下的文件

2.5粘滞位

在讲述粘滞位之前,我们先要讲述一个基本事实:

Linux是一个多用户服务器,有些时候一些特定的场景下,多个用户需要在一个公共的目录下,进行临时文件的操作。

这个公共的目录是/tmp——往往这个公共目录是root用户创建的,因此对于这个公共目录来说,其他所有用户都是others

image-20240918153727596

这目录里会放置一些临时文件

image-20240918153753192

知道了这个基本事实的话,我们来看一个场景

前面我们学过目录的权限,我们知道,一个用户只要具有目录的写权限,那么就可以在目录内进行文件的创建和删除,如下图所示:

image-20240918155457535

**但是这里就有一个问题:**我们在同一个公共目录下工作,因此我肯定具有目录的写权限,但是我对其他用户创建的文件不一定会有写权限,但是我却可以直接删掉别人的文件!

换句话来讲, 就是只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限。因为删除文件这个权限不是由文件的w权限决定的,是由目录的w权限决定的。

这样就不合理了。

因此linux为了解决这个问题,就引入了粘滞键这个概念。粘滞位本身是权限的一种特殊情况。

是目录的权限问题导致公共目录内部的用户可以互相删除文件,因此我们给公共目录本身去设置一个粘滞位,从而达到禁止文件被其他用户删除的情况

2.5.1添加粘滞位

粘滞位——给目录设置的一种权限

注意:要有root权限才可以执行这个指令。并且root不受粘滞位影响,不受权限约束

chmod +t /公共目录名

这里给目录添加粘滞位,实际上就是在对others的权限做一个特殊化处理,把others的权限从rwx改成了rwt、因为其他所有用户对于公共目录来说都是others。

如下图所示:

image-20240918162206595

others的权限变成了rwt就是粘滞键添加成功了。

3.学习完要问自己的问题

  1. 什么是权限?

权限就是一件事情是否允许被某个身份执行

身份决定了人是否具有执行这件事情的权限,但这个事情本身是否能被执行也属于权限的一部分

具体的还是要看上面的内容

  1. 如何操作权限?

对权限进行管理,可以通过chmod对不同的身份进行权限的增加和删除。这个过程可以用字符,也可以用八进制来表示权限。

  1. 为什么要有权限?

因为可以对用户进行分类,有了权限的区别,方便我们对系统进行安全的管理和维护

  1. 文件被创建出来的默认权限是怎么决定的?

通过默认权限和umask决定的

  1. umask是什么?起什么作用?

umask是权限掩码。权限掩码实际参与了文件权限的决定

  1. umask是怎么和起始权限一起决定默认权限的?

mask & (~umask)

具体过程看2.3.2.2的拓展

  1. 进入目录需要什么权限?

x——可执行权限

  1. 为什么要存在粘滞键?

防止在同一公共目录下工作的用户对其他用户的文件进行删除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2144775.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux环境基础开发工具---vim

1.快速的介绍一下vim vim是一款多模式的编辑器,里面有很多子命令,来实现代码编写操作。 2.vim的模式 vim一共有三种模式:底行模式,命令模式,插入模式。 2.1vim模式之间的切换 2.2 谈论常见的模式---命令模式&#xf…

GEC6818初次连接使用

目录 1.开发板资源接口​编辑​编辑 2.安装 SecureCRT工具 2.1SecureCRT相关问题 3.连接开发板 4.开发板文件传输 4.1串口传输 rx 从电脑下载文件到开发板 sz 从开发板把文件发送到电脑 4.2U盘/SD卡传输 4.3网络传输[重点] 5.运行传到开发板的可执行文件 6.开发板网络…

硬件工程师笔试面试——滤波器

目录 12、滤波器 12.1 基础 滤波器原理图 滤波器实物图 12.1.1 概念 12.1.2 滤波器的分类 12.1.3 滤波器的工作原理 12.1.4 滤波器的应用 12.1.5 滤波器设计的关键参数 12.2 相关问题 12.2.1 不同类型的滤波器在实际应用中的具体作用是什么? 12.2.2 如何设计一个简…

Nodejs+vue+Express游戏分享网站的设计与实现 7a2s2

目录 技术栈具体实现截图系统设计思路技术可行性nodejs类核心代码部分展示可行性论证研究方法解决的思路Express框架介绍源码获取/联系我 技术栈 该系统将采用B/S结构模式,开发软件有很多种可以用,本次开发用到的软件是vscode,用到的数据库是…

【无标题】rocket

rocketMQ集群双主双从同步模式(2m-2s-sync)搭建-CSDN博客 集群架构概念 在部署的时候首先要将nameserver启动起来,之后就是将broker启动起来,broker启动起来会将自己的信息注册到nameserver上面。之后再去创建topic,因为发消息的逻辑和收消…

kubernetes架构

kubernetes cluster由master和node组成,节点上运行着若干kubernetes服务Master节点: master是kubernetes cluster的大脑,运行着的Daemon服务包括kube-apiserver,kube-scheduler,kube-controller-manager,etcd和Pod网络…

数据处理与统计分析篇-day04-Numpy与Pandas-Series

一. Numpy详解 Numpy的ndarray的属性 Numpy简介 NumPy(Numerical Python)是Python数据分析必不可少的第三方库 NumPy的出现一定程度上解决了Python运算性能不佳的问题,同时提供了更加精确的数据类型,使其具备了构造复杂数据类型…

如何用麦肯锡方法分析问题和解决问题?

一、什么是麦肯锡方法? 麦肯锡方法,也被称为麦肯锡7S模型,是全球知名咨询公司麦肯锡公司提出的一种管理方法。麦肯锡公司成立于1926年,是全球领先的管理咨询公司,其服务覆盖各个行业和领域,以高质量、高效率…

高精度加法和减法

高精度加法 在C/C中,我们经常会碰到限定数据范围的情况,我们先来看看常用的int和long long两种数据类型的范围吧。 C标准规定:int占一个机器字长。在32位系统中int占32位,即4个字节,所以int的范围是[-2的31次方&#…

云计算实训50——Kubernetes基础命令、常用指令

一、Kubernetes 自动补齐 # 安装自动补齐软件 [rootmaster ~]# yum -y install bash-completion # 临时开启自动补齐功能 [rootmaster ~]# source # 永 久开启自动补齐功能 [rootmaster ~]# echo "source > ~/.bashrc 二、Kubernetes 基础命令 kubectl [command] …

C语言 ——— 编写函数,判断一个整数是否是回文整数

目录 题目要求 代码实现 题目要求 编写一个函数,用来判断一个整数是否是回文整数,如果是回文整数就返回 true ,如果不是就返回 false 举例说明: 输入:121 输出:true 输入:1321 输出&#xf…

【计算机网络】TCP的可靠传输机制、标记位以及编程结构

文章目录 一、TCP的可靠传输的工作原理1、确认应答机制和捎带应答机制2、超时重传3、快速重传4、滑动窗口5、流量控制 未 PSH6、拥塞控制7、延迟应答8、TCP 以段为单位发送数据 二、TCP 首部的六个标记位1、URG2、ACK3、PSH4、RST5、SYN6、FIN 三、TCP网络并发编程 一、TCP的可…

红外图像车辆与行人检测系统源码分享

红外图像车辆与行人检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Co…

提升自闭症教育:探索寄宿学校的创新实践

在特殊教育领域中,自闭症儿童的教育与康复一直是一个复杂而重要的课题。随着教育理念的进步和康复技术的不断发展,越来越多的创新实践被应用于自闭症儿童的教育中。其中,广州的星贝育园自闭症儿童寄宿制学校以其独特的教育模式和全方位的康复…

城市级河流三维处理及展示的一些技术

本文是一些算法技术的初探分析,会陆续修订。 1、问题 河流是一种非常复杂的多边形。在二维地图可以采用多边形填充算法(DDA)对任意复杂的多边形进行绘制与填充。但是三维引擎只能采纳三角面进行渲染。但在如此复杂的多边形面前,简单的三角化算法不能解…

14.其他流(下篇)

目录 1. IO流的体系结构 2.字节缓冲流 3.字符缓冲流 4.转换流 5.序列化 6.打印流 7.压缩流与解压流 8.工具包 1. IO流的体系结构 IO流的使用原则:随用随创建,什么时候不用什么时候关闭 1.1 io流的体系结构图 1.2缓冲流的分类 缓冲流,也叫高效流&#…

SpringBoot---------Actuator监控

1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId> </dependency> 2、开启配置 management.endpoints.web.exposure.include* 3、启动项目&#xff0c;查看监控…

C++ 在项目中使用Linux命令

一: 选择shell Linux 命令是由shell解析并转发给操作系统执行的&#xff0c;所有的shell都是从 Bourne shell&#xff08;/bin/sh&#xff09;派生的&#xff0c;Bourne shell是贝尔实验室为早期版本的Unix开发的标准shell。 每个Unix系统都需要一个版本的Bourne shell才能正…

研1日记14

1.动态卷积&#xff1a;所得卷积核与输入相关&#xff0c;参考博文&#xff1a;动态卷积之CondConv和DynamicConv-CSDN博客 针对不同的频段&#xff0c;学习注意力权重&#xff0c; 深度学习中组卷积(Group convolution)、深度卷积(Depthwise Convolution)以及深度可分离卷积…

【MQTT协议使用总结】基于-FreeRTOS平台-移植MQTT协议栈

文章目录 仓库地址关键接口适配FreeRTOS_readFreeRTOS_writeNetworkInit && NetworkConnect && NetworkDisconnect 总结 仓库地址 https://github.com/eclipse/paho.mqtt.embedded-c 这里官方给了一些平台适配案例&#xff0c;这里参考FreeRTOS的 关键接口适配…