Shell编程中关于用户操作报错`Creating mailbox file: File exists`

76 阅读3分钟
1 背景

新建了一个用户linc,后来发现有一些问题,将该用户删除,脚本如下:

 userdel linc

随后我再次新建一个相同名称的用户,麻烦来了,报错:Creating mailbox file: File exists,如下:

 [root@instance-jgzzg4xl home]# userdel linc
 [root@instance-jgzzg4xl home]# ll
 total 16
 drwx------ 2 huar    huar      4096 Oct 31 13:25 huar
 drwx------ 4 jiangms jiangms   4096 Aug 19 14:45 jiangms
 drwx------ 2     488      1003 4096 Oct 31 13:25 linc
 drwx------ 4 songj   developer 4096 Oct 31 13:24 songj
 [root@instance-jgzzg4xl home]# useradd linc
 useradd: warning: the home directory already exists.
 Not copying any file from skel directory into it.
 Creating mailbox file: File exists

我们可以看到,在我们删除后,在/home/文件夹下依然存在/luzs/主目录,猜测的原因是因为在删除的时候未把相关信息删除干净。那么我们把主目录给删除掉看看效果:

 [root@instance-jgzzg4xl home]# rm -rf /home/linc/
 [root@instance-jgzzg4xl home]# ll
 total 12
 drwx------ 2 huar    huar      4096 Oct 31 13:25 huar
 drwx------ 4 jiangms jiangms   4096 Aug 19 14:45 jiangms
 drwx------ 4 songj   developer 4096 Oct 31 13:24 songj
 [root@instance-jgzzg4xl home]# useradd linc
 useradd: user 'luzs' already exists

我们发现同样出现报错,但是却报了不同的错误。遇事不决,还是得从基础知识点入手。

2 userdel 常用命令参数

基础语法:

 userdel [选项] 用户名

常用选项

  • -r:删除用户账号及其家目录和邮件槽
  • -f:强制删除用户(当用户已登录Linux系统时,此选项仍旧生效)
  • -R:后跟一个目录名(CHROOT_DIR),表示在指定目录中执行userdel操作,并且使用指定目录下的配置文件
  • -P:后跟一个目录名(PREFIX_DIR),表示在指定目录中执行userdel操作,并且使用指定目录下的配置文件,但该选项不会进行chroot操作,旨在为交叉编译目标准备环境
  • -Z:删除与用户相关的SELinux用户映射
  • -k:保留家目录,家目录留作进行手工处理

而新建用户后,其主要的信息会保留在以下文件中:

  • /etc/group:用户组信息。
  • /etc/login.defs:为 shadow 密码套件提供的配置信息。
  • /etc/passwd:用户账户信息。
  • /etc/shadow:用户账户的安全信息,包含密码的散列值及账户有效期等,只能由 root 账户读取。
  • /etc/subgid:存储每个用户辅助组ID信息。
  • /etc/subuid:存储每个用户的辅助用户ID信息。
3 解决办法

基于基础知识,当我们在删除用户没有删除干净的情况下,我们可以使用

 userdel -r linc

上述脚本,会强制删除用户linc及其相关信息,这种情况在出现错误:useradd: user 'linc' already exists 时比较好用;

如果报错:Creating mailbox file: File exists,我们就将/var/spool/mail/luzs文件给删掉,这样就会排除这个报错。

这样的两套组合拳下来,新增之前存在客户出现的报错问题就会迎刃而解。当然了,最好的解决方式是避免这种物理删除用户的行为。如果确定用户不用了,要使用userdel -r luzs -k 保留用户的主目录,并删除用户的其他相关信息为最佳选择。