【Linux基础】权限管理

在这里插入图片描述

​👻内容专栏: Linux操作系统基础
🐨本文概括: 用户之间的切换、sudo提权、Linux权限管理、文件访问权限的相关方法、目录权限、粘滞位等
🐼本文作者: 阿四啊
🐸发布时间:2023.9.11

Linux权限

概念

Linux权限是一种关键的安全概念,用于控制用户对文件和目录的访问和操作。理解和管理权限对于确保系统的安全性和数据的保护至关重要。


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

  • 超级用户:可以再linux系统下做任何事情,不受限制
  • 普通用户:在linux下做有限的事情。
  • 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”

用户切换命令

普通用户切换到root用户

  • su root切换到root用户,但不改变环境

使用 su root 命令,将切换到root用户的身份,但不会改变当前环境设置。这意味着将继续使用原始用户的环境变量、路径设置等。
例如,如果使用 su root 切换到root用户,将继续使用原始用户的工作目录和shell配置。

[Asi@localhost ~]$ su root
Password: 
[root@localhost Asi]# exit
[Asi@localhost ~]$ 
  • su - root切换到root用户,同时改变环境

使用 su - root 命令,将切换到root用户的身份,并且会改变当前环境设置,包括工作目录、环境变量和shell配置。这样子会话更像是以root用户的身份登录系统一样。
例如,如果使用 su - root 切换到root用户,将获得root用户的工作目录和与root用户相关的环境设置。

[Asi@localhost ~]$ su - root
Password: 
Last login: Sun Sep 10 19:00:11 CST 2023 on pts/0
[root@localhost ~]# logout
[Asi@localhost ~]$ 

说明:普通账号更为root账号,

  • su:单纯的账号切换。
  • su -:让root账号重新登录。
  • 需要输入root用户的密码。

普通用户之间的切换

susu -命令切换到普通用户和root是一样的,所以你需要切换到另一个用户,前提还是需要知道Ta的密码啦~

[Asi@localhost ~]$ whoami
Asi
[Asi@localhost ~]$ su cyn
Password: 
[Asi@localhost ~]$ su - cyn
Password: 
[Asi@localhost ~]$ 

sudo提权

普通用户可以使用 sudo 执行需要root用户权限的命令,例如安装软件、修改系统配置文件或执行系统维护任务。

[Asi@localhost ~]$ sudo ls
[sudo] password for Asi: 
Asi is not in the sudoers file.  This incident will be reported.

若显示"xx is not in the sudoers file. This incident will be reported."说明该普通用户没有sudo权限,因为新建的普通用户默认不支持sudo权限。
在这里插入图片描述
需要编辑"sudoers"文件。步骤如下:

  1. 首先切换到root用户,输入以下命令(或使用 vim /etc/sudoers)
[root@localhost ~]# sudo visudo
  1. 在文件中查找下面的行(可以在底行模式输入/Allow搜索即可)
## Allow root to run ang commands anywhere
  1. 在上述行的下面,添加一行以允许普通用户使用sudo。例如,如果要允许用户"Asi"使用sudo,可以添加以下行:
    在这里插入图片描述

然后我们创建一个test.txt文件,是以普通用户Asi创建的,然后我们再用sudo命令创建一个test2.txt的文件,并没有要求我输入密码,是因为以方便普通用户在几分钟或者十几分钟之内可能仍需要强权执行任务。

[Asi@localhost ~]$ sudo ls
[sudo] password for Asi:
[Asi@localhost ~]$ touch test.txt
[Asi@localhost ~]$ ll
total 0
-rw-rw-r-- 1 Asi Asi 0 Sep 10 19:52 test.txt
[Asi@localhost ~]$ sudo touch test2.txt
[Asi@localhost ~]$ ll
total 0
-rw-r--r-- 1 root root 0 Sep 10 19:53 test2.txt
-rw-rw-r-- 1 Asi  Asi  0 Sep 10 19:52 test.txt

Linux权限管理

在linux操作系统当中,大多数的操作都涉及对于文件的操作。所以说,权限通常与文件、目录关联在一起。

文件访问者的分类(人)

  • 拥有者:文件和文件目录的所有者:u—User(中国平民 法律问题)
  • 所属组:文件和文件目录的所有者所在的组的用户:g—Group
  • other:其它用户:o—Others (外国人)

