একটি গোষ্ঠীর সমস্ত সদস্যের তালিকা করুন (ম্যাক ওএস এক্স)


56

আমি গুগলিং চেষ্টা করেছি কিন্তু কোথাও পাচ্ছি না। ওএস এক্স -mygroup এর কমান্ড-লাইন থেকে কল করা গোষ্ঠীর সমস্ত সদস্যকে আমি কীভাবে তালিকাভুক্ত করতে পারি ?

$ dscl . list /groupsআমাকে সব গ্রুপে পাবেন ... কিন্তু আমি কিভাবে প্রতিটি দলের সদস্যরা দেখতে পারেন?

উত্তর:


40

তুমি ব্যবহার করতে পার:

dscacheutil -q group -a name admin

বা:

dscacheutil -q group -a name staff

প্রভৃতি


এটি আমার প্রিয় পদ্ধতি। সহজ পেসেসি এবং নির্ভুল। ধন্যবাদ!
ট্রাইট্রিআগেইন

এটি একটি দুর্দান্ত উত্তর যেহেতু 90% ব্যবহারের ক্ষেত্রে এটি সমাধান করা যেতে পারে এবং উত্তর হিসাবে পোস্ট করা আরও বিস্তৃত স্ক্রিপ্টগুলির সাথে নয়।
জ্যাকগল্ড

আপনার শেল স্টার্টআপ ফাইলে এটি কেবল একটি নাম হিসাবে যুক্ত করুন এবং আপনি এটিকে এক-শব্দ কমান্ডের পাশাপাশি গ্রুপের নামও তৈরি করতে পারেন।
নিল মনরো

আমি যখন "dscacheutil -q গ্রুপ" চেষ্টা করেছি তখন আমি "প্রশাসক" গোষ্ঠীর জন্য 2 অনুচ্ছেদ পেয়েছি। দুজনের একই নাম, জিড, তবে বিভিন্ন ব্যবহারকারীর তালিকা। কোন ধারণা? ধন্যবাদ!
গোল্ডেন থাম্ব

অগত্যা সম্পূর্ণ। dscacheutil -q group -a name adminকেবল আমাকে 1 টি ফলাফল দিয়েছে, যেখানে স্বীকৃত উত্তরের শেল স্ক্রিপ্ট আমাকে 2 টি ফলাফল দিয়েছে।
উইসবাকী

64

ওএস এক্স-তে একটি গোষ্ঠীর সমস্ত সদস্যকে তালিকাভুক্ত এমন কোনও মানক কমান্ড নেই, সুতরাং এখানে একটি শেল ফাংশন রয়েছে যা এটি করে:

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


যারা আগ্রহী তাদের জন্য কিছু ব্যাখ্যা:

আছে পাঁচটি বিভিন্ন উপায়ে (যে আমি জানি) একটি ব্যবহারকারী OS X এর একটি দলের সদস্য কমান্ড হতে পারে আউটপুট এর, এমনকি কোনো সব নিশ্চিত করা হয় না, অথবা mygroup এর সদস্য, কারণ সদস্য পদ ব্যবহারকারীদের থেকে আসে ' প্রাথমিক গোষ্ঠী আইডি , ব্যবহারকারীর ইউআইডি দ্বারা সদস্যতা , এক গোষ্ঠী থেকে অন্য গ্রুপের সদস্যতার উত্তরাধিকার, এবং সদস্যপদ যা সিস্টেম দ্বারা গণনা করা হয়, যেমন গ্রুপের প্রত্যেকেdscl . -read /Groups/mygroup GroupMembership

সুতরাং এই সমস্তগুলির উপর নজর রাখার চেষ্টা করার চেয়ে এটি কেবল সিস্টেমের প্রতিটি ব্যবহারকারীর সদস্যতা পরীক্ষা করার জন্য একটি ভাল ধারণা বলে মনে হচ্ছে ( ডিএসএমবারুটিল ব্যবহার করে ), এবং এটি শেল ফাংশন এবং নীচের স্ক্রিপ্টটি করে।


এই সদস্যদের স্ক্রিপ্টটি শেল ফাংশনের সমতুল্য, তবে অবৈধ ইনপুটটির সুন্দর পরিচালনা রয়েছে:

#!/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

পরিপূরক তথ্য:

গ্রুপের সদস্য হওয়ার পাঁচটি উপায় হ'ল:

  1. ব্যবহারকারীর প্রাথমিক গোষ্ঠী
  2. গ্রুপের গ্রুপ মেম্বারশিপে তালিকাভুক্ত
  3. UUID গ্রুপের তালিকাভুক্ত GroupMembers
  4. গ্রুপ এক্স এর নেস্টেড গ্রুপগুলিতে তালিকাভুক্ত গ্রুপ ওয়াইয়ের সদস্য হয়ে এক্স গ্রুপের উত্তরাধিকারী সদস্যপদ
  5. সিস্টেম দ্বারা গণনা করা সদস্যতা

