用户管理命令:
useradd命令:
useradd命令的功能是创建并设置用户信息。使用useradd命令可以自动完成用户信息、基本组、家目录等的创建工作,并在创建过程中对用户初始信息进行定制。

语法格式:useradd   参数    用户名

常用参数:
-M  不建立用户家目录        -c  添加备注文字
-d   设置新用户登录时所使用的家目录    -n   不建立以用户名称为名的组
-D   设置新用户的预设值    -o  允许创建重复UID的用户
-e 设置用户的终止日期   -p 设置用户的密码
-f   设置用户过期几日后永久停权  -r  建立系统用户
-g 设置用户对应的基本用户组    -R  设置根目录
-G    设置用户对应的扩展用户组   -s  设置新用户的默认Shell终端
-u    设置用户ID                 -h   显示帮助信息

参考示例
useradd  test1   #创建指定的用户信息
useradd  -M  -s  /sbin/nologin    test2      #创建指定的用户信息,但不创建家目录,亦不让登录系统
useradd    -u    6688    test3     #创建指定的用户信息,并自定义UID值
useradd    -G   root   test4    #创建指定的用户信息,并追加指定组为该用户的扩展组
useradd   -e  "2025/01/01"  test5       #创建指定的用户信息,并指定过期时间
扩展:
#新建用户并将其加入指定用户组,作为其主用户组(每个用户有且只有一个主用户组)
useradd  -g   <用户组名称> <用户名称>
#或者 新建用户并将其加入指定附属用户组,附属用户组可以有多个,多个附属组名称用逗号分隔即可
useradd -G   <用户组名称> <用户名称>

passwd 命令:
passwd命令来自英文单词password的缩写,其功能是修改用户的密码值
同时也可以对用户进行锁定等操作,但需要管理员身份才可以执行。
当使用 useradd 命令来添加用户后,默认该用户还不能登录,因为没有为该用户设置密码
只有设置了密码后,才可以登录。而设置密码的命令是passwd

常用格式: passwd  参数  用户名

常用参数:
-d  清除已有密码   -S  显示当前密码状态
-e   下次登录时强制修改密码   -u 解锁用户的密码值,允许修改
-f   强制执行操作而不询问    -w 设置密码到期前几天收到警告信息
-k   设置用户在期满后能仍能正常使用  -x  设置最大密码有效期
-l  锁定用户的密码值,不允许修改   --help  显示帮助信息

参考示例:
passwd   #修改当前登录用户的密码值,注意输入过程中密码不可见。
passwd  test1   #修改指定用户的密码值
passwd -l  test1  #锁定指定用户的密码值,不允许其进行修改
passwd  -u  test1   #解锁指定用户的密码值,允许其进行修改
passwd  -e   test2    #强制指定的用户在下次登录时必须重置其密码
passwd  -d  test2    #删除指定用户的密码值
passwd  -S   test3    #查看指定用户的密码状态



usermod 命令:
usermod命令来自英文词组user modify的缩写,其功能是修改用户信息中的各项参数。在创建用户后如果发现信息错误,可以不用删除,而是用usermod命令直接修改用户信息,并且参数会立即生效。

语法格式:usermod   参数  用户名

常用参数:
-a  将用户添加至扩展组中    -L  锁定用户密码,使密码立即失效
-c  修改用户的备注文字    -m 将用户家目录内容移动到新位置
-d   修改用户登录时的家目录  -o 允许重复的用户ID
-e  修改用户的有效期限    -p 设置用户的新密码
-f  设置在密码过期多少天后关闭该用户   -s  修改用户登录后使用的Shell终端
-g 修改用户所属的基本群     -u  修改用户的ID

