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

Linux 用户身份切换(su,sudo)

文章目录

  • Linux 用户身份切换
    • su
      • 使用案例
    • sudo
      • 使用案例
    • visudo与/etc/sudoers
      • 单一用户可使用root所有命令,与sudoers文件语法
      • 利用wheel用户组以免密码的功能处理visudo
      • 有限制的命令操作
      • 通过别名创建visudo
      • sudo的时间间隔问题
      • sudo搭配su的使用方式

Linux 用户身份切换

什么?在Linux系统当中还要作身份切换?这是为什么?可能有下面几个原因

  1. 安全性:身份切换可以限制用户的权限,防止恶意操作和数据泄漏。
  2. 多用户环境:在多用户环境中,每个用户拥有自己的账户和权限,需要通过身份切换来切换用户。
  3. 程序运行:某些程序需要以不同的权限运行,例如管理员权限或普通用户权限,需要通过身份切换来切换权限。
  4. 系统管理:系统管理员需要在不同的身份之间切换,以便执行不同的系统管理任务。
  5. 学习和实践:学习Linux系统管理需要了解身份切换的操作和原理,以便更好地管理和维护系统。

那么如何让一般用户变身份成为root呢?主要有两种方式

  • 通过【su -】直接将身份变成root即可,但是这个命令却要root的密码,也就是说,如果你要通过su变成root的话,你的一般用户就必须要知道root的密码才行。

  • 通过【sudo命令】执行root的命令串,由于sudo需要事先设置妥当,且sudo需要输入用户自己的密码,因此多人共管一台主机时,sudo要比su要来的好,至少root密码不会流出去

su

在Linux系统中,su命令用于切换用户身份,其语法如下:

su [选项] [用户名]
选项解释
-表示切换到目标用户的环境变量,即切换到目标用户的家目录
-l与-相同,表示切换到目标用户的环境变量
-c执行完命令后,退出目标用户身份,返回原用户身份
-m-m与-p是一样的,表示【使用目前的环境设置,而不读取新使用者的配置文件】

使用案例

假设你原本是zhw的身份,想要使用su 命令把自己变成root

[zhw@root ~]$ su            # 现在是zhw的身份使用su切换root
密码:                       # 输入密码
[root@root zhw]# id         # 查看提示字符是root
uid=0(root) gid=0(root)=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023                  # 确实是root身份
[root@root zhw]# env |grep 'zhw'       
USER=zhw                         <== 竟然还是zhw这个身份
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/zhw/.local/bin:/home/zhw/bin    <==这个影响最大
MAIL=/var/spool/mail/zhw             
PWD=/home/zhw                   <== 并非root的家目录
LOGNAME=zhw
# 虽然你的UID已经是具有root身份,但是看到上面的输出信息了吗?
# 还是有一堆变量为原本zhw的身份,所以很多数据还是无法直接利用
[root@root zhw]# exit           <== 这样可以退出su的环境 也可以Ctrl + D

单纯的使用【su】切换成root身份,读取的变量设置方式为非登录shell的方式,这种方式很多原本的变量不会被修改,由于没有修改成root的环境,因此很多root常用的命令只能使用绝对路径来执行。还有MAIL这个变量,你输入mail时,收到的邮件竟然是zhw用户的,而不是root本身的邮件,所以切换身份时务必使用如下案例

使用login shell的方式切换为root的身份

[zhw@root ~]$ su -
密码:
上一次登录:二 411 14:52:22 CST 2023pts/2 上
[root@root ~]# env |grep root
HOSTNAME=root
USER=root
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
HOME=/root
LOGNAME=root
# 了解差异了吧?下次切换成为root时,记得最好用 su -
[root@root ~]# exit           <== exit退出su的环境

上述的做法是让用户的身份变成root并开始使用系统,如果想要退出root的身份则得要利用exit才行,那我如果至少想要执行【一个只有root才能执行的命令,且执行完毕就恢复原本的身份】呢?

zhw想要执行【head -n 3 /etc/shadow】一次,且知道root密码

