Tampilkan semua pengguna dan grup mereka / sebaliknya

70

Saya tahu saya memiliki grup dan pengguna yang sudah ada, tetapi saya tidak yakin tentang hubungan mereka. Apakah ada perintah shell yang dapat saya gunakan untuk mendaftar semua pengguna atau semua grup dan perintah untuk mendaftar semua grup / pengguna untuk pengguna / grup tertentu?

Jadi sesuatu seperti showusersakan mendaftar semua pengguna, dan showgroups -u thisuserakan menampilkan semua grup yang ada thisuserdi dalamnya.

Steve Robbins
sumber
tidak ada perintah seperti itu. Anda perlu membuat skrip sendiri.
Chris
bagaimana dengancat /etc/passwd
Sudip Bhandari

Jawaban:

93

Semua pengguna:

$ getent passwd

Semua grup:

$ getent group

Semua grup dengan pengguna tertentu:

$ getent group | grep username
EEAA
sumber
Saya menemukan bahwa ada pengguna yang bernama speech-dispatchermilik audio grup (berdasarkan groups speech-dispatcher). Tapi itu tidak terdaftar di bawah getent groupkomando! Apa masalahnya?
PHP Learner
3
@PHPLearner Jika Anda memiliki pertanyaan lain, silakan kirim pertanyaan , bukan komentar.
EEAA
+1 karena ini juga akan mencantumkan pengguna / grup yang tidak ditemukan dalam file /etc/passwd& konvensional /etc/groupyaitu ketika sistem dikonfigurasikan untuk menggunakan direktori pusat seperti NIS dan LDAP, atau basis data pengguna / grup alternatif lain, selama itu mendukung enumerasi pengguna / grup .
HBruijn
Ini tidak akan mengembalikan semua pengguna dan grup dalam konfigurasi ldap atau sssd jika enumerasi dimatikan.
Jens Timmerman
16

Daftar pengguna dan grup mereka:

for user in $(awk -F: '{print $1}' /etc/passwd); do groups $user; done

Daftar grup dan penggunanya:

cat /etc/group | awk -F: '{print $1, $3, $4}' | while read group gid members; do
    members=$members,$(awk -F: "\$4 == $gid {print \",\" \$1}" /etc/passwd);
    echo "$group: $members" | sed 's/,,*/ /g';
done
tidak
sumber
1
Sementara itu mungkin akan berhasil, tampaknya agak terlalu rumit, bukan, ketika ada perintah satu-shot sederhana yang sangat baik untuk melakukan ini?
EEAA
Tentu saja tidak akan mendapatkan apa pun yang hidup dalam repositori terpusat. Dan itu pasti informasi yang ingin Anda lihat.
Magellan
Sangat baik sangat membantu, akan lebih baik untuk menyebutkan bahwa mereka adalah perintah yang terpisah.
Mian Asbat Ahmad
5

Jika Anda tidak peduli tentang pengguna jarak jauh seperti LDAP atau NIS, untuk membuat daftar pengguna dan grup terkait dengan cara sederhana:

cut -d: -f1 /etc/passwd | xargs groups

Keluaran;

root : root
myuser : root www-data fuse 
anotheruser : anotheruser   cdrom floppy audio dip video plugdev scanner bluetooth netdev
Fredrick Gauss
sumber
1
Ini memiliki masalah yang sama dengan jawaban Chang karena mengabaikan pengguna / grup yang berasal dari basis data seperti LDAP, NIS, dll.
MadHatter
Ini sangat rapi menghasilkan informasi dalam format yang sangat jelas, jadi masih bisa menjadi langkah pertama yang berguna. Ini membantu menyatukan ingatan saya mengenai sintaks dari / etc / group dan / etc / passwd!
Chris Woods
3

Daftar semua pengguna

cut -d':' -f 1 /etc/passwd

Atau

awk -F ':' '{print $1}' /etc/passwd

Sementara cat / etc / passwd menampilkan semua pengguna (dan banyak hal lainnya), cut -d ':' -f 1 adalah cara sederhana untuk membagi setiap baris dengan ':' sebagai pembatas dan mengekstrak hanya bidang pertama (pengguna ). Sama seperti versi awk.

Daftar semua grup

cut -d':' -f 1 /etc/group

Atau

awk -F ':' '{print $1}' /etc/group

Coba tebak, sangat mirip dengan daftar pengguna. Cukup parsing / etc / group saja.

Cara lain yang menarik, mungkin lebih dekat dengan apa yang diinginkan OP, adalah compgen . Tidak yakin tentang masalah kompatibilitas.

compgen -u
compgen -g
Marcos Valle
sumber
2
Hai Elliot Baily, selamat datang di Server Fault! Harap perhatikan bahwa pertanyaan ini berusia di atas 5 tahun, dan sudah memiliki jawaban yang benar dan diterima. Perhatikan juga bahwa solusi Anda hanya berfungsi jika pengguna disimpan di / etc / passwd; jawaban yang diterima juga berfungsi untuk basis data pengguna lain (seperti NIS atau LDAP). Jika Anda ingin menjawab pertanyaan lama (yang benar-benar baik-baik saja!) Anda mungkin ingin melihat daftar pertanyaan yang belum terjawab - banyak pertanyaan mencari cinta!
marcelm
-1

untuk debian

cat /etc/passwd # show all users
cat /etc/group # show all groups
cat /etc/passwd | grep group # show all users with specified group
Chang
sumber
2
Berbeda dengan yang sudah diterima, ini tidak mencantumkan pengguna / grup yang berasal dari basis data pengguna jarak jauh seperti LDAP, NIS dll ....
HBruijn
-2

Seperti ini:

sudo cat /etc/gshadow |grep group
sudo cat /etc/gshadow |grep username
Rui Monteiro
sumber
1
Tidak. /etc/gshadowTidak mengandung anggota grup ( /etc/grouptidak) dan jawaban yang diterima dari 4,5 tahun yang lalu jauh lebih umum, karena juga menangani grup jarak jauh.
Sven
-2

Gunakan perintah ini untuk mendapatkan semua grup dan pengguna di grup tertentu.

grep '
> ' /etc/group
Ayaz Hussain
sumber