Linux运维——用户管理
Linux用户管理
- 一、Linux用户管理要点
- 二、常用命令
- 2.1、groupadd
- 2.2、groupdel
- 2.3、groupmod
- 2.4、groups
- 2.5、useradd
- 2.6、userdel
- 2.7、passwd
- 2.9、su
- 2.10、sudo
- 2.10.1、给普通用户授权 sudo
- 2.10.2、 免密码授权 sudo
一、Linux用户管理要点
- 创建用户组 - 使用
groupadd - 删除用户组 - 使用
groupdel - 修改用户组信息 - 使用
groupmod - 创建用户 - 使用
useradd - 删除用户 - 使用
userdel - 修改用户信息 - 使用
usermod - 设置用户认证信息 - 使用
passwd - 切换用户 - 使用
su - 当前用户想执行没有权限执行的命令时,使用其他用户身份去执行 - 使用
sudo
二、常用命令
2.1、groupadd
groupadd 命令用于创建一个新的用户组,新用户组的信息将被添加到系统文件中。
groupadd [选项] 组名
- -g, --gid GID: 指定新用户组的组 ID(GID)。
- -K, --key KEY=VALUE: 设置密钥值对,用于指定组的属性。
- -o, --non-unique: 允许创建非唯一的组 ID。
- -p, --password PASSWORD: 设置用户组的密码,通常不建议使用密码。
- -r, --system: 创建一个系统用户组。
- -R, --root CHROOT_DIR: 在指定的 chroot 目录中执行操作。
使用案例:
创建一个名为 testgroup的新用户组:
groupadd testgroup
创建一个名为 sysgroup的系统用户组:
groupadd -r sysgroup
创建一个名为 staff的用户组并指定组 ID 为 500:
groupadd -g 500 staff
注意事项:
- 使用 groupadd 命令需要具有适当的权限,通常需要 root 权限或 sudo 权限。
- 可以通过指定选项来设置新用户组的组 ID、属性等。
- 创建系统用户组时,通常会使用 -r 选项。
- 确保新创建的用户组名称不与现有用户组重复,避免混淆。
- 建议在创建用户组时,为其指定一个明确的目的或描述性的名称,以便于管理和理解。
2.2、groupdel
groupdel命令用于在Linux系统中删除一个用户组。该命令不会操作与用户组关联的文件和目录,但删除用户组后,与该组相关的文件和目录中的组信息可能需要手动更改,以避免权限问题。
本命令要修改的系统文件包括 /ect/group 和 /ect/gshadow。若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。
groupdel [选项] 组名
-h或--help:显示groupdel命令的帮助信息。-f或--force:强制删除用户组,即使它是某个用户的主组。
使用示例:
删除名为testgroup的用户组:
groupdel testgroup
删除cc用户组:
groupdel cc
强制删除apps用户组:
groupdel -f apps
强制删除名为staff的用户组:
groupdel -f staff
显示groupdel命令的帮助信息:
groupdel -h
注意事项和常见错误处理:
- 确保该组不再被任何用户所使用:如果该组仍被某些用户使用,删除操作将失败。除非使用-f选项强制删除,否则必须先删除这些用户
- 修改用户的主组:如果某个用户的主组是目标组,命令会报错。此时需要先将用户的主组改为另一个组,然后再进行删除操作
- 组不存在:如果要删除的组不存在,groupdel会提示错误
2.3、groupmod
groupmod命令是Linux系统中用于修改现有用户组的工具。其主要用途包括修改组的GID(组标识符)和组名。
常用选项:
-g或--gid GID:用于更改组的GID。-n或--new-name NEW_GROUP:用于更改组的名称。-o或--non-unique:允许使用重复的GID,即允许多个组使用同一个GID。-h或--help:显示帮助信息。-p或--password PASSWORD:设置组的密码。-R或--root CHROOT_DIR:指定在CHROOT_DIR下更改生效。-V或--version:显示版本信息。
使用示例:
修改组名:
groupmod -n newgroup oldgroup
# 这条命令将用户组oldgroup的名称修改为newgroup。
修改组的GID:
groupmod -g 101 groupname
# 这条命令将用户组groupname的GID修改为101。
允许使用其他用户组的GID:
groupmod -o groupname
# 这条命令将用户组groupname的属性设置为允许使用其他用户组的GID。
设置组密码:
groupmod -p password groupname
# 这条命令将用户组groupname的密码设置为password。
注意事项:
- 在执行groupmod命令时,确保您具有足够的权限,通常需要以root用户身份执行。
- 修改组名称或GID可能会影响系统上相关用户的权限和文件,因此在进行修改前请做好备
2.4、groups
groups命令用于显示用户所属的用户组信息。
- 默认情况下,groups命令会显示当前用户所属的所有用户组。例如,输入groups即可查看当前用户所属的所有附加组。
- 指定用户,可以在命令后跟上用户名来显示指定用户所属的用户组。例如,输入groups username可以查看指定用户username所属的所有用户组。
常用选项:
-a:在输出中包括用户的主组(primary group)。默认情况下,主组不会被单独列出,而是作为用户名的一部分显示在输出中。-g:只显示用户的主组ID(GID),而不显示组名。-n:以数字形式显示组ID(GID)和用户名(UID),而不是名称。-r:只显示实际存在的组,即那些在系统上实际存在的组。默认情况下,groups命令还会显示一些特殊的、不存在的组(如“wheel”组在某些系统中可能不存在)。
注意事项:
- 权限问题:在执行groups命令时,需要确保当前用户具有足够的权限来查看其他用户的组信息。如果当前用户没有足够的权限,可能会收到权限拒绝的错误信息。
- 输出定制:根据需要,可以使用不同的参数来定制groups命令的输出。例如,如果需要以数字形式显示组ID,可以使用-n参数;如果需要只显示主组ID,可以使用-g参数。
2.5、useradd
useradd 命令用于 Linux 中创建的新的系统用户。useradd 可用来建立用户帐号。帐号建好之后,再用 passwd 设定帐号的密码.而可用 userdel 删除帐号。使用 useradd 指令所建立的帐号,实际上是保存在 /etc/passwd 文本文件中。
使用useradd命令时,系统会自动更新相关文件,包括/etc/passwd和/etc/shadow。 /etc/passwd文件包含用户的基本信息,如用户名、用户ID(UID)、组ID(GID)等;而/etc/shadow文件则包含加密的用户密码和账户有效期等信息。通过useradd命令创建的用户,管理员可以通过passwd命令为其设置密码。需要注意的是,useradd命令本身不会为用户创建密码信息,而是使用星号(*)初始化密码字段,随后需要通过passwd或pwdadm命令设置密码。
useradd [选项] 用户名
常用选项:
-m:创建用户主目录(通常位于 /home/用户名)。-d:指定用户主目录路径。-s:指定用户的默认 shell。-g:指定用户的主组(组名或 GID)。-G:指定用户的附加组(组名或 GID)。-u:指定用户的 UID。-c:添加用户备注信息(如全名)。-e:设置账户过期日期(格式:YYYY-MM-DD)。-p:设置用户密码(通常不推荐直接使用,建议用 passwd 命令)。
使用示例:
创建用户并生成主目录
sudo useradd -m username
···
指定主目录路径
```sh
sudo useradd -m -d /custom/home/username username
指定默认 shell
sudo useradd -m -s /bin/bash username
指定主组和附加组
sudo useradd -m -g primarygroup -G supplementarygroup username
指定 UID
sudo useradd -m -u 1001 username
添加备注信息
sudo useradd -m -c "User Full Name" username
设置账户过期日期
sudo useradd -m -e 2023-12-31 username
创建用户后,使用 passwd 命令设置密码:
sudo passwd username
注意事项:
- 需要 root 权限,通常使用 sudo。
- 如果不使用 -m 选项,不会创建主目录。
- 建议使用 passwd 命令设置密码,而不是 -p 选项。
2.6、userdel
以下是基本用法和常见选项:
userdel [选项] 用户名
常用选项:
-r:删除用户的同时,删除用户的主目录和邮件文件(通常位于 /home/用户名 和 /var/mail/用户名)。-f:强制删除用户,即使用户当前已登录。-Z:删除用户的 SELinux 用户映射(适用于启用了 SELinux 的系统)。
使用示例:
删除用户(保留主目录)
sudo userdel username
# 这种方式只会删除用户账户,但不会删除用户的主目录和邮件文件。
删除用户并删除主目录
sudo userdel -r username
# 这种方式会删除用户账户及其主目录和邮件文件。
强制删除用户
sudo userdel -f username
# 即使用户当前已登录,也会强制删除用户。
删除用户并清理 SELinux 映射
sudo userdel -rZ username
# 适用于启用了 SELinux 的系统。
注意事项:
- 权限要求:需要 root 权限,通常使用 sudo。
- 用户进程:如果用户有正在运行的进程,删除用户时可能会失败。可以使用 -f 选项强制删除,或者先终止相关进程。
- 主目录:如果不使用 -r 选项,用户的主目录和邮件文件将保留在系统中。
- 依赖文件:删除用户后,系统中可能仍存在属于该用户的文件(如 /home/username 中的文件),需要手动清理。
其他相关命令:
检查用户是否存在:
id username
# 如果用户存在,会显示用户信息;如果不存在,会提示“无此用户”。
终止用户进程:如果用户有正在运行的进程,可以使用以下命令终止:
sudo pkill -u username
sudo killall -u username
# 通过 userdel 命令,可以安全地删除用户账户及其相关文件。
2.7、passwd
passwd 命令用于在 Linux 系统中管理用户密码。
passwd [选项] [用户名]
# 如果不指定用户名,默认修改当前用户的密码。
# 如果指定用户名(需要管理员权限),可以修改其他用户的密码。
常用选项:
-l:锁定用户账户,禁止登录。-u:解锁用户账户。-d:删除用户密码,允许用户无需密码登录(不安全,不推荐)。-e:强制用户下次登录时修改密码。-S:显示用户密码状态(是否锁定、密码加密算法等)。-n:设置密码的最短使用期限(天数)。-x:设置密码的最长使用期限(天数)。-w:设置密码过期前的警告天数。-i:设置密码过期后的宽限天数。
使用示例:
修改当前用户的密码
passwd
# 系统会提示输入当前密码,然后输入新密码并确认。
修改其他用户的密码(需要管理员权限)
sudo passwd username
# 管理员可以直接为其他用户设置新密码。
锁定用户账户
sudo passwd -l username
# 锁定后,用户将无法登录。
解锁用户账户
sudo passwd -u username
删除用户密码
sudo passwd -d username
# 删除密码后,用户无需密码即可登录(不安全,不推荐)。
强制用户下次登录时修改密码
sudo passwd -e username
显示用户密码状态
sudo passwd -S username# 输出示例:
username P 05/10/2023 0 99999 7 -1各字段含义:
- 用户名
- 密码状态(P 表示有密码,L 表示锁定,NP 表示无密码)
- 最后修改密码的日期
- 最小密码年龄(天数)
- 最大密码年龄(天数)
- 警告天数
- 密码过期后的宽限天数
设置密码策略:
# 设置密码最短使用期限为 7 天:
sudo passwd -n 7 username# 设置密码最长使用期限为 90 天:
sudo passwd -x 90 username# 设置密码过期前 7 天提醒用户:
sudo passwd -w 7 username# 设置密码过期后 5 天内仍可登录:
sudo passwd -i 5 username
注意事项:
- 密码强度:系统通常会检查密码强度,过于简单的密码可能被拒绝。
- 管理员权限:修改其他用户的密码需要 root 权限,通常使用 sudo。
- 锁定账户:锁定账户后,用户将无法登录,但用户的主目录和文件仍然存在。
- 密码策略:合理设置密码策略可以提高系统安全性。
2.9、su
su 命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。
su [选项] [用户名]
# 如果不指定用户名,默认切换到 root 用户。
# 切换用户后,会进入目标用户的 shell 环境。
常用选项:
-或-l或--login:以登录 shell 的方式切换用户,同时加载目标用户的环境变量和配置文件(如 ~/.bashrc 或 ~/.profile)。-c:执行一条命令后立即退出,不进入交互式 shell。-s:指定要使用的 shell(如 /bin/bash 或 /bin/sh)。-m或-p:保留当前环境变量,不加载目标用户的环境配置。
常用示例:
切换到 root 用户
su
# 系统会提示输入 root 用户的密码。
以登录 shell 的方式切换到 root 用户
su -
#这种方式会加载 root 用户的环境变量和配置文件。
切换到其他用户
su username
# 系统会提示输入目标用户的密码。
以登录 shell 的方式切换到其他用户
su - username
切换到用户并执行一条命令
su -c "command" username# 例如,以 root 用户身份创建一个文件:su -c "touch /root/testfile" root
指定使用的 shell
su -s /bin/bash username
保留当前环境变量
su -m username
注意事项:
- 密码要求:
- 切换到 root 用户或其他用户时,需要输入目标用户的密码。
- 如果当前用户是 root,切换到其他用户时不需要密码。
- 环境变量:
- 使用 su - 或 su -l 会加载目标用户的环境变量。
- 使用 su 或 su -m 会保留当前用户的环境变量。
- 退出切换的用户:
- 输入 exit 或按 Ctrl+D 可以退出当前用户,返回到之前的用户。
- 权限限制:
- 普通用户只能切换到其他用户(需要密码),而 root 用户可以切换到任何用户(无需密码)。
与 sudo 的区别:
su:直接切换到目标用户的身份,需要目标用户的密码。sudo:以当前用户的权限执行命令,需要当前用户的密码(或配置为无需密码)。
2.10、sudo
sudo 命令允许授权用户以超级用户(root)或其他用户的身份执行命令。
sudo [选项] 命令
# 默认情况下,sudo 以 root 用户身份执行命令。
# 执行命令时,系统会提示输入当前用户的密码(而非 root 密码)。
常用选项:
-u:以指定用户身份执行命令。-l:列出当前用户允许执行的 sudo 命令。-s:启动目标用户的 shell(默认为 root)。-i:以登录 shell 的方式启动目标用户的 shell(加载环境变量)。-v:刷新 sudo 的认证时间戳(延长有效期)。-k:清除 sudo 的认证时间戳(立即失效)。-b:在后台运行命令。-E:保留当前用户的环境变量。
使用示例:
以 root 身份执行命令
sudo command# 例如,安装软件包:
sudo apt update
以其他用户身份执行命令
sudo -u username command# 例如,以用户 testuser 的身份创建文件:
sudo -u testuser touch /home/testuser/testfile
启动 root 用户的 shell
sudo -s
以登录 shell 的方式启动 root 用户的 shell
sudo -i
在后台运行命令
sudo -b command
保留当前用户的环境变量
sudo -E command
刷新 sudo 认证时间戳
sudo -v
清除 sudo 认证时间戳
sudo -k
配置文件:
sudo 的权限配置存储在 /etc/sudoers 文件中。可以使用 visudo 命令安全地编辑该文件。
示例配置:
允许用户执行所有命令
username ALL=(ALL:ALL) ALL
允许用户执行特定命令
username ALL=(ALL) /usr/bin/apt, /usr/bin/systemctl
允许用户无需密码执行命令
username ALL=(ALL) NOPASSWD: /usr/bin/apt
注意事项:
- 密码提示:
- 执行 sudo 时,系统会提示输入当前用户的密码。
- 默认情况下,密码在 5 分钟内有效(无需重复输入)。
- 权限限制:
- 只有被授权的用户才能使用 sudo。
- 权限配置在 /etc/sudoers 文件中定义。
- 安全性:
- 避免直接使用 sudo 执行未知或不可信的脚本。
- 谨慎配置 NOPASSWD 选项,以免降低安全性。
- 日志记录:
- sudo 的所有操作都会被记录到 /var/log/auth.log 或 /var/log/secure 中,便于审计。
与 su 的区别:
sudo:以当前用户的权限执行命令,需要当前用户的密码。su:直接切换到目标用户的身份,需要目标用户的密码。
2.10.1、给普通用户授权 sudo
假设要给普通用户 mary 配置 sudo 权限:
/etc/sudoers文件存放了 sudo 的相关用户,但是默认是没有写权限的,所以需要设为可写:chmod u+w /etc/sudoers- 在该文件中添加
mary ALL=(ALL) ALL,保存并退出,让 mary 具有 sudo 的所有权限 - 再将
/etc/sudoers的权限恢复到默认状态:chmod u-w /etc/sudoers
2.10.2、 免密码授权 sudo
与给普通用户授权 sudo 类似,区别仅在于第 2 步:mary ALL=(ALL) NOPASSWD: ALL。
相关文章:
Linux运维——用户管理
Linux用户管理 一、Linux用户管理要点二、常用命令2.1、groupadd2.2、groupdel2.3、groupmod2.4、groups2.5、useradd2.6、userdel2.7、passwd2.9、su2.10、sudo2.10.1、给普通用户授权 sudo2.10.2、 免密码授权 sudo 一、Linux用户管理要点 创建用户组 - 使用 groupadd删除用…...
基于STM32的声纹识别智能门锁
一、项目背景与意义 行业痛点:传统指纹锁存在表皮磨损识别失败风险,声纹具备活体检测特性 技术优势: - 采用MFCC(梅尔频率倒谱系数)替代传统FFT,提升说话人特征区分度 - 动态时间规整(DTW)算法解决语…...
【密评】 | 商用密码应用安全性评估从业人员考核题库(19)
在SM9数字签名的生成和验证过程之前,杂凑函数( )。 A.仅对待签名消息进行压缩 B.仅对待验证消息进行压缩 C.对待签名消息和待验证消息都要压缩 D.不起任何作用 SM9密钥封装机制封装的秘密密钥是( )生成的。 A.根据主公钥 B.根据接受者的用户标识 C.由随机数发生器 D.以上都…...
redis底层数据结构——链表
文章目录 定义内部实现总结 定义 链表提供了高效的节点重排能力,以及顺序性的节点访间方式,并且可以通过增删节点来灵活地调整链表的长度。 作为一种常用数据结构,链表内置在很多高级的编程语言里面,因为Redis使用的C语言并没有…...
在CT107D单片机综合训练平台上实现外部中断控制LED闪烁
引言 在单片机开发中,外部中断是一个非常重要的功能,它可以让单片机在检测到外部信号变化时立即做出响应。本文将详细介绍如何在CT107D单片机综合训练平台上使用外部中断来控制LED灯的闪烁。我们将使用两种不同的方式来实现这一功能:一种是在…...
C++ Primer 类型转换
欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…...
芋道源码(无遮羞布版)Spring Boot 全景指南
芋道源码(无遮羞布版)Spring Boot 全景指南 项目地址:https://gitcode.com/gh_mirrors/ru/ruoyi-spring-boot-all 一、项目目录结构及介绍 芋道源码(ruoyi-spring-boot-all)项目基于Spring Boot构建,旨在提供一个全…...
Visual Studio Code中文出现黄色框子的解决办法
Visual Studio Code中文出现黄色框子的解决办法 一、vsCode中文出现黄色框子-如图二、解决办法 一、vsCode中文出现黄色框子-如图 二、解决办法 点击 “文件”点击 “首选项”点击 “设置” 搜索框直接搜索unicode选择“文本编辑器”,往下滑动,找到“Un…...
“可通过HTTP获取远端WWW服务信息”漏洞修复
环境说明:①操作系统:windows server;②nginx:1.27.1。 1.漏洞说明 “可通过HTTP获取远端WWW服务信息”。 修复前,在“响应标头”能看到Server信息,如下图所示: 修复后,“响应标头…...
CAD 屏幕进度条
参考鸿视频实现,代码如下: 主类 using System.IO.Ports; using System.Threading; using System.Windows.Controls; using static IFoxDemo.进度条class; using static System.Windows.Forms.VisualStyles.VisualStyleElement.TrackBar;//[assembly: C…...
小红书爬虫: 获取所需数据
小红书,又名 “小红书 ”或简称 “红”,已迅速成为中国社交和电子商务领域的重要参与者,成为一个不可或缺的平台。对于企业、营销人员和数据分析师来说,从小红书收集数据可以获得宝贵的洞察力,从而推动业务增长。虽然这…...
使用sunshine和moonlight串流时的音频输出问题
设备:电脑和平板串流,把平板当副屏使用 1.如果启用安装steam音频驱动程序,则平板有声,电脑无声,在moonlight端可以设置平板和电脑同时发声,但是有点卡 2.只想电脑发声,平板无声 禁用安装steam…...
Java网络编程学习(一)
网络相关概念 网络体系结构 OSI体系结构(七层) OSI(Open Systems Interconnection,开放系统互联)体系结构将整个计算机网络分为七层,从上到下依次为:应用层、表示层、会话层、传输层、网络层…...
SMTP和POP3协议
SMTP和POP3协议 SMTP(简单邮件传输协议)和POP3(邮局协议版本3)是电子邮件系统中用于发送和接收邮件的核心协议。以下是它们的详细说明: 1. SMTP(Simple Mail Transfer Protocol) SMTP和POP3分…...
DeepSeek-R1的量化版、蒸馏版和满血版区别
DeepSeek-R1的量化版、蒸馏版和满血版是三种不同的模型变体,主要区别在于参数规模、性能表现以及适用场景。以下是它们的具体对比: 1. 满血版 DeepSeek-R1 特点: 参数规模:6710亿参数,是DeepSeek-R1系列中最大的版本…...
活动预告 |【Part 2】Microsoft 安全在线技术公开课:通过扩展检测和响应抵御威胁
课程介绍 通过 Microsoft Learn 免费参加 Microsoft 安全在线技术公开课,掌握创造新机遇所需的技能,加快对 Microsoft Cloud 技术的了解。参加我们举办的“通过扩展检测和响应抵御威胁”技术公开课活动,了解如何更好地在 Microsoft 365 Defen…...
网络工程师 (26)TCP/IP体系结构
一、层次 四层: 网络接口层:TCP/IP协议的最底层,负责网络层与硬件设备间的联系。该层协议非常多,包括逻辑链路和媒体访问控制,负责与物理传输的连接媒介打交道,主要功能是接收数据报,并把接收到…...
GIS笔记之Shapefile与KML相互转换
在GIS应用中,各种不同类型数据的转换与使用是一个重要的环节。在这其中,Shapefile和KML是两种常见的数据形式,两者间的相互转换也是日常工作和学习绕不开的话题。在这里,我们将常用的几种数据转换方法整理如下。 1.Shapefile和KM…...
【UVM】寄存器模型
寄存器模型的优势 sequence复用性高,方便对 DUT 中寄存器进行读写;提供了后门访问方式,可以不耗时的获取寄存器的值;可以很方便的对寄存器的 coverage 验证点的收集 寄存器模型基本概念 寄存器模型概念作用uvm_reg_field寄存器模…...
WordPress博客在fnOS环境下的极简搭建与公网地址配置指南
文章目录 前言1. Docker下载源设置2. Docker下载WordPress3. Docker部署Mysql数据库4. WordPress 参数设置5. 飞牛云安装Cpolar工具6. 固定Cpolar公网地址7. 修改WordPress配置文件8. 公网域名访问WordPress 前言 你是否曾经为搭建自己的网站而头疼不已?是不是觉得…...
计算机毕业设计SpringBoot校园二手交易小程序 校园二手交易平台(websocket消息推送+云存储+双端+数据统计)(源码+文档+运行视频+讲解视频)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
2025年前端面试题~ 【前端面试】更新
前言 金三银四的招聘季即将来临,对于怀揣前端梦想的求职者而言,这是机遇与挑战并存的黄金时段。前端面试可不只是简单的问答,它是一场对综合能力的深度检验。面试官会从多个维度考量,比如扎实的 HTML、CSS 和 JavaScript 基础&…...
深入 JVM 虚拟机:字符串常量池演变与 intern() 方法工作原理解析
🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 🌺 仓库主页: GitCode︱ Gitee ︱ Github 💖 欢迎点赞 👍 收藏 ⭐评论 📝 如有错误敬请纠正! 前言 在 Java 开发中,字符串常量池(String Constant…...
从基础到人脸识别与目标检测
前言 从本文开始,我们将开始学习ROS机器视觉处理,刚开始先学习一部分外围的知识,为后续的人脸识别、目标跟踪和YOLOV5目标检测做准备工作。我采用的笔记本是联想拯救者游戏本,系统采用Ubuntu20.04,ROS采用noetic。 颜…...
Java内存模型,内存屏障是干嘛的?
目录 Java 内存模型(Java Memory Model,JMM) 1. 定义和目的 2. 内存结构 3. 三大特性 4. happens-before 原则 内存屏障(Memory Barrier) 1. 定义和作用 2. 分类 3. 在 Java 中的应用 Java 内存模型(Java Memory Model, JMM) 1. 核心概念 2. 内存交互规则 …...
rdian是一个结构体,pdian=^Rdian,list泛型做什么用?
不明白不让编译的原因,记录下之遇到注意原油。 var mylist:TList<string>; mylist1:TList<Pdian>; mydian:Pdian; i:Integer; mylist2:TList<Rdian>; mydian2:rdian; arr:array of Rdian; begin mylist:TList…...
Photoshop自定义键盘快捷键
编辑 - 键盘快捷键 CtrlShiftAltK 把画笔工具改成Q , 橡皮擦改成W , 涂抹工具改成E , 增加和减小画笔大小A和S 偏好设置 - 透明度和色域 设置一样颜色 套索工具 可以自定义套选一片区域 Shiftf5 填充 CtrlU 可以改颜色/色相/饱和度 CtrlE 合并图层 CtrlShiftS 另存…...
C++智能指针的使用
文章目录 智能指针的使用和原理智能指针的使用场景RAII和智能指针C标准库智能指针的使用 智能指针的使用和原理 智能指针的使用场景 1. 下面的程序中,new了以后,我们也delete了,但是因为抛异常导致后面的delete没有得到执行,所以…...
LSTM的介绍
网上一些描述LSTM文章看的云里雾里,只是介绍LSTM 的结构,并没有说明原理。我这里用通俗易懂的话来描述一下。 我们先来复习一些RNN的核心公式: h t t a n h ( W h h t − 1 W x x t b h ) h_t tanh(W_h h_{t-1} W_x x_t b_h) httan…...
C++ ——从C到C++
1、C的学习方法 (1)C知识点概念内容比较多,需要反复复习 (2)偏理论,有的内容不理解,可以先背下来,后续可能会理解更深 (3)学好编程要多练习,简…...