[zhw@root ~]$ head -n 3 /etc/shadow
head: 无法打开"/etc/shadow" 读取数据: 权限不够
[zhw@root ~]$ su - -c 'head -n 3 /etc/shadow'
密码:
root:$6$0x0W5U0lAIGfNePS$fQegjEeiYdvyV7xK7zyhR9jsXzAwkB6XoA6RxpGo0X/uz8uPhblK9frf36sRtpdyNgJY4jZPQplMR1b/Hqgb9/::0:99999:7:::
bin:*:18353:0:99999:7:::
daemon:*:18353:0:99999:7:::
[zhw@root ~]$    # 注意看 这里执行完命令还是zhw的身份

那么如果我是root或是其他人,我想要切换成为某些特殊账户,可以使用如下的方法来切换

原本是zhw的用户,想要切换成pro1时?

[zhw@root ~]$ su -l pro1
密码:
-bash-4.2$ env |grep pro1
USER=pro1
MAIL=/var/spool/mail/pro1
PWD=/home/pro1
HOME=/home/pro1
LOGNAME=pro1
-bash-4.2$ su -
密码:
上一次登录:二 411 15:19:01 CST 2023pts/2 上
[root@root ~]# su -l sshd
This account is currently not available.         <== 竟然说此账户无法切换?
[root@root ~]# finger sshd
Login: sshd                             Name: Privilege-separated SSH
Directory: /var/empty/sshd              Shell: /sbin/nologin    # <== 原来shell是/sbin/nologin
Last login 二 411 15:24 (CST) on pts/2
No mail.
No Plan.[root@root ~]# exit     <== 退出第二次的 su 
-bash-4.2$ exit         <== 退出第一次的 su
[zhw@root ~]$           <== 这个才是最初的环境

su命令的优点:

su命令可以允许用户临时切换为另一个用户身份,方便执行需要特定权限的命令。

su命令可以避免用户频繁登录和退出,提高了系统使用效率。

su命令可以控制用户对系统的访问权限,增强了系统安全性。
su命令的缺点:

su命令需要用户输入目标用户的密码,如果密码被泄露,可能导致系统安全问题。

su命令切换为root用户身份后,用户可以执行任何命令,可能会造成系统的损坏或数据的丢失。

su命令无法控制用户对系统的访问权限范围,如果目标用户拥有过多的权限,可能会导致系统的安全性降低。

sudo

相对于su需要了解新切换的用户密码(常常是root的密码),sudo的执行则仅需要自己的密码即可,甚至可以设置不需要密码即可执行sudo。由于sudo可以让你以其他用户的身份执行命令(通常是使用root的身份来执行命令),因此并非所有人都能够执行sudo,而是仅有规范到/etc/sudoers内的用户才能够执行sudo这个命令。下面介绍一下sudo

sudo [选项] [命令]
选项
-u:指定要切换到的用户身份
-b:以后台模式运行命令

使用案例

想要以sshd的身份在/tmp 下创建一个名为mysshd的文件

[root@root zhw]# sudo -u sshd touch /tmp/mysshd
[root@root zhw]# ll /tmp/mysshd 
-rw-r--r--. 1 sshd sshd 0 411 15:47 /tmp/mysshd
# 留意以下,这个文件的权限是由sshd所建立的

但是使用sudo默认仅有root能使用,为什么?因为sudo的执行是这样的流程

sudo命令的执行流程如下:

  1. 用户输入sudo命令,并指定要执行的命令。
  2. 系统检查用户是否在sudoers文件中有相应的权限,如果没有,则提示用户无权执行该命令。
  3. 如果用户有权限执行该命令,则要求用户输入自己的密码,而不是目标用户的密码。
  4. 系统检查密码是否正确,如果正确,则将用户切换为目标用户身份,并执行命令。
  5. 执行完命令后,返回原用户身份。

所以说,sudo的执行的重点是【能否使用sudo,必须要看/etc/sudoers的设置值】由于能否使用与/etc/sudoers有关,所以我们当然要去编辑sudoers文件,不过该文件的内容有一定的规范,所以直接使用vi去编辑是不好的,此时,我们要通过visudo去修改这个文件