参考示例:
usermod  -d   /home/testA  test1 #修改指定用户的家目录路径,注意:不能有用户正在使用该账号
usermod -u 6688 test1  #修改指定用户的ID
usermod  -l  newname   test1    #修改指定用户的名称为newname
usermod  -L test1    #锁定指定的用户,临时不允许登录系统
usermod  -U test1    #解锁指定的用户,再次允许登录系统
扩展:
将已有用户添加到指定用户组
#将已有用户添加到指定用户组,作为其附属用户组
# -a 代表append,和 -G 一起使用,将用户添加到新用户组中而不必来开原有的其他用户组usermod  -a  -G  <用户组名称> <用户名称>
#将已有用户的主用户组改为新的用户组
usermod  -g <新的用户组名称> <用户名称>


usedel命令:
userdel命令来自英文词组userdelete的缩写,其功能是删除用户信息。
在Linux系统中,一切都是文件,用户信息被保存到了/etc/passwd、/etc/shadow以及/etc/group文件中,因此使用userdel命令实际上就是删除指定用户在上述3个文件中的对应信息。

语法格式:userdel  参数   用户名

常用参数:
-f   强制删除用户而不询问        -r删除用户的家目录及其内全部子文件
-h   显示帮助信息     -Z    删除用户的SELinux映射用户
参考示例:
userdel    test1        #删除指定的用户信息
userdel   -r   test2        #删除指定的用户信息及家目录,注意:删除的时候要慎重

扩展:
#将用户从该用户的附属组中删除
gpasswd  -d  <用户名称>  <用户组名> 

su 命令:
su命令来自英文单词switch user的缩写,其功能是切换用户身份。
将管理员切换至任意用户身份时无须密码验证,而将普通用户切换至任意用户身份时均需密码验证另外,添加单个减号(-)参数表示完全的身份变更,不保留之前用户的任何环境变量信息。

语法格式:su   参数   用户名

常用参数:
-m  切换身份时,不变更环境变量        -c执行完命令后,自动恢复原来的身份
-s   设置要执行的Shell终端        -  完全地切换身份
-f   不读取启动文件(适用于csh和tsch)        --help 显示帮助信息
-l   切换身份时,同时变更工作目录        --version 显示版本信息

参考示例:
su  root  #变更至指定的用户身份
su  -  root  #完全变更至指定的用户身份

它们之间的区别:
在使用su   root命令时,不会加载root用户的环境变量。您仍然会保留当前用户的权限和环境设置只是切换到root用户的身份。
使用su   -root命令时,会加载root用户的完整环境变量。这意味着您将切换到root用户的身份,并使用root用户的环境设置。

有部分用户提示,
xxx不在 sudoers 文件中,此事将被报告。
修改如下文件即可。
1. 切换到root身份:su  root
2. 修改文件权限:chmod 777  /etc/sudoers 
3. 修改文件内容: test6   ALL=(ALL)   ALL
4. 保存退出后,恢复文件权限:chmod  440  /etc/sudoers
5. 返回自己的身份:exit
6. 再次执行 sudo.xxx  指令验证效果

sudo 权限在 /etc/sudoers  文件中,该文件默认权限是440

用户组管理命令:
groupadd命令:
groupadd命令的功能是创建新的用户组。每个用户在创建时都有一个与其同名的基本组,后期可以使用groupadd命令创建出新的用户组信息,让多个用户加入指定的扩展组,从而为后续的工作提供了良好的文档共享环境。

语法格式:groupadd   参数    用户组

常用参数:
-f  若用户组已存在,则以成功状态退出        -o  允许创建重复ID的用户组
-g  设置用户组ID        -p  设置用户组密码
-h  显示帮助信息        -r  创建系统用户组
参考示例:
groupadd   newgroup1        #创建一个新的用户组
groupadd   -g   6688     newgroup2     #创建一个新的用户组,并指定用户组ID
groupadd    -r     newgroup3         #创建一个新的用户组,设定为系统工作组

groupmod命令:
groupmod命令来自英文词组“group.modify”的缩写,其功能是用于更改群组属性。
Linux系统中的群组信息一般不建议更改,因为涉及已加入用户的归属问题,尤其是群组名称、组GID,一定要确认好后再操作。

语法格式:groupmod   参数   群组名