📌说明:那么上面的root用户和普通用户,与这里的用户有冲突吗?并不是,超级用户与普通用户是指具体的人,而这里的文件访问者可以看作一种角色,而具体的人,可以承担各种各样的角色。

文件类型和访问权限(事物属性)

[Asi@localhost ~]$ ll
total 4
-rw-rw-r-- 1 Asi Asi 103 Sep 11 10:31 test.txt

在这里插入图片描述

文件类型

⚠️注意:在Linux当中,Linux系统本身区分文件类型与后缀无关,是与该文件是否具有可执行权限有关,后缀是给人看的!

那么Linux文件类型如何分类呢?用第一列的第一个字符来区分文件类型。

  • d[directory]:文件夹
  • -:普通文件
  • l[link]:软链接(类似Windows的快捷方式)
  • b[block]:块设备文件(例如硬盘、光驱等)
  • p[pipe]:管道文件
  • c[char]:字符设备文件(例如屏幕等串口设备)
  • s[socket]:套接口文件

基本权限

  • 读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限。
  • 写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限。
  • 执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限。
  • “-” :表示不具有该项权限。

文件权限值的表示方法

  1. 字符表示方法
Linux表示说明Linux表示说明
r - -只读- w -仅可写
- - x仅可执行r w -可读可写
- w x可写可执行r - x可读可执行
r w x可读可写可执行- - -无权限
  1. 八进制数值表示方法
权限符号八进制二进制
r4100
w2010
x1001
r w6110
r x5101
w x3011
r w x7111
- - -0000

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

1. chmod命令

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

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

  • 常用选项

    • R->递归修改目录文件的权限
    • 说明:只有文件的拥有者和root才可以修改文件的权限
  • chmod命令权限值的格式

    • ①用户标识符+、-、=权限字符

    权限符号
    +:向权限范围增加权限代号所表示的权限
    -:向权限范围取消权限代号所表示的权限
    =:向权限范围赋予权限代号所表示的权限
    用户标识符:
    u:拥有者
    g:拥有者同组用
    o:其它用户
    a:所有用户

    • 示例
    [Asi@localhost ~]$ ll
    total 4
    -rw-rw-r-- 1 Asi Asi   0 Sep 11 11:35 abc.txt
    -rw-rw-r-- 1 Asi Asi 103 Sep 11 10:31 test.txt
    [Asi@localhost ~]$ chmod u+x abc.txt
    [Asi@localhost ~]$ ll
    total 4
    -rwxrw-r-- 1 Asi Asi   0 Sep 11 11:35 abc.txt
    -rw-rw-r-- 1 Asi Asi 103 Sep 11 10:31 test.txt
    [Asi@localhost ~]$ chmod g+x,o+w abc.txt
    [Asi@localhost ~]$ ll
    total 4
    -rwxrwxrw- 1 Asi Asi   0 Sep 11 11:35 abc.txt
    -rw-rw-r-- 1 Asi Asi 103 Sep 11 10:31 test.txt
    [Asi@localhost ~]$ chmod a+x test.txt
    [Asi@localhost ~]$ ll
    total 4
    -rwxrwxrw- 1 Asi Asi   0 Sep 11 11:35 abc.txt
    -rwxrwxr-x 1 Asi Asi 103 Sep 11 10:31 test.txt
    [Asi@localhost ~]$ chmod u=rw test.txt 
    [Asi@localhost ~]$ ll
    total 4
    -rwxrwxrw- 1 Asi Asi   0 Sep 11 11:35 abc.txt
    -rw-rwxr-x 1 Asi Asi 103 Sep 11 10:31 test.txt
    
    • ②三位八进制数字
      示例:
    [Asi@localhost ~]$ ll
    total 4
    -rwxrwxrw- 1 Asi Asi   0 Sep 11 11:35 abc.txt
    -rw-rwxr-x 1 Asi Asi 103 Sep 11 10:31 test.txt
    [Asi@localhost ~]$ chmod 664 abc.txt
    [Asi@localhost ~]$ ll
    total 4
    -rw-rw-r-- 1 Asi Asi   0 Sep 11 11:35 abc.txt
    -rw-rwxr-x 1 Asi Asi 103 Sep 11 10:31 test.txt
    [Asi@localhost ~]$ chmod 640 test.txt
    [Asi@localhost ~]$ ll
    total 4
    -rw-rw-r-- 1 Asi Asi   0 Sep 11 11:35 abc.txt
    -rw-r----- 1 Asi Asi 103 Sep 11 10:31 test.txt
    