visudo与/etc/sudoers

从上面说明我们可以知道,除了root之外的其外账号,若想要使用sudo执行属于root的权限命令,则root需要先使用visudo去修改/etc/sudoers,让账号能够使用全部或部分的root命令功能,为什么要使用visudo呢??

使用visudo命令修改sudoers文件可以避免语法错误、竞争条件和自动备份,提高sudoers文件修改的安全性和正确性,方便了系统管理员对sudoers文件的管理

一般来说,visudo的设置有几种简单的方法,下面我们以几个简单的例子来说明:

单一用户可使用root所有命令,与sudoers文件语法

假如我们要让zhw这个账号可以使用root的任何命令,基本有两种语法,第一张是直接修改/etc/sudoers文件

[root@root zhw]# visudo
...(前面省略)...
root    ALL=(ALL)       ALL   # 搜索到这一行 
zhw     ALL=(ALL)       ALL   # 这一行是增加的
...(后面省略)...

我们来解释一下上面的参数(root ALL=(ALL) ALL)

  1. 第一个组件:表示授权的用户或用户组,这里是root用户。
  2. 第二个组件:表示用户或用户组执行命令的主机,这里是ALL,表示可以在任何主机上执行命令。
  3. 第三个组件:表示用户或用户组可以切换到的目标用户,这里是ALL,表示可以切换到任何用户的身份。
  4. 第四个组件:表示用户或用户组可以执行的命令,这里是ALL,表示可以执行任何命令。

修改后保存退出,登录到zhw用户,进行测试看看

[zhw@root ~]$ tail -n 5 /etc/shadow
tail: 无法打开"/etc/shadow" 读取数据: 权限不够
# 因为不是root,所以当然不能查询/etc/shadow
[zhw@root ~]$ sudo  tail -n 5 /etc/shadow   # 通过sudo执行
[sudo] zhw 的密码:                          # 输入自己的密码
myuser2:$6$WHRvq32S$d40vM5Qgw8q7zelrSyCPaeugrRQE94KLICed2RHjWaru3aN6gHoycRN6PTpRIL/rx271Oiqds/M5p2me2IUd11:19458:0:99999:7:::
myuser3:$6$1EIWjK3Y$V07xoA9T2zWtWjbq.C8zbfH1jD6uF5PzqGHS2JANbJyLcLVmNr6mNTJlD6Du7O2369k756FUbouyrQJUsRwqj0:19458:0:99999:7:::
pro1:$6$JyB/VQok$uLn7kywLiGZzYE1CpwZprx5U1fc8EX6JJv2f1e50lJNByJ7Out/JidM8C4GxpAJgESpufvDQxU3iUfYEJGoMG.:19458:0:99999:7:::
pro2:$6$tStx6sam$nn6PawgEIgeqK886H1iWtuhC98h2s0BkawWMFfX98W.RyWcwaeZmL1kesXC3gRFCLf8/5TPqCr8.KzwXOogA50:19458:0:99999:7:::
pro3:$6$IAko7jZE$Mw6oy.c80tcqc/.WpXTLK3Zm7QkHCCKiX.DxyAhUARQY1N5tRAPQEPBXe0oFssxeDFxFGglSdcEud/ij8VEt/.:19458:0:99999:7:::
# 看执行成功了可以查询shadow了

zhw输入自己的密码能够执行root的命令了,另外,一个一个设置太麻烦了,能不能使用用户组的方式来设置?参考下面方案

利用wheel用户组以免密码的功能处理visudo

之前的案例博客地址 , 任务一和任务二

我们在之前的账户管理案例中建立了pro1,pro2,pro3,能否通过用户组的功能让这三个人可以管理系?可以很简单,如下案例

[root@root zhw]# visudo
...(前面省略)...
%wheel  ALL=(ALL)       ALL   # 把这行的#拿掉
# 在最左边加上%,代表后面接的是一个【用户组】,改完保存退出
...(后面省略)...
[root@root zhw]# usermod -aG wheel pro1   # 将pro1加入wheel的支持

