当前位置: 首页 > news >正文

【Linux】Linux 权限:数字背后的神秘 “门禁卡” 系统

目录

  • 权限的基本概念
  • Linux上用户的分类
    • 超级用户和普通用户
    • 用户之间的切换
    • 文件访问者的分类
  • 文件属性与访问权限
    • Linux下的文件类型
    • 文件后缀在Linux中的作用
    • 文件自身的属性【⭐】
    • 文件访问者的三种权限【rwx】
    • 文件权限值的表示方法
  • 文件访问权限的相关设置方法
    • chmod——设置文件的访问权限
    • 修改访问者权限的两种方式
    • 首次遇到Permission denied
  • Linux下一个用户扮演多个角色的身份确认
  • Linux下的三个重要权限【⭐⭐⭐面试常考】
    • 目录权限
    • 默认权限
      • 文件的起始权限与默认权限
    • umask权限掩码
    • 位运算的细致讲解
    • 最终权限
    • umask修改
    • umask权限掩码的作用
  • 粘滞位【⭐】
    • 背景及准备
    • 添加粘滞位防止别人恶意删除
    • 如何删除粘滞位目录
  • end

权限的基本概念

就这么说吧,权限就是= 角色 + 事务属性

  • 比如说我要随意的进出校长的办公室,那可能吗?这个办公室是给校长专属的,我一个学生的角色可以在校长办公室随意进出乱搞吗?这明显是不可能的,所以这就对应了我们权限中角色的要求
  • 再来第二点,我要在爱奇艺这个视频软件上敲代码,大家都知道怎么可能,爱奇艺只能用来追剧,怎么还能用来敲代码,这就对应了权限要求一个事务的属性,而爱奇艺这个软件的事务属性是看视频

Linux上用户的分类

超级用户和普通用户

  • 超级用户就相当于是Windows系统的管理员账户,在操作系统中,想干啥就干啥,超级用户几乎不受权限所约束。普通用户能做的,超级用户都能做,但是普通用户不能做的,超级用户也能做,后面具体将权限的时候我将具体举例说明
    在这里插入图片描述
  • 超级用户默认用户名root
  • 普通用户的能力就比超级用户少得多,具体方面我也会举例说明

在这里插入图片描述

  • 这里用户的名字自定义的,我的是ljj

用户之间的切换

切换就是两个命令

  • su 用户名 (并不会改变当前路径)
    在这里插入图片描述
    可以看到路径还是ljj账户下的路径
  • su - 用户名(会改变当前路径,切换到用户名所在的路径)
    在这里插入图片描述
    su - 就切换到用户名(这里是root)的路径

文件访问者的分类

  • 对于一个创建出来的文件,有三种角色可以访问他。
    1. 文件拥有者(一般就是创建该文件的人)
    1. 文件所属组
    1. 其他用户
      文件拥有者和其他用户很好理解,我来说一下这个文件所属组

在这里插入图片描述

  • 刚开始这个组里面只有user1一个组员,文件也只能被user1访问
  • 在这里插入图片描述
  • 用一个通俗的例子来解,现在你微信里面有一个好东西想给你的兄弟看,但是如果你发在班级群里面其他人也会看到,这时候你就可以单独创建一个微信群,把你的好兄弟拉进群,在你创建的微信群里面发文件,这个文件只有在微信群里面的人才能看到,群外的人是看不到的。

总结:微信群就是文件所属组,你和你的好兄弟就是组员,好东西就是文件

文件属性与访问权限

Linux下的文件类型

在Linux下,主要有以下八种文件类型,我们主要记前面两种就行,因为碰到得比较多

  • 【-】 :普通文件,文本,可执行,归档文件等
    【d】:目录
    【b】:块设备,block,磁盘【ls -l /dev/vda1】
    【c】: 字符设备,键盘或者显示器【ls -l /dev/tty】
    【p】:管道设备【mkfifo pipe】
    【s】:网络socket文件
    【l】 :链接文件 link【ls -al /usr/lib64/】

在这里插入图片描述

  • d开头就是目录文件, - 开头就是普通文件

文件后缀在Linux中的作用

在这里插入图片描述

  • 可以看到,我把原来的以.out后缀名分别改成了.exe和.txt后缀依然可以运行这个文件,所以Linux系统中,一个文件的类型并不是由文件后缀名决定。
  • 那我们再用gcc 编译一个文本文件
    在这里插入图片描述
  • 有人这时候就说了,你不是说Linux系统中,文件的类型不是由文件后缀名决定的吗,这里gcc为啥编译不过去,对了,我是说的是系统,那么gcc是一个系统吗,不是吧,他是一个编译软件,他并不是一个Linux自带的,相当于是一个外带的工具,他的识别文件的方式就必须要以.c为后缀名的文件,这和linux系统的识别方式不一样。

