Linux中如何批次刪除系統中所有的自建使用者

先ping發表於2024-11-21

一、需求分析

在 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選項表示在刪除使用者的同時,刪除使用者的主目錄以及郵件池等相關檔案。

相關文章