上面的设置值会造成【任何加入wheel这个用户组的用户,就能够使用sudo切换任何身份来操作任何命令】,也可以将wheel改成你想要的组名,接下里分别切换身份成功pro1,pro2,试试sudo的运行

[pro1@localhost ~]$ sudo tail -n 5 /etc/shadow    # 这里的身份是pro1
[sudo] pro1 的密码:
zhw:!!:19459:0:99999:7:::
csq:!!:19459:0:99999:7:::
pro1:$6$8XzICuAG$PCIjmv4s13f4x4IRcb4thG96JX6Tnl.Ots08wlnmc6Ndkgrq4u9e2EYfhWn5YLksFgEX.ySPSGlfj839f7eyh/:19459:0:99999:7:::
pro2:$6$3.4UjuHd$v1lUPlXjpZ6vn9ewVN1NicSGv5tx9BhyCmrWNWd/xBAsxlXdJJJbovrB/ohR5AUeB5VRRSHcRSGv5o3AcuhS01:19459:0:99999:7:::
pro3:$6$ARlJULFa$BVrVHjmRQp7IgS5c4ViqpgN8DDN9O5b2qbnxhzPQvxessejHO0iVqmDcEikNMelu.Mni76NIfh.V3JlUn6nTQ0:19459:0:99999:7:::[pro2@localhost ~]$ sudo tail -n 5 /etc/shadow    # 这里的身份是pro2
[sudo] pro2 的密码:
pro2 不在 sudoers 文件中。此事将被报告。
[pro2@localhost ~]$ 

这样就立即用户组了吧?如果你想要pro3也支持这个sudo的话,不需要重新使用visudo,只要利用usemod去修改pro3的用户组支持,让pro3用户加入wheel用户组,那它就能够进行sudo了。

Centos7开始,在sudoers文件中,默认已经开发%wheel那一行,以前的Centos旧版本都没有启用

不过,既然我们都信任这些sudo的用户了,能否实现【不需要密码即可使用sudo】呢?

可通过一下方式实现:

[root@localhost ~]# visudo
.....
..
%wheel ALL=(ALL)       NOPASSWD: ALL    # 找到这行把前面的#去掉
...
....

重点是NOPASSWD 该关键字是免除密码输入的意思

有限制的命令操作

以上两点都可以让用户能够利用root的身份进行任何事情,这样总是不太好,如果我想让用户仅能够进行部分任系统任务。比如说,系统上面的myuser1仅能够帮root修改其他用用户的密码时,即【当用户仅能使用passwd这个命令帮忙root修改其他用户密码】时,该如何编写?可以这样做

[root@localhost ~]# visudo
....
..
myuser1  ALL=(ALL)      /usr/bin/passwd   # 添加这一行内容,后面的路径务必用绝对路径!
...
..

上述内容,设置值指的是 【myuser1可以切换为root使用passwd命令】,要注意必须要写绝对路径,否则visudo会出现语法错误

我们测试一下passwd是否可用:

[myuser1@localhost ~]$ sudo passwd myuser3   # 这里的身份是myuser1
[sudo] myuser1 的密码:                       # 输入myuser1的密码
更改用户 myuser3 的密码 。                     # 更改myuser3的密码
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[myuser1@localhost ~]$ sudo passwd root      # 发现能改root的密码!怎么会这样的?
更改用户 root 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

root的密码竟然能被myuser1的用户修改,下次root登录就登录不上去了,欲哭无泪,所以我们就要加上限制用户的命令参数,修改方法如下

[root@localhost ~]# visudo
....
..
myuser1  ALL=(ALL)      !/usr/bin/passwd,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root
....
..

在设置值中加上感叹号【 ! 】代表【不可执行】的意思。因此上面这一行会变成:可以执行【passwd 任意字符】,但是【passwd】与【passwd root】这两个命令例外,如此一来myuser1就无法修改root的密码了。这位用户可以具有root的能力,帮助root修改其他用户的密码,却不能随意修改root的密码。