常用参数:
-g  设置群组识别码        -h  显示帮助信息
-n   设置群组名称        -o  允许重复使用群组识别码
-p  设置群组密码

参考示例:
groupmod  -n  newgroupA  oldgroupB        #更改指定用户组的名称(原名是oldgroupB )
groupmod  -g   8888  newgroupA     #更改指定用户组的识别码  


groupdel 命令:
groupdel命令来自英文词组“deletea group”的缩写,其功能是用于删除用户组。
Linux系统中的用户组信息被保存在 ect/group 和 /ect/gshadow 文件中,手动删除对应信息即可,亦可以用groupdel命令删除。

语法格式:groupdel  [参数]  群组名

常用参数:
-f  强制删除而不询问        -h  显示帮助信息
参考实例:
groupdel   newgroup        #删除指定名称的用户组
groupdel   -f    newgroup        #强制删除指定名称的用户组

用户配置文件:
在 Linux 中,用户名、密码、用户组和用户组密码都是在保存在不同的文件配置文件中。
/etc/passwd: 用于保存用户账号文件
/etc/shadow: 用户保存用户的密码文件 ==》useradd
/etc/group: 用于保存用户组的文件
/etc/gshadow: 用于保存用户组密码的文件 ==》groupadd
/etc/skel: 保存用户家目录文件隐藏文件
/etc/default/useradd:用户定义添加用户的信息文件 ==》用户配置文件


/etc/passwd:
passwd 是一个文本文件,用于定义系统的用户账号,由于这个文件是所有用户都对需要读取的权限,所以文件中只定义用户的账号,而不保存用户密码。
在这个文件中,每一行记录了一个用户信息,而用户信息是以 : 英文冒号来进行分隔的 7 个部分组成,
这 7 个部分的意义说明如下:
root    : x : 0 :          0 :         root : /       root : /bin/bash
redhat : x : 1000 : 1000 : redhat : /home/redhat :/bin/bash
1            2      3        4          5                 6                 7
1 用户名
2 用户登录密码的占位符,如果为 x 表示有密码,如果为空或 * 表示没有密码
3 用户的 ID,即 uid
4 用户所属组 ID,即 gid
5 用户的个人次数,如果用户的完整名称、地址、办公电话、家庭住址等个人信息
6 用户的家目录
7 用户的默认登录所能使用的 shell 脚本


/etc/shadow:
这个文件是用户保存用户密码的文件,我们可以通过如下的命令来查看这个文件:
tail -2 /etc/shadow
这个文件每一行记录了一个用户的密码信息,它们共有 9 个字段,分别表示如下:
root:$6$hS4yqJu7WQfGlk0M$Xj/
SCS5z4BWSZKN0raNncu6VMuWdUVbDScMYxOgB7mXUj./
dXJN0zADAXQUMg0CuWVRyZUu6npPLWoyv8eXPA.::0:99999:7::: ftp:*:
16659:0:99999:7::: nobody:*:16659:0:99999:7::: longshuai:
$6$8LGe6Eh6$vox9.OF3J9nD0KtOYj2hE9DjfU3iRN.v3up4PbKKGWLOy3k1Up50bbo7Xii/
Uti05hlqhktAf/dZFy2RrGp5W/:17323:0:99999:7:::
第一列:用户名。

第二列:加密后的密码。但是这一列是有玄机的,有些特殊的字符表示特殊的意义。
①.该列留空,即"::",表示该用户没有密码。
②.该列为"!",即":!:",表示该用户被锁,被锁将无法登陆,但是可能其他的登录方式是不受限制的
③.该列为"*",即":*:",也表示该用户被锁,和"!"效果是一样的。
④.该列以"!"或"!!"开头,则也表示该用户被锁。
⑤.该列为"!!",即":!!:",表示该用户从来没设置过密码。
⑥.如果格式为"$id$salt$hashed",则表示该用户密码正常。其中$id$的id表示密码的加密算法,
$1$表示使用MD5算法,$2a$表示使用Blowfish算法,"$2y$"是另一算法长度的Blowfish,
"$5$"表示SHA-256算法,而"$6$"表示SHA-512算法,可见上面的结果中都是使用sha-512算法的。
$5$和$6$这两种算法的破解难度远高于MD5。$salt$是加密时使用的salt,$hashed才是真正的密码部分。

