使用awk批量删除指定范围的账号

大家都知道,Linux系统中的账户信息都存放在/etc/passwd这个文件中,通过查看这个文件我们就可以了解到系统内每个账号的详细信息。今天做实验,建立了很多账号,手工挨个删除真的很慢,于是就用前段时间学习的awk命令删除了指定范围的账号,方便快捷。命令我是这样写的:

[root@DCGH ~]# awk -F ":" 'NR>=22&&NR<=28{cmd="userdel -r";user=$1;system(cmd" "user)}' /etc/passwd

这行命令中,我删除了/etc/passwd中第22至28行的账号,连带用户目录一起删除。看着效率还行,于是我就拓展了一下,删除指定行的账号,命令如下:

[root@DCGH ssh]# awk -F ":" '{if(NR==11){print NR ":" $1}else if(NR==12){print NR ":" $1}}' /etc/passwd
11:games
12:ftp
[root@DCGH ssh]# awk -F ":" 'BEGIN{cmd="userdel -r"}{if(NR==11){user=$1;system(cmd" "user)}else if(NR==12){user=$1;system(cmd" "user)}}' /etc/passwd
userdel:组“games”没有移除,因为它不是用户 games 的主组
userdel: games 邮件池 (/var/spool/mail/games) 未找到
userdel:/usr/games 并不属于 games,所以不会删除
userdel: ftp 邮件池 (/var/spool/mail/ftp) 未找到
userdel:未找到 ftp 的主目录“/var/ftp”
[root@DCGH ssh]# nl /etc/passwd
     1    root:x:0:0:root:/root:/bin/bash
     2    bin:x:1:1:bin:/bin:/sbin/nologin
     3    daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4    adm:x:3:4:adm:/var/adm:/sbin/nologin
     5    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6    sync:x:5:0:sync:/sbin:/bin/sync
     7    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8    halt:x:7:0:halt:/sbin:/sbin/halt
     9    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10    operator:x:11:0:operator:/root:/sbin/nologin
    11    nobody:x:99:99:Nobody:/:/sbin/nologin
    12    avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
    13    systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
    14    systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin
    15    dbus:x:81:81:System message bus:/:/sbin/nologin
    16    polkitd:x:997:995:User for polkitd:/:/sbin/nologin
    17    tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    18    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    19    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    20    tcpdump:x:72:72::/:/sbin/nologin
awk -F ":" '{if(NR==11){print NR ":" $1}else if(NR==12){print NR ":" $1}}' /etc/passwd

这一行命令中,我们打印出了需要删除账号名称。接着使用system函数拓展了一下,把账号名称的值赋给变量user。账号删除(选项r:删除主目录和邮件池)命令为:userdel -r,值赋给变量cmd。注意:system()函数括号内的双引号中间是一个空格。于是命令就被拓展成这样了:

awk -F ":" 'BEGIN{cmd="userdel -r"}{if(NR==11){user=$1;system(cmd" "user)}else if(NR==12){user=$1;system(cmd" "user)}}' /etc/passwd

如果还需要删除其他指定行的账号,再添加else if语句修改一下NR值就可以了。这两行命令应该还可以拓展到其他地方使用,欢迎有想法的小伙伴提出来。当然,我这个命令语句写得也很次,在各位大大们面前班门弄斧了,欢迎指正。

上一篇:Oracle内部视图:x$targetrba


下一篇:python cookbook 学习系列(一) python中的装饰器