Linux中如何批量删除系统中所有的自建用户
一、需求分析
在 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 "u1\nu2\nu3\nu4" |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
选项表示在删除用户的同时,删除用户的主目录以及邮件池等相关文件。