文件自身的属性【⭐】

在这里插入图片描述

文件访问者的三种权限【rwx】

  • 对于这么多的文件属性,现在我们来重点讲解三个文件访问者的权限
    在上面的文件属性中,我已经说明第一个rwx是文件拥有者的,后面两组对于文件所属组和other用户。

  • r(读), 对于目录文件,代表可以该目录的信息权限

  • w(写), 对于目录文件,代表可以修改该目录文件的属性权限

  • x(执行), 对于目录文件,代表可以进入该目录权限

  • rwx就是该访问者对文件读,写,执行权限都有

  • r-x就是该访问者对文件只具有读和执行权限,不具有写权限。

总结:以此类推,如果rwx中三个位置,如果位置上是-,代表不具有该位置对应的权限。

文件权限值的表示方法

  • 对于r权限,用4来表示
  • 对于w权限,用2来表示
  • 对于x权限,用1来表示

也就是说,例如文件拥有者的权限是rwx,他的权限值是7,r(4) + w(2) + x(1) = 7,以此类推

  • 下面用两张图来表示两种权限的表示方法
    在这里插入图片描述

在这里插入图片描述

文件访问权限的相关设置方法

chmod——设置文件的访问权限

  • 功能:设置文件的访问权限 格式:chmod [参数] 权限 文件名
  • 常用选项: R -> 递归修改目录文件的权限
    说明:只有文件的拥有者和root才可以改变文件的权限

修改访问者权限的两种方式

1.用户标识符+权限字母
首先是对于要修改身份的对应字符,也就是我们在上面说到的【拥有者】、【所属组】、【other】

  • 拥有者 —— u(user)
  • 所属组 —— g(group)
  • other —— o(other)
  • 所有人 —— a(all)【可以操作以上全部】
    如果要修改他们的权限,也就是【rwx】以及【-】这个四种权限的状态,只需要使用到±即可。下面我来左一系列的演示

给拥有者添加【读】的权限—— r

在这里插入图片描述
给所属组添加【写】的权限—— w
在这里插入图片描述
————能够添加权限,那能不能删除权限呢?————
给拥有者删除【执行】的权限—— x
在这里插入图片描述
在这里插入图片描述
2.八进制操作
给拥有者、所属组、other都添加【读】和【写】的权限—— 666
在这里插入图片描述
将拥有者、所属组、other的所有权限都删除—— 000
在这里插入图片描述

首次遇到Permission denied

在这里插入图片描述

  • 这里我把ljj这个文件拥有这对log.txt文件的读权限去掉了,可以看到我们现在使用cat 打印无法读取打印
    在这里插入图片描述
  • 这个时候我又把other用户的读权限也去掉,那么root也是属于other用户
  • 这时候root说,你看不了,我来看,ljj用户说你拿去看吧,我自己的文件我都没有权限看,我看你也没有权限看
  • 在这里插入图片描述
  • 这时候可以看到,root他没有权限居然也能看这个文件,所以说,不受大多数的权限所限制root

Linux下一个用户扮演多个角色的身份确认

在这里插入图片描述

  • 可以看到,即使ljj是文件所属组的成员,并且文件所属组是具有读权限依然不能读这个文件
  • 所以意思就是进行身份确认的时候,依次确认,如果ljj既是拥有者也是所属组,那么只看拥有者的权限,这里拥有者的权限不能读,系统就确定ljj这个账号没有读这个文件的权限,直接忽略了后面所属组也是ljj具有读权限,这就是一个账号具有两种或三种身份的时候,权限的决定

Linux下的三个重要权限【⭐⭐⭐面试常考】

目录权限

  • cd 进入到一个目录,需要可执行【x】权限
  • ls 查看目录中的文件内容,需要读【r】权限
  • touch、echo 在目录中创建文件;rm 删除文件,需要写【w】权限
    在这里插入图片描述
  • 可以看到,我们进去目录的权限并不是rw,而是x权限

默认权限

文件的起始权限与默认权限

