用户管理命令

1. 切换用户

Linux是一个多用户的操作系统, 可以同时登录多个用户, 因此很多时候需要在多个用户之间切换, 用户切换需要使用su或者su -。使用su只切换用户, 当前的工作目录不会变化, 但是使用 su -不仅会切换用户也会切换工作目录, 工作目录切换为当前用户的家目录。

从用户A切换到用户B, 如果还想再切换回用户A,可以直接使用 exit。

cpp 复制代码
# 只切换用户, 工作目录不变
$ su 用户名
# 举例:
robin@OS:~/Linux$ su luffy
Password:                       # 需要输入luffy用户的密码
luffy@OS:/home/robin/Linux$	    # 工作目录不变

# 切换用户和工作目录, 会自动跳转到当前用户的家目录中
$ su - 用户名
# 举例:
robin@OS:~/Linux$ su - luffy
Password: 		# 需要输入luffy用户的密码
luffy@OS:~$ pwd
/home/luffy		# 工作目录变成了luffy的家目录

# 回到原来的用户
$ exit

2. 添加删除用户

作为一个普通用户是没有给系统添加新用户这个权限的, 如果想要添加新用户可以先切换到root用户, 或者基于普通用户为其添加管理员权限来完成新用户的添加。添加新用户需要使用adduser/useradd命令来完成。

普通用户没有添加/删除用户的权限, 需要授权, 给普通用户添加sudo权限

2.1 添加新用户

cpp 复制代码
# 添加用户
# sudo -> 使用管理员权限执行这个命令
$ sudo adduser 用户名

# centos
$ sudo useradd 用户名

# ubuntu
$ sudo useradd -m -s /bin/bash  用户名

