質問: グループの全メンバーを一覧表示する(mac os x) 私はグーグルを試したがどこにも行かなかった。 os xでコマンドラインからmygroupというグループのすべてのメンバーを一覧表示する方法を教えてください。$ dscl . list /groupsは私にすべてのグループを取得します...しかし、どのように私は各グループのメンバーを見ることができますか?
回答: os xにはグループのすべてのメンバーを一覧表示する標準的なコマンドはありません。そのため、これを行うshell関数があります。members () { dscl . -list /users | while read user; do printf "$user "; dsmemberutil checkmembership -u "$user" -g "$*"; done | grep "is a member" | cut -d " " -f 1; }; 上記のコマンドラインをターミナルにコピーし、members mygroupと入力します(mygroupは既存のグループの名前です)。興味のある人のためのいくつかの説明:ユーザーがos xのグループのメンバーになることができるという(=知っている)fiveの方法があります。コマンドdscl . -read /groups/mygroup groupmembershipがすべてを出力することは保証されていません。メンバーシップは、ユーザーのプライマリグループid、ユーザーによるメンバーシップからも得られるため、mygroupのメンバーでさえも、 _ uuid _ 、あるグループから別のグループへのメンバーシップの継承、およびグループ全員などのシステムによって計算されるメンバーシップ。そのため、それらすべてを追跡しようとするよりも、システム上のすべてのユーザーのメンバーシップを( dsmemberutil を使用して)確認することをお勧めします。これが、shell関数と以下のスクリプトによる処理です。このメンバスクリプトは、shell関数と同等ですが、無効な入力をより適切に処理します。#!/bin/bash # members -- list all members of a group # # synopsis # members groupname # # http://superuser.com/questions/279891/list-all-members-of-a-group-mac-os-x # by arne # expected to work on mac os 10.5 and newer, tested on 10.6 and 10.7. # it could be rewritten to work on 10.4 by using "dseditgroup -o checkmember" # instead of "dsmemberutil checkmembership". # by using dseditgroup, the script could also be extended to handle # other directory service nodes than the default local node. # the_group="$1" # input check and usage if [[ $# != 1 || $1 == -* || $1 =~ [[:space:]] ]]; then echo "usage: ${0##*/} groupname" >&2 echo "lists all members of the group." >&2 exit 64 elif (dsmemberutil checkmembership -u root -g "$the_group" 2>&1 \ | grep "group .* cannot be found") >&2; then exit 1 fi # check every user exec dscl . -list /users \ | while read each_username do printf "$each_username " dsmemberutil checkmembership -u "$each_username" -g "$the_group" done \ | grep "is a member" | cut -d " " -f 1 # eof 補足情報:グループメンバーになるための5つの方法は次のとおりです。 ユーザーのprimarygroupid グループのgroupmembershipにリストされています _ uuid _ グループのgroupmembersにリストされています グループxのnestedgroupsにリストされているグループyのメンバーであることによって、グループxのメンバーシップを継承した システムによって計算されたメンバーシップ これらはdscl . -read /groups/somegroupのようなコマンドで調べることができます4の例:print operatorグループ__lpoperator_のメンバーシップは、print administratorグループ__lpadmin_のメンバーによって継承され、そのメンバーシップgroupはadminグループのメンバーによって継承されます。5の例$ dscl . -read /groups/netaccounts comment comment: group membership calculated by system accounts from a remote directory server $ 関連項目[ - 。] id(1) 、 dscl(1) 、 dsmemberutil(1) 、 dseditgroup(8) 、 directoryserviceattributes(7) 、 uuid(3)