在 Linux 中有很多命令,这篇文章将介绍 Linux 用户相关的命令。
创建用户
在 Linux 中使用 useradd 命令来添加用户账号。useradd 命令的选项有:
- -c comment 指定一段注释性描述。
- -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
- -g 用户组 指定用户所属的用户组。
- -G 用户组,用户组 指定用户所属的附加组。
- -s Shell文件 指定用户的登录Shell。
- -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
代码示例如下:
# 创建用户 developer 并自动创建home目录
sudo useradd -m -s /bin/bash developer
# 为 developer 用户设置密码
sudo passwd developer
sudo 作用是以其他用户身份执行命令。它可以能让一些命令让普通用户去执行,而不需要登录为root用户。比如这里的 useradd 命令是需要root用户才能操作的,而现在我们带上 sudo 就可以让普通用户来创建用户了。更新信息可以看 如何在 Linux 中配置和限制 Sudo 访问权限 | LabEx
切换用户
在 Linux 中,我们使用 su 命令来实现切换用户的功能。su 命令的示例如下:
# 直接使用,会切换到 root 用户,但会保留当前环境
su
# 切换到 root 用户,加载 root 的完整环境
su -
# 切换到 developer 用户,
# `-` 或 `-l` 或 `--login`会 提供类似直接登录的环境
su -l developer
这里的环境是指:环境变量、工作目录。不同的用户可能会有不同的环境。
删除用户
在 Linux 中,我们使用 userdel 命令来删除用户。userdel 命令的示例如下:
# 删除用户(保留家目录)
sudo userdel developer
# 删除用户并移除家目录
sudo userdel -r developer
修改用户属性
在 Linux 中,我们使用 usermod 命令来修改用户的属性。usermod 命令的选项和 useradd 类似,如下所示:
- -c 修改用户帐号的备注文字。
- -d 修改用户登入时的目录。
- -g 修改用户所属的群组。
- -G 修改用户所属的附加群组。
- -l 修改用户帐号名称。
- -L 锁定用户密码,使密码无效。
- -s 修改用户登入后所使用的shell。
- -u 修改用户ID。
- -U 解除密码锁定。
代码示例如下:
# 修改用户家目录
sudo usermod -d /home/dev developer
# 修改用户默认shell
sudo chsh -s /bin/zsh developer
查看用户信息
在 Linux 中,我们使用 id 来查看当前用户的信息。该命令会显示用户的 UID(User ID)、GID(Group ID)以及附属于用户的所有组 ID。
代码示例如下:
# 显示 developer 的信息
id developer
打印结果如下
uid=1002(developer) gid=1002(developer) 组=1002(developer)
其中,uid 表示该用户的唯一标识符。一般来说
0为 root 用户(超级管理员)。1-999为系统用户(服务账户,如www-data、nobody)。1000+为普通用户(由useradd创建的用户)
这里 uid=1002(developer) 表示 developer 用户的uid 为 1002。
gid 指当前用户的组id,这里 gid=1002(developer) 是指 developer 用户的gid为 1002。
组=1002(developer) 表示 developer 属于 developer 组,其对应的 gid 为 1002
用户与用户组的配置文件
etc/passwd
在 Linux 中,使用 etc/passwd 来保存用户的基本属性。文件内容如下:
root:x:0:0:Superuser:/:
daemon:x:1:1:System daemons:/etc:
bin:x:2:2:Owner of system commands:/bin:
sys:x:3:3:Owner of system files:/usr/sys:
adm:x:4:4:System accounting:/usr/adm:
uucp:x:5:5:UUCP administrator:/usr/lib/uucp:
auth:x:7:21:Authentication administrator:/tcb/files/auth:
cron:x:9:16:Cron daemon:/usr/spool/cron:
listen:x:37:4:Network daemon:/usr/net/nls:
lp:x:71:18:Printer administrator:/usr/spool/lp:
sam:x:200:50:Sam san:/home/sam:/bin/sh
从上面的例子我们可以看到,/etc/passwd 中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下:
用户名:密码占位符:用户标识号:组标识号:注释性描述:主目录:登录Shell
- 密码占位符:固定为 x,表示密码存储在
etc/shadow文件中 - 用户标识号:即前面介绍的 uid
- 组标识号:前面的介绍的gid
- 主目录:用户登录后默认进入的目录,用户文件的主要存储位置。
etc/shadow
/etc/shadow 文件,用于存储 Linux 系统中用户的密码信息。具体可以看 Linux /etc/shadow(影子文件)内容解析(超详细)
etc/group
/ect/group 文件是用户组配置文件,即用户组的所有信息都存放在此文件中。具体可以看 Linux /etc/group文件解析(超详细)