2. chown命令

  • 功能:修改文件的拥有者
  • 格式:chown [参数] 用户名 文件名
  • 示例
    [Asi@localhost ~]$ chown user1 test.txt
    chown: changing ownership of ‘test.txt’: Operation not permitted
    [Asi@localhost ~]$ sudo chown user1 test.txt
    [Asi@localhost ~]$ ll
    total 4
    -rw-rw-r-- 1 Asi   Asi   0 Sep 11 11:35 abc.txt
    -rw-r----- 1 user1 Asi 103 Sep 11 10:31 test.txt
    

3. chgrp命令

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

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

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

  • 示例

    [Asi@localhost ~]$ sudo chgrp user1 test.txt
    [sudo] password for Asi: 
    [Asi@localhost ~]$ ll
    total 4
    -rw-rw-r-- 1 Asi   Asi     0 Sep 11 11:35 abc.txt
    -rw-r----- 1 user1 user1 103 Sep 11 10:31 test.txt
    

4. umask命令

  • 前提:我们先研究一下默认权限
    通过观察,我们可以看到创建普通文件的默认权限用八进制数字表示是664
    创建目录文件的默认权限用八进制数字表示是775

    [Asi@localhost ~]$ touch test1.txt
    [Asi@localhost ~]$ mkdir dir1
    [Asi@localhost ~]$ ll
    total 8
    drwxrwxr-x 2 Asi   Asi   4096 Sep 11 13:16 dir1
    -rw-rw-r-- 1 Asi   Asi      0 Sep 11 13:16 test1.txt
    
  • 功能:查看或修改文件权限掩码

    • 新建文件起始权限为666,新建目录起始权限为777
    • 所以实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到权限掩码umask的影响。
  • 格式umask [权限值]
    我们可以输入umask查看Linux的默认权限掩码为0002,是需要看后三位,第一位告诉我们为八进制数字,不需要管第一位。那么我们使用umask 0004修改权限掩码之后,再次创建test2.txt文件,发现这个文件的权限变为了662,咦,那么最终的权限是怎么推算的呢?

    [Asi@localhost ~]$ umask
    0002
    [Asi@localhost ~]$ umask 0004
    [Asi@localhost ~]$ touch test2.txt
    [Asi@localhost ~]$ ll
    total 8
    drwxrwxr-x 2 Asi   Asi   4096 Sep 11 13:16 dir1
    -rw-rw-r-- 1 Asi   Asi      0 Sep 11 13:16 test1.txt
    -rw-rw--w- 1 Asi   Asi      0 Sep 11 13:27 test2.txt
    
  • 规则最终权限 = 起始权限 & (~umask) .凡是在权限掩码中出现的权限,最终都要在起始权限中去掉。在这里插入图片描述
    那么,最终的权限就是单纯的起始权限减去umask所得到的结果吗?

    • 验证:
      如果对于一个普通文件起始权限为666,将权限掩码设为003,那么最终普通文件权限会是我们计算的rw-rw--wx权限吗?
      在这里插入图片描述
      我们执行umask 0003,创建一个test3.txt文件,然后执行ll命令,发现此普通文件的权限为rw-rw-r-- .结果是怎么回事呢?
    [Asi@localhost ~]$ umask 0003
    [Asi@localhost ~]$ touch test3.txt
    [Asi@localhost ~]$ ll
    total 8
    -rw-rw-r-- 1 Asi   Asi      0 Sep 11 14:03 test3.txt
    

    👇🤔让我们具体分析一下:
    在这里插入图片描述

    所以我们的计算并不是相减那么简单,当然也并不复杂,这里就需要用到按位与运算符&来计算。我们知道,1 & 1 = 1, 1 & 0 = 0 ,0 & 1 = 0, 0 & 0 = 0,所以我们可以先对umask按位取反再按位与上起始权限,所得到的就是最终权限了。

