「Linux 系统编程」创建修改用户和用户组

0 查看当前用户

使用 whoami 可以查看当前用户。


1 创建用户和用户组

1.1 创建用户

使用 useradd 命令创建新的用户:

1
2
3
4
5
6
7
# 创建名为 username 的用户
sudo useradd username

# 创建用户时指定主目录和登录shell
sudo useradd -m -s /bin/bash username
# -m: 自动创建用户主目录
# -s: 指定默认登录shell

设置用户密码:

1
sudo passwd username

在下面的示例中,创建了一个名为 alice 的用户,并自动创建对应的用户目录,指定了默认登录 shell。


1.2 创建用户组

使用 groupadd 命令创建用户组:

1
2
# 创建名为 groupname 的用户组
sudo groupadd groupname

2 修改文件所属用户和用户组

2.1 修改文件 / 目录所属用户

使用 chown 命令修改文件的所有者:

1
2
3
4
5
# 修改文件 file.txt 的所有者为 username
sudo chown username file.txt

# 递归修改目录及其内容的所有者
sudo chown -R username testDir/ # 需要添加 -R 参数

在下面的示例中,修改文件 file.txt 的所有者为 alice:


2.2 修改文件 / 目录所属用户组

使用 chgrp 命令修改文件的所属组:

1
2
3
4
5
# 修改文件 file.txt 的所属组为 username
sudo chgrp groupname file.txt

# 递归修改目录及其内容的所属组
sudo chgrp -R groupname testDir/ # 需要添加 -R 参数

在下面的示例中,预先创建了一个用户组 touhou,修改文件 file.txt 的所属组为 touhou:


2.3 同时修改用户和用户组

可以在 chown 命令中同时指定用户和组:

1
2
3
4
5
# 同时修改所有者和所属组
sudo chown username:groupname file.txt

# 递归修改目录
sudo chown -R username:groupname testDir/

常用的选项参数

  • -R: 递归处理所有子文件和子目录
  • -v: 显示操作过程
  • -c: 仅显示发生变化的文件

3 删除用户和用户组

3.1 删除用户

使用 userdel 命令删除用户:

1
sudo userdel [选项] username
  • -r:删除用户的同时,自动删除其主目录(/home/用户名)及邮件目录
  • -f:强制删除用户,即使该用户当前已登录(谨慎使用)

在删除一个用户之前,需要先看一下该用户是否有正在运行的进程。可使用 ps -u username 查看,必要时先终止进程。

使用 pkill 命令终止用户所有进程后,执行 sudo userdel alice 删除用户同时删除其主目录。

执行 userdel 命令时出现 userdel: alice mail spool (/var/mail/alice) not found 提示,这是一个警告信息(而非错误),表示系统在尝试删除用户 alice 的邮件存储文件(/var/mail/alice)时,发现该文件不存在。


3.2 删除用户组

1
sudo groupdel groupname
  • 不能删除用户的主组(用户创建时默认生成的同名组),需先删除该用户或修改用户的主组(usermod -g 新主组 用户名);
  • 不能删除有用户从属的组(即该组是某些用户的附加组),需先将所有用户从该组中移除(gpasswd -d 用户名 组名);
  • 不可删除系统预定义的关键组(如 root、sudo 等),否则可能导致系统故障。

4 文件权限的修改

chmod 是 Linux 系统中用于修改文件或目录权限的命令,通过它可以控制用户(所有者、所属组、其他用户)对文件的 读(r)、写(w)、执行(x) 权限。

4.1 权限的基本表示

文件权限分为三类用户

  • u:文件所有者(user)
  • g:所属组用户(group)
  • o:其他用户(others)
  • a:所有用户(all,相当于 u+g+o

权限类型

  • r:读权限(4)
  • w:写权限(2)
  • x:执行权限(1,文件可执行;目录可进入)
  • -:无权限(0)

4.2 符号法修改权限

语法:

1
chmod [用户][操作符][权限] 文件名

操作符+(添加权限)、-(移除权限)、=(设置权限)

一些示例如下:

1
2
3
4
5
6
7
8
9
10
11
# 给文件所有者添加写权限
chmod u+w file.txt

# 移除所属组的执行权限
chmod g-x run.sh

# 给所有用户设置读权限
chmod a+r test.cpp

# 同时设置多种权限(所有者读写执行,组和其他只读)
chmod u=rwx,g=r,o=r test.sh

在下面的示例中,将 file.txt 文件的文件所有者的写权限移除了:


4.3 数字法修改权限

用三位数字表示权限(每一位对应 ugo),数字由权限值相加得到(r=4w=2x=1)。可以将 rwx 分别看作是二进制的第 221100 的位置。

常见权限组合

  • 7rwx(4+2+1)
  • 6rw-(4+2)
  • 5r-x(4+1)
  • 4r--
  • 0---

示例

1
2
3
4
5
6
7
8
# 所有者读写执行,组和其他只读(744)
chmod 744 file.txt

# 所有者读写执行,组读写,其他无权限(760)
chmod 760 data/

# 所有用户都有读写执行权限(危险,谨慎使用)
chmod 777 temp/

在下面的示例中,将 file.txt 的权限修改为 660,相当于修改为 rw-rw----


常用选项:

  • -R:递归修改目录及其子文件 / 子目录的权限
    1
    2
    # 递归设置目录及内容的权限
    chmod -R 755 testDir/
  • -v:显示权限修改的详细过程
    1
    chmod -v u+x run.sh

注意:只有文件所有者或 root 用户可以修改权限


「Linux 系统编程」创建修改用户和用户组
https://marisamagic.github.io/2025/08/02/20250802_2/
作者
MarisaMagic
发布于
2025年8月2日
许可协议