etc/passwd 파일에서 모든 중복 사용자가 사용하는 모든 쉘을 찾으십시오.

etc/passwd 파일에서 모든 중복 사용자가 사용하는 모든 쉘을 찾으십시오.

다음을 통해 /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

그런 다음 이러한 모든 중복 사용자 중에서 사용되는 고유 쉘 목록을 찾으려고 노력했습니다. 하지만 무엇을 해야할지 모르겠습니다.

이러한 모든 중복 사용자가 사용하는 고유 셸을 표시하는 방법이 있습니까?

내 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

그리고 그들이 사용하는 쉘 목록은 다음과 같습니다.

/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 -F: '++count[$1] == 2 {shell[$NF]} END {for (s in shell) print s}' /etc/passwd

답변2

다음 명령은오직다른 필드(예: uid, gid, homedir, shell)의 차이점을 무시하고 사용자 이름을 비교하고 선택합니다.모두쉘에서 사용하는 사용자 이름을 반복하십시오.

grep -f <(cut -d: -f1 /etc/passwd | sort | uniq -d | sed -e "s/^/^/") /etc/passwd | cut -d: -f7 | sort -u

관련 정보