通过别名创建visudo

如上述的第三点,如果我有15个用户需要加入刚刚的管理员行列,那么我是否要将上述那长长的设置15行呢?而且如果想要修改命令或者是新增命令,每一行都要设置很麻烦。有没有更简单的方法呢?可以设置别名,visudo的别名可以是【命令别名、账号别名、主机别名】等。这里仅介绍一下账号别名

假如我的pro1、pro2、pro3、与myuser1、myuser2要加入上述的密码管理员的sudo列表中,那我可以创建一账号,别名为ADMPW,然后将这个名称处理一下,处理的方式如下

[root@localhost ~]# visudo         # 这里是root身份
....
..
User_Alias ADMPW = pro1, pro2, pro3, myuser1, myuser2
Cmnd_Alias ADMPWCOM = !/usr/bin/passwd,/usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
ADMPW ALL = (root) ADMPWCOM
....
..

我通过User_Alias 建立一个新账号,这个账号名称一定要使用大写字符来处理,包括Cmnd_Alias(命令别名),Host_Alias(来源主机别名),都需要使用大写字符。

User_Alias ADMPW = pro1, pro2, pro3, myuser1, myuser2

这行指定了一个名为ADMPW的用户别名,它包含了5个用户: pro1、pro2、pro3、myuser1和myuser2

Cmnd_Alias ADMPWCOM = !/usr/bin/passwd,/usr/bin/passwd [A-Za-z]* , !/usr/bin/passwd root
这行指定了一个名为ADMPWCOM的命令别名,它包含了3个命令: !/usr/bin/passwd、/usr/bin/passwd [A-Za-z]* !/usr/bin/passwd root。其中,!/usr/bin/passwd表示禁止使用passwd命令,/usr/bin/passwd [A-Za-z]* 表示使用passwd命令修改非root用户的密码,!/usr/bin/passwd root表示禁止使用passwd命令修改root用户的密码。

ADMPW ALL = (root) ADMPWCOM
这行指定了一个授权策略,它允许ADMPW用户别名中的所有用户,在所有主机上以任何方式(ALL)执行ADMPWCOM命令别名中的命令,但必须以root用户身份执行。也就是说,只有ADMPW用户别名中的用户才能执行ADMPWCOM命令别名中的命令,并且必须以root用户身份执行。

== 未来要修改时,我们只要修改 User_Alias以及Cmnd_Alias 这两行即可,设置方面比较有弹性 ==

sudo的时间间隔问题

或许你已经发现了,那就是如果我们使用同一个账号在短时间内重复操作sudo来运行命令的话,在第二次执行sudo时,并不需要自己的密码,sudo还是会正确的运行。为什么呢?第一次执行sudo需要输入密码,是担心由于用户暂时离开座位,但有人跑来你座位使用你的账号操作系统,所以需要你输入密码重新确认一次身份。

二次执行sudo的间隔在5分钟内,那么再次执行sudo时就不需要重新输入密码了,这是因为系统相信你在5分钟内不会离开,不过两次sudo操作时间间隔超过5分钟,那就得重新输入一次你的密码了

sudo搭配su的使用方式

很多的时候我们需要大量执行很多root的工作,所以一直执行sudo觉得很烦,那么有没有办法使用sudo搭配su,一口气将身份转为root,而且还用用户自己的密码来变成root呢?如下

[root@localhost ~]# visudo
User_Alias ADMPW = pro1, pro2, pro3, myuser1, myuser2
ADMPW ALL = (root) /bin/su -
[pro2@localhost ~]$ sudo su -
[sudo] pro2 的密码:
上一次登录:三 412 17:36:49 CST 2023pts/2 上
[root@localhost ~]# 

我们只要输入【sudo su -】并且输入【自己的密码】,就立刻会成为root身份。不但root密码不会外流,用户管理也很方便。这些你加入的用户,全部都是你能够信任的用户才行

总结:

sudo命令更加安全和灵活,能够提供更细粒度的授权控制,适用于多用户环境下的权限管理;

su命令则更加方便,可以在命令行上直接切换身份,适用于单用户环境下的工作。在使用这两个命令时,需要根据实际情况选择合适的方法,避免因误操作造成不必要的麻烦。

本文参考《鸟哥的Linux私房菜》这本书

相关文章:

Linux 用户身份切换(su,sudo)

文章目录 Linux 用户身份切换su使用案例 sudo使用案例 visudo与/etc/sudoers单一用户可使用root所有命令&#xff0c;与sudoers文件语法利用wheel用户组以免密码的功能处理visudo有限制的命令操作通过别名创建visudosudo的时间间隔问题sudo搭配su的使用方式 Linux 用户身份切换…...

求倒置数问题

文章目录 求倒置数程序设计程序分析求倒置数 【问题描述】数组A【0,…,n-1】是一个n个不同整数数构成的数组。如果i<j,但是A[i]〉A[j],则这对元素(A[i],A[j])被称为一个倒置(inversion)。设计一个O(nlogn)算法来计算数组中的倒置数量 【输入形式】输入两行,第一行…...

sed(学习)

1、清除环境变量 ​​​​​​profile~/.bash_profile sed -i s#export LD_LIBRARY_PATH.*##g $profile 2、设置环境变量(替换值) sed -i s#export LD_LIBRARY_PATH.*#export LD_LIBRARY_PATH/opt/testlinux/lib#g ~/.bash_profile 3、修改配置文件 sdk_dir/root/test log_dir/…...

B - GCD Subtraction

文章目录 AtCoder Regular Contest 159B - GCD Subtraction AtCoder Regular Contest 159 B - GCD Subtraction 问题&#xff1a;每次A,B都减去gcd(A,B)&#xff0c;求其中一个减到0至少需要多少次主要思路&#xff1a; 首先第一步应该想到每次减去的数&#xff0c;先减去的数…...

解决Failed to load ApplicationContext问题的思路

中文翻译&#xff1a; 加载ApplicationContext失败 第一步&#xff1a;首先检查测试类的注解 以及 依赖 SpringBootTest <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scop…...

基于CAMX大气臭氧来源解析模拟与臭氧成因分析实践技术应用

查看原文>>>基于CAMX大气臭氧来源解析模拟与臭氧成因分析实践技术应用 目录 专题一、大气臭氧污染来源及成因分析技术讲解&#xff1b;CAMx模式初识及臭氧来源解析模拟本地案例配置说明 专题二、CAMx模式编译安装及空气质量模拟案例配置 专题三、CAMx扩展和探测工…...

异常的讲解 (1)

目录 异常入门的案例 异常介绍 基本概念 异常的小结 常见的运行时异常 1.NullPointerException空指针异常 2.ArithmeticException数学运算异常 3.ArraylndexOutOfBoundsException数组下标越界异常 4.ClassCastException类型转换异常 5.NumberFormatException数字格式不…...

Prometheus - Grafana 监控 MySQLD Linux服务器 demo版

目录 首先是下载Prometheus 下载和安装 配置Prometheus 查看监控数据 监控mysql demo 部署 mysqld_exporter 组件 配置 Prometheus 获取监控数据 -------------------------------------- 安装和使用Grafana 启动Grafana -------------------------------------- 配…...

应届生,实力已超6年,太卷了!

你好&#xff0c;我是田哥 今晚上&#xff0c;给一位朋友做模拟面试&#xff0c;原本说好的90分钟左右&#xff0c;结果整了2个多小时。 很多人估计也很好奇&#xff0c;我们这两个多小时聊聊什么&#xff0c;下面我给大致总结一下&#xff1a; 面试技巧 面试中&#xff0c;我们…...

0-1背包问题