# 在使用 adduser 添加新用户的时候,有的Linux版本执行完命令就结束了,有的版本会提示设置密码等用户信息
robin@OS:~/Linux$ sudo adduser lisi
Adding user `lisi' ...
Adding new group `lisi' (1004) ...
Adding new user `lisi' (1004) with group `lisi' ...
Creating home directory `/home/lisi' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
Changing the user information for lisi
Enter the new value, or press ENTER for the default
        Full Name []: 
        Room Number []: 
        Work Phone []: 
        Home Phone []: 
        Other []: 
Is the information correct? [Y/n] y

当新用户添加完毕之后, 我们可以切换到新添加的用户下, 用来检测是否真的添加成功了, 另外我们也可以使用其他方式来检验, 首先在 /home目录中会出现一个和用户名同名的目录, 这就是新创建的用户的家目录, 另外我们还可以查看 /etc/passwd文件, 里边记录着新添加的用户的更加详细的信息

2.2 删除用户

删除用户并不是将/home下的用户家目录删除就完事儿了, 我们需要使用userdel命令才能删除用户在系统中的用户ID和所属组ID等相关信息,但是需要注意的是在某些Linux版本中用户虽然被删除了, 但是它的家目录却没有被删除,需要我们手动将其删除。

cpp 复制代码
# 删除用户, 添加参数 -r 就可以一并删除用户的家目录了
$ sudo userdel 用户名 -r

# 删除用户 lisi
$ sudo userdel lisi -r

# 使用deluser不能添加参数-r, 家目录不能被删除, 需要使用 rm 命令删除用户的家目录, 比如:
$ sudo rm /home/用户名 -r

由于Linux的版本很多, 删除用户对应的操作指令不是唯一的, 经测试在 CentOS 版本只支持 userdel命令, 在Ubuntu中既支持 userdel 也支持 deluser命令。

3. 添加删除用户组

默认情况下, 只要创建新用户就会得到一个同名的用户组, 并且这个用户属于这个组。一般情况下不需要创建新的用户组,如果有需求可以使用 groupadd添加用户组, 使用 groupdel删除用户组。

由于普通用户没有添加删除用户组权限,因此需要在管理员(root)用户下操作,或者在普通用户下借助管理员权限完成该操作。

cpp 复制代码
# 基于普通用户创建新的用户组
$ sudo groupadd 组名

# 基于普通用户删除已经存在的用户组
$ sudo groupdel 组名

如果验证用户组是否添加成功了, 可以查看 /etc/group文件, 里边有用户组相关的信息:

在Ubuntu中添加删除用户组可以使用 addgroup/groupadd 和 delgroup/groupdel

在CentOS中添加和删除用户只能使用 groupadd 和 groupdel

我们只需要通过 which 命令名 查看,就能知道该Linux版本是不是支持使用该命令了。

4. 修改密码

Linux中设置用户密码和修改用户密码的方式是一样的, 修改用户密码又分几种情况: 修改当前用户密码, 普通用户A修改其他普通用户密码, 普通用户A修改root用户密码, root用户修改普通用户密码。修改密码需要使用passwd命令。当创建了一个普通用户却没有提示指定密码, 或者忘记了用户密码都可以通过该命令来实现自己重置密码的需求。

当前用户修改自己的密码, 默认是有权限操作的

当前普通用户修改其他用户密码, 默认没有权限, 需要借助管理员权限才能完成操作

当前普通用户修改root用户密码, 默认没有权限, 需要借助管理员权限才能完成操作

root用户修改其他普通用户密码, 默认有权限, 可以直接修改

cpp 复制代码
# passwd
# 修改当前用户
$ passwd

# 修改非当前用户密码
$ sudo passwd 用户名

# 修改root
$ sudo passwd root

通过以上介绍的相关命令我们可以知道,如果让一个普通用户可以使用管理员权限执行一些指令其实是非常危险的的, 因此普通用户默认是没有使用 sudo的权限的, 必须授权才能使用,工作场景中授权操作一定要慎重,要三思。

笔记

su - 横杠前后都是有空格的

普通用户要使用执行添加或删除命令的时候需要在前面添加sudo命令,相当于给普通用户授权拥有管理员权限

创建ace用户

为ace用户设置密码,密码为12345678

这是 vim 编辑器 (打开了 /etc/passwd),退出步骤:

  1. 先按一次 Esc(确保回到命令模式)
  2. 输入英文冒号 :,光标跳到最底部
  3. 选一条输入,回车:
  • ✅ 你只是看,没有修改内容::q 回车 (正常退出)
  • ✅ 如果不小心改动了,不想保存::q! 回车(强制退出,丢弃改动,新手最常用)
  • ✅ 修改了内容、要保存再退出::wq 回车

你现在只是查看用户信息,优先用 :q;如果提示 E37 不能退出,就用 :q!

  • :q 退出(未改动)
  • :q! 强制退出,不保存
  • :wq 保存再退出

添加用户的第二种方式

报错翻译:ace 这个用户不在 sudoers 文件里,没有 sudo 权限,这次操作会被记录

👉 核心:ace 没有管理员提权资格,所以 sudo 执行失败,不能新建用户。 exit:退出 ace 用户,回到 robin 用户(robin 是有 sudo 权限的)

useradd sabo 默认行为(Ubuntu):不会自动创建 /home/sabo 家目录! 所以 ls 看不到 sabo 文件夹,这是重点坑!

参数解释:

  • -m:--create-home 自动创建 /home/sabo1 家目录(关键参数!)
  • -s /bin/bash:指定登录 shell 为 bash,这个用户可以正常登录交互 执行完 ls 就看到 sabo1 目录了
  • 查看用户信息文件,确认 sabo、sabo1 的用户记录
  • useradd 用户名:默认不自动创建家目录,shell 默认是 /bin/sh 或者 nologin,很多时候没法直接登录
  • useradd -m -s /bin/bash 用户名:
    • -m 自动生成家目录 /home/xxx
    • -s /bin/bash 指定可交互 bash,支持 su 切换登录
    • 区分:Ubuntu 的adduser是交互式,默认自带 - m;useradd是底层命令,参数要自己加
  • sudoers 报错一句话:用户没加入 sudo 许可列表,不能用 sudo 提权,要用visudo添加权限
cpp 复制代码
# 给sabo1设置登录密码
sudo passwd sabo1
# 删除用户连带家目录
sudo userdel -r sabo1

修改用户组chgrp

删除用户组

创建组 hello

复制代码
sudo groupadd hello
# 创建完组之后,再修改文件属组
sudo chgrp hello hello.txt

配套区分

  1. chown:修改文件所有者(用户)

    sudo chown ace hello.txt

  2. chgrp:修改文件所属组

    sudo chgrp ace hello.txt

补充一条同时改所有者 + 属组

复制代码
sudo chown ace:ace hello.txt
# ace(用户) : ace(组)

删除组之后再看文件,你会看到属组那里变成了数字 1005

重点考点: 当文件绑定的用户组被删掉了,系统不再识别组名,就直接展示GID 编号,不再显示组名字。

一句话理解这个现象

文件记录的是 GID,不是组名。组删了,名字映射没了,就只显示数字 ID。 如果后续再新建一个同名组 hello,分配到 GID=1005,这个文件又会重新显示 hello 组名。

面试背诵

如果文件所属组被删除,ll查看时属组位置会显示 GID 数字;组和文件只是通过 GID 关联,不是强绑定。

拓展区分

  • chown:改文件所有者(用户)
  • chgrp:改文件所属组
  • groupadd:新建组
  • groupdel:删除组(不能删用户主组)
相关推荐
BcoreOS1 小时前
‌新手必看:Debian 13 虚拟机 SSH 连不上?我是怎么一步步调试成功的
服务器
迪菲赫尔曼1 小时前
【基础篇 08】让VS Code连接服务器:界面在本地,文件保存到远端
运维·服务器·vscode·yolo·论文·教程·ultralyt
东方佑1 小时前
去魅:工具调用、Agent 调用、A2A、MCP、Harness 到底都是什么
服务器·网络·数据库
刚入门的大一新生1 小时前
Linux-线程概念
linux·jvm
H.莓飛2 小时前
【数据结构】排序总结与规模实测
linux·服务器·开发语言·数据结构·visual studio·1024程序员节
xianyuCcCcCCCcc2 小时前
Kubernetes :健康检查、认证授权与可视化面板
运维·云原生·kubernetes·dashboard
Zenova EdgeOS2 小时前
Linux 日志实战:用 journalctl 精准检索与治理工业边缘日志
linux·运维·chrome
Dory_Youth2 小时前
电脑的搜索功能不能用,一搜就黑屏闪退
运维·笔记
Dxy12393102162 小时前
Linux 压缩解压相关命令介绍
linux·运维·服务器