第三列:从1970年1月1日到上次密码修改经过的时间(天数)。通过计算现在离1970年1月1日的天数减去这个值,结果就是上次修改密码到现在已经经过了多少天,即现在的密码已经使用了多少天。

第四列:密码最少使用期限(天数)。省略或者0表示不设置期限。
例如,刚修改完密码又想修改,可以限制多久才能再次修改

第五列:密码最大使用期限(天数)。超过了它不一定密码就失效,可能下一个字段设置了过期后的宽限天数。设置为空时将永不过期,后面设置的提醒和警告将失效。root等一些用户的已经默认设置为了99999,表示永不过期。如果值设置小于最短使用期限,用户将不能修改密码。

第六列:密码过期前多少天就开始提醒用户密码将要过期。空或0将不提醒。

第七列:密码过期后宽限的天数,在宽限时间内用户无法使用原密码登录,必须改密码或者联系管理员。设置为空表示没有强制的宽限时间,可以过期后的任意时间内修改密码。

第八列:帐号过期时间。从1970年1月1日开始计算天数。设置为空帐号将永不过期,不能设置为0。不同于密码过期,密码过期后账户还有效,改密码后还能登录;帐号过期后帐号失效,修改密码重设密码都无法使用该帐号。

第九列:保留字段。

/etc/group:
这个文件中存储是用户组信息,我们可以通过如下的命令来进行查看:
tail -3 /etc/group
dnsmasq:x:977:
tcpdump:x:72:
redhat:x:1000:
在这文件中每一行记录了一个组信息,使用英文冒号分隔成 4 个字段,分别代表如下:
redhat : x : 1000 :
1             2      3         4
1 表示组名称
2 表示组的密码占位符,真正的密码保存在 /etc/gshadow 文件中
3 表示组的 id 值
4 表示附加组中的用户列表,以英文逗号分隔,如果为空表示没有附加用户


/etc/gshadow:
这个文件是用于保存组的密码信息,通过如下命令来查看:
tail -3 /etc/gshadow
dnsmasq:!::
tcpdump:!::
redhat:!::
在这个文件中每一行代表一个组的密码信息,通过英文冒号分隔为 4 段,分别表示如下:
redhat : ! :     :
1           2  3     4
1 组名称,与 /etc/group 文件中第一列相同
2 组密码,如果值为 ! 表示没有密码
3 组管理的用户名,很少使用
4 组中附加用户,也 /etc/group 中第 4 列相同

/etc/skel:
这个文件中记录是用户家目录下的相关隐藏文件。默认情况下,当新创建好一个用户后,
会在这个用户的家目录下新建一个隐藏文件,而这些隐藏文件就是从这个文件中拷贝过来的
ls    -a    /etc/skel
../
./
.mozilla/
.bash_logout
.bash_profile
.bashrc

/etc/default/useradd:
在这个文件中记录了创建用户的相关信息。
vim /etc/default/useradd
# useradd defaults file
GROUP=100     这个选项用于建立用户的默认组,它是公有组,而目录使用的是私有组,所以它无效
HOME=/home     用于指定所创建的用户所在的家目录,它是创建普通用户的家目录
INACTIVE=-1     用于指定密码过期的宽限时间,如果值为-1 表示不限制,它与/etc/shadow 文件中第 7个字段对应
EXPIRE=      用于指定密码的过期时间,它与 /etc/shadow 文件中的第 8 个字段对应,如果值为空表示永久有效
SHELL=/bin/bash        用于指定用户登录后的操作,它与 /etc/passwd文件中第 7 个字段对应
SKEL=/etc/skel      用于指定用户所在家目录下的隐藏文件的拷贝来源
CREATE_MAIL_SPOOL=yes       用于给新建的用户指定邮箱地址,它与 /etc/login.defs 文件中MAIL_DIR 指向的地址相同

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/88837.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/88837.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/88837.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring-ai-alibaba 接入Tushare查询股票行情

