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

从基础到高级:Linux用户与用户组权限设置详解

目录

博客前言: 

一.简介

1.用户的定义

用户账户分类

2.用户组的定义

二.用户的相关linux语法

1.创建用户(useradd)

2.删除用户(userdel)

3.修改用户(usermod)

4.修改用户密码

5.su切换账号

6.退出登录

三.用户组

1.增加用户组(groupadd)

2.删除用户组(groupdel)

3.修改用户组(gruopmod)

4切换用户组(newgrp)

四.其他命令

1.cat  /etc/passwd

2.cat  /etc/shadow

3.cat  /etc/group

 


博客前言: 

在深入探索Linux操作系统的过程中,用户与用户组管理是一个不可或缺的部分。它们构成了Linux系统权限控制的基础,决定了哪些用户能够访问哪些资源,以及他们可以对这些资源执行哪些操作。

在这篇博客中,我们将带领读者一起走进Linux的用户与用户组世界,从基本概念讲起,逐步深入到权限设置、用户管理命令等实际操作。无论你是Linux新手,还是有一定经验的系统管理员,相信都能从中收获不少。

通过本文,你将学习到:

  • Linux用户与用户组的基本概念
  • 如何创建、修改和删除用户与用户组
  • 如何设置和管理用户权限
  • 常见的用户与用户组管理命令和工具
  • 用户与用户组管理在系统安全中的作用

让我们开始这段Linux用户与用户组管理的探索之旅吧!希望本文能为你提供有价值的参考和指导,帮助你在Linux的道路上走得更远。

一.简介

1.用户的定义

在Linux系统中,用户(User)是系统使用者的身份,也是系统最底层安全机制的一部分。每个用户在系统中都以字符和文件的形式存在,并拥有特定的权限,这些权限决定了他们可以访问哪些资源以及可以对这些资源执行哪些操作。

用户账户分类

  1. 超级用户(root):这是Linux系统中拥有最高权限的用户,其UID(用户ID)为0。只有在进行系统维护(例如建立用户等)或其他必要情形下才会使用超级用户登录,以避免系统出现安全问题。
  2. 系统用户(伪用户):这些用户是Linux系统正常工作所必需的,主要用于满足相应的系统进程对文件属主的要求。例如,bin、daemon、adm、lp等用户都属于系统用户,它们不能用来登录系统。
  3. 普通用户:这是为了让使用者能够使用Linux系统资源而建立的用户,我们的大多数用户属于此类。普通用户的使用系统权限受限,其UID为1000以后。

2.用户组的定义

在Linux系统中,用户组(Group)是具有相同特征用户的逻辑集合,这些用户共享一定的权限。用户组的概念主要是为了方便系统管理和控制用户的访问权限。

具体来说,用户组可以包含多个用户,这些用户可以被赋予一些共同的权限,例如对某个文件或目录的读写权限。通过将这些用户加入到一个组中,可以简化权限管理,避免为每个用户单独设置权限的复杂性。

在Linux中,用户和用户组的信息通常存储在/etc/passwd/etc/group文件中。/etc/passwd文件保存了系统中所有用户的基本信息,如用户名、用户ID(UID)、主目录、默认shell等。而/etc/group文件则保存了系统中所有用户组的信息,如组名、组ID(GID)、组成员等

用户组可以分为多种类型,包括普通用户组、系统组和私有组(也称基本组)。普通用户组可以包含多个用户,而系统组通常包含一些系统用户,用于满足系统进程对文件属主的要求。私有组则是在创建用户时,如果没有为其指明所属组,系统就会为其定义的一个与用户同名的用户组。

总之,在Linux系统中,用户和用户组构成了系统权限控制的基础。通过合理的用户和用户组管理,可以确保系统的安全性和稳定性,同时也可以方便地进行资源的访问和控制。

二.用户的相关linux语法

1.创建用户(useradd)