文章目录 0-1背包问题JavaPython0-1背包问题 【问题描述】 给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问应如何选择装入背包的物品,使得装入背包中物品的总价值最大? 【输入形式】 第一行输入物品的个数n和背包容量C。 第二行输入每个物品的价值v[i…...

VUE前端项目环境搭建

背景&#xff1a; 想要使用vue搭建一个前端项目&#xff0c;写个小网站练练手&#xff0c;因为没有前端经验&#xff0c;所以从网上找了一个vue得开源模板使用&#xff0c;经过一番挑选选中了字节公司花裤衩大佬开源得项目&#xff0c;地址如下&#xff1a; 开源项目地址&…...

VMware安装Win2000安装程序闪退重启等问题的解决方法

VMware安装Win2000安装程序闪退重启等问题的解决方法 【症状】 1、比较新的VMware版本如16.2.5&#xff0c;Win2000安装时&#xff0c;安装程序在安装Distributed Transaction Coordinator时闪退重启 2、比较新的VMware版本如17.0.1&#xff0c;还会发生显示跳跃性卡顿的现象…...

【id:45】【20分】A. Equation(类与对象+构造)

题目描述 建立一个类Equation&#xff0c;表达方程ax2bxc0。类中至少包含以下方法&#xff1a; 1、无参构造&#xff08;abc默认值为1.0、1.0、0&#xff09;与有参构造函数&#xff0c;用于初始化a、b、c的值&#xff1b; 2、set方法&#xff0c;用于修改a、b、c的值 3、ge…...

数据库事务

什么是事务 在数据库中&#xff0c;事务&#xff08;Transaction&#xff09;是指一组数据库操作&#xff0c;这些操作要么全部成功执行&#xff0c;要么全部失败回滚&#xff0c;是保证数据库操作一致性的基本单位。事务具有原子性&#xff08;Atomicity&#xff09;、一致性…...

Macbook(苹果电脑) VSCode 创建简单c++程序 配置C++开发环境

1.打开 Terminal 终端&#xff08;Command空格&#xff0c;输入Terminal&#xff09;。 1.1 输入如下指令&#xff0c;查看是否显示版本信息。 clang --version 1.2 如果出现版本信息&#xff0c;则跳过&#xff0c;否则输入 xcode-select --install 2. 为 VS Code 安装插件 …...

如何使用 Matlab 构建深度学习模型

深度学习已经成为了AI领域的热门话题&#xff0c;相信很多人都想学习如何构建深度学习模型&#xff0c;那么&#xff0c;我们就一起来看看如何使用Matlab构建深度学习模型。 首先&#xff0c;我们需要准备好Matlab的环境。Matlab是一款非常强大的数学计算软件&#xff0c;它提…...

PDF怎么转CAD文件?(免费!高效转换方法汇总)

一般而言&#xff0c;PDF图纸是不能修改的。若需修改&#xff0c;则需将PDF转CAD&#xff0c;此时如何满足PDF转CAD的需求呢&#xff1f;今天&#xff0c;我将教你两种免费的PDF转CAD的方法&#xff0c;助力高效办公。 1.本地软件转换法 这是用本地软件转换方法&#xff0c;支…...

经历了野蛮生长之后,新科技或许已经抵达了全新的临界点

跳出仅仅只是以概念和营销的方式来定义元宇宙&#xff0c;真正找到元宇宙与现实商业之间的桥接&#xff0c;让元宇宙可以在真实实践上得到复现&#xff0c;才是保证元宇宙的发展可以进入到一个全新发展阶段的关键所在。归根到底&#xff0c;我们还是要找到元宇宙落地的正确的方…...

Segment Anything论文翻译,SAM模型,SAM论文,SAM论文翻译;一个用于图像分割的新任务、模型和数据集;SA-1B数据集

【论文翻译】- Segment Anything / Model / SAM论文 论文链接&#xff1a; https://arxiv.org/pdf/2304.02643.pdfhttps://ai.facebook.com/research/publications/segment-anything/ 代码连接&#xff1a;https://github.com/facebookresearch/segment-anything 论文翻译&…...

EMQX vs NanoMQ | 2023 MQTT Broker 对比

引言 EMQX 和 NanoMQ 都是由全球领先的开源物联网数据基础设施软件供应商 EMQ 开发的开源 MQTT Broker。 EMQX 是一个高度可扩展的大规模分布式 MQTT Broker&#xff0c;能够将百万级的物联网设备连接到云端。NanoMQ 则是专为物联网边缘场景设计的轻量级 Broker。 本文中我们…...

RabbitMQ实现消息的延迟推送或延迟发送

一、RabbitMQ是什么&#xff1f; 1.RabbitMQ简介 RabbitMQ是有erlang语言开发&#xff0c;基于AMQP&#xff08;Advanced Message Queue 高级消息队列协议&#xff09;协议实现的消息队列。 常见的消息队列有&#xff1a;RabbitMQ、Kafka 和 ActiveMQ 2.RabbitMQ的优点 Rab…...

解决python中import导入自己的包呈现灰色 无效的问题

打开File–> Setting—> 打开 Console下的Python Console&#xff0c;把选项&#xff08;Add source roots to PYTHONPAT&#xff09;点击勾选上。 右键点击需要导入的工作空间文件夹&#xff0c;找到Mark Directory as 选择Source Root。 另外&#xff0c;Python中的…...

消息中间件对比

1&#xff0c;常见消息中间件对比(后续逐个介绍) 比较项TubeMQKafkaPulsar数据时延非常低&#xff0c;10ms比较低&#xff0c;250ms非常低&#xff0c;10msTPS高&#xff0c;14W/s一般&#xff0c;10W/s高&#xff0c;14W/s (高性能场景)过滤消费支持服务端过滤和客户端过滤客…...

nodejs+vue 高校校园食堂餐品在线订购网

食堂作为学校的一个重要的部门&#xff0c;为学生提供了用餐的地点&#xff0c;学生可以在食堂享用丰富的餐品&#xff0c;建立一个在校订餐网站&#xff0c;帮助了学生提供一个用餐订餐的系统&#xff0c;也帮助了食堂提供了一个餐品展示的站点。 园的食堂作为一个窗口单位&a…...

SpringBoot【运维实用篇】---- SpringBoot程序的打包与运行

SpringBoot【运维实用篇】---- SpringBoot程序的打包与运行 程序打包程序运行SpringBoot程序打包失败处理命令行启动常见问题及解决方案 刚开始做开发学习的小伙伴可能在有一个知识上面有错误的认知&#xff0c;我们天天写程序是在Idea下写的&#xff0c;运行也是在Idea下运行的…...

10万字智慧政务数据中心平台建设方案

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除。 一、 项目建设内容 1. 基础支撑平台 基础支撑平台是云教育公共服务平台各子系统的公共运行环境&#xff0c;提供底层数据交换、集成服务以及统一身份认证和基础数据同步服…...

使用 TensorFlow 构建机器学习项目:1~5

原文&#xff1a;Building Machine Learning Projects with TensorFlow 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#x…...

【store商城项目08】删除用户的收获地址

1.删除收获地址-持久层 1.1规划SQL语句 根据aid判断数据是否存在&#xff0c;根据返回的uid判断数据是否对应&#xff08;已开发&#xff09;根据aid删除的SQL delete from t_address where aid ?根据1中的SQL返回的对象判断是否为默认地址&#xff0c;若为默认地址&#…...

SpringBooot

目录 一、简介 1、使用原因 2、JavaConfig &#xff08;1&#xff09;Configuration注解 &#xff08;2&#xff09;Bean注解 &#xff08;3&#xff09;ImportResource注解 &#xff08;4&#xff09;PropertyResource注解 &#xff08;5&#xff09;案例 3、简介 4…...

测牛学堂:2023软件测试linux和shell脚本入门系列(shell的运算符)

shell中的注释 以# 开头的就是shell中的注释&#xff0c;不会被执行&#xff0c;是给编程的人看的。 shell中的运算符 shell中有很多运算符。 按照分类&#xff0c;可以分为算术运算符&#xff0c;关系运算符&#xff0c;布尔运算符&#xff0c;字符串运算符&#xff0c;文件…...