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

関連情報