最近spring-ai-alibaba主干分支新增了对Tushare的支持&#xff0c;一起来看看如何使用简单样例老样子&#xff0c;分三步进行&#xff1a;第一步&#xff1a;添加依赖<dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-aliba…

Java使用Langchai4j接入AI大模型的简单使用(一)

一、LangChain4j 简介 LangChain4j 是 Java 生态中的 LangChain 实现&#xff0c;是一个用于构建大语言模型(LLM)应用程序的框架。它提供了与各种LLM服务集成的能力&#xff0c;并简化了构建复杂AI应用的过程。 LangChain4j官方文档&#xff1a;Integrations | LangChain4j …

Linux —— A / 基础指令

建议学习路径&#xff1a;Linux系统与系统编程 ⇒ Linux网络和网络编程 ⇒ MySQL一、初识shell命令 1.1、关于 Linux 桌面很多同学的 Linux 启动进⼊图形化的桌⾯. 这个东西⼤家以后就可以忘记了。以后的工作中没有机会使用图形界面。思考: 为什么不使用图形界面? 1.2、下…

[论文阅读] 人工智能 + 软件工程 | 用大语言模型+排名机制,让代码评论自动更新更靠谱

LLMCup&#xff1a;用大语言模型排名机制&#xff0c;让代码评论自动更新更靠谱 LLMCup: Ranking-Enhanced Comment Updating with LLMsarXiv:2507.08671 LLMCup: Ranking-Enhanced Comment Updating with LLMs Hua Ge, Juan Zhai, Minxue Pan, Fusen He, Ziyue Tan Comments: …

悲观锁 乐观锁

悲观锁 乐观锁 在没有加锁的秒杀场景下 每秒打进来的请求是巨大的 高并发场景下 我们发现不仅异常率高的可怕 库存竟然还变成了负数 这产生的结果肯定是很大损失的 那为什么会出现超卖问题呢 我们假设有下面两个线程线程1查询库存&#xff0c;发现库存充足&#xff0c;创建订单…

如何使用Cisco DevNet提供的免费ACI学习实验室(Learning Labs)?(Grok3 回答)

Cisco DevNet 提供的免费 ACI&#xff08;Application Centric Infrastructure&#xff09;学习实验室&#xff08;Learning Labs&#xff09;是帮助用户学习和实践 Cisco ACI 技术&#xff08;包括 APIC 控制器&#xff09;的优秀资源&#xff0c;适合网络工程师、开发者和准备…

Combine的介绍与使用

目录一、Combine 框架介绍二、核心概念三、基础使用示例3.1、创建 Publisher & 订阅3.2、操作符链式调用3.3、Subject 使用&#xff08;手动发送值&#xff09;3.4、网络请求处理3.5、组合多个 Publisher3.6、错误处理四、核心操作符速查表 Operator五、UIKit 绑定示例六、…

【Java笔记】七大排序

目录1. 直接插入排序2. 希尔排序3. 选择排序4. 堆排序(重要)5. 冒泡排序6. 快速排序&#xff08;重要&#xff09;6.1 Hoare 法6.1.1 Hoare 法优化6.2 挖坑法&#xff08;重点&#xff09;6.3 快速排序的非递归写法7. 归并排序海量数据的排序问题8. 总结1. 直接插入排序 时间复…

H.264编解码(NAL)

在我们的日常生活中&#xff0c;比如有缓存电影或者是发送视频的需求。如果没有视频压缩&#xff0c;一部手机只能存几分钟视频&#xff0c;1TB 硬盘也装不下几部电影&#xff0c;用 4G 网络发一段 1 分钟视频&#xff0c;可能需要几十分钟&#xff08;甚至传不完&#xff09;&…

