Jawaban:
Berdasarkan gid
, pengguna sistem dan pengguna layanan dapat dipisahkan sebagai berikut,
/etc/passwd
berisi daftar untuk semua pengguna bersama dengan beberapa informasi lainnya. Pengguna layanan atau pengguna nyata memiliki gid
lebih 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/passwd
seperti,
root:x:0:0:root:/root:/bin/bash
...
souravc:x:1001:1001:Souravc:/home/souravc:/bin/bash
Saat menggunakannya awk
dengan -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 awk
hanya 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 gid
kurang 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 nobody
pengguna.
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