এগুলি যেমন কমান্ডগুলির সাহায্যে অন্বেষণ করা যায় dscl . -read /Groups/somegroup

উদাহরণ 4 : মুদ্রণ অপারেটরের গ্রুপ __lpoperator_ এর সদস্যপদ প্রিন্ট প্রশাসক গ্রুপ __lpadmin_ সদস্য উত্তরাধিকারসূত্রে হয়, এবং যে দলের সদস্য সদস্য উত্তরাধিকারসূত্রে হয় অ্যাডমিন গ্রুপ।

5 এর উদাহরণ :

$ dscl . -read /Groups/netaccounts Comment
Comment:
 Group membership calculated by system
 Accounts from a remote directory server
$ 

আরও দেখুন
    আইডি (1) , dscl (1) , dsmemberutil (1) , dseditgroup (8) , DirectoryServiceAttributes (7) , UUID (3)


7
আমি যখন লোকজনকে বলি যে ওএস এক্স বেশিরভাগ পৃষ্ঠের পৃষ্ঠায় সুন্দর তবে এটি কভারগুলির নীচে লুকিয়ে থাকা কিছু বাজে জিনিস পেয়েছে।
স্টিফান শ্মিট

+1 : এটি দৃ works়ভাবে কাজ করে। Merci।
স্লিপ ডি থম্পসন

অ্যাডমিন গ্রুপ থেকে কীভাবে নিজেকে সরিয়ে ফেলা যায় তা নির্ধারণের জন্য আমার এই তথ্যটি দরকার। ব্যবহারকারীর নাম দিয়ে মুছে ফেলা কল্পনা করা হয় না, আপনাকে ইউআইডিও
জেনস

10

দ্রষ্টব্য: এটি আমার প্রাথমিক উত্তর ছিল, আমি বুঝতে পারার আগেই এই উত্তরটি এখনও একটি অসম্পূর্ণ ফলাফল দেয় । (উদাহরণস্বরূপ, এটি প্রত্যেক গ্রুপের সদস্যদের সন্ধান করে না !) সুতরাং আমি আরও ভাল উত্তর লিখলাম , যার মধ্যে একটি স্ক্রিপ্ট রয়েছে যা ওএস এক্সের একটি গোষ্ঠীর সমস্ত সদস্যকে তালিকাবদ্ধ করে


mygroup এর GroupMembership সম্পত্তি সঙ্গে ছাপা যাবে dscl ভালো:

dscl . -read /Groups/mygroup GroupMembership

তবে এটি গ্রুপের সমস্ত সদস্যকে (বা এমনকি কোনও) আউটপুট দেওয়ার গ্যারান্টিযুক্ত নয়। যা অনুপস্থিত তা হ'ল কেবলমাত্র তাদের প্রাথমিক গ্রুপ আইডি হিসাবে গ্রাহকের সদস্য হওয়া ব্যবহারকারীরা ।

ওএস এক্স-এর এর একটি সাধারণ উদাহরণ হ'ল নিয়মিত লগইন অ্যাকাউন্টগুলি, যার স্টাফ (গ্রুপ ২০) তাদের প্রাথমিক গোষ্ঠী হিসাবে রয়েছে, তবে স্টাফ গ্রুপের গ্রুপ মেম্বারশিপ সম্পত্তিতে তালিকাভুক্ত নয় ।

সেই ব্যবহারকারীরা স্টাফ গ্রুপের জন্য এই জাতীয় উদাহরণ (জিড 20) এর মতো সংখ্যক প্রাথমিক গ্রুপ আইডি (গিড) সন্ধান করে খুঁজে পেতে পারেন :

dscl . -list /Users PrimaryGroupID | grep " 20$"

এবং সাংখ্যিক gid (PrimaryGroupID) এর mygroup দ্বারা পাওয়া যায়:

dscl . -read /Groups/mygroup PrimaryGroupID

7

ব্যবহারকারী যে সমস্ত গোষ্ঠী রয়েছে সেগুলি পেতে , আপনি নিম্নলিখিতগুলি ব্যবহার করতে পারেন:

id -nG <username>

উদাহরণ আউটপুট:

staff com.apple.sharepoint.group.1 everyone localaccounts _appserverusr admin _appserveradm _lpadmin _appstore _lpoperator _developer com.apple.access_ftp com.apple.access_screensharing com.apple.access_ssh

উপরের কমান্ডটি ব্যবহার করে, একটি গোষ্ঠীভুক্ত সমস্ত ব্যবহারকারীকে পাওয়া সম্ভব :

ওএসএক্স :

group=staff;
for i in $(dscl . list /users);
do [[ $(id -nG $i | grep $group) ]] && echo $i;
done

ইউনিক্স :