1.添加新的用户账号
useradd选项用户名
参数说明
选项
-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录
- G 用户组指定用户所属的附加组
-s Shell文件指定用户的登录Shell
- u 用户号指定用户的用户号,如果同时有-选项,则可以重复使用其他用户的标识
号。
用户名
指定新账号的登录名示例1:
useradd -d
home/sam
-m sam2
此命令创建了一个用户san ,其中-d和-m选项用来为登录名sam2产生一个主目录
/home/sam (/home为默认的用户主目录所在的父目录)
示例2:此命令新建了一个用户gem,该用户的登录Shell是bin/sh,它属于group用户组,同
useradd-s/bin/ sh-g group -G adm, root gem
其中group用户组是其主组。这里可能新建组:#groupadd group及groupadd atn
时又属于adm和root用户组
同时更新其他系统文件如/etc/shadow,
注1:增加用户账号就是在/etc/passwud文件中为新用户增加一条记录
etc/grou等。
注2:Linx提供了集成的系统管理工具usercorf,它可以用来对用户账号进行统一管理

2.删除用户(userdel)

删除帐号
如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要
将/etc/passwd等系统文件中的该用户记录删除
必要时还删除用户的主目录常用的选项是-r,它的作用是把用户的主目录一起删除
userdel选项用户名
示例1:
userdel-r sam
此命用在系经文件中(主要是/etc/passd,/ect/shadow/,/ect/group)等等记录,同时删除用户的主目录

3.修改用户(usermod)

删除帐号
如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要
将/etc/passwd等系统文件中的该用户记录删除
必要时还删除用户的主目录常用的选项是-r,它的作用是把用户的主目录一起删除
userdel选项用户名
示例1:
userdel-r sam
此命用在系经文件中(主要是/etc/passd,/ect/shadow/,/ect/group)等等记录,同时删除用户的主目录

4.修改用户密码

在Linux系统中,passwd是一个用于设置或更改用户密码的命令。它是Linux/Unix系统下的一个标准命令,用于管理用户的密码。

passwd命令的主要功能包括:

  1. 更改用户密码:使用passwd命令,用户可以更改自己的密码。例如,输入passwd并按回车键后,系统会提示用户输入当前密码和新密码。
  2. 设置密码策略passwd命令还可以用于设置密码策略,例如密码的最小长度、密码的复杂性要求等。这些策略可以通过配置文件或命令行参数来设置。
  3. 管理用户密码:系统管理员可以使用passwd命令来管理系统中所有用户的密码。例如,他们可以为用户设置密码、更改密码或锁定用户账户等。

需要注意的是,passwd命令只能由具有足够权限的用户(通常是系统管理员或用户自己)执行。普通用户只能更改自己的密码,而系统管理员则可以更改任何用户的密码。

此外,passwd命令还提供了一些选项和参数,以便用户和系统管理员可以根据需要进行更灵活的操作。例如,-l选项可以用于锁定用户账户,-u选项可以用于解锁用户账户,-d选项可以用于删除用户密码等。

总之,passwd命令是Linux系统中一个非常重要的命令,它为用户和系统管理员提供了方便、灵活的方式来管理用户的密码和账户安全。

5.su切换账号

su [options] [username]

这里的 [options] 是可选的参数,而 [username] 是要切换到的用户的用户名。如果不指定用户名,su 默认尝试切换到超级用户(root)。

以下是一些常用的 su 命令选项:

  • ---login:这个选项告诉 su 命令加载目标用户的登录环境。这通常包括设置环境变量、工作目录、shell 等。如果不使用此选项,su 仅会提供目标用户的权限,但不会加载完整的登录环境。

  • -c--command=COMMAND:这个选项允许你传递一个命令给 su,并在执行完该命令后退出目标用户的会话,不进入交互模式。

  • -s--shell=SHELL:这个选项允许你指定一个特定的 shell 来执行,而不是使用目标用户的默认 shell。

  • -m--preserve-environment:这个选项会保持当前的环境变量,而不是仅加载目标用户的环境变量。

  • -f--fast:这个选项用于 cshtcsh shell,表示不读取启动文件。

  • --help:显示帮助信息。

  • --version:显示 su 命令的版本信息。

