Saya sudah mencoba Googling tetapi tidak berhasil. Bagaimana saya bisa mendaftar semua anggota grup yang dipanggil mygroup
dari baris perintah di OS X?
$ dscl . list /groups
akan mendapatkan saya semua grup ... tetapi bagaimana saya bisa melihat anggota masing-masing grup?
macos
command-line
user-accounts
Meltemi
sumber
sumber
dscacheutil -q group -a name admin
hanya memberi saya 1 hasil, sedangkan skrip shell diterima Penerima memberi saya 2 hasil.Tidak ada perintah standar yang mencantumkan semua anggota grup di OS X, jadi inilah fungsi shell yang melakukan itu:
Salin baris perintah di atas ke Terminal, lalu ketik (di mana mygroup adalah nama grup yang ada).
members mygroup
Beberapa penjelasan untuk mereka yang tertarik:
Ada lima cara berbeda (yang saya tahu) bahwa pengguna dapat menjadi anggota grup di OS X. Perintah ini tidak dijamin untuk menampilkan semua, atau bahkan apa pun, dari anggota mygroup , karena keanggotaan juga berasal dari pengguna ' kelompok utama ID , keanggotaan oleh pengguna UUID , warisan dari keanggotaan dari satu kelompok ke kelompok lain, dan keanggotaan yang dihitung oleh sistem, seperti kelompok orang .
dscl . -read /Groups/mygroup GroupMembership
Jadi daripada mencoba melacak semua itu, sepertinya ide yang lebih baik untuk cukup memeriksa keanggotaan setiap pengguna pada sistem (menggunakan dsmemberutil ), dan itulah yang fungsi shell dan skrip di bawah ini lakukan.
Ini anggota naskah setara dengan fungsi shell, tetapi memiliki lebih bagus menangani input tidak valid:
Info tambahan:
Lima cara menjadi anggota kelompok adalah:
Ini dapat dieksplorasi dengan perintah seperti
dscl . -read /Groups/somegroup
Contoh 4 : Keanggotaan grup Operator Cetak __lpoperator_ diwarisi oleh anggota grup Administrator Cetak __lpadmin_, dan keanggotaan grup tersebut diwarisi oleh anggota grup admin .
Contoh 5 :
LIHAT JUGA
id (1) , dscl (1) , dsmemberutil (1) , dseditgroup (8) , DirectoryServiceAttributes (7) , uuid (3)
sumber
Catatan: Ini adalah jawaban awal saya, ditulis sebelum saya menyadari jawaban ini masih memberikan hasil yang tidak lengkap . (Sebagai contoh, ia menemukan ada anggota semua orang kelompok!) Jadi saya menulis jawaban yang lebih baik, yang mencakup naskah yang daftar semua anggota sebuah kelompok di OS X .
Properti GroupMembership mygroup dapat dicetak dengan dscl seperti ini:
Tetapi ini tidak dijamin untuk menghasilkan semua (atau bahkan apa pun) anggota grup. Yang hilang adalah pengguna yang menjadi anggota grup hanya dengan menjadikannya sebagai ID grup utama mereka .
Contoh umum dari ini di OS X adalah akun login reguler, yang memiliki staf (grup 20) sebagai grup utama mereka, tetapi tidak terdaftar di properti GroupMembership grup staf .
Pengguna tersebut dapat ditemukan dengan mencari ID grup primer numerik (gid) seperti contoh ini untuk grup staf (gid 20):
dan numeric gid (PrimaryGroupID) dari mygroup ditemukan oleh:
sumber
Untuk mendapatkan semua grup tempat pengguna berada , Anda dapat menggunakan yang berikut ini:
Contoh Output:
Dengan menggunakan perintah di atas, dimungkinkan untuk mendapatkan semua pengguna yang dimiliki grup :
OSX :
Unix :
sumber
HATI-HATI: Perintah di atas tidak selalu menampilkan daftar lengkap SEMUA anggota grup. Misalnya untuk "staf" grup Anda hanya mendapatkan "root" sebagai anggota grup yang tidak lengkap. Untuk memeriksanya gunakan salah satu dari perintah berikut sebagai pengguna default (BUKAN "root"):
id -Gn
ATAUgroups
Akibatnya, Anda akan melihat semua grup yang menjadi anggota Anda. Salah satunya harus "staf". Jadi, selain "root" ada lebih banyak anggota "staf" grup, yang tidak terdaftar oleh perintah
dscl . -read /Groups/[groupname] | grep GroupMembership
. Hal yang sama berlaku untuk perintahdscacheutil -q group -a name staff
yang juga menyarankan Anda bahwa hanya "root" yang merupakan anggota dari "staf" grup, yang jelas tidak lengkap.Satu-satunya metode yang dapat diandalkan untuk benar-benar SEMUA anggota grup di terminal pada OSX sudah disediakan di sini oleh Arne Stenström. Ini menggunakan resp fungsi shell-nya. naskah cangkangnya. Keduanya bekerja dengan baik!
sumber
Perintah
Mirip dengan jawaban @ duperuser, yang berikut hanya akan mencetak pengguna grup
admin
dengan spasi di antaranya:Keluaran
Menjalankan perintah di atas akan menghasilkan sesuatu seperti ini:
Kerusakan
The
dscacheutil
Perintah ini digunakan untuk permintaan informasi tentang berbagai kategori sistem layanan direktori tembolok. The-q
pilihan memungkinkan Anda menentukan kategori yang Anda ingin query. Kategori yang tersedia adalah grup, host, mount, protokol, rpc, layanan, dan pengguna. Kami selanjutnya menanyakan kategori itu dengan menentukan pasangan nilai kunci dengan-a
opsi. Dalam hal ini, kami ingin membuat daftar grup yang memiliki kunciname
sama dengan nilaiadmin
. Thedscacheutil
perintah di atas menghasilkan output seperti ini:Selanjutnya kita pipa teks ini ke dalam
grep
dan memilih garis yang berisi stringusers:
di awal. The-e
merek pilihan grep mengenali ekspresi reguler . The^
menspesifikasikan karakter yang kita inginkanusers:
berada di awal baris.Ini memberi kita
Akhirnya, kami meneruskan ini ke sed dan mengganti teks
users:
dengan string kosong. Dalam sed , huruf pertamas
sarana untuk menggantikan. Teks antara pasangan garis miring pertama (/users: /
) adalah apa yang ingin kami ganti, dan pasangan garis miring berikutnya (//
) adalah apa yang ingin kami gantikan (dalam hal ini, tidak ada).sumber
Berikut ini adalah implementasi untuk masalah ini yang berasal dari implementasi dalam diskusi terkait . Rutin ini agak umum, dengan hook pencarian layanan direktori untuk platform / arsitektur tertentu, sehingga dapat digunakan tanpa modifikasi pada jaringan yang heterogen. Kami telah memasang tautan simbolis ke utilitas ini bernama
zed
. Asal lain untuk implementasi ini disebutkan di bagian atribusi dari skrip. Alat ini dimaksudkan untuk dijalankan pada setidaknya OSX, HP-UX, linux, dan SunOS, tetapi belumdiuji pada SunOS dan HP-UX. Script diuji sejauh mungkin di Ubuntu Linux 12.04 dan Mavericks OSX 10.9.1. Output dari skrip ini cocok dengan output untuk implementasi skrip shell pertama untuk masalah ini, dan karenanya dianggap benar.sumber