5. file 命令

  • 功能说明:辨识文件类型
  • 语法: file [选项] 文件或目录
  • 常用选项
    • -c 详细显示指令执行过程,便于排错或分析程序执行的情形。
    • -z 尝试去解读压缩文件的内容

目录的权限

可执行权限: 如果目录没有可执行权限, 则无法cd到目录中。
可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容。
可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件。
  1. 进入一个目录,需要什么权限呢?
    我们对拥有者的rwx权限进行了验证,最后没有x权限的情况下,系统提示:-bash: cd: dir: Permission denied,所以,进入一个目录,需要执行权限

    [Asi@localhost study]$ mkdir dir
    [Asi@localhost study]$ ll dir
    total 0
    [Asi@localhost study]$ ll
    total 4
    drwxrwxr-x 2 Asi Asi 4096 Sep 11 14:53 dir
    [Asi@localhost study]$ chmod u-r dir
    [Asi@localhost study]$ cd dir
    [Asi@localhost dir]$ cd ..
    [Asi@localhost study]$ chmod u+r,u-w dir
    [Asi@localhost study]$ cd dir
    [Asi@localhost dir]$ cd ..
    [Asi@localhost study]$ chmod u+w,u-x dir
    [Asi@localhost study]$ ll
    total 4
    drw-rwxr-x 2 Asi Asi 4096 Sep 11 14:53 dir
    [Asi@localhost study]$ cd dir
    -bash: cd: dir: Permission denied
    
  2. 那么对于一个目录的r权限,将有什么限制呢?
    通过下面验证,我们可以知道,是否允许一个指定用户查看目录的文件列表,需要r权限

    [Asi@localhost study]$ ll
    total 4
    d-wxrwxr-x 2 Asi Asi 4096 Sep 11 14:53 dir
    [Asi@localhost study]$ cd dir
    [Asi@localhost dir]$ ls
    ls: cannot open directory .: Permission denied
    [Asi@localhost dir]$ touch test.txt
    [Asi@localhost dir]$ ll
    ls: cannot open directory .: Permission denied
    
  3. 那么对于一个目录的w权限,将有什么限制呢?
    我们删去了dir目录的w权限,发现可以进入该目录,可以查看该目录的文件列表,但是不可以在该目录下创建文件

    [Asi@localhost study]$ chmod u+r,u-w dir
    [Asi@localhost study]$ ll
    total 4
    dr-xrwxr-x 2 Asi Asi 4096 Sep 11 15:03 dir
    [Asi@localhost study]$ cd dir
    [Asi@localhost dir]$ pwd
    /home/Asi/study/dir
    [Asi@localhost dir]$ ll
    total 0
    -rw-rw-r-- 1 Asi Asi 0 Sep 11 15:03 test.txt
    [Asi@localhost dir]$ touch test1.txt
    touch: cannot touch ‘test1.txt’: Permission denied
    

于是, 问题来了~~
换句话来讲, 就是只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限.
这好像不太对啊, 我张三创建的一个文件, 凭什么被你李四可以删掉? 我们用下面的过程印证一下。

[root@localhost ~]# chmod 0777 /home/
[root@localhost ~]# ls /home/ -ld
drwxrwxrwx. 3 root root 4096 9月 19 15:58 /home/
[root@localhost ~]# touch /home/root.c
[root@localhost ~]# ls -l /home/
总用量 4
-rw-r--r--. 1 root root 0 9月 19 15:58 abc.c
drwxr-xr-x. 27 lisi lisi 4096 9月 19 15:53 lisi
-rw-r--r--. 1 root root 0 9月 19 15:59 root.c
[root@localhost ~]# su - lisi
[lisi@localhost ~]$ rm /home/root.c #lisi可以删除root创建的文件
rm:是否删除有写保护的普通空文件 "/home/root.c"?y
[lisi@localhost ~]$ exit
logout

一般而言,不同的账号是不会在同一目录下的。