下面是一些使用 su 命令的示例:

  1. su

    su -

    (使用 - 选项加载 root 用户的登录环境)

  2. su john -c "ls -l /home/john"
  3. su -s /bin/bash john
  4. 保持当前环境变量并切换到用户:

    su -m john

请注意,使用 su 命令时,通常需要输入目标用户的密码,除非当前用户是 root 用户。由于 su 命令允许用户切换到其他用户并执行命令,因此在使用时应格外小心,以确保不会意外地破坏系统安全或执行不适当的命令。

6.退出登录

在Linux中,有几种方法可以退出当前用户账户:

  1. exit命令
    这是最常用的方法。只需在命令行界面输入exit,然后按下回车键即可退出当前用户。exit命令会立即退出当前用户,并返回到上一级用户或登录界面。

    exit
  2. logout

    注意:在某些情况下,logoutexit命令可能具有相同的效果,特别是在shell提示符下使用时。

  3. Ctrl+D
    在大多数shell中,按下Ctrl+D组合键也可以退出当前用户的登录会话。这通常与logout命令有相同的效果。

  4. pkill -u username

    这将终止该用户的所有进程并注销该用户。

  5. 重启或关闭系统
    当然,如果你想要重启或关闭整个系统,你可以使用rebootshutdown命令。但请注意,这将影响所有用户和系统服务。

    reboot # 重启系统
    shutdown -h now # 关闭系统

请确保在退出用户或执行可能影响其他用户的操作时,你了解这些操作的后果,并且拥有适当的权限。如果你是系统管理员,你可能需要谨慎操作,以免对系统或其他用户造成不必要的中断或问题。

三.用户组

1.增加用户组(groupadd)

增加一个用户组
groupadd选项用户组
选项有:
-g GID指定新用户组的组标识号(GD)
#一般与-选项同时使用,表示新用户组的GD可以与系统已有用户组的GID相同。
示例1:
groupadd group1
此命令向系统中增加了一个新组group1,新组的组标识号是在当前已有的最大组标识号的
基础上加1。
示例2:
groupadd -g 101 group2
此命令向系统中增加了一个新组group2同时指定新组的组标识号是101。

2.删除用户组(groupdel)

如果删除以及以及存在的用户组,使用 groupdel命令

groupdel  用户组

实例:

groupdel  group1

3.修改用户组(gruopmod)

修改用户组的属性
groupmod选项用户组
常用的选项有:
-g GID为用户组指定新的组标识号。
-o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
-n新用户组将用户组的名字改为新名字
示例1:
groupmod -g 102 group2
此命令将组group2的组标识号修改为102
示例2:
groupmod -g 10000-n group3 group2
此命令将组group2的标识号改为10000,组名修改为group3

4切换用户组(newgrp)

如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换
用户可以在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户
示例1:
newgrp root
这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或
加组

四.其他命令

1.cat  /etc/passwd

您提供的是Linux系统中`/etc/passwd`文件的一部分内容。`/etc/passwd`文件存储了系统上所有用户账户的信息。每一行代表一个用户账户,并由冒号`:`分隔的七个字段组成。下面是对您提供的每一行内容的详细分析:

### root账户


```bash
root:x:0:0:root:/root:/bin/bash
```
* `root`: 用户名。
* `x`: 密码字段。这里的`x`表示密码是加密的,并且实际的加密密码存储在`/etc/shadow`文件中。
* `0`: 用户ID(UID)。对于`root`用户,UID通常是0。
* `0`: 组ID(GID)。`root`用户的默认组也是`root`,其GID也是0。
* `root`: 用户全名或描述。
* `/root`: 用户的主目录。
* `/bin/bash`: 用户的默认shell。

### 系统账户

接下来的账户(如`bin`, `daemon`, `adm`, `lp`, `sync`, `shutdown`, `halt`等)都是系统账户,用于运行系统服务。这些账户通常没有登录shell(如`/sbin/nologin`或`/bin/sync`),并且通常具有较低的UID和GID。

