查找etc/passwd文件中所有重复用户使用的所有shell

查找etc/passwd文件中所有重复用户使用的所有shell

我尝试通过以下方式在 /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

相关内容