目录文件起始权限:【777】
普通文件起始权限:【666】

  • 在Linux中,我们在创建出来一个文件后,你是否有观察过访问者的初始默认权限是怎样的,也就是【拥有者】【所属组】【other】三者所组成的9位三三一组的八进制数字,我们一起来看看
    在这里插入图片描述
  • 可以看到,对于root超级用户来说,创建目录默认权限为【7 5 5】,创建普通文件的默认权限为【6 4 4】;而对于普通用户来说,创建目录的默认权限为【7 7 5】,创建普通文件的默认权限为【6 6 4】
  • 这是为什么呢?目录的起始权限为【777】,文件的起始权限为【666】,让我们一起看下去吧👇

umask权限掩码

功能:查看或修改文件掩码
格式:umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为【0022】,普通用户默认为【0002】

  • 可以初步看到,对于超级用户和普通用户,他们有着不同的权限掩码值,所以创建出来的文件和目录会有着不一样的默认权限
  • 我们可以来查看一下普通用户和超级用户的umask权限掩码值

root超级用户
在这里插入图片描述
普通用户
在这里插入图片描述

位运算的细致讲解

  • 接下去拓展一块内容,因为要涉及到最终权限的计算,所以我们再来复习一下C语言中的位运算,位运算的运算符有很多,按位与【&】、按位或【|】、按位取反【~】、按位异或【^】,这里我们主要使用到的是按位与和按位取反

复习一下位运算的知识
① 取出一个8位二进制的后四位

  • 对于取出一个八进制的后四位,那我们只需要将前四位抹去,只留下后面四位即可,在按位与的运算中有这么一个逻辑,两个数按位与,只有全1才为1,只要有0即为0,那我们只需要让前四位均为0按位与,后四位均和1按位与即可

在这里插入图片描述
② 比特位填充

int a = 1;
  • 上面这一句简单的声明变量并且给它一个初始值的语句,相信大家都写过,但是你有仔细分析过这句代码吗,我们从字节和比特位的填充角度来看看
  • 整形是4个字节,也就是4B,计算机中1B=8bit,那4B = 32bit,所以变量a被分配到了32个比特位。因此我们可以这么来描述这一句代码

③ 比特位保留

int b = 1234;
b = b & 1;
  • 可以看到,把1写成32个比特位的话,只有最后一位是1,所以根据按位与的规则进行运算后可以知晓展开后32位的【1234】和1进行按位与之后就只会保留最后一个比特位,b的前31个比特位都会清零
    在这里插入图片描述④ 按位取反和按位与的结合
  • 现在我对上面的1做一个按位取反的操作,那么其32个比特位就变成了前31位全是1,最后一位是0,这么看来的话,和【1234】去进行一个按位与的运算后就会保留前31位,最后一位会被抹去,如下图所示
    在这里插入图片描述

最终权限

  • 最终权限 = 起始权限 & (~umask)
    在这里插入图片描述

umask修改

  • 对于这个【umask】权限掩码来说是可以修改的,这样就可以改变当前用户创建目录文件或普通文件时的最终权限了。我们一起再来看看
    在这里插入图片描述
  • 这时候创建目录的最终权限就不同了,因为umask掩码修改了,计算的值也就修改

umask权限掩码的作用

我们知道了最终权限是起始权限&(~umask)的结果,那么为啥要设置一个权限掩码呢?
比如说,用户说今天的需求是把最终权限改成666,你卡卡卡一段造,把最终权限一下子全部改成666,但是明天呢,用户又说把最终权限改成777,你也咔咔咔一段改,后天呢,用户说把最终权限又要改成655,有没有发现,这样维护非常麻烦,要一个一个改,如果我们维护的设备越多,越处理不过来,这时候我们为什么不设置一个快速修改的方法,就是如这个权限掩码,只需要改一个数字就可以解决所以设备。

粘滞位【⭐】

背景及准备

  • 当我们在使用Linux的时候,未来可能会有一些共享目录,被所有普通用户共享,用来保存普通用户产生的临时数据。我们首先来创建一个共享目录
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 我们zs和ljj两个用户都在这个共享目录里面创建了自己的文件