### 普通用户账户

* `mail`: 邮件服务的用户账户。
* `operator`: 通常用于系统管理的用户账户。
* `games`: 用于运行游戏的用户账户。
* `ftp`: FTP服务的用户账户。
* `nobody`: 一个无特权的用户,通常用于运行不需要访问权限的服务。
* `systemd-network`: 用于`systemd`网络管理的用户账户。
* `dbus`: 用于`DBus`系统消息总线的用户账户。
* `polkitd`: 用于`polkit`权限管理的用户账户。
* `postfix`: 用于`Postfix`邮件传输代理的用户账户。
* `sshd`: 用于`SSH`服务的用户账户。
* `chrony`: 用于`chrony`时间同步服务的用户账户。
* `ntp`: 用于`NTP`(网络时间协议)服务的用户账户。
* `www`: 用于Web服务器的用户账户。
* `mysql`: 用于MySQL数据库的用户账户。
* `redis`: 用于Redis数据库的用户账户。

每个用户账户的信息都包括:

* 用户名。
* 密码字段(通常是`x`,表示加密密码在`/etc/shadow`中)。
* UID。
* GID。
* 用户全名或描述。
* 用户主目录。
* 用户默认shell。

对于系统账户,主目录通常是一个系统目录,而shell通常是`/sbin/nologin`或`/bin/sync`等,表示这些账户不能用于登录。对于普通用户账户,主目录通常位于`/home/`下,shell通常是`/bin/bash`或其他shell。

请注意,`/etc/passwd`文件只包含用户的基本信息,而实际的加密密码存储在`/etc/shadow`文件中,并且只有root用户可以访问。这是出于安全考虑,以防止未经授权的用户访问加密密码。

2.cat  /etc/shadow

这是Linux系统中`/etc/shadow`文件的一部分内容,该文件存储了系统上所有用户账户的加密密码和相关的账户属性。每一行代表一个用户账户,由冒号`:`分隔的九个字段组成。下面是对您提供的每一行内容的详细分析:

### root账户

```bash
root:$6$sr9HC.OUoY/QlPJI$9Cz.iTRt0wmgWHDC4XxucePa0sblPJHcNsR8isArXdPPW8WMfHdPOhDTwdOoXAbwrm4/t1WEkboZsgDxJ16gr/::0:99999:7:::
```

- `root`: 用户名。
- `$6$sr9HC.OUoY/QlPJI$9Cz.iTRt0wmgWHDC4XxucePa0sblPJHcNsR8isArXdPPW8WMfHdPOhDTwdOoXAbwrm4/t1WEkboZsgDxJ16gr/`: 加密的密码。这里使用的是SHA-512加密的密码,`$6$`表示使用的是SHA-512算法,`sr9HC.OUoY/QlPJI`是盐值(salt),后面的部分是加密后的密码。
- `::`: 账户最后一次修改密码的日期,这里为空表示从未修改过。
- `0`: 密码的最小有效期,这里是0天,表示密码可以随时更改。
- `99999`: 密码的最大有效期,这里是99999天,表示密码永远不会过期。
- `7`: 密码过期前的警告天数,这里是7天。
- `::`: 密码过期后的宽限天数,这里为空表示没有宽限。
- `::`: 账户失效日期,这里为空表示账户永远不会失效。
- `::`: 保留字段,通常用于存储账户保留信息,这里为空。

### 系统账户和普通用户账户

对于`bin`, `daemon`, `adm`, `lp`, `sync`, `shutdown`, `halt`, `mail`, `operator`, `games`, `ftp`, `nobody`等系统账户,以及`systemd-network`, `dbus`, `polkitd`, `postfix`, `sshd`, `chrony`, `ntp`, `www`, `mysql`, `redis`等普通用户账户,它们的密码字段通常以`*`或`!!`开头,表示这些账户没有密码或者密码被锁定。

- `*`: 表示账户没有密码,通常用于系统账户或那些不需要登录的账户。
- `!!`: 表示账户密码被锁定,即使账户有密码也不能登录。

