我尝试通过以下方式在 /etc/passwd 文件中查找重复的用户名:
#!/bin/bash
# passwd file are look like below
# username : password : user ID : group ID : user ID info : home directory : command shell
cut -d: -f1 passwd | sort | uniq -d|
while IFS=: read -r user_name;
do
echo "$user_name"
done
然后我试图找到所有这些重复用户中使用的唯一 shell 的列表。但不知道该怎么做。
有没有办法显示所有这些重复用户使用的唯一 shell?
我的 etc/passwd 文件如下:
imshakil:x:1000:1000:Mobarak Hosen Shakil,,,:/home/imshakil:/bin/bash
nm-openvpn:x:122:129:NetworkManager OpenVPN,,,:/var/lib/openvpn/chroot:/usr/sbin/nologin
lightdm:x:123:131:Light Display Manager:/var/lib/lightdm:/bin/false
hadoop:x:1001:1001:Bigger Hadoop,,,:/home/hadoop:/bin/bash
sshd:x:124:65534::/run/sshd:/usr/sbin/nologin
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
gdm:x:121:127:Gnome Display Manager:/var/lib/gdm3:/bin/false
imshakil:x:1000:1000:Mobarak Hosen Shakil,,,:/home/imshakil:/bin/bash
nm-openvpn:x:122:129:NetworkManager OpenVPN,,,:/var/lib/openvpn/chroot:/usr/sbin/nologin
lightdm:x:123:131:Light Display Manager:/var/lib/lightdm:/bin/false
hadoop:x:1001:1001:Bigger Hadoop,,,:/home/hadoop:/bin/bash
sshd:x:124:65534::/run/sshd:/usr/sbin/nologin
我需要得到如下输出:重复用户:
bin
daemon
hadoop
imshakil
lightdm
nm-openvpn
root
sshd
sync
sys
以及他们使用的 shell 列表:
/bin/bash
/bin/false
/bin/sync
/usr/sbin/nologin
(更新)
答案1
你可以做
sort /etc/passwd | uniq -c | grep -vE '^ +1 ' | cut -d: -f 7 | sort -u
或全部在 awk 中
awk -F: '++count[$1] == 2 {shell[$NF]} END {for (s in shell) print s}' /etc/passwd
答案2
以下命令将仅有的比较用户名,忽略其他字段(例如 uid、gid、homedir、shell)中的任何差异并选择全部重复用户名使用的 shell。
grep -f <(cut -d: -f1 /etc/passwd | sort | uniq -d | sed -e "s/^/^/") /etc/passwd | cut -d: -f7 | sort -u