在这里插入图片描述

  • 所以zs可以看ljj的文件

  • 但是这时候ljj不想让zs看他的ljj_1.txt这个文件了就把权限修改成
    在这里插入图片描述

  • 只有ljj才能读写和执行这个文件
    在这里插入图片描述

  • 这是不是很离谱了,王者荣耀吕布内行:《无法得到,那就将他彻底毁掉》

  • 那这到底是为啥呢,ljj已经设置了怎么多权限还被zs删除了,接下来讲解

  • 其实我在前面目录权限哪里已经说过,目录里的资源删除和修改是由目录的写(w)权限决定的。
    所以我们来看看public的写权限
    在这里插入图片描述

  • 明显看到,文件拥有者和文件所属组和other用户都是具有读写执行权限的。那么有人就说了那把other的写权限去了不就可以了吗,是可以,但是这个文件是在根目录下创建的,文件拥有者和所属组都是root,把other的写权限关了,那么ljj和zs都不能在共享目录中创建和修改文件,那还共享啥呢?

  • 有人说,用ljj或zs创建一个共享目录。可惜的是,这里是根目录,必须要是root才能创建文件

  • 那为啥非要在根目录里面创建呢?

我如果想要linux在不同的账号共享文件,只能在其他目录下,因为各个用户的家目录是相互隔离的,每个用户只能进对应自己的家目录。所以我们到提权到root的根目录下创建目录共享,但是却发现我们创建目录的文件居然会被other删除,是因为目录中的文件修改删除操作是由目录的w权限决定了,也就是目录是三体人,文件是普通人,普通人的生死由三体人决定,这时候如果把目录的other角色的w权限关闭,共享文件的用户也不能对目录中的共享文件进行修改了,这时候我们就不能这样暴力解决,在目录的other角色的权限中加一个粘滞位t,里面的共享文件除了文件拥有者和root账号以外都不能删除

添加粘滞位防止别人恶意删除

  • 为了让大家可以共享使用这个目录,但是呢又不想让别人删除自己的文件,此时我们就引入了一个东西叫做——【粘滞位】。那如何去添加这个粘滞位呢,很简单,只需要执行下面这个指令即可
chmod +t public

在这里插入图片描述

  • 在权限最后有一个t就成功添加了
  • 这个时候zs再故技重施去删ljj_2.txt
    在这里插入图片描述
  • 就别想得逞了

如何删除粘滞位目录

设置了粘滞位后的目录,谁能删除自己的文件?

