深入理解linux操作系统---第4讲 用户、组和密码管理
4.1 UNIX系统的用户和组
4.1.1 用户与UID
- UID定义:用户身份唯一标识符,16位或32位整数,范围0-65535。系统用户UID为0(root)、1-999(系统服务),普通用户从1000开始分配
- 特殊UID:UID 0具有最高权限,应避免创建非root用户使用此值
- UID冲突风险:不同用户名但相同UID会被系统视为同一用户,导致权限混乱
4.1.2 组与GID
- GID机制:组标识符用于权限管理,用户可属于多个组,主组信息存储在
/etc/passwd
,附加组在/etc/group
- 组权限优势:允许按部门或项目划分权限,例如仅允许
kmem
组访问内核内存 - 历史设计:早期使用16位整数存储GID以节省磁盘空间,现代系统扩展为32位
4.2 用户和组管理核心文件
4.2.1 /etc/passwd
- 结构解析:
username:x:UID:GID:Comment:/home/dir:/bin/bash
七个冒号分隔字段,包含用户基本信息 - 密码字段:现代系统用
x
占位,实际密码存储在/etc/shadow
- UID分类:0(root)、1-999(系统)、1000+(普通用户)
4.2.2 /etc/shadow
- 加密机制:
$加密算法$salt$哈希值
(如$6$salt$hash
使用SHA-512) - 安全特性:
- 仅root可读(权限400)
- 字段包含密码过期时间、最小修改间隔等策略
- 密码锁定:
!!
或*
表示账户被锁定
4.2.3 /etc/group
- 格式示例:
groupname:x:1234:user1,user2
字段含义:组名、密码占位符、GID、成员列表 - 附加组管理:用户可通过
newgrp
切换活动组
4.2.4 /etc/login.defs
- 关键配置项:
PASS_MAX_DAYS 90 # 密码最长有效期 UID_MIN 1000 # 最小普通用户UID CREATE_HOME yes # 自动创建主目录 ENCRYPT_METHOD SHA512 # 密码加密算法
4.2.5 /etc/default/useradd
- 默认参数:定义新用户的默认shell、主目录路径、过期时间等
4.3 用户管理命令
4.3.1 useradd/adduser
-
创建用户示例:
useradd -m -u 1500 -s /bin/zsh -c "Dev User" alice
-m
:创建主目录-s
:指定登录Shell
-
系统账户创建:
-r
选项创建UID<1000的系统账户
4.3.2 userdel
- 彻底删除用户:
userdel -r bob
删除账户并移除主目录 - 强制删除:
-f
选项可删除已登录用户(慎用)
4.3.3 usermod
- 修改主组:
usermod -g developers alice
- 附加组管理:
usermod -aG docker alice
(避免覆盖原有组)
4.4 组管理命令
4.4.1 groupadd
- 创建系统组:
groupadd -r -g 120 sysadmin
4.4.2 groupdel
- 删除条件:组内无用户时才可删除,否则需
-f
强制删除
4.4.3 groupmod
- 重命名组:
groupmod -n new_developers dev_team
4.5 密码管理
4.5.1 策略配置
- 密码复杂度:通过PAM模块设置(如
minlen=8 ucredit=-1
要求至少1大写字母) - 过期策略:
passwd -n 7 -x 30 -w 5 alice # 7天不可改,30天过期,提前5天警告
4.5.2 passwd命令
- 锁定账户:
passwd -l alice
在shadow文件中添加!
- 查看状态:
passwd -S alice
显示密码最后修改时间和状态
4.6 综合管理实例
4.6.1 用户添加流程
- 创建用户:
useradd -m -s /bin/bash john
- 设置密码:
passwd john
(交互式输入) - 加入附加组:
usermod -aG sudo john
4.6.2 用户删除步骤
- 终止进程:
killall -u john
- 删除用户:
userdel -r john
4.7 其他关键命令
4.7.1 身份信息
- id:显示用户UID、GID及所属组
id alice
→uid=1001(alice) gid=1001(dev) groups=1001(dev),998(docker)
4.7.2 登录监控
- who:显示登录用户、终端、时间
who -uH
显示空闲时间
4.7.8 su与sudo
- 环境切换:
su - root
(加载目标用户环境变量) vssu root
(保留当前环境) - sudo配置:
# /etc/sudoers alice ALL=(ALL) NOPASSWD: /usr/bin/apt-get
4.8 练习题
4.8.1 思考题
(1)为了提高系统的安全性,对用户密码应如何管理?
(2)叙述文件/etc/passwd、/etc/shadow和/etc/group文件的作用及其结构。
(3)为何要上锁一个用户?如何锁定一个用户?当需要时如何解锁?
(4)如何在删除一个用户时也同时删除它的家目录,在做操作时应注意些什么问题?
(5)如何观察当前系统的运行级别?
(6)如何确定用户所使用的终端?
(7)红帽的用户管理与Ubuntu的有什么不同,在使用时应注意此什么?
4.8.2 选择题
(1)在UNIX/Linux系统添加新用户的命令是( )。
A.groupadd B.usermod C.userdel D.useradd
(2)添加用户时使用参数( )可以指定用户目录。
A.-d B.-p C.-u D.-c
(3)用户mytest修改自己的密码可使用( )。
A.passwd B.passwd -d mytest C.passwd mytest D.passwd -l
(4)解锁一个用户的命令和选项对为( )。
A.passwd -u B.passwd -x C.passwd -d D.passwd -l
(5)删除一个用户密码所使用的命令和选项对为( )。
A.passwd -u B.passwd -x C.passwd -d D.passwd -l
4.8.3 综合题
(1)试述Linux系统的访问控制机制。
(2)试述su和sudo命令的用法及控制机制。
(3)试述如何进行用户和组管理。
4.8.4 答案
1.思考题
(1)为了提高系统的安全性,对用户密码应如何管理?
解:
每个用户都要按规定设置和使用密码,。使用密码时应注意以下几个问题:
(1)密码应该按规定定期或不定期的修改。
(2)密码内不应包含完整的单词、生日、电话号码、姓名、用户名、组名、宠物和地址等信息。(3)不同系统和用户应该有不同的密码。
(4)密码应易记且不要写在纸上。
(5)要保密,不要共用密码。
(6)输入密码时不要让别人看见,也不要窥视别人的密码。
系统的安全与方便是矛盾的,不能因方便而忽略安全问题,也不能因过于强调安全而影响正常使用,应该在安全和方便之间找到平衡点或进行取舍。
(2)叙述文件/etc/passwd、/etc/shadow和/etc/group文件的作用及其结构。
解:请参见4.2.1、4.2.2和4.2.3。
(3)为何要上锁一个用户?如何上锁一个用户?当需要时如何解锁?
解:
超级用户或具有管理权限的用户或以根据需要上锁或解锁一个用户。上锁一个用户的理由有很多,比如离开原工作岗位、离开单位或长期出差学习等,也可以是不“遵纪守法”等。上锁用户可以使用命令
# passwd -l user # usermod -L user
解锁时可以使用命令
#passwd -u user # usermod -U user
(4)如何在删除一个用户时也同时删除它的家目录,在做操作时应注意些什么问题?
解:
若在删除一个用户时,也同时删除它的家目录,可使用-r选项。比如,删除用户zhang3,并,同时要删除他的家目录,可以使用如下命令
# userdel -r zhang3
这里需要提醒的是,在删除用户家目录时或用户数据时,要确认再三,在确保不会造成后果时,才能删除。因此,在删除用户时,可以不同时删除用户家目录,经再三确认后,再使用rm等命令删除。
(5)如何观察当前系统的运行级别?
解:
观察或确定系统的当前运行级别,可以使用命令
$ who -r
$ runlevel
(6)如何确定用户所使用的终端?
解:
确定用户所使用的终端可以使用命令
$ tty
当使用-s选项运行tty时,即执行命令“tty -s”时,什么也不输出,只返回状态。状态为0时,表示命令是在终端上运行的,否则表示是在后台等非终端环境下运行的。这点在shell脚本中确定程序是在终端控制下运行或是在后台无终端控制下运行的非常有用。
(7)红帽的用户管理与Ubuntu的有什么不同,在使用时应注意此什么?
解:
主要从用户创建的角度观察此问题。
(1)若不带选项运行useradd,如useradd newuser,则按照默认方式创建newuser,但在红帽和Ubuntu中的结果是不同。这主要是因为在两类系统的/etc/login.defs(见4.2.4)和/usr/default/useradd(见4.2.5)的内容不同造成的。这些不同主要表现在是否创建家目录、家目录的权限和用户SHELL是sh或bash等方面。
以useradd test用户为例,默认情况下:
在红帽下,test的家目录/home/test,且为其创建家目录,使用/bin/bash作为登录shell。若不创建家目录,可使用-M选项。
在Ubuntu下,test的家目录/home/test,但不为其创建家目录,使用/bin/sh作为登录shell。若要创建家目录,可使用-m选项。
创建用户时,是否创建用户家目录,默认情况下取决于/etc/login.defs中变量CREATE_HOME的值,但可以使用-m强制创建,也可以使用-M强制不创建。不创建用户家目录也是常见的,当多个用户共用一个家目录时,只要第一个用户创建时创建了家目录就可以,而以后用户直接使用已经存在的目录。这时应该注意目录的存取权限问题,必要时可将这类用户放在一个组中,但要求目录及内容能被同组人按特定权限访问。
若仔细观察,用户还可以发现用户家目录的权限也不相同,在红帽和Ubuntu下分别为700(rwx------)和755(rwxr-xr-x)。这是由/etc/login.defs中的UMASK所决定的。
(2)若要让useradd在两类系统中的行为相同,可修改/etc/login.defs或/usr/default/useradd。比如,若要让Ubuntu默认也创建用户家目录,则可以在其/etc/login.defs中增加如下一行:
CREATE_HOME yes
若在创建用户时没有创建家目录,用户创建后,还可手工为其创建家目录,但后要修改家目录归属关系和存取权限。
最简单的办法是,将红帽中的/etc/login.defs和/usr/default/useradd复制到Ubuntu,或将Ubuntu中的/etc/login.defs和/usr/default/useradd复制到红帽,但要注意副作用。
2.选择题
(1)D;(2)A;(3)A;(4)A;(5)C
3.综合题
(1)试述Linux系统的访问控制机制。
解:
对UNIX/Linux系统的管理与使用是以用户(user)为主体的。自然人要想使用系统,必须以某个已在系统中存在的用户身份登录,且通过密码验证后,才能进入系统,并按权限使用。
Unix/Linux系统中有两类用户:超级用户和一般用户。超级用户有至高无上的权力,可做任何事情;一般用户只能在给定的权限范围内进行工作,不得越权行事。用户又按实际的需要分成不同的组(group)。同组用户按规定和目的享有某些共同的权限。
root用户或具有管理权限的用户可以创建或删除用户,当需要时可以创建用户。当一个用户(离开岗位、离开单位或长期出差)不再使用时,可以将其删除,也可以将其上锁。需要时,再创建或解锁。
对于系统中不再使用的用户帐号,应尽早的删除它,因为多余用户的存在可能是安全的隐患。删除用户可以使用userdel命令,删除用户时,是否同时删除用户家目录或数据要视具体情况而定。
每个用户都要按规定设置和使用密码,密码管理命令为passwd
(2)试述su和sudo命令的用法。
解:
①su
su命令的功能是在使用者不退出系统的情况下以其它新用户的身份工作。当不指定用户时,默认root。当不指定任务时,将以新用户的身份启动一个shell;当指定任务时,则以新用户的身份执行任务。在以新用户工作的过程中,有效uid和有效gid变为了新用户的uid和gid。
当不使用登录模式(-、-l或--login)时,su不会为新用户正确设置环境变量。
若要实现身份的彻底转换一定要采用登录模式(使用-、-l或--login选项)。
工作完毕后,按^D变为原来的自己。
在Linux系统中,su的使用都受PAM的控制,具体的控制文件为/etc/pam.d/su和/etc/pam.d/su-l的控制,具体情况参见教材或su的在线文档。
②sudo
sudo的功能是以其它用户(当然也包括root用户)的身份执行命令。
sudo的配置文件是/etc/sudoers,能使用sudo命令的用户必须在此文件中定义,且设置正确。系统为此配置文件提供了一个专用的编辑命令visudo,除了编辑修改sudoers文件外,还可帮助使用者检查配置文件内容的正确性。修改sudoers文件时请使用visudo,但不同系统中使用的编辑器不同,红帽使用vi,Ubuntu使用的是nano。
关于sudoers的设置可参考sudo和sudo.conf的man手册,具体操作可参见实验4。
使用sudo命令,具体管理“角色”或职能的普通用户(比如test),可以履行root用户的的管理职能。若要让一个普通用户(比如test)变为管理员或具有管理职能的用户,最简单办法是:在红帽系统可将其加入wheel组;在Ubuntu中,将其加入sudo或admin组。命令为
# usermod -G wheel test
# usermod -G sudo test
关于sudo命令的使用,可以安装vsftpd软件包为例说明如下:
红帽
# dnf install vsftpd -y # root用户
$ sudo dnf install vsftpd -y # 管理员用户(比如刚才的test)
Ubuntu
# apt install vsftpd -y # root用户
$ sudo apt install vsftpd -y # 管理员用户(比如刚才的test)
(3)试述如何进行用户和组管理。
解:
对UNIX/Linux系统的管理与使用是以用户(user)为主体的。自然人要想使用系统,必须以某个已在系统中存在的用户身份登录,且通过密码验证后,才能进入系统,并按权限使用。
UNIX/Linux系统的用户又按实际的需要分成不同的组(group)。同组用户按规定和目的享有某些共同的权限。
root用户或具有管理权限的用户可以创建或删除用户,也可创建或删除组。没有任何特殊要求时,创建用户zhang3时只需要,执行命令
# useradd zhang3
就可以了。这里,将按默认规定在创建用户zhangsan时,也同时创建一个zhang3组,且用户zhang3所在的组为zhang3。
现在,假定系统需要使用特定的组(组名为mygrp,GID为66)和特定的用户(用户为myproc,UID为666),其它的由系统默认,创建的方法及过程如下:
# groupadd -g 66 mygrp
# useradd -m -g mygrp -u 666 myproc
以上操作是在GID为66,UID为666在之前均未使用过的情况,若是已经使用过的,需要在命令中使用-o,告诉命令useradd或groupadd,创建新用户或新组时,要使用已经使用过的GUI或UID,或者说,要创建ID不唯一的用户或组。方法如下:
# groupadd -o -g 66 mygrp
# useradd -m -g mygrp -o -u 666 myproc
每个用户都要按规定设置和使用密码。对于系统中不再使用的用户帐号,应尽早的删除它,因为多余用户的存在可能是安全的隐患。删除用户可以使用userdel命令,删除用户时,是否同时删除用户家目录或数据要视具体情况而定。
删除用户时,一般不删除家目录,原因是家目录可能被共享或存放有重要数据,因此需要慎之又慎,确认再三。用户的家目录删除,可在确定不会造成后果的情况下,使用带有-r选项的rm命令删除。
若要删除用户时,同时删除用户的家目录,可以使用带有-r选项的userdel命令。
总结
- 最小权限原则:使用sudo代替直接切换root
- 定期审计:检查
/etc/passwd
和/etc/shadow
的权限(应为644和400) - 密码策略:启用SHA-512加密,设置90天过期周期
通过深入理解这些机制和工具,管理员可有效提升系统的安全性和管理效率。
相关文章:
深入理解linux操作系统---第4讲 用户、组和密码管理
4.1 UNIX系统的用户和组 4.1.1 用户与UID UID定义:用户身份唯一标识符,16位或32位整数,范围0-65535。系统用户UID为0(root)、1-999(系统服务),普通用户从1000开始分配特殊UID&…...
系统设计模块之安全架构设计(常见攻击防御(SQL注入、XSS、CSRF、DDoS))
一、SQL注入攻击防御 SQL注入是通过恶意输入篡改数据库查询逻辑的攻击方式,可能导致数据泄露或数据库破坏。防御核心在于隔离用户输入与SQL代码,具体措施包括: 参数化查询(预编译语句) 原理:将SQL语句与用…...
redission锁释放失败处理
redission锁释放失败处理 https://www.jianshu.com/p/055ae798547a 就是可以删除 锁的key 这样锁就释放了,但是 还是要结合业务,这种是 非正规的处理方式,还是要在代码层面进行处理。...
Visual Studio Code 在.S汇编文件中添加调试断点及功能简介
目录 一、VS Code汇编文件添加断点二、VS Code断点调试功能简介1. 设置断点(1) 单行断点(2) 条件断点(3) 日志断点 2. 查看断点列表3. 调试时的断点控制4. 禁用/启用断点5. 删除断点6. 条件断点的使用7. 多线程调试8. 远程调试9. 调试配置文件 一、VS Code汇编文件添加断点 最…...
计算视觉与数学结构及AI拓展
在快速发展的计算视觉领域,算法、图像处理、神经网络和数学结构的交叉融合,在提升我们对视觉感知和分析的理解与能力方面发挥着关键作用。本文探讨了支撑计算视觉的基本概念和框架,强调了数学结构在开发鲁棒的算法和模型中的重要性。 AI拓展…...
Vue2 老项目升级 Vue3 深度解析教程
Vue2 老项目升级 Vue3 深度解析教程 摘要 Vue3 带来了诸多改进和新特性,如性能提升、组合式 API、更好的 TypeScript 支持等,将 Vue2 老项目升级到 Vue3 可以让项目获得这些优势。本文将深入解析升级过程,涵盖升级前的准备工作、具体升级步骤…...
器件封装-2025.4.13
1.器件网格设置要与原理图一致,同时器件符号要与数据手册一致 2.或者通过向导进行编辑,同时电机高级符号向导进行修改符号名称 2.封装一般尺寸大小要比数据手册大2倍到1.5倍 焊盘是在顶层绘制,每个焊盘距离要用智能尺子测量是否跟数据手册一…...
Python 基础语法汇总
Python 语法 │ ├── 基本结构 │ ├── 语句(Statements) │ │ ├── 表达式语句(如赋值、算术运算) │ │ ├── 控制流语句(if, for, while) │ │ ├── 定义语句(def…...
Java函数式编程魔法:Stream API的10种妙用
在Java 8中引入的Stream API为函数式编程提供了一种全新的方式。它允许我们以声明式的方式处理数据集合,使代码更加简洁、易读且易于维护。本文将介绍Stream API的10种妙用,帮助你更好地理解和应用这一强大的工具。 1. 过滤操作:筛选符合条件…...
【力扣hot100题】(094)编辑距离
记得最初做这题完全没思路,这次凭印象随便写了一版居然对了。 感觉这题真的有点为出题而出题的意思,谁拿到这题会往动态规划方向想啊jpg 也算是总结出规律了,凡是遇到这种比较俩字符串的十有八九是动态规划,而且是二维动态规划&…...
穿透三层内网VPC2
网络拓扑 目标出网web地址:192.168.139.4 信息收集端口扫描: 打开8080端口是一个tomcat的服务 版本是Apache Tomcat/7.0.92 很熟悉了,可能存在弱口令 tomcat/tomcat 成功登录 用哥斯拉生成马子,上传war包,进入后台 C…...
AI数字消费第一股,重构商业版图的新物种
伍易德带领团队发布“天天送AI数字商业引擎”,重新定义流量与消费的关系 【2025年4月,深圳】在人工智能浪潮席卷全球之际,深圳天天送网络科技有限公司于深圳大中华喜来登酒店重磅召开“AI数字消费第一股”发布盛典。公司创始人伍易德首次系统…...
Unity 基于navMesh的怪物追踪惯性系统
今天做项目适合 策划想要实现一个在现有的怪物追踪系统上实现怪物拥有惯性功能 以下是解决方案分享: 怪物基类代码: using UnityEngine; using UnityEngine.AI;[RequireComponent(typeof(NavMeshAgent))] [RequireComponent(typeof(AudioSource))] …...
【OpenCV】【XTerminal】talk程序运用和linux进程之间通信程序编写,opencv图像库编程联系
目录 一、talk程序的运用&Linux进程间通信程序的编写 1.1使用talk程序和其他用户交流 1.2用c语言写一个linux进程之间通信(聊天)的简单程序 1.服务器端程序socket_server.c编写 2.客户端程序socket_client.c编写 3.程序编译与使用 二、编写一个…...
中断的硬件框架
今天呢,我们来讲讲中断的硬件框架,这里会去举3个开发板,去了解中断的硬件框架: 中断路径上的3个部件: 中断源 中断源多种多样,比如GPIO、定时器、UART、DMA等等。 它们都有自己的寄存器,可以…...
大数据面试问答-Hadoop/Hive/HDFS/Yarn
1. Hadoop 1.1 MapReduce 1.1.1 Hive语句转MapReduce过程 可分为 SQL解析阶段、语义分析阶段、逻辑计划生成阶段、逻辑优化阶段、物理计划生成阶段。 SQL解析阶段 词法分析(Lexical Analysis):使用Antlr3将SQL字符串拆分为有意义的token序列 语法分析(Syntax An…...
【小沐学GIS】基于C++绘制三维数字地球Earth(QT5、OpenGL、GIS、卫星)第五期
🍺三维数字地球系列相关文章如下🍺:1【小沐学GIS】基于C绘制三维数字地球Earth(OpenGL、glfw、glut)第一期2【小沐学GIS】基于C绘制三维数字地球Earth(OpenGL、glfw、glut)第二期3【小沐学GIS】…...
初始图形学(3)
昨天休息了一天,今天继续图形学的学习 向场景发射光线 现在我们我们准备做一个光线追踪器。其核心在于,光线追踪程序通过每个像素发送光线。这意味着对于图像中的每个像素点,程序都会计算一天从观察者出发,穿过该像素的光线。并…...
如果想在 bean 创建出来之前和销毁之前做一些自定义操作可以怎么来实现呢?
使用生命周期扩展接口(最灵活) 创建前拦截可以通过实现 InstantiationAwareBeanPostProcessor 接口的 postProcessBeforeInstantiation 方法,在Bean实例化前执行逻辑 在销毁前拦截可以通过实现 DestructionAwareBean 接口的 postProcessBe…...
【甲子光年】DeepSeek开启AI算法变革元年
目录 引言人工智能的发展拐点算力拐点:DeepSeek的突破数据拐点:低参数量模型的兴起算法创新循环算法变革推动AI普惠应用全球AI科技竞争进入G2时代结论 引言 2025年,人工智能的发展已经走到了一个战略拐点。随着技术能力的不断提升࿰…...
Go语言--语法基础4--基本数据类型--整数类型
整型是所有编程语言里最基础的数据类型。 Go 语言支持如下所示的这些整型类型。 需要注意的是, int 和 int32 在 Go 语言里被认为是两种不同的类型,编译器也不会帮你自动做类型转换, 比如以下的例子会有编译错误: var value2 in…...
MCP基础学习计划详细总结
MCP基础学习计划详细总结 1.MCP概述与基础 • MCP(Model Context Protocol):由Anthropic公司于2024年11月推出,旨在实现大型语言模型(LLM)与外部数据源和工具的无缝集成。 • 核心功能: • 资…...
大模型到底是怎么产生的?一文揭秘大模型诞生全过程
前言 大模型到底是怎么产生的呢? 本文将从最基础的概念开始,逐步深入,用通俗易懂的语言为大家揭开大模型的神秘面纱。 大家好,我是大 F,深耕AI算法十余年,互联网大厂核心技术岗。 知行合一,不写水文,喜欢可关注,分享AI算法干货、技术心得。 【专栏介绍】: 欢迎关注《…...
Node.js介绍
一、Node.js 核心定义 本质:基于 Chrome V8 引擎构建的 JavaScript 运行时环境,用于在服务器端执行 JavaScript 代码。 定位:非阻塞、事件驱动的 I/O 模型,专为高并发、实时应用设计。 诞生:2009 年由 Ryan Dahl 发布…...
DRABP_NSGA2最新算法神圣宗教算法优化BP做代理模型,NSGA2反求最优因变量和对应的最佳自变量组合,Matlab代码
一、神圣宗教算法(DRA)优化BP代理模型 1. DRA的核心原理 DRA是一种模拟宗教社会层级互动的元启发式算法,通过“追随者学习”、“传教士传播”和“领导者引导”三种行为模式优化搜索过程。在BP神经网络优化中,DRA通过以下步骤调整…...
Android Studio 在 Windows 上的完整安装与使用指南
Android Studio 在 Windows 上的完整安装与使用指南—目录 一、Android Studio 简介二、下载与安装1. 下载 Android Studio2. 安装前的依赖准备3. 安装步骤 三、基础使用指南1. 首次启动配置2. 创建第一个项目3. 运行应用4. 核心功能 四、进阶功能配置1. 配置 SDK 和工具2. 自定…...
Matlab学习笔记五十:循环语句和条件语句的用法
1.说明 循环语句:for…end,while…end 条件语句:if…end,switch…case…end 其中if语句语法还可以是:for…else…end,for…elseif…else…end 2.简单for程序实例 for x1:5 %循环遍历1~5 yx5 end [1…...
大漠流光:科技牧歌的未来-内蒙古鄂尔多斯
故事背景 故事发生在中国内蒙古鄂尔多斯,这里是蒙古族文化的摇篮,也是科技与自然交织的未来舞台。在这片广袤的土地上,蒙古族少女、老牧人和工程师们共同谱写着一曲科技与传统共生的赞歌。未来的鄂尔多斯,不再是单一的沙漠或草原…...
MySQL与Oracle深度对比
MySQL与Oracle深度对比:数据类型与SQL差异 一、数据类型差异 1. 数值类型对比 数据类型MySQLOracle整数TINYINT, SMALLINT, MEDIUMINT, INT, BIGINTNUMBER(精度) 或直接INT(内部仍为NUMBER)小数DECIMAL(p,s), FLOAT, DOUBLENUMBER(p,s), FLOAT, BINARY_FLOAT, BI…...
GESP2023年12月认证C++七级( 第一部分选择题(6-10))
选择题第八题: #include <iostream> #include <cstring> #include <algorithm> using namespace std;const int MAXN 1005; // 假设字符串长度不超过1000 char s1[MAXN], s2[MAXN]; int dp[MAXN]; // 一维DP数组int main() {while (cin >>…...
腾势品牌欧洲市场冲锋,科技豪华席卷米兰
在时尚与艺术的交汇点,米兰设计周的舞台上,一场汽车界的超级风暴正在酝酿,腾势品牌如一头勇猛无畏的雄狮,以雷霆万钧之势正式向欧洲市场发起了冲锋。其最新力作——腾势Z9GT的登场,仿佛是一道闪电划破夜空,…...
双指针、滑动窗口
一、双指针 双指针是指在算法中使用两个指针(通常是索引或迭代器)来解决问题,通过移动这两个指针来扫描数据结构(如数组或链表),从而达到高效的目的。双指针的核心思想是利用两个指针的相对位置或移动方式…...
《数据密集型应用系统设计》读书笔记:第二章
我们继续拆解 第2章:数据模型与查询语言。这章讲的是如何组织数据、如何访问数据,也是你选择数据库种类的根本依据。 第2章:数据模型与查询语言 一、为何数据模型重要? Martin 开篇就强调,数据模型影响: …...
ubuntu24.04LTS安装向日葵解决方案
去向日葵官方下载ubuntu使用的deb包 向日葵 输入如下命令安装,将具体版本修改成自己下载的版本 andrew in ~/下载 λ sudo dpkg -i SunloginClient_15.2.0.63064_amd64.deb 正在选中未选择的软件包 sunloginclient。 (正在读取数据库 ... 系统当前共安装有 290947…...
Python基础语法1
目录 1、认识Python 1.1、计算机 1.2、编程 1.3、编程语言的类别 1.4、Python背景 1.5、Python的应用场景 1.6、Python的优缺点 1.7、Python前景 1.8、Python 环境 2、常量和表达式 3、变量和类型 3.1、定义变量 3.2、使用变量 3.3、变量的类型 3.3.1、整形 3.3…...
深度学习中多机训练概念下的DP与DDP
在进行单机多卡/多机多卡训练时,通常会遇到DP与DDP的概念,为此基于kimi大模型对二者的差异进行梳理。使用DP/DPP的核心是数据并行,也就是根据显卡数量对数据集进行分治,每一个显卡都有一个独立完整的模型和一个局部数据。在多个显…...
设计模式(结构型)-桥接模式
目录 摘要 定义 类图 角色 具体实现 优缺点 优点 缺点 使用场景 使用案例 JDBC 和桥接模式 总结 摘要 在软件开发领域,随着系统规模和复杂性的不断攀升,如何设计出具有良好扩展性、灵活性以及可维护性的软件架构成为关键挑战。桥接模式作为一…...
精品推荐 | 湖仓一体电商数据分析平台实践教程合集(视频教程+设计文档+完整项目代码)
精品推荐,湖仓一体电商数据分析平台实践教程合集,包含视频教程、设计文档及完整项目代码等资料,供大家学习。 1、项目背景介绍及项目架构 2、项目使用技术版本及组件搭建 3、项目数据种类与采集 4、实时业务统计指标分析一——ODS分层设计与数…...
【LangChain少样本提示工程实战】FewShotPromptTemplate原理与应用解析——附运行代码
目录 引言 重点提炼 一、FewShotPromptTemplate作用 1. 整合示例与模板,构建结构化提示 2. 引导模型理解任务逻辑 3. 提升少样本场景下的模型性能 4. 支持动态示例选择(扩展功能) 5. 与其他模块…...
基于LSTM的文本分类3——模型训练
前言 之前已经完成了模型搭建和文本数据处理,现在做一下模型训练。 源码 # -*- coding: UTF-8 -*- import numpy as np import torch import torch.nn as nn import torch.nn.functional as F from sklearn import metrics # 导入评估指标 import time from uti…...
【JS】关于原型/原型链
本文会讲解什么是原型,什么是原型链,以及查找原型的方法,最后会实现一个函数:判断某对象是否有某属性。 定义 原型:函数都有prototype属性,称作原型/原型对象 原型可以放一些方法和属性,共享…...
猫咪如厕检测与分类识别系统系列【五】信息存储数据库改进+添加猫咪页面制作+猫咪躯体匹配算法架构更新
前情提要 家里养了三只猫咪,其中一只布偶猫经常出入厕所。但因为平时忙于学业,没法时刻关注牠的行为。我知道猫咪的如厕频率和时长与健康状况密切相关,频繁如厕可能是泌尿问题,停留过久也可能是便秘或不适。为了更科学地了解牠的如…...
k8s的配置文件总结
在 Kubernetes 中,配置文件 是定义集群资源的核心,通常以 YAML 或 JSON 格式编写。以下是 Kubernetes 中关键的配置文件类型及其作用: 1. 核心工作负载配置 (1) Deployment • 用途:定义无状态应用的 Pod 副本管理策略ÿ…...
插值算法 - 最近邻插值实现
目录 1. 导入必要的库 2. nearest_neighbor_interpolation 3. 测试代码 数学原理 完整代码 本文实现了基于最近邻插值算法的图像缩放功能。 它使用 Python 编写,主要依赖于NumPy和PIL(Python Imaging Library)库。 NumPy用于高效的数值计算,而PIL仅用于图像的加载和…...
QEMU源码全解析 —— 块设备虚拟化(19)
接前一篇文章:QEMU源码全解析 —— 块设备虚拟化(18) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 《KVM实战 —— 原理、进阶与性能调优》—— 任永杰 程舟,机械工业出版社 特此致谢! QEMU启动…...
常见的归一化(Normalization)方法
本文详解深度学习中常见的归一化方法。 【归一化是将数据按比例缩放,使之落入一个特定的区间】目录 1. 批量归一化(Batch Normalization,BN)1.1 数学原理1.2 代码示例 2. 层归一化(Layer Normalization,LN&…...
架构师面试(二十九):TCP Socket 编程
问题 今天考察网络编程的基础知识。 在基于 TCP 协议的网络 【socket 编程】中可能会遇到很多异常,在下面的相关描述中说法正确的有哪几项呢? A. 在建立连接被拒绝时,有可能是因为网络不通或地址错误或 server 端对应端口未被监听&#x…...
【高性能缓存Redis_中间件】二、redis进阶 高级特性及应用
一、前言 在第一篇文章中,我们已经对 Redis 消息队列有了基础的认识,掌握了其基本使用方法。然而,在实际的复杂业务场景中,仅仅运用基础功能是远远不够的。本篇文章将深入探讨 Redis 消息队列的高级特性,如消息确认机…...
vs2022 pcl1.15.0注意点
pcl1.15.0的版本变化很大,其中有一个地方需要设置成如下图所示 如果不设置生成的时候可能有以下错误: 严重性 代码 说明 项目 文件 行 禁止显示状态 详细信息 错误 C1189 #error: "Potential runtime error due to…...
React Router路由
例子 // 创建Router实例对象 const router createBrowserRouter([{path:/login,element:<div>我是登录</div>},{path:/article,element:<div>我是文章</div> }])在jsx中配置一个RouterProvider组件 绑定 router{router} 常规的组件配置...