Linux教程(二)用户相关命令

168 阅读4分钟

在 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-datanobody)。
  • 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文件解析(超详细)

参考