自己(文件的拥有者)当然可以删,还有百无禁忌的【root】┗|`O′|┛
所以对于目录来说就看other的最后一个权限是否为【t】,若是t的话表示这个目录加上了粘滞位,你是不可以删除其他人的文件的;若是没有t的话,就看other有没有【w】权限,若有的话就可以删了

end

好了,权限这块我就说清楚了,希望对大家有用,快去codIng一下吧

相关文章:

【Linux】Linux 权限:数字背后的神秘 “门禁卡” 系统

目录 权限的基本概念Linux上用户的分类超级用户和普通用户用户之间的切换文件访问者的分类 文件属性与访问权限Linux下的文件类型文件后缀在Linux中的作用文件自身的属性【⭐】文件访问者的三种权限【rwx】文件权限值的表示方法 文件访问权限的相关设置方法chmod——设置文件的…...

Java中List方法的使用详解

目录 一、List接口概述二、List常用方法(一)创建List对象(二)添加元素(三)删除元素(四)查找元素(五)遍历列表(六)列表的大小&#xff…...

多模态大语言模型arxiv论文略读(十一)

Can We Edit Multimodal Large Language Models? ➡️ 论文标题:Can We Edit Multimodal Large Language Models? ➡️ 论文作者:Siyuan Cheng, Bozhong Tian, Qingbin Liu, Xi Chen, Yongheng Wang, Huajun Chen, Ningyu Zhang ➡️ 研究机构: 浙江大…...

JS—防抖和节流:1分钟掌握防抖和节流

个人博客:haichenyi.com。感谢关注 一. 目录 一–目录二–防抖三–节流四–进阶应用五–总结 二. 防抖(Debounce) 防抖(Debebounce)和节流(Throttle)都是前端开发中用于优化高频事件性能的两…...

MCP基础学习二:MCP服务搭建与配置

文章目录 MCP服务搭建与配置一,学习目标:二,学习内容:1. 如何搭建MCP服务端服务端初始化与配置MCP服务架构与数据流交互图核心实现注册服务功能服务器启动与API暴露 2. 本地应用与MCP服务的集成客户端SDK实现客户端应用实现功能演…...

MyBatis 操作数据库

目录 什么是MyBatis? 注释 Mapper注释的介绍和使用 Select注释的介绍和使用 SpringBootTest注释的介绍和使用 Test注释的介绍的使用 MyBatis入门​ 1&#xff09;准备工作 <1>创建工程​ <2>数据准备​ 2&#xff09;配置数据库连接字符串 3&#xff…...

蓉光:科技与自然的千年交响

故事背景 故事发生在中国四川成都&#xff0c;这座千年古城在近未来完成蜕变&#xff0c;青城山的云雾与锦江的碧波间&#xff0c;智能建筑如雨后春笋般生长。全城建筑采用太阳能皮肤&#xff0c;街道流淌着数字化的都江堰水系&#xff0c;杜甫草堂的飞檐与机械芙蓉树共舞&…...

[C语言]gets和fgets函数区别及详解

一、gets 每当讨论 gets 函数时&#xff0c;大家不由自主地就会想起 1988 年的“互联网蠕虫”&#xff0c;它在 UNIX 操作系统的 finger 后台程序中使用一个 gets 调用作为它的攻击方式之一。很显然&#xff0c;对蠕虫病毒的实现来说&#xff0c; gets 函数的功劳不可小视。不…...

【场景应用3】audio_classification:音频分类的微调

1 引言 本笔记展示了如何对多语种预训练的语音模型进行微调,以实现自动语音识别(Automatic Speech Recognition)。 本笔记旨在使用SUPERB数据集中的关键词检测子集,并且可以使用任何来自模型库(Model Hub)的语音模型检查点,只要该模型有一个包含序列分类头(Sequence …...

【前端】【难点】前端富文本开发的核心难点总结与思路优化

前端富文本开发的核心难点总结 富文本编辑器在前端开发中广泛应用于内容管理系统、文章发布、评论区等场景。其开发与集成存在较多复杂性&#xff0c;涵盖内容结构管理、交互体验、跨平台兼容性等方面&#xff0c;以下逐项分析。 二、富文本开发的具体难点分析 &#xff08;一…...

如何优雅使用 ReentrantLock 进行加解锁:避免常见坑点,提高代码可维护性

引言&#xff1a;锁的基本概念和问题 在多线程编程中&#xff0c;为了确保多个线程在访问共享资源时不会发生冲突&#xff0c;我们通常需要使用 锁 来同步对资源的访问。Java 提供了不同的锁机制&#xff0c;其中 ReentrantLock 是一种最常用且功能强大的锁&#xff0c;它属于…...

帕金森患者行动迟缓,日常生活怎么破局?

帕金森病&#xff0c;是一种常见于中老年人的神经退行性疾病&#xff0c;正悄然改变着无数患者的生活轨迹。它初期症状隐匿&#xff0c;常以手抖为信号&#xff0c;起初可能只是在安静状态下&#xff0c;手部出现轻微且有节律的震颤&#xff0c;随着时间推移&#xff0c;震颤逐…...

7-openwrt-one通过web页面配置访客网络、无线中继等功能

前几个章节一直在介绍编译、分区之类的,都还没正常开始使用这个路由器的wifi。默认wifi是没有启动的,前面还是通过手动修改uci配置启动的,这个章节介绍下官方web页面的使用。特别是访客网络、无线中继 1、开启wifi,配置wifi基本信息 我们使用有线连接路由器,通过192.168.…...

塑造现代互联网的力量:Berkeley在网络领域的影响与贡献

引言 “Berkeley” 这个名字在计算机网络和互联网领域中具有举足轻重的地位&#xff0c;许多关键的技术、协议和工具都与其紧密相关。它与 加利福尼亚大学伯克利分校&#xff08;UC Berkeley&#xff09; 密切相关&#xff0c;该校在计算机科学与网络研究中做出了许多开创性的…...

大数据学习(105)-Hbase

&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一…...

c# 系列pdf转图片 各种处理3--net3.1到net8 PDFtoImage

最近一直在做pdf渲染图片的问题&#xff0c;nuget PDFtoImage 支持3.1到net8 &#xff0c;直接上代码 private static void DownloadFileAsync(string url, string localPath){using (HttpClient client new HttpClient()){client.DefaultRequestHeaders.Add("User-Agen…...

宁德时代25年春招笔试演绎数字推理SHL测评题库

宁德时代校招测评包含演绎推理数字推理两部分&#xff0c;请单击以下链接进行测评&#xff0c;详细操作指引请参见如下指引&#xff0c;请在测试前了解&#xff0c;大约用时60分钟。正式测评有两个部分:数字推理18分钟演绎推理18分钟&#xff0c;数字推理共10题&#xff0c;演绎…...

C# 看门狗策略实现

using System; using System.Threading;public class Watchdog {private Timer _timer;private volatile bool _isTaskAlive;private readonly object _lock new object();private const int CheckInterval 5000; // 5秒检测一次private const int TimeoutThreshold 10000; …...

聊透多线程编程-线程池-5.C# 线程池(ThreadPool)详解

1. 线程池的基本概念 线程池的作用 由于每创建一个线程都需要该线程分配一定的内存空间&#xff0c;因此创建大量线程会导致内存使用量迅速增加&#xff0c;并可能导致性能问题。线程池的主要目的是减少线程创建和销毁的开销&#xff0c;从而提高程序性能。线程池维护了…...

清华DeepSeek教程又双叒叕更新了!(共7份PDF下载)

清华团队的DeepSeek教程又双叒叕更新了&#xff0c;目前共计有7份DeepSeek的教程&#xff0c;分别是《DeepSeek从入门到精通》、《DeepSeek赋能职场》、《普通人如何抓住DeepSeek红利》、《DeepSeekDeepResearch&#xff1a;让科研像聊天一样简单》、《DeepSeek与AI幻觉》、《A…...

免费在线文档工具,在线PDF添加空白页,免费在任意位置插入空白页,多样化的文件处理

小白工具&#xff08;https://www.xiaobaitool.net/files/pdf-add-page/ &#xff09;是一款免费的在线文档工具&#xff0c;专注于为用户提供便捷的 PDF 空白页添加服务。 功能特点&#xff1a;该工具支持在 PDF 文件的任意位置插入单页或多页空白页&#xff0c;能满足用户不同…...

MATLAB在哪些特定领域比Python更有优势?

文章目录 前言科学研究与工程计算数值计算信号处理控制系统设计 教育领域易于学习和上手教学资源丰富 快速原型开发集成开发环境便捷 前言 MATLAB 在以下特定领域比 Python 更具优势&#xff1a; 科学研究与工程计算 数值计算 高效矩阵运算&#xff1a;MATLAB 以矩阵为基本数…...

CAN协议

CAN简介 TJA1050(高速CAN收发器) 5V供电 界定符用来隔开各个数据 这个时候就要用到采样了 谁先谁后&#xff1f;&#xff1f;仲裁机制 发送邮箱用来放帧的 正常模式&#xff1a;正常收发 静默模式&#xff1a;只收不发 环回模式&#xff1a;不读&#xff0c;自己收 环回静…...

MFC案例:用鼠标移动窗口图像的实验

当使用基于对话框的MFC项目窗口显示图像时&#xff0c;如窗口的尺寸小于图像的尺寸&#xff0c;在不做缩放的情况下按照原图尺寸在窗口显示&#xff0c;那么只能看到图像的局部&#xff0c;这时我们希望可以通过鼠标移动图像进而显示其它部分。今天就进行这个实验&#xff0c;编…...

Linux基础IO(五)之用户缓冲区

文章目录 缓冲区FILE初步实现缓冲区 缓冲区 FILE 因为IO相关函数与系统调用接口对应&#xff0c;并且库函数封装系统调用&#xff0c; 所以本质上&#xff0c;访问文件都是通过fd访问的。 所以C库当中的FILE结构体内部&#xff0c;必定封装了fd。 编写代码and查看现象&…...

【Scrapy】Scrapy教程12——中间件

中间件这部分算是一个高阶的Scrapy内容,即便不了解这部分也可以使用Scrapy,但是一些特殊情况使用中间件就比较方便处理了,比如修改请求和响应等。 通过之前的工作原理图中,我们了解到Scrapy中有两个中间件,分别是下载器中间件和爬虫中间件,本节将一一讲解如何激活、编写自…...

C++学习之ORACLE①

目录 1.ORACLE数据库简介 2..ORACLE数据库安装 3..ORACLE体系结构 4..ORACLE基本概念 5..ORACLE基本元素 6..ORACLE数据库启动和关闭 7.SQLPLUS登录ORACLE数据库相关操作 8.SQLPLUS的基本操作 9.oracle中上课使用的方案 10.SQL语言分类 11.SQL中的select语句语法和注…...

vue---按钮防抖和节流----项目问题

一般来说前端都需要做按钮防抖避免一个时间被重复触发&#xff0c;首先可能会出现bug&#xff0c;消耗服务器性能&#xff0c;用户体验也不是很好。 1.防抖 解决方法&#xff1a;main.js文件自定义指令 Vue.directive("preventReClick", {inserted(el, binding) {…...

【LunarVim】解决which-key 自定义键位注册不成功问题

问题描述 LunarVim将which-key设置放在一个keymaps.lua中&#xff0c;然后config.lua调用reload “user.keymaps”&#xff0c;键位没用注册成功&#xff0c;而直接写在config.lua中&#xff0c;就注册成功 这暴露了LunarVim 插件和配置加载顺序的一些细节坑&#xff0c;下面解…...

湖北趣豆智能科技有限公司浅析XR技术对传统游戏的影响

在科技飞速发展的当下&#xff0c;XR&#xff08;扩展现实&#xff09;技术正以前所未有的态势重塑游戏行业格局。湖北趣豆智能科技有限公司凭借在XR技术与游乐设备融合领域的创新实践&#xff0c;对XR技术给传统游戏带来的影响有着深刻见解。 沉浸体验升级&#xff0c;重塑游戏…...

[操作系统] 进程间通信:system V共享内存

文章目录 内存共享示意图共享内存的管理代码shmget 函数原理先创建共享内存如何保证两个不同的进程拿到的是一块共享内存 shmctl 函数IPC_RMID参数 shmat函数无同步机制同步机制是什么模拟演示非同步效果如何提供保护机制 shmdt再谈描述共享内存的数据结构struct shmid_dsstruc…...

科技快讯 | 阿里云百炼MCP服务上线;英伟达官宣:CUDA 工具链将全面原生支持 Python

李飞飞团队最新AI报告&#xff1a;中美模型性能差距近乎持平 4月8日&#xff0c;斯坦福大学以人为本人工智能研究所发布《2025年人工智能指数报告》。报告显示&#xff0c;2023年AI性能显著提升&#xff0c;AI应用加速&#xff0c;投资增长&#xff0c;中美AI模型差距缩小。报告…...

踩雷,前端一直卡在获取token中

问题&#xff1a;一直卡在var token SecureStorage.Default.GetAsync("auth_token").Result; public VideoService(){_httpClient new HttpClient();var token SecureStorage.Default.GetAsync("auth_token");} 这是一个典型的同步等待异步操作导致的死…...

MATLAB双目标定

前言&#xff1a; 现在有许多双目摄像头在出厂时以及标定好&#xff0c;用户拿到手后可以直接使用&#xff0c;但也有些双目摄像头在出厂时并没有标定。因而这个时候就需要自己进行标定。本文主要介绍基于matlab工具箱的自动标定方式来对双目相机进行标定。 1、MATLAB工具箱标…...

4.10学习总结

完成两道算法题&#xff08;感觉对贪心的思路很难去想到如何解&#xff09; 完成stream流的学习&#xff0c;开始学习方法引用...

QML自定义组件

自定义组件是 QML 开发中的核心概念&#xff0c;它允许您创建可重用的 UI 元素和逻辑单元。以下是创建和使用自定义组件的完整方法。 1. 基本自定义组件创建 创建单独组件文件 (推荐方式) qml // MyButton.qml&#xff08;单独一个qml文件&#xff09;import QtQuick 2.15R…...

多模态大语言模型arxiv论文略读(十)

Towards End-to-End Embodied Decision Making via Multi-modal Large Language Model: Explorations with GPT4-Vision and Beyond ➡️ 论文标题&#xff1a;Towards End-to-End Embodied Decision Making via Multi-modal Large Language Model: Explorations with GPT4-Vi…...

关于 Spring Boot + Vue 前后端开发的打包、测试、监控、预先编译和容器部署 的详细说明,涵盖从开发到生产部署的全流程

以下是关于 Spring Boot Vue 前后端开发的打包、测试、监控、预先编译和容器部署 的详细说明&#xff0c;涵盖从开发到生产部署的全流程&#xff1a; 1. 打包 1.1 后端&#xff08;Spring Boot&#xff09; 打包方式 使用 Maven 或 Gradle 打包成可执行的 JAR/WAR 文件&…...

【Raqote】 1.1 路径填充ShaderMaskBlitter 结构体(blitter.rs)

ShaderMaskBlitter 结构体实现了 Blitter trait&#xff0c;用于带遮罩的着色器渲染。 结构体定义 pub struct ShaderMaskBlitter<a> {pub x: i32, // 目标区域的起始x坐标pub y: i32, // 目标区域的起始y坐标pub shader: &a dyn Shader, //…...

如何用 esProc 实现 Oracle 和 MySQL 的混合运算

逻辑数仓可以实现多源混算&#xff0c;但需要配置视图、预处理数据&#xff0c;结构太沉重。duckdb 是轻量级的方案&#xff0c;但没有内置 Oracle 的 connector&#xff0c;自己开发难度又太高。同为轻量级方案&#xff0c;esProc 支持 JDBC 公共接口&#xff0c;可以实现任何…...

zabbix和prometheus选择那个监控呢

文章目录 Zabbix 介绍概述架构组成特点适用场景 Prometheus 介绍概述架构组成特点适用场景 Zabbix vs Prometheus 对比架构与组件Zabbix 架构Prometheus 架构 监控要点与最佳实践告警与可视化ZabbixPrometheus Alertmanager Grafana 伸缩与高可用ZabbixPrometheus 运维成本与…...

SQL 查询中使用 IN 导致性能问题的解决方法

当 SQL 查询中使用 IN 子句导致查询长时间运行或挂起时&#xff0c;通常是由于以下几个原因造成的&#xff1a; 常见原因 IN 列表中的值过多 - 当 IN 子句包含大量值时&#xff08;如数千或更多&#xff09;&#xff0c;数据库需要处理大量比较操作 缺乏合适的索引 - 被查询的…...

UML-饮料自助销售系统(无法找零)序列图

一、题目&#xff1a; 在饮料自动销售系统中&#xff0c;顾客选择想要的饮料。系统提示需要投入的金额&#xff0c;顾客从机器的前端钱币口投入钱币&#xff0c;钱币到达钱币记录仪&#xff0c;记录仪更新自己的选择。正常时记录仪通知分配器分发饮料到机器前端&#xff0c;但可…...

Go语言中的runtime包是用来做什么的?

在Go语言中&#xff0c;runtime包提供了与Go运行时系统的交互接口。以下是runtime包的主要功能和用途&#xff1a; 1. 运行时信息 runtime包可以获取关于Go程序运行时的信息&#xff0c;包括&#xff1a; 内存使用情况&#xff1a;可以查看内存分配和使用的统计信息&#xf…...

【Linux】用C++实现UDP通信:详解socket编程流程

文章目录 协议&#xff08;Protocol&#xff09;协议的核心要素常见协议分类 UDP协议&#xff08;用户数据报协议&#xff09;1. 基本定义2. 核心特性 UDP协议实现通信服务器端Comm.hppInetAddr.hppUdpServer.hppUdpServer.cc 客户端 总结 协议&#xff08;Protocol&#xff09…...

代码随想录-06-二叉树-02.二叉树的递归遍历

二叉树的递归遍历 递归思路 确定递归函数的参数parameter和返回值确定终止条件确定单层递归逻辑 具体代码 CPP 前序遍历 vector<int> res; void traversal(TreeNode *root){if(!root)return;res.push_back(root->val);traversal(root->left);traversal(root-…...

一文详解ffmpeg环境搭建:Ubuntu系统ffmpeg配置nvidia硬件加速

在Ubuntu系统下安装FFmpeg有多种方式,其中最常用的是通过apt-get命令和源码编译安装。本文将分别介绍这两种方式,并提供安装过程。 一、apt-get安装 使用apt-get命令安装FFmpeg是最简单快捷的方式,只需要在终端中输入以下命令即可: # 更新软件包列表 sudo apt-get updat…...

(四)深入理解AVFoundation-播放:高度自定义视频播放器 UI

引言 在之前的博客中&#xff0c;我们已经介绍了如何实现一个简单的播放器&#xff0c;并通过监听资源和播放器的属性来提升播放体验。因此本篇博客将带你进一步自定义播放器 UI。通过构建自己的播放控制界面&#xff08;如播放/暂停按钮、进度条、全屏切换等&#xff09;&…...

sqli-labs靶场 less6

文章目录 sqli-labs靶场less 6 报错注入 sqli-labs靶场 每道题都从以下模板讲解&#xff0c;并且每个步骤都有图片&#xff0c;清晰明了&#xff0c;便于复盘。 sql注入的基本步骤 注入点注入类型 字符型&#xff1a;判断闭合方式 &#xff08;‘、"、’、“”&#xf…...

数据库架构全解析:MyCat、MHA、ProxySQL 的原理、功能与实例

前言 &#xff1a; 在分布式数据库架构中&#xff0c;分库分表、高可用性&#xff08;HA&#xff09;和查询优化是核心需求。本文将深入解析三款主流工具&#xff1a;MyCat&#xff08;分布式数据库中间件&#xff09;、MHA&#xff08;MySQL高可用方案&#xff09;、ProxySQL…...