接下来的字段(如UID、GID、密码有效期、警告天数等)通常是默认值或系统配置的值,具体取决于系统管理员的设置。

### 注意点

- `/etc/shadow`文件只能由root用户访问和修改,以保护加密密码的安全性。
- 加密密码使用不同的加密算法和盐值来增强安全性。
- 某些字段为空(如`::`),表示相应的设置没有特定的值,使用系统默认值。

通过配置`/etc/shadow`文件,系统管理员可以控制用户账户的密码策略、有效期、失效日期等安全相关的设置。

3.cat  /etc/group

 

相关文章:

从基础到高级:Linux用户与用户组权限设置详解

目录 博客前言: 一.简介 1.用户的定义 用户账户分类 2.用户组的定义 二.用户的相关linux语法 1.创建用户(useradd) 2.删除用户(userdel) 3.修改用户(usermod) 4.修改用户密码 5.su切…...

【感知机】感知机(perceptron)学习算法知识点汇总

机器学习——感知机 感知机(perceptron)是一种二分类的线性模型,属于判别模型,也称为线性二分类器。输入为实例的特征向量,输出为实例的类别(取1和-1)。可以视为一种使用阶梯函数激活的人工神经元,例如通过梅尔频率倒谱系数(MFCC…...

蓝桥杯:C++二分算法

在基本算法中,二分法的应用非常广泛,它是一种思路简单、编程容易、效率极高的算法。蓝桥杯软件类大赛中需要应用二分法的题目很常见。 二分法有整数二分和实数二分两种应用场景 二分法的概念 二分法的概念很简单,每次把搜索范围缩小为上一…...

Leetcode刷题笔记题解(C++):83. 删除排序链表中的重复元素

思路:链表相关的问题建议就是画图去解决,虽然理解起来很容易,但就是写代码写不出来有时候,依次去遍历第二节点如果与前一个节点相等则跳过,不相等则遍历第三个节点 /*** Definition for singly-linked list.* struct …...

@ 代码随想录算法训练营第8周(C语言)|Day56(动态规划)

代码随想录算法训练营第8周(C语言)|Day56(动态规划) Day56、动态规划(包含题目 ● 300.最长递增子序列 ● 674. 最长连续递增序列 ● 718. 最长重复子数组 ) 300.最长递增子序列 题目描述 给你一个整数…...

C# OpenCvSharp DNN Image Retouching

目录 介绍 模型 项目 效果 代码 下载 C# OpenCvSharp DNN Image Retouching 介绍 github地址:https://github.com/hejingwenhejingwen/CSRNet (ECCV 2020) Conditional Sequential Modulation for Efficient Global Image Retouching 模型 Model Properti…...

通过Docker Compose的方式在Docker中安装Maven环境

目前可以说 Docker 已经是在开发部署中成为主流,所以我们很多环境和工具都会安装在 Docker 容器中,Maven 环境是 SpringBoot 项目中最常用的依赖管理工具。当我们使用自动运维工具如 Ansible、Chef 、Puppet、Walle、Spug等)管理和部署 Maven…...

Python实现线性逻辑回归和非线性逻辑回归

线性逻辑回归 # -*- coding: utf-8 -*- """ Created on 2024.2.20author: rubyw """import matplotlib.pyplot as plt import numpy as np from sklearn.metrics import classification_report from sklearn import preprocessing from sklearn…...

【软考】软件维护

目录 一、说明二、正确性维护三、适应性维护四、完善性维护五、预防性维护 一、说明 1.软件维护主要是根据需求变化或硬件环境的变化对应用程序进行部分或全部修改 2.修改时应充分利用源程序,修改后要填写程序修改登记表,并在程度变更通知书上写明新旧程…...

突破性创新:OpenAI推出Sora视频模型,预示视频制作技术的未来已到来!

一、前言 此页面上的所有视频均由 Sora 直接生成,未经修改。 OpenAI - Sora is an AI model that can create realistic and imaginative scenes from text instructions. 2024 年 2 月 16 日,OpenAI 发布 AI 视频模型 Sora,60 秒的一镜到底…...

【Web前端笔记10】CSS3新特性

10 CSS3新特性 1、圆角 2、阴影 (1)盒阴影 3、背景渐变 (1)线性渐变(主要掌握这种就可) (2)径向渐变 &…...

LabVIEW荧光显微镜下微管运动仿真系统开发

LabVIEW荧光显微镜下微管运动仿真系统开发 在生物医学研究中,对微管运动的观察和分析至关重要。介绍了一个基于LabVIEW的仿真系统,模拟荧光显微镜下微管的运动过程。该系统提供了一个高效、可靠的工具,用于研究微管与运动蛋白(如…...

【Java面试】MQ(Message Queue)消息队列

目录 一、MQ介绍二、MQ的使用1应用解耦2异步处理3流量削峰4日志处理5消息通讯三、使用 MQ 的缺陷1.系统可用性降低:2.系统复杂性变高3.一致性问题四、常用的 MQActiveMQ:RabbitMQ:RocketMQ:Kafka:五、如何保证MQ的高可用?ActiveMQ:RabbitMQ:RocketMQ:Kafka:六、如何保…...

【安卓基础1】初识Android

🏆作者简介:|康有为| ,大四在读,目前在小米安卓实习,毕业入职。 🏆安卓学习资料推荐: 视频:b站搜动脑学院 视频链接 (他们的视频后面一部分没再更新,看看前面…...

08-静态pod(了解即可,不重要)

我们都知道,pod是kubelet创建的,那么创建的流程是什么呐? 此时我们需要了解我们k8s中config.yaml配置文件了; 他的存放路径:【/var/lib/kubelet/config.yaml】 一、查看静态pod的路径 [rootk8s231 ~]# vim /var/lib…...

PROBIS铂思金融破产后续:ASIC牌照已注销

2024年1月31日,PROBIS铂思金融的澳大利亚ASIC牌照 (AFSL 338241) 被注销《差价合约经纪商PROBIS宣布破产,澳大利亚金融服务牌照遭暂停》,这也就意味着,PROBIS铂思金融目前已经没有任何金融牌照。 值得注意的是,时至今日…...

数字世界的探索者:计算机相关专业电影精选推荐

目录 推荐计算机专业必看的几部电影 《黑客帝国》 《社交网络》 《乔布斯传》 《心灵捕手》 《源代码》 《盗梦空间》 《头号玩家》 《我是谁:没有绝对安全的系统》 《战争游戏》(WarGames) 《模仿游戏》(The Imitation Game) 《硅谷》(Silicon Valley) …...

Spring Boot项目中TaskDecorator的应用实践

一、前言 TaskDecorator是一个执行回调方法的装饰器,主要应用于传递上下文,或者提供任务的监控/统计信息,可以用于处理子线程与主线程间数据传递的问题。 二、开发示例 1.自定义TaskDecorator import org.springframework.core.task.Task…...

511. 游戏玩法分析 I

文章目录 题意思路代码 题意 题目链接 统计每个用户第一次登陆平台时间 思路 代码 select player_id, min(event_date) as first_login from Activity group by player_id;...

大模型训练流程(三)奖励模型

为什么需要奖励模型 因为指令微调后的模型输出可能不符合人类偏好,所以需要利用强化学习优化模型,而奖励模型是强化学习的关键一步,所以需要训练奖励模型。 1.模型输出可能不符合人类偏好 上一篇讲的SFT只是将预训练模型中的知识给引导出来…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

【Linux】Linux安装并配置RabbitMQ

目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的&#xff0c;需要先安…...

若依登录用户名和密码加密

/*** 获取公钥&#xff1a;前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...

数据库——redis

一、Redis 介绍 1. 概述 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的、高性能的内存键值数据库系统&#xff0c;具有以下核心特点&#xff1a; 内存存储架构&#xff1a;数据主要存储在内存中&#xff0c;提供微秒级的读写响应 多数据结构支持&…...