group=sudo;
# This only outputs lines that match a username (from the start of line to a colon must not be a hash indicating a comment) 
for i in $(grep -oE "^[^#:]+" /etc/passwd);
do [[ $(id -nG $i | grep $group) ]] && echo $i;
done

কোনও গ্রুপের তালিকাভুক্ত হওয়ার জন্য এটি একটি দুর্দান্ত পরামর্শ। তবে ওপি যা জিজ্ঞাসা করছে তার বিপরীত, কোন গ্রুপের অন্তর্গত ব্যবহারকারীদের তালিকা।
উইসবাকী

@ উইসবাকী এটি হ'ল আমি পরে যা ছিলাম। আমি এখানে "একজন ব্যবহারকারীর সমস্ত গ্রুপের তালিকা" খুঁজছিলাম। আমি এটিকে স্পষ্ট করতে একটি সম্পাদনার পরামর্শ দেব
ইসহাক

4

dscl . -read /Groups/[groupname] | grep GroupMembership

সচেতন থাকুন: উপরের কমান্ডটি সর্বদা সমস্ত গ্রুপ সদস্যের একটি সম্পূর্ণ তালিকা প্রদর্শন করে না। যেমন গ্রুপ "স্টাফ" এর জন্য আপনি কেবলমাত্র গোষ্ঠী সদস্য হিসাবে "রুট" পাবেন যা অসম্পূর্ণ। এটি পরীক্ষা করতে ডিফল্ট ব্যবহারকারী হিসাবে নিম্নলিখিত কমান্ডগুলির মধ্যে একটি ব্যবহার করুন ("মূল" নয়): id -Gnওআরgroups

ফলস্বরূপ আপনি সমস্ত গ্রুপ দেখতে পাবেন যে আপনার ডিফল্ট লগড ব্যবহারকারীর সদস্য। তাদের মধ্যে একটি "কর্মী" হওয়া উচিত। সুতরাং, "রুট" ছাড়াও গ্রুপ "স্টাফ" এর আরও সদস্য রয়েছে, যা কমান্ড দ্বারা তালিকাভুক্ত নয় dscl . -read /Groups/[groupname] | grep GroupMembership। কমান্ডটি একই রকম হয় dscacheutil -q group -a name staffযা আপনাকে পরামর্শ দেয় যে কেবল "রুট" গ্রুপ "স্টাফ" এর সদস্য, যা স্পষ্টতই অসম্পূর্ণ।

ওএসএক্সে টার্মিনালের একটি গ্রুপের সত্যই সমস্ত সদস্যের একমাত্র নির্ভরযোগ্য পদ্ধতি ইতিমধ্যে এখানে অর্ন স্টেনস্ট্রম সরবরাহ করেছেন ö এটি তার শেল ফাংশন রেফারেন্স ব্যবহার করছে। তার শেল স্ক্রিপ্ট। দুটোই দুর্দান্ত কাজ!


1

হুকুম

@ ডুপারউসার এর উত্তরের অনুরূপ, নিম্নলিখিতগুলি কেবলমাত্র গ্রুপের ব্যবহারকারীদের adminমধ্যে ফাঁকা স্থান সহ মুদ্রণ করবে :

dscacheutil -q group -a name admin | grep -e '^users:' | sed 's/users: //'

আউটপুট

উপরের কমান্ডটি চালনা করা এরকম কিছু তৈরি করবে:

root your_username someone_else

ভাঙ্গন

dscacheutilকমান্ড সিস্টেমের নির্দেশিকা পরিষেবা ক্যাশে বিভিন্ন বিভাগ সম্পর্কে তথ্য অনুসন্ধান করতে ব্যবহৃত হয়। -qবিকল্পটি বিভাগ আপনি জিজ্ঞাসা করতে চান উল্লেখ করতে দেয়। উপলভ্য বিভাগগুলি হ'ল গ্রুপ, হোস্ট, মাউন্ট, প্রোটোকল, আরপিসি, পরিষেবা এবং ব্যবহারকারী। -aবিকল্পের সাথে একটি মূল মান জুটি নির্দিষ্ট করে আমরা সেই বিভাগটি আরও জিজ্ঞাসা করি । এই ক্ষেত্রে, আমরা nameমানটির সমান চাবিযুক্ত গোষ্ঠীটি তালিকাভুক্ত করতে চাই admindscacheutilকমান্ড উপরে ভালো আউটপুট উত্পাদন করে:

name: admin
password: *
gid: 80
users: root yourusername

এরপরে আমরা এই পাঠ্যটি পাইপ করি grepএবং users:শুরুতে স্ট্রিং যুক্ত লাইনটি বের করি । -eবিকল্প, grep চিনতে তোলে রেগুলার এক্সপ্রেশনের^চরিত্র নির্দিষ্ট করে আমরা চাই users:লাইন শুরুতে যাবে।