因为默认新建的用户,只有拥有者,也就是`root`才具有权限。
[root@localhost home]# ll
total 24
drwx------ 3 admin    admin    4096 Aug 31 11:14 admin
drwx------ 4 Asi      Asi      4096 Sep 11 14:52 Asi
drwx------ 2 zhangsan zhangsan 4096 Sep 11 12:56 user1
drwx------ 2 zhangsan zhangsan 4096 Sep 11 15:25 zhangsan

   那么假如有特殊情况,应任务需要,在一个团队中多个账号协同共享一些数据呢?这样就不会在某一个人的主工作目录之下,而是在root用户的根目录下创建一个名为shared的目录,要求团队用户都在这个share路径下工作,那么此时对于root的角度来说,other的rwx权限也需要同时放开,那么为了避免他人删除该目录下的一些共享数据(假如两人闹掰了,张三想要删除李四在shared目录里写的文件),此时w权限是不是应该取消呢? 如果取消,那么团队里的成员该如何往shared里面写数据呢?
   这样的问题是不是很棘手,下面针对这个问题,我们引入粘滞位的概念。

粘滞位

[root@localhost ~]# chmod +t /home/ # 加上粘滞位
[root@localhost ~]# ls -ld /home/
drwxrwxrwt. 3 root root 4096 9月 19 16:00 /home/
[root@localhost ~]# su - litao
[litao@localhost ~]$ rm /home/abc.c #litao不能删除别人的文件
rm:是否删除有写保护的普通空文件 "/home/abc.c"?y
rm: 无法删除"/home/abc.c": 不允许的操作

当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由

一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除 

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

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

相关文章

elasticsearch的DSL查询文档

DSL查询分类 查询所有:查询出所有数据,一般测试用。例如:match_all 全文检索(full text)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如: match_query multi_ma…

在Qt创建的UI中放一个显示点云的窗口(PCL+QT5)

1、首先在Qt Designer创建UI后,拖一个Widget窗口出来 2、在对象查看器中右击该Widget,选择提升窗口部件,如下操作: 3、把UI转出来放在VS项目中,其中你的UI代码头文件会自带QVTKOpenGLNativeWidget.h,当然你…

小谈设计模式(1)—总序

小谈设计模式(1)—总序 开始操作设计模式总论设计模式是什么组成要素模式名称问题描述解决方案效果描述 设计模式有什么作用提供可重用的解决方案提高代码的可读性和可维护性促进代码的可扩展性提高代码的灵活性和可重用性促进团队合作和沟通作用总结 为…

基于HBuilder X平台下的 驾校报名考试管理系统 uniapp 微信小程序3n9o5

本课题研究的是基于HBuilder X系统平台下的驾校管理系统,开发这款驾校管理系统主要是为了帮助学员可以不用约束时间与地点进行查看教练信息、考场信息等内容。本文详细讲述了驾校管理系统的界面设计及使用,主要包括界面的实现、控件的使用、界面的布局和…

【计算机网络】 TCP协议头相关知识点

文章目录 TCP协议头 TCP协议头 我们来看一下TCP协议头里都有什么东西,研究一下为什么TCP协议是可靠的呢 TCP协议可靠是因为在协议头里带着一些校验的数据 首先是源端口和目的端口,这两个是UDP中也有的,但是UDP中只有这两个,没有…

基于Linux的智能家居(工厂模式)

目录 1.项目概述 2.程序框架 3.函数准备 3.1需要函数知识点 3.2编码提醒 4.代码 5.注意事项 1.项目概述 控制端有两个,语音串口UART和Tcp通讯。 执行端有IO输出和IO输入。 2.程序框架 程序分为3部分-------------1.输入控制 2.输出设备 3.主函数-多线程…

文件上传漏洞案例

目录 1.案例一 1)案例源码 2)创建web.php文件 3)使用抓包软件 2.案例二 1)案例代码 2) 案例分析 3)copy命令生成图片马 4)上传图片马到服务器 5)解析 文件图片 3.案例三 …

计算机系统的基本概念

计算机系统的基本概念 本文主要以hello.c这个程序的整个生命周期来简单了解一下计算机系统结构的基本概念。 #include <stdio.h>int main() {printf("hello, world\n");return 0; }gcc hello.c -o hello ./hello hello, world此刻&#xff0c;hello.c源程序…

访问局域网内共享文件时报错0x80070043,找不到网络名

我是菜鸡 此篇只为分享一个我遇到的很简单的但是排查了好久的小问题。 我的网络环境是在校园网内&#xff0c; 自己的办公电脑设置了固定IP&#xff1a;10.11.128.236&#xff0c;同事电脑IP为&#xff1a;10.11.128.255 本人需要访问同事在局域网内分享的文件&#xff0c;…