新手向:Python自动化办公批量重命名与整理文件系统

本文将详细介绍如何使用Python实现一个强大的文件批量重命名与整理工具&#xff0c;帮助开发者自动化这一繁琐过程。本教程面向Python初学者&#xff0c;通过一个完整的项目案例&#xff0c;讲解文件系统操作的核心技术。我们将构建的工具将具备以下功能&#xff1a;基于正则表…

C++ 左值右值、左值引用右值引用、integral_constant、integral_constant的元模板使用案例

C 左值右值、左值引用右值引用、integral_constant、integral_constant的元模板使用案例一、左值右值1.左值2.右值二、左值引用右值引用1.左值引用2.右值引用总结三、integral_constant四、integral_constant的元模板使用案例1.求最大整数2.内存对齐alignof关键字元模板计算内存…

c++算法一

1.双指针总结&#xff1a;1.复写0这道题&#xff0c;告诉我们要正难其反&#xff0c;我们从后向前进行重写&#xff0c;删除某些数字的时候&#xff0c;我们可以从前向后遍历&#xff0c;但是增加一些数字的时候会对后面的数据进行覆盖&#xff0c;所以要从后向前进行2.快乐数涉…

LeetCode-283. 移动零(Java)

283. 移动零 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: n…

【数据库】慢SQL优化 - MYSQL

一、数据库故障的关键点 引起数据库故障的因素有操作系统层面、存储层面&#xff0c;还有断电断网的基础环境层面&#xff08;以下称为外部因素&#xff09;&#xff0c;以及应用程序操作数据库和人为操作数据库这两个层面&#xff08;以下称内部因素&#xff09;。这些故障中外…

桶排序算法深度剖析

&#x1f50d; 桶排序算法深度剖析 &#x1f3af; 核心原理图解⚙️ 完整算法流程 #mermaid-svg-LyB6SpaZ132X4Wtn {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-LyB6SpaZ132X4Wtn .error-icon{fill:#552222;}#mer…

对S32K144做的BMS安装快速开发Simulink库及BMS例程介绍

前言 本章介绍BMS硬件功能及SimuLink库为主&#xff0c;捎带介绍一些例程内容 注意&#xff1a;例程所用的协议均是自定义的 自做的SimuLink库也会不定期更新 BMS例程的内容不定期维护添加 当前的BMS没有主动均衡功能&#xff0c;这个有考虑后期加上&#xff0c;当前还处于…

urlencode、html实体编码、unicode

目录 urlencode html实体编码 Unicode编码 urlencode URL编码也称为百分号编码&#xff0c;用于将URL中的特殊字符转换为安全传输的格式。英文数字一般不编码 特点&#xff1a; 使用%后跟两个十六进制数字表示字符 空格编码为或%20 保留字符&#xff08;; / ? : & …

【HarmonyOS】元服务概念详解

【HarmonyOS】元服务概念详解 最近几年&#xff0c;我们手里的设备越来越多——手机、平板、手表、车机……光是管理这些设备上的APP就够头疼了&#xff1a;下载要流量、安装占内存、换个设备又得重新弄一遍。有没有更简单的方式&#xff1f;HarmonyOS推出的“元服务”&#xf…

vscode/cursor怎么自定义文字、行高、颜色

JetBrains Mono: A free and open source typeface for developers | JetBrains: Developer Tools for Professionals and Teams 首先下载上面的文字&#xff0c;然后右键全选&#xff0c;安装 然后重启cursor 下载插件Apc Customize UI 点击设置 把下面的代码复制进去&…

JavaScript 与 C语言基础知识差别

一&#xff0c; 变量声明对比 C语言&#xff1a; int age 20; // 必须指定类型 float price 9.99; char grade A; const double PI 3.14; // 常量JavaScript&#xff1a; let age 20; // 数字 var price 9.99; // 现在不用&#xff0c;有缺点 co…