এটি আমাদের দেয়

users: root yourusername

অবশেষে, আমরা এটিকে উপদ্রব মধ্যে পাস এবং users:খালি স্ট্রিং সঙ্গে টেক্সট প্রতিস্থাপন । ইন কিন্তু , প্রথম চিঠি sপ্রতিস্থাপন মানে। প্রথম জোড় স্ল্যাশ ( /users: /) এর মধ্যে পাঠ্যটি হ'ল আমরা প্রতিস্থাপন করতে চাই এবং পরবর্তী জোড় স্ল্যাশ ( //) যা আমরা প্রতিস্থাপন করতে চাই (এই ক্ষেত্রে কিছুই নয়)।


0

এখানে এই সমস্যা যা হয়েছিল একটি বাস্তবায়ন উদ্ভূত একটি একটি বাস্তবায়ন থেকে সংশ্লিষ্ট আলোচনারুটিনটি কিছুটা জেনেরিক, কোনও নির্দিষ্ট প্ল্যাটফর্ম / আর্কিটেকচারের জন্য ডিরেক্টরি পরিষেবা লুপ লুকের হুক সহ, তাই এটি ভিন্ন ভিন্ন নেটওয়ার্কে কোনও পরিবর্তন ছাড়াই ব্যবহার করা যায়। আমরা এই ইউটিলিটির নামের একটি প্রতীকী লিঙ্ক ইনস্টল করেছি zed। এই প্রয়োগের জন্য অন্যান্য উত্সের স্ক্রিপ্টের অ্যাট্রিবিউশন বিভাগে উল্লেখ করা হয়েছে। এই সরঞ্জামটি কমপক্ষে ওএসএক্স, এইচপি-ইউএক্স, লিনাক্স এবং সানোএসে চালিত হওয়ার উদ্দেশ্যে করা হয়েছে , তবে তা হয়নিসুনোস এবং এইচপি-ইউএক্স পরীক্ষিত। স্ক্রিপ্টটি উবুন্টু লিনাক্স 12.04 এবং মাভেরিক্স ওএসএক্স 10.9.1 এ যতদূর সম্ভব পরীক্ষা করা হয়েছিল। এই স্ক্রিপ্টটির আউটপুট এই সমস্যার জন্য প্রথম শেল স্ক্রিপ্ট প্রয়োগের সাথে আউটপুট মেলে এবং তাই এটি সঠিক বলে বিবেচিত হয়।

#!/usr/bin/perl
#
# Lists members of all groups, or optionally just the group
# specified on the command line
#
# Date:         12/30/2013
# Author:       William H. McCloskey, Jr.
# Changes:      Added logic to detect host type & tailor subset of getent (OSX)
# Attribution:
#   The logic for this script was directly lifted from Zed Pobre's work.
#     See below for Copyright notice.
#   The idea to use dscl to emulate a subset of the now defunct getent on OSX
#     came from
#       http://zzamboni.org/\
#         brt/2008/01/21/how-to-emulate-unix-getent-with-macosxs-dscl/
#     with an example implementation lifted from
#       https://github.com/petere/getent-osx/blob/master/getent
#
# Copyright © 2010-2013 by Zed Pobre (zed@debian.org or zed@resonant.org)
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#

use strict; use warnings;

$ENV{"PATH"} = "/usr/bin:/bin";

# Only run on supported $os:
my $os;
($os)=(`uname -a` =~ /^([\w-]+)/);
unless ($os =~ /(HU-UX|SunOS|Linux|Darwin)/)
    {die "\$getent or equiv. does not exist:  Cannot run on $os\n";}

my $wantedgroup = shift;

my %groupmembers;

my @users;

# Acquire the list of @users based on what is available on this OS:
if ($os =~ /(SunOS|Linux|HP-UX)/) {
    #HP-UX & Solaris assumed to be like Linux; they have not been tested.
    my $usertext = `getent passwd`;
    @users = $usertext =~ /^([a-zA-Z0-9_-]+):/gm;
};
if ($os =~ /Darwin/) {
    @users = `dscl . -ls /Users`;
    chop @users;
}

# Now just do what Zed did - thanks Zed.
foreach my $userid (@users)
{
    my $usergrouptext = `id -Gn $userid`;
    my @grouplist = split(' ',$usergrouptext);

    foreach my $group (@grouplist)
    {
        $groupmembers{$group}->{$userid} = 1;
    }
}

if($wantedgroup)
{
    print_group_members($wantedgroup);
}
else
{
    foreach my $group (sort keys %groupmembers)
    {
        print "Group ",$group," has the following members:\n";
        print_group_members($group);
        print "\n";
    }
}

sub print_group_members
{
    my ($group) = @_;
    return unless $group;

    foreach my $member (sort keys %{$groupmembers{$group}})
    {
        print $member,"\n";
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.