【Python爬虫实战】爬虫封你ip就不会了?ip代理池安排上

前言 在进行网络爬取时&#xff0c;使用代理是经常遇到的问题。由于某些网站的限制&#xff0c;我们可能会被封禁或者频繁访问时会遇到访问速度变慢等问题。因此&#xff0c;我们需要使用代理池来避免这些问题。本文将为大家介绍如何使用IP代理池进行爬虫&#xff0c;并带有代…

波奇学C++:多态知识点

多态中函数的重写&#xff08;基类指针访问派生类函数&#xff09;&#xff0c;只重写函数的实现&#xff0c;而不重写声明。 class Person { public:virtual void fun(int i 0){cout << "Person"<<" "<<i;} }; class Student:public …

命令执行漏洞(附例题)

一.原理 应用有时需要调用一些执行系统命令的函数&#xff0c;如PHP中的system、exec、shell_exec、passthru、popen、proc_popen等&#xff0c;当用户能控制这些函数的参数时&#xff0c;就可以将恶意系统命令拼接到正常命令中&#xff0c;从而造成命令执行攻击。 二.利用条…

Linux平台如何实现采集音视频数据并注入轻量级RTSP服务?

技术背景 好多开发者&#xff0c;问我们最多的问题是&#xff0c;为什么要设计轻量级RTSP服务&#xff1f;轻量级RTSP服务&#xff0c;和RTSP服务有什么区别&#xff1f; 针对这个问题&#xff0c;我们的回答是&#xff1a;轻量级RTSP服务解决的核心痛点是避免用户或者开发者…

dll修复精灵,dll修复工具下载方法分享,mfc140u.dll缺失损坏一键修复

今天&#xff0c;我将为大家分享一个关于mfc140u.dll的问题。首先&#xff0c;我想问一下在座的网友们&#xff0c;有多少人知道mfc140u.dll是什么&#xff1f;又有多少人知道它的作用以及如何解决这个问题呢&#xff1f;在接下来的演讲中&#xff0c;我将详细介绍mfc140u.dll的…

C#使用proto

写多了go代码&#xff0c;被go mod tidy惯坏了&#xff0c;还以为全天下的都很好用呢&#xff0c;结果发现并不是这样。尤其是项目组的proto还是又封了个工具直接就能跑得&#xff0c;导致以为没那么复杂的事情变得复杂了起来。是有两套生成的规则&#xff0c;时间有点晚&#…

虹科分享 | 解决外科医生的担忧:AR让技术自己开口说话

在手术室中&#xff0c;分心可能导致严重错误和伤害&#xff0c;这凸显了在手术过程中减少对外科医生干扰的重要性。对于外科医生来说&#xff0c;在长时间的手术过程中&#xff0c;引入新技术设备时需要考虑多种因素。根据Vuzix对500多名外科医生的综合调查显示&#xff0c;使…

LeetCode 865. Smallest Subtree with all the Deepest Nodes【树,DFS,BFS,哈希表】1534

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

机械零件保养3d模拟演示打消客户购买顾虑

复杂机械的工作运转是复杂的&#xff0c;想要对机械有深度的理解和迭代&#xff0c;必须了解它的运转原理及参数&#xff0c;复杂机械运行原因教学存在着不可视、系统庞杂及知识点多等弊病&#xff0c;3D虚拟展示是基于web3d网页运行的三维页面&#xff0c;可以将复杂机械运行过…

Java复习-20-接口(3)- 代理设计模式

代理设计模式(Proxy) 功能&#xff1a;可以帮助用户将所有的开发注意力只集中在核心业务功能的处理上。 代理模式(Proxy Pattern)是一种结构性模式。代理模式为一个对象提供了一个替身&#xff0c;以控制对这个对象的访问。即通过代理对象访问目标目标对象&#xff0c;可以在目…

uni-app开发小程序时ucharts图表如何使用

在此不会具体告诉大家怎么做&#xff0c;我只告诉大家方法&#xff1a; 第一步&#xff0c;推荐使用组件方法进行绘图&#xff0c;首先去官网下载这个ucharts的插件&#xff1a; 秋云 ucharts echarts 高性能跨全端图表组件 - DCloud 插件市场 下载完毕导入到所需要用到的项目…