【Linux学习】Ubuntu对用户进行管理
目录
- 写在前面
- 【Linux学习】Ubuntu对用户进行管理
- 一、为什么需要用户管理?
- 二、用户管理基础操作
- (一)用户管理
- 1. 用户管理命令表格
- 2. 关键操作场景说明
- 场景一:创建用户并配置权限
- 场景二:修改用户属性
- 场景三:设置密码策略
- 场景四:锁定并删除用户
- 3. 配置文件说明
- 4. 注意事项
- 5. 其他问题
- (1)新创建的用户目录在哪里?
- (2)多硬盘服务器如何指定用户目录?
- 方法一:创建用户时直接指定路径
- 方法二:挂载硬盘到 `/home` 子目录
- 方法三:修改现有用户的家目录
- 总结与操作建议
- (3) 新创建的用户默认在哪个组?
- (二)组管理
- 1. 组管理命令详解表
- 2. 服务器默认组有哪些?
- 3. 关键操作场景说明
- 场景一:创建组并添加成员
- 场景二:批量修改组成员
- 场景三:删除组
- 场景四:临时切换主组
- 4. 配置文件说明
- 5. 注意事项
- (三)查询与验证命令
- 三、服务器目录结构及其作用
- (一)核心目录及其用途
- (二)核心配置文件说明
写在前面
为什么要写这篇博客?
小编最近搞了一台小服务器,然后要给同事们用,正常运维这个服务器就是给同事们添加账号,然后设置权限,这样子只是一些简单的操作,如果服务器出问题了,也不知道怎么去解决,所以小编想深入了解一下linux系统,本篇博客就从简单的添加用户开始入手,主要有以下几个问题:
- 如何添加用户?
- 用户背添加到哪里?实际的存储路径是啥?添加到组里是什么意思?
- 组是什么意思?为什么需要组?系统有哪些默认组?
- 路径中的home、bin等等分别代表什么意思?为什么会有这个的存在?
对用户的操作(增、删、改、查):
- 增加什么?用户名,用户id,用户密码,用户出生组,用户目录,用户权限等;
- 删除什么?
- 修改什么?用户名,用户id,用户密码,用户所在组,用户目录,用户权限等;
- 查找什么?用户名,用户id,用户密码,用户所在组,用户目录,用户权限等;
思维导图如下:
【Linux学习】Ubuntu对用户进行管理
在 Linux 系统中,用户管理是维护系统安全和资源分配的核心任务之一。无论是个人电脑还是服务器,合理的用户权限配置可以防止误操作、保护敏感数据,并支持多用户协作。本文将以 Ubuntu 为例,详细介绍用户管理的常用操作,涵盖创建、修改、删除用户,以及用户组和权限配置的技巧。
一、为什么需要用户管理?
- 系统安全:不同用户拥有不同权限,避免普通用户执行高危操作。
- 资源隔离:限制用户对文件、目录和进程的访问范围。
- 多用户协作:服务器环境中,多个用户可能共享同一系统,需独立配置环境。
二、用户管理基础操作
以下表格详细列举了用户与组管理命令的参数、缩写来源、示例及详细解释,涵盖 创建、修改、权限控制、安全策略 等核心操作。
(一)用户管理
1. 用户管理命令表格
以下为 Linux Ubuntu 系统中 用户管理 的核心命令及参数总结,涵盖 创建、删除、修改、权限分配、密码策略 等操作,并附有示例与详细解释。
命令 | 参数 | 缩写来源 | 示例 | 示例详细解释 |
---|---|---|---|---|
useradd | -m | make home directory | sudo useradd -m alice | 创建用户 alice ,并自动生成家目录 /home/alice 。 |
-d | directory | sudo useradd -d /data/alice -m alice | 指定家目录为 /data/alice (需确保目录存在或为空)。 | |
-s | shell | sudo useradd -s /sbin/nologin alice | 设置用户默认 Shell 为禁止登录(适用于服务账户)。 | |
-G | Groups | sudo useradd -G sudo,developers alice | 创建用户时直接加入 sudo 和 developers 组(覆盖原有附加组)。 | |
-u | user ID | sudo useradd -u 1500 alice | 指定用户 UID 为 1500 (避免与系统保留 UID 0-999 冲突)。 | |
-e | expire date | sudo useradd -e 2024-12-31 alice | 设置账户过期时间为 2024-12-31 ,过期后用户无法登录。 | |
adduser | (交互式) | 无缩写(封装工具) | sudo adduser alice | 交互式创建用户:自动生成家目录、提示设置密码,并填写用户信息(全名、电话等)。 |
usermod | -l | login name | sudo usermod -l alice_new alice | 将用户名从 alice 修改为 alice_new (需手动更新家目录名)。 |
-d | directory | sudo usermod -d /new_home/alice -m alice | 修改家目录为 /new_home/alice ,-m 表示迁移原家目录内容。 | |
-g | group | sudo usermod -g developers alice | 修改用户主组为 developers (需目标组已存在)。 | |
-aG | append Groups | sudo usermod -aG docker alice | 将用户追加到 docker 组(保留原有附加组)。 | |
-L | Lock | sudo usermod -L alice | 锁定用户账户(禁止登录),在 /etc/shadow 的密码字段前添加 ! 。 | |
-U | Unlock | sudo usermod -U alice | 解锁用户账户(需未被其他机制锁定)。 | |
userdel | -r | remove files | sudo userdel -r alice | 删除用户 alice 及其家目录和邮件池(谨慎操作,数据不可恢复)。 |
passwd | -l | lock | sudo passwd -l alice | 锁定用户密码(等同于 usermod -L )。 |
-u | unlock | sudo passwd -u alice | 解锁用户密码(需未被其他方式锁定)。 | |
-e | expire | sudo passwd -e alice | 强制用户下次登录时修改密码(适用于首次创建账户后)。 | |
-S | Status | sudo passwd -S alice | 显示账户状态:密码设置时间、有效期、警告天数等。 | |
chage | -E | Expiry date | sudo chage -E 2024-12-31 alice | 设置账户过期时间(与 useradd -e 功能相同)。 |
-M | Max days | sudo chage -M 90 alice | 密码最长有效期为 90 天,到期后必须修改。 | |
-W | Warn days | sudo chage -W 7 alice | 密码过期前 7 天提醒用户。 | |
-I | Inactive days | sudo chage -I 5 alice | 密码过期后,账户宽限期为 5 天,超时后完全锁定。 | |
id | -u | user ID | id -u alice | 显示用户 UID(输出 1001 )。 |
-g | group ID | id -g alice | 显示用户主组 GID(输出 1001 )。 | |
-Gn | Groups names | id -Gn alice | 显示用户所属的所有组名(输出 alice sudo developers )。 | |
groups | - | 无 | groups alice | 显示用户主组和附加组(输出 alice : alice sudo developers )。 |
getent | - | get entries | getent passwd alice | 查询用户详细信息(本地或远程用户),输出格式:alice:x:1001:1001::/home/alice:/bin/bash 。 |
2. 关键操作场景说明
场景一:创建用户并配置权限
sudo useradd -m -s /bin/bash -G sudo,developers -u 1500 alice # 创建用户
sudo passwd alice # 设置密码
- 验证:
id alice # 输出:uid=1500(alice) gid=1500(alice) groups=1500(alice),27(sudo),1001(developers)
场景二:修改用户属性
sudo usermod -l alice_new -d /home/alice_new -m alice # 重命名用户并迁移家目录
sudo usermod -aG docker alice_new # 追加到 docker 组
场景三:设置密码策略
sudo chage -M 60 -W 7 -E 2024-12-31 alice # 密码 60 天过期,过期前 7 天提醒,账户年底锁定
场景四:锁定并删除用户
sudo usermod -L alice # 锁定账户
sudo userdel -r alice # 删除用户及数据
3. 配置文件说明
文件 | 作用 |
---|---|
/etc/passwd | 存储用户基本信息(UID、GID、家目录、Shell 等)。 |
/etc/shadow | 存储用户密码哈希及安全策略(仅 root 可读)。 |
/etc/login.defs | 定义用户创建的默认规则(如 UID/GID 范围、密码策略)。 |
4. 注意事项
- 权限最小化:
- 普通用户不应拥有
sudo
权限,除非必要。 - 服务账户应禁用 Shell(
/sbin/nologin
)。
- 普通用户不应拥有
- 安全审计:
- 定期检查
/etc/passwd
和/etc/shadow
,清理无效账户。 - 使用
last
或lastlog
监控用户登录记录。
- 定期检查
- 备份数据:
- 删除用户前备份家目录(
tar -czf alice_backup.tar.gz /home/alice
)。
- 删除用户前备份家目录(
5. 其他问题
(1)新创建的用户目录在哪里?
- 默认路径:
在 Ubuntu 中,新用户的目录默认位于/home/用户名
。例如,用户dev01
的家目录是/home/dev01
。 - 例外情况:
若使用useradd
命令时未加-m
参数(如sudo useradd username
),则不会自动创建家目录。需手动创建或通过-m
参数强制生成。
(2)多硬盘服务器如何指定用户目录?
如果服务器挂载了多个硬盘,可以通过以下方式指定用户家目录到其他硬盘分区:
方法一:创建用户时直接指定路径
sudo useradd -m -d /mnt/data/username -s /bin/bash username
-d
:指定家目录路径(需提前创建挂载点,例如/mnt/data
挂载到第二块硬盘)。- 确保目标目录权限正确:
sudo chown username:username /mnt/data/username
方法二:挂载硬盘到 /home
子目录
将第二块硬盘挂载到 /home
的子路径(如 /home2
),然后创建用户时指定路径:
sudo mkdir /home2
sudo mount /dev/sdb1 /home2 # 假设第二块硬盘为 /dev/sdb1
sudo useradd -m -d /home2/username username
方法三:修改现有用户的家目录
sudo usermod -d /new/path/username -m username
-m
参数会将原家目录内容移动到新路径。
总结与操作建议
- 用户目录管理:在多硬盘环境中,建议将用户目录统一挂载到独立分区(如
/data
),便于备份和扩容。 - 权限控制:通过组管理(如
developers
)批量分配权限,而非单独配置用户。 - 安全审计:定期检查
/etc/passwd
和/etc/group
,删除无用账户和组。
示例命令:将第二块硬盘挂载到 /data
并创建用户
# 格式化并挂载硬盘(假设为 /dev/sdb1)
sudo mkfs.ext4 /dev/sdb1
sudo mkdir /data
sudo mount /dev/sdb1 /data# 创建用户并指定家目录
sudo useradd -m -d /data/dev02 -s /bin/bash dev02
sudo passwd dev02
(3) 新创建的用户默认在哪个组?
- 主组(Primary Group):
Ubuntu 中,新用户默认会创建一个与用户名同名的主组(例如用户dev01
的主组为dev01
)。 - 附加组(Supplementary Groups):
默认情况下,新用户不会自动加入sudo
等特权组,需手动添加(如sudo usermod -aG sudo dev01
)。
(二)组管理
1. 组管理命令详解表
以下为 Linux Ubuntu 系统中 组管理 的核心命令及参数总结,涵盖 创建、删除、修改、查询 等操作,并附有示例与详细解释。
命令 | 参数 | 缩写来源 | 示例 | 示例详细解释 |
---|---|---|---|---|
groupadd | -g | group ID | sudo groupadd -g 1005 developers | 创建组 developers 并指定 GID 为 1005 (避免与系统保留 GID 0-999 冲突)。 |
-r | reserved (system) | sudo groupadd -r system_group | 创建系统组(默认分配 GID < 1000)。 | |
groupmod | -n | new name | sudo groupmod -n new_dev developers | 将组名从 developers 修改为 new_dev (需确保无进程依赖原组名)。 |
-g | group ID | sudo groupmod -g 2000 new_dev | 修改组 new_dev 的 GID 为 2000 (需手动更新文件所属组)。 | |
groupdel | - | 无 | sudo groupdel new_dev | 删除组 new_dev (组必须为空,否则需先移除成员)。 |
gpasswd | -a | add user | sudo gpasswd -a alice developers | 将用户 alice 添加到 developers 组(等同于 usermod -aG )。 |
-d | delete user | sudo gpasswd -d bob developers | 从 developers 组中移除用户 bob 。 | |
-M | Members | sudo gpasswd -M alice,bob,charlie developers | 批量设置 developers 组成员为 alice 、bob 、charlie (覆盖原有成员列表)。 | |
-r | remove password | sudo gpasswd -r developers | 移除组 developers 的密码(若已设置密码认证)。 | |
getent | - | get entries | getent group developers | 查询组 developers 的详细信息(本地组或远程组,如 LDAP/NIS)。 |
groups | - | 无 | groups alice | 显示用户 alice 所属的所有组(主组 + 附加组)。 |
groupmems | -l | list | sudo groupmems -g developers -l | 列出 developers 组的所有成员(需 sudo 权限)。 |
-d | delete | sudo groupmems -g developers -d alice | 从 developers 组中移除用户 alice 。 | |
newgrp | - | new group | newgrp developers | 临时切换当前用户的主组为 developers (需用户属于该组且组密码已设置或无需密码)。 |
cat | - | catenate | cat /etc/group | grep developers | 直接查看 /etc/group 文件中 developers 组的配置信息(仅本地组)。 |
2. 服务器默认组有哪些?
Ubuntu 系统预装的主要默认组及其用途:
组名 | 描述 |
---|---|
root | 超级管理员组,拥有系统完全控制权。 |
sudo | 组成员可通过 sudo 执行特权命令。 |
adm | 允许查看系统日志文件(如 /var/log )。 |
cdrom | 访问光驱设备。 |
dialout | 访问串行端口(如旧式调制解调器)。 |
plugdev | 访问可移动存储设备(如U盘)。 |
lpadmin | 配置打印机。 |
users | 普通用户默认组(部分发行版),Ubuntu 默认不强制用户加入此组。 |
3. 关键操作场景说明
场景一:创建组并添加成员
sudo groupadd -g 1005 developers # 创建组
sudo gpasswd -a alice developers # 添加用户
sudo gpasswd -a bob developers # 添加用户
- 验证:
getent group developers # 输出:developers:x:1005:alice,bob
场景二:批量修改组成员
sudo gpasswd -M alice,charlie developers # 覆盖原有成员
- 结果:
developers
组仅包含alice
和charlie
,原成员bob
被移除。
场景三:删除组
sudo groupdel developers # 删除空组
- 前提:需先移除所有成员(
gpasswd -d
或groupmems -d
)。
场景四:临时切换主组
groups alice # 输出:alice : alice developers
newgrp developers # 切换主组
groups # 输出:alice : developers alice
- 用途:临时以新主组身份创建文件(文件所属组自动设为
developers
)。
4. 配置文件说明
文件 | 作用 |
---|---|
/etc/group | 存储组的基本信息(组名、GID、成员列表)。 |
/etc/gshadow | 存储组密码和管理员列表(仅 root 可读)。 |
5. 注意事项
- 系统保留组:
- 不要修改
root
、sudo
、adm
等系统默认组的 GID 或成员。
- 不要修改
- 依赖关系:
- 删除组前需确保无文件或进程依赖该组(检查
find / -gid 1005
)。
- 删除组前需确保无文件或进程依赖该组(检查
- 远程组管理:
- 若使用 LDAP/NIS,需通过对应工具(如
ldapmodify
)修改组信息。
- 若使用 LDAP/NIS,需通过对应工具(如
(三)查询与验证命令
命令 | 参数 | 缩写来源 | 示例 | 示例详细解释 |
---|---|---|---|---|
id | -u | user ID | id -u dev01 | 显示用户 dev01 的 UID(例如输出 1001 )。 |
-g | group ID | id -g dev01 | 显示用户主组 GID(例如输出 1001 )。 | |
-Gn | Groups names | id -Gn dev01 | 显示用户所属的所有组名(例如输出 dev01 sudo )。 | |
groups | - | 无 | groups dev01 | 显示用户主组和附加组(例如输出 dev01 : dev01 sudo )。 |
getent | - | get entries | getent passwd dev01 | 查询 /etc/passwd 中 dev01 的信息(输出格式:dev01:x:1001:1001::/home/dev01:/bin/bash )。 |
last | - | 无 | last dev01 | 查看用户 dev01 的登录历史(包括时间、IP、终端等)。 |
who | - | 无 | who | 显示当前登录系统的用户列表。 |
三、服务器目录结构及其作用
(一)核心目录及其用途
Linux 系统目录遵循 FHS(文件系统层次结构标准),以下是核心目录及其用途:
目录 | 作用 |
---|---|
/ | 根目录,所有其他目录的起点。 |
/bin | 存放系统基础命令(如 ls , cp ),所有用户可执行。 |
/etc | 系统全局配置文件(如用户账户、网络配置)。 |
/home | 普通用户的家目录,每个用户独立子目录。 |
/root | 超级管理员 root 的家目录。 |
/var | 存放动态数据(日志、数据库、邮件等)。 |
/tmp | 临时文件,重启后清空。 |
/usr | 用户安装的软件和只读数据,包含 /usr/bin (用户级命令)、/usr/lib 等。 |
/boot | 系统启动文件(内核、引导加载程序)。 |
/dev | 设备文件(如硬盘 /dev/sda 、终端 /dev/tty )。 |
/proc | 虚拟文件系统,显示内核和进程信息。 |
/opt | 可选的应用软件包(如第三方商业软件)。 |
/sbin | 系统管理命令(如 fdisk , reboot ),需 root 权限执行。 |
(二)核心配置文件说明
文件 | 作用 | 字段示例解析 |
---|---|---|
/etc/passwd | 存储用户基本信息。 | dev01:x:1001:1001:Developer User:/home/dev01:/bin/bash :用户名、密码占位符、UID、GID、描述、家目录、Shell。 |
/etc/shadow | 存储用户密码哈希及安全策略(仅 root 可读)。 | dev01:$6$...:19147:0:99999:7::: :密码哈希、最后修改天数、最短有效期、最长有效期、警告天数等。 |
/etc/group | 存储组信息(组名、GID、组成员)。 | developers:x:1005:dev01,dev02 :组名、密码占位符、GID、组成员列表。 |
/etc/sudoers | 配置 sudo 权限(通过 visudo 安全编辑)。 | %sudo ALL=(ALL:ALL) ALL :允许 sudo 组成员以任意用户身份执行任意命令。 |
OK,看到这里的朋友想必一定累了吧,小编也累了,毕竟写了一万多字呢,希望本篇博客对你有帮助!
相关文章:
【Linux学习】Ubuntu对用户进行管理
目录 写在前面 【Linux学习】Ubuntu对用户进行管理一、为什么需要用户管理?二、用户管理基础操作(一)用户管理1. 用户管理命令表格2. 关键操作场景说明场景一:创建用户并配置权限场景二:修改用户属性场景三:…...
JVM 垃圾回收器
以下是对主流 JVM 垃圾回收器的详细解析,涵盖 一、Serial GC(单线程串行回收器) 二、Parallel GC(吞吐量优先回收器) 三、CMS(Concurrent Mark Sweep,低延迟回收器) 四、G1&…...
JUC入门(三)
7、Callable 1、可以有返回值 2、可以抛出异常 3、方法不同 run()/call() 代码测试 老版本的应用 package com.yw.callable;public class Old {public static void main(String[] args) {new Thread(new MyThread()).start();} }class MyThread implements Runnable{Overri…...
RV1126多线程获取SMARTP的GOP模式数据和普通GOP模式数据
通过代码的方式同时获取SMARTP模式的VENC码流数据和普通GOP模式的VENC码流数据,并进行对比画质。 一.RV1126 VI采集摄像头数据并同时编码SMARTP模式和普通GOP模式的编码码流流程 RV1126利用多线程同时获取普通GOP的VENC码流数据和SMARTP的码流数据一般如上图&#…...
MySQL事务、视图、索引、备份和恢复
1. 事务 如果不使用事务,那么如果出现了张三账户汇款成功-500元,但是李四那边的服务器出现了故障没有接收到500元,那么就会出现张三账户里有500元但是李四那边的账户还是1元的情况,转账的500元被吞了。 创建事务 2. 视图 创建视图…...
yolov8训练模型优化模型【误检】
针对 YOLOv8 模型在电动车人脸检测中出现误检行人人脸的问题,结合最新研究与实践经验,以下提供多维度优化方案及具体实施步骤: 一、数据集优化 数据清洗与标注增强 剔除干扰样本:确保训练集中所有标注仅包含骑行状态的人脸&#x…...
初识MySQL · 索引
目录 前言: 重温磁盘 认识索引 为什么这么做,怎么做 重谈page 聚簇索引VS非聚簇索引 回表查询 索引分类 前言: 前文我们主要是介绍了MySQL的一些基本操作,增删查改一类的操作都介绍了,并且因为大多数情况下&am…...
Kubernetes in action-配置和应用升级
Kubernetes的配置和应用升级 1、配置1.1 configMap1.2 secret1.3 Downward API1.4 Kubernetes API 2、服务升级2.1 升级方式2.1.1 先删除所有的旧版pod,使用新版本pod替换2.1.2 先创建新版pod,再删除旧版本pod2.1.3 滚动优化 2.2 使用deployment声明式升…...
十三、面向对象底层逻辑-Dubbo序列化Serialization接口
一、引言:分布式通信的数据桥梁 在分布式服务调用中,参数的跨网络传输需要将对象转化为二进制流,这一过程直接影响系统的性能、兼容性与安全性。Dubbo通过Serialization接口构建了可扩展的序列化体系,支持多种序列化协议的无缝切…...
5.19 打卡
DAY 30 模块和库的导入 知识点回顾: 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致) 作业:自己新建几个不同路径文件尝试下如何导入...
MathType公式如何按照(1)(2)…编号
在word中使用mathtype插入公式,发现插入的公式编号默认为(1.1),(1.2)…,但论文中常用的公式编号是(1)(2)…,分享一下如何实现(1.1)→(1)。 ①word菜单找到“MathType”,点击“插入编号”-“格式化”。 ②取消勾选“章编号”和“节…...
解决即使安装了pageoffice网页还是无法跳转、点击按钮没有反应等问题
出现的现象: 安装了pageoffice网页还是无法跳转、点击按钮没有反应 网页提示的错误: 点击按钮之前右键检查网页发现的错误: 点击无效按钮之后右键检查出现的错误: 原因: 鉴于安全性的考虑,新版浏览器不支…...
正点原子STM32新建工程
MDK 源自德国的 KEIL 公司,是 RealView MDK 的简称。 MDK5 由两个部分组成: MDK Core 和 Software Packs。 MDK Core 又分成四个部分: uVision IDE with Editor(编辑器), ARMC/C Compiler(编译…...
计算机网络 第三章:运输层(一)
运输层位于应用层和网络层之间,是分层的网络体系结构的重要部分。该层为运行在不同主机上的应用进程提供直接的通信服务。通常特别关注因特网协议,即 TCP 和 UDP 运输层协议。 讨论运输层和网络层的关析,为研究运输层第一个关键功能ÿ…...
机器学习(14)——模型调参
文章目录 一、动态调参方法论1. 调参策略选择2. 千万数据优化原则 二、模型调参策略对比1. LightGBM调参路线2. XGBoost调参路线3. 随机森林调参策略 三、代码实现示例通用数据准备(适用于所有模型)1. LightGBM调参示例2. XGBoost调参示例3. 随机森林调参…...
基于PetaLinux的Zynq PS应用自启动全攻略
一、嵌入式Linux启动管理的艺术 在工业机器人、智能摄像头、边缘计算网关等场景中,开机自启动管理是系统可靠性的第一道关卡。本文将深入讲解Zynq PS端在PetaLinux环境下实现: Systemd服务深度定制启动时序精准控制启动速度优化技巧动态服务管理创新方案二、环境搭建与工程配…...
贪心算法:多处最优服务次序、删数问题
多处最优服务次序问题 问题描述:设有n个顾客同时等待一项服务。顾客i需要的服务时间为ti(1≤i≤n),共有s处可以提供此项服务。应如何安排n个顾客的服务次序,才能使平均等待时间达到最小?平均等待时间是n个顾客等待服务时间的总和除以n。 算法设计:对于给定的n个顾…...
使用 Flask 框架实现FTP,允许用户通过 Web 界面浏览和下载文件夹中的所有文件
Flask 文件和文件夹下载服务实现 以下是一个基于 Flask 框架的简单 Web 服务,用于开放指定文件夹(./shared_files),允许用户通过浏览器浏览和下载文件夹中的所有文件和子文件夹。ZIP 和 TAR 文件将直接下载,而文件夹将…...
【Go】从0开始学习Go
文章目录 从0开始学习Go0 与C对比1 代码框架1.1 helloworld式代码示例1.2 主体代码元素(核心三部分)1.3 其他 2 与C/C区别3 有用的小工具4 注意事项 从0开始学习Go 0 与C对比 特性CGo编译型语言需要编译为机器码直接编译为二进制可执行文件静态类型类型…...
软件设计师SQL考点分析——求三连
一、考点分值占比与趋势分析 综合知识分值统计表(75分制) 年份考题数量分值分值占比考察重点2018334%关系代数、权限控制2019222.67%SQL注入、授权语句2020445.33%投影操作、权限回收2021334%视图操作、权限传递2022222.67%数据库安全、WITH GRANT OPT…...
使用tcs34725传感器和51单片机识别颜色
使用TCS34725颜色传感器和51单片机来识别颜色是一个非常有趣的项目。TCS34725是一种常用的RGB颜色传感器,能够测量红、绿、蓝光的强度,从而实现颜色识别。 1. 硬件连接 TCS34725传感器通过IC接口与51单片机连接。以下是连接方式: SDA&…...
数据库-oracle-包-视图传参
并发下可能不准确 -- 修改包规范 CREATE OR REPLACE PACKAGE sczz.p_view_param IS function set_n(n varchar2) return varchar2; function get_n return varchar2; function set_ny(ny varchar2) return varchar2; function get_ny return varchar2; …...
深入探讨Java中的上下文传递与ThreadLocal的局限性及Scoped Values的兴起
在Java开发中,特别是在依赖框架的应用程序中,上下文数据的管理是一个常见但具有挑战性的问题。上下文数据可能包括元数据、配置信息或其他需要在代码不同部分之间共享的信息。传统的做法是通过方法参数显式传递这些上下文,但这种方法会导致代码复杂、难以维护,尤其是在大型…...
Spring boot 学习笔记2
Maven 项目管理工具:Maven 通过 pom.xml(Project Object Model)文件描述项目配置,包括依赖、构建流程、插件等,实现项目标准化管理 依赖管理:自动下载并管理项目所需的第三方库(如 Spring、MyB…...
“保证医疗器械信息来源合法 真实、安全的保障措施、情况说明及相关证明”模板
保证医疗器械信息来源合法真实、安全的保障措施、情况说明及相关证明 一、医疗器械信息来源合法、真实、安全的管理措施 目前我公司网站所展示的医疗器械是企业代理品种,是取得合法注册资格的产品,拥有合法证明文件的产品。本网站仅展示本公司行政许可…...
Feature Toggle 不再乱:如何设计一个干净、安全、可控的特性开关系统?
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...
不锈钢保温容器行业2025数据分析报告
不锈钢保温容器市场概况 2024年全球不锈钢保温容器市场规模约为453.3亿元,预计到2031年将增长至608.3亿元,年均复合增长率(CAGR)为4.3%。这一增长主要得益于全球范围内对保温容器需求的持续增加,尤其是在户外活动、餐…...
leetcode239 滑动窗口最大值deque方式
这段文字描述的是使用单调队列(Monotonic Queue) 解决滑动窗口最大值问题的优化算法。我来简单解释一下: 核心思路 问题分析:在滑动窗口中,若存在两个下标 i < j 且 nums[i] ≤ nums[j],则 nums[i] 永远…...
腾讯云怎么在游戏云中助力
腾讯云游戏云:依托深厚游戏基因,打造高质量全方位生态平台 在竞争激烈的云计算市场中,腾讯云凭借其得天独厚的游戏生态资源和深耕多年的技术沉淀,正成为游戏行业不可忽视的重要力量。腾讯不仅是全球领先的游戏开发和发行商&#…...
深入理解pip:Python包管理的核心工具与实战指南
# 深入理解pip:Python包管理的核心工具与实战指南 在Python开发中,第三方库是提升效率的关键。而pip作为Python官方的包管理工具,承担着安装、卸载、升级和管理库的重要职责。本文将全面解析pip的核心命令,结合实例演示用法&#…...
【python】windows修改 pip 默认安装路径
在 Windows 系统 下,希望修改 pip 默认安装路径,结合你前面贴的图片和信息,一个 推荐做法(不修改 site.py)的完整教程。 目标:让 pip 安装包默认装到你指定的路径(如 D:\MyPythonLibsÿ…...
Python函数——万字详解
—— 小 峰 编 程 导 语: 从今天开始,我们将进入第二模块的学习——函数。第一模块主要是学习python基础知识,从第二模块开始就可以通过程序去解决工作中实际的问题。从今天开始,我们将进入第二模块的学习,此模块…...
es在已有历史数据的文档新增加字段操作
新增字段设置默认值 场景 在已经有大量数据的索引文档上,增加新字段 技术实现 一.更新索引映射 通过PUT请求显式定义新字段类型,确保后续写入的文档能被正确解析 PUT /文档名/_mapping {"properties": {"字段名1": {"type…...
LeetCode 35 搜索插入位置题解
LeetCode 35 搜索插入位置题解 题目描述 题目链接 给定一个排序数组和一个目标值,在数组中找到目标值并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置(需保证数组仍然有序)。要求时间复杂度为 O(log n)。…...
RabbitMQ通信模式(Simplest)Python示例
RabbitMQ通信模式-Python示例 0.RabbitMQ官网通信模式1.Simplest(简单)模式1.1 发送端1.2 接收端 0.RabbitMQ官网通信模式 1.Simplest(简单)模式 1.1 发送端 # -*- coding: utf-8 -*- """ Author: xxx date: 2025/5/19 11:30 Description: Simaple简单模…...
游戏开发实战(一):Python复刻「崩坏星穹铁道」嗷呜嗷呜事务所---源码级解析该小游戏背后的算法与设计模式【纯原创】
文章目录 奇美拉项目游戏规则奇美拉(Chimeras)档案领队成员 结果展示: 奇美拉项目 由于项目工程较大,并且我打算把我的思考过程和实现过程中踩过的坑都分享一下,因此会分3-4篇博文详细讲解本项目。本文首先介绍下游戏规则并给出奇美拉档案。…...
力扣热题100之删除链表的倒数第N个节点
题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 代码 方法一 将链表中的值放入列表中,然后删除倒数第n个值,再将剩下的数依次转化为链表 # Definition for singly-linked list. # class ListNode: # …...
OCframework编译Swift
建一个OC的framework: 需要对外暴露的OC文件,需要放到OC的.h文件中 framework中,OC类,调用framework中的Swift类: #import "WowAudioFocus/WowAudioFocus-Swift.h" //02 #import "{工程名}/{工程…...
【AI News | 20250519】每日AI进展
AI Repos 1、deepdrone DeepDrone是一款基于smolagents框架的无人机聊天代理,集成DroneKit实现无人机分析与操作。用户可通过自然语言聊天与无人机助手交互,实现飞行路径和传感器数据可视化、基于飞行时长的维护建议、任务规划以及真实的无人机控制&…...
分布式ID生成系统
代码地址: github mid 简介 分布式 ID 生成系统是一个高性能、可靠的 ID 生成服务,支持两种模式:Snowflake(基于时间戳的内存生成)和 Segment(基于 MySQL 的号段分配)。系统采用双 Buffer 策略优化性能,集成 Prometheus 监控和 Zap 结构化日志,确保高可用性和可观测性…...
MAC常用操作整理
音量方法: 电脑键盘的右上角就有静音和不静音的按钮,还有调节音量的按钮,调节屏幕亮度的按钮 切换输入法方法: 1.大写按键,2.function按键(fn), 3.control 空格键, 选择上一个输入法,4.controloption空格…...
【Canvas与图标】圆角方块蓝星CSS图标
【成图】 120*120的png图标 大小图: 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>圆角方块蓝星CSS Draft1</…...
易境通散货拼柜系统:提高货代企业货物配载效率
在国际物流代理运输领域,货物配载是整个供应链的核心环节,其优化对于提升整个供应链的效率至关重要。传统的配载管理方式往往依赖人工操作,不仅效率低下,还容易出现错误。面对多订单、多货主、多目的地的复杂场景,传统…...
[Spring Boot]整合Java Mail实现Outlook发送邮件
日常开发过程中,我们经常需要使用到邮件发送任务,比方说验证码的发送、日常信息的通知等。日常比较常用的邮件发送方包括:163、QQ等,本文主要讲解Outlook SMTP的开启方式、OutLook STARTTTL的配置、如何通过JavaMail来实现电子邮件的发送等。 Outlook作为微软提供的企业电子…...
【盈达科技】GEO优化实战策略
提升内容在生成式引擎中的可见性:实战策略 随着生成式引擎(Generative Engines, GEs)的兴起,内容创作者面临着新的挑战和机遇。这些引擎通过整合和总结多源信息来提供精准且个性化的回答,正在迅速取代传统搜索引擎。为…...
HTTP 协议基础
本篇文章会从如下角度介绍 HTTP 协议: 原理与工作机制请求方法与状态码Header 与 Body 1、原理与工作机制 1.1 HTTP 是什么 HyperText Transfer Protocol,超文本传输协议,"超"表示扩展而非超级,即可以链接到其他文本…...
ros运行包,Ubuntu20.04成功运行LIO-SAM
zz:~/lio_sam_ws$ source devel/setup.bash zz:~/lio_sam_ws$ roslaunch lio_sam run.launch 创建包链接: 链接1:Ubuntu20.04成功运行LIO-SAM_ubuntu20.04运行liosam-CSDN博客 链接2:ubuntu 20.04 ROS 编译和运行 lio-sam,并且导出PCD文件…...
Linux《自主Shell命令行解释器》
在上一篇的进程控制当中我们已经了解了进程退出、进程等待以及进程替换的相关概念,那么在了解了这些的概念之后接下来在本篇当中我们就可以结合之前我们学习的知识来实现一个自主的Shell命令行解释器,通过Shell的实现能让我们进一步的理解操作系统当中的…...
设置IDEA打开新项目使用JDK17
由于最近在学习Spring-AI,所以JDK8已经不适用了,但是每次创建新项目都还是JDK8,每次调来调去很麻烦 把Projects和SDKs都调整为JDK17即可 同时,Maven也要做些更改,主要是添加build标签 <build><plugins>&…...
Vue百日学习计划Day36-42天详细计划-Gemini版
总目标: 在 Day 36-42 理解组件化开发的思想,熟练掌握 Vue 组件的注册、Props、Events、v-model、Slots、Provide/Inject 等核心概念和实践,能够构建可复用和易于维护的组件结构。 所需资源: Vue 3 官方文档 (组件基础): https://cn.vuejs.org/guide/es…...