Jawaban:
Berdasarkan gid, pengguna sistem dan pengguna layanan dapat dipisahkan sebagai berikut,
/etc/passwdberisi daftar untuk semua pengguna bersama dengan beberapa informasi lainnya. Pengguna layanan atau pengguna nyata memiliki gidlebih dari atau sama dengan 1000. Jadi daftar pengguna nyata dapat diperoleh sebagai,
awk -F: '($3>=1000)&&($1!="nobody"){print $1}' /etc/passwd
Juga daftar pengguna sistem ( gid<1000) dapat diekstraksi sebagai,
awk -F: '($3<1000){print $1}' /etc/passwd
Bagaimana itu bekerja
Isinya /etc/passwdseperti,
root:x:0:0:root:/root:/bin/bash
...
souravc:x:1001:1001:Souravc:/home/souravc:/bin/bash
Saat menggunakannya awkdengan -F:itu membagi isi garis menjadi beberapa bidang yang memperlakukan :sebagai pemisah bidang. Bidang pertama berisi nama pengguna dan bidang ketiga memiliki gid.
Oleh karena itu untuk mengekstrak pengguna nyata awkhanya memeriksa nilai bidang ketiga lebih besar dari sama dengan 1000 dan bukan siapa - siapa pengguna dan mencetak bidang pertama yaitu, nama pengguna.
Untuk daftar semua pengguna sistem, periksa saja gidkurang dari 1000 dan cetak nama pengguna.
Edit
Seperti yang Anda inginkan daftar root(gid = 0) dalam daftar pengguna nyata. Dapatkan pengguna nyata sebagai,
awk -F: '($3==0)||($3>=1000)&&($1!="nobody"){print $1}' /etc/passwd
Dapatkan pengguna sistem sebagai,
awk -F: '($3<1000)&&($1!="root"){print $1}' /etc/passwd
Catatan Saya selalu mengabaikan nobodypengguna.
Untuk daftar lokal (pengguna sistem) daripada yang bisa login dan memiliki homedir dan GID kurang dari 1000
cat /etc/passwd | cut -d: -f 1,3,6 | grep "[1-9][0-9][0-9][0-9]" | grep "/home" | cut -d: -f1
Untuk membuat daftar semua pengguna lain: (terutama pengguna sistem dan memiliki GID kurang dari 1000):
cat /etc/passwd | cut -d: -f 1,3,6 | grep -v "[1-9][0-9][0-9][0-9]" | cut -d: -f1