Linux中如何批量删除系统中所有的自建用户

  • Linux中如何批量删除系统中所有的自建用户已关闭评论
  • 25 次浏览
  • A+
所属分类:linux技术
摘要

在 Linux 系统中,一般情况下,系统用户(如root、bin、daemon等)的用户 ID(UID)通常是小于 1000 的。对于自建用户(非系统用户),UID 一般从 1000 开始分配。不过,这不是绝对的规则,具体的 UID 范围可以由系统管理员在创建用户时指定,或者根据系统的用户管理配置文件(如/etc/login.defs)来确定。
因此,我们可以通过awk工具提取/etc/passwd中uid大于1000的用户名,并结合管道符|和xargs 来进行批量删除。


一、需求分析

在 Linux 系统中,一般情况下,系统用户(如root、bin、daemon等)的用户 ID(UID)通常是小于 1000 的。对于自建用户(非系统用户),UID 一般从 1000 开始分配。不过,这不是绝对的规则,具体的 UID 范围可以由系统管理员在创建用户时指定,或者根据系统的用户管理配置文件(如/etc/login.defs)来确定。
因此,我们可以通过awk工具提取/etc/passwd中uid大于1000的用户名,并结合管道符|xargs 来进行批量删除。

二、下面进行实操

2.1.批量新增用户

[root@client-110 ~]# echo -e "u1nu2nu3nu4" |xargs -L 1 useradd  
[root@client-110 ~]# tail /etc/passwd dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin u1nu2nu3nu4:x:1000:1000::/home/u1nu2nu3nu4:/bin/bash u1:x:1001:1001::/home/u1:/bin/bash u2:x:1002:1002::/home/u2:/bin/bash u3:x:1003:1003::/home/u3:/bin/bash u4:x:1004:1004::/home/u4:/bin/bash 

通过观察/etc/passwd文件发现,每个字段由:分隔,第一列为用户名,第三个字段为uid

2.2.通过awk工具提取uid大于等于1000的用户名

[root@client-110 ~]# awk -F ':' '$3>=1000{print$1}' /etc/passwd u1nu2nu3nu4 u1 u2 u3 u4 

2.3.批量删除

[root@client-110 ~]# awk -F ':' '$3>=1000{print$1}' /etc/passwd|xargs -L 1 userdel 
[root@client-110 ~]# tail /etc/passwd operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin 

命令整体解释
这个命令的目的是批量删除/etc/passwd文件中uid大于等于 1000 的用户及其主目录。

  • 首先是awk -F ':' '$3>=1000{print $1}' /etc/passwd部分:
    • awk是一个强大的文本处理工具,-F ':'表示以:作为字段分隔符来处理/etc/passwd文件。/etc/passwd文件的每行包含了用户的各种信息,格式大致为用户名:密码:用户ID:用户组ID:注释:主目录:默认shell
    • $3>=1000{print $1}这一语句是awk的模式和动作语句。$3表示每行的第三个字段,在这里就是uid字段,当这个字段的值大于等于 1000 时,就打印该行的第一个字段,也就是用户名。
  • 然后是| xargs -L 1 userdel -r部分:
    • |是管道符号,它将awk命令的输出(也就是符合条件的用户名)作为下一个命令的输入。
    • xargs -L 1表示每次将一行输入作为参数传递给userdel -r命令。这样可以避免因用户名中可能包含空格等特殊情况而导致参数传递错误。
    • userdel -r是用于删除用户及其主目录的命令。-r选项表示在删除用户的同时,删除用户的主目录以及邮件池等相关文件。