উত্তর:
তুমি ব্যবহার করতে পার:
dscacheutil -q group -a name admin
বা:
dscacheutil -q group -a name staff
প্রভৃতি
dscacheutil -q group -a name admin
কেবল আমাকে 1 টি ফলাফল দিয়েছে, যেখানে স্বীকৃত উত্তরের শেল স্ক্রিপ্ট আমাকে 2 টি ফলাফল দিয়েছে।
ওএস এক্স-তে একটি গোষ্ঠীর সমস্ত সদস্যকে তালিকাভুক্ত এমন কোনও মানক কমান্ড নেই, সুতরাং এখানে একটি শেল ফাংশন রয়েছে যা এটি করে:
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
পরিপূরক তথ্য:
গ্রুপের সদস্য হওয়ার পাঁচটি উপায় হ'ল:
এগুলি যেমন কমান্ডগুলির সাহায্যে অন্বেষণ করা যায় 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)
দ্রষ্টব্য: এটি আমার প্রাথমিক উত্তর ছিল, আমি বুঝতে পারার আগেই এই উত্তরটি এখনও একটি অসম্পূর্ণ ফলাফল দেয় । (উদাহরণস্বরূপ, এটি প্রত্যেক গ্রুপের সদস্যদের সন্ধান করে না !) সুতরাং আমি আরও ভাল উত্তর লিখলাম , যার মধ্যে একটি স্ক্রিপ্ট রয়েছে যা ওএস এক্সের একটি গোষ্ঠীর সমস্ত সদস্যকে তালিকাবদ্ধ করে ।
mygroup এর GroupMembership সম্পত্তি সঙ্গে ছাপা যাবে dscl ভালো:
dscl . -read /Groups/mygroup GroupMembership
তবে এটি গ্রুপের সমস্ত সদস্যকে (বা এমনকি কোনও) আউটপুট দেওয়ার গ্যারান্টিযুক্ত নয়। যা অনুপস্থিত তা হ'ল কেবলমাত্র তাদের প্রাথমিক গ্রুপ আইডি হিসাবে গ্রাহকের সদস্য হওয়া ব্যবহারকারীরা ।
ওএস এক্স-এর এর একটি সাধারণ উদাহরণ হ'ল নিয়মিত লগইন অ্যাকাউন্টগুলি, যার স্টাফ (গ্রুপ ২০) তাদের প্রাথমিক গোষ্ঠী হিসাবে রয়েছে, তবে স্টাফ গ্রুপের গ্রুপ মেম্বারশিপ সম্পত্তিতে তালিকাভুক্ত নয় ।
সেই ব্যবহারকারীরা স্টাফ গ্রুপের জন্য এই জাতীয় উদাহরণ (জিড 20) এর মতো সংখ্যক প্রাথমিক গ্রুপ আইডি (গিড) সন্ধান করে খুঁজে পেতে পারেন :
dscl . -list /Users PrimaryGroupID | grep " 20$"
এবং সাংখ্যিক gid (PrimaryGroupID) এর mygroup দ্বারা পাওয়া যায়:
dscl . -read /Groups/mygroup PrimaryGroupID
ব্যবহারকারী যে সমস্ত গোষ্ঠী রয়েছে সেগুলি পেতে , আপনি নিম্নলিখিতগুলি ব্যবহার করতে পারেন:
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
dscl . -read /Groups/[groupname] | grep GroupMembership
সচেতন থাকুন: উপরের কমান্ডটি সর্বদা সমস্ত গ্রুপ সদস্যের একটি সম্পূর্ণ তালিকা প্রদর্শন করে না। যেমন গ্রুপ "স্টাফ" এর জন্য আপনি কেবলমাত্র গোষ্ঠী সদস্য হিসাবে "রুট" পাবেন যা অসম্পূর্ণ। এটি পরীক্ষা করতে ডিফল্ট ব্যবহারকারী হিসাবে নিম্নলিখিত কমান্ডগুলির মধ্যে একটি ব্যবহার করুন ("মূল" নয়): id -Gn
ওআরgroups
ফলস্বরূপ আপনি সমস্ত গ্রুপ দেখতে পাবেন যে আপনার ডিফল্ট লগড ব্যবহারকারীর সদস্য। তাদের মধ্যে একটি "কর্মী" হওয়া উচিত। সুতরাং, "রুট" ছাড়াও গ্রুপ "স্টাফ" এর আরও সদস্য রয়েছে, যা কমান্ড দ্বারা তালিকাভুক্ত নয় dscl . -read /Groups/[groupname] | grep GroupMembership
। কমান্ডটি একই রকম হয় dscacheutil -q group -a name staff
যা আপনাকে পরামর্শ দেয় যে কেবল "রুট" গ্রুপ "স্টাফ" এর সদস্য, যা স্পষ্টতই অসম্পূর্ণ।
ওএসএক্সে টার্মিনালের একটি গ্রুপের সত্যই সমস্ত সদস্যের একমাত্র নির্ভরযোগ্য পদ্ধতি ইতিমধ্যে এখানে অর্ন স্টেনস্ট্রম সরবরাহ করেছেন ö এটি তার শেল ফাংশন রেফারেন্স ব্যবহার করছে। তার শেল স্ক্রিপ্ট। দুটোই দুর্দান্ত কাজ!
হুকুম
@ ডুপারউসার এর উত্তরের অনুরূপ, নিম্নলিখিতগুলি কেবলমাত্র গ্রুপের ব্যবহারকারীদের admin
মধ্যে ফাঁকা স্থান সহ মুদ্রণ করবে :
dscacheutil -q group -a name admin | grep -e '^users:' | sed 's/users: //'
আউটপুট
উপরের কমান্ডটি চালনা করা এরকম কিছু তৈরি করবে:
root your_username someone_else
ভাঙ্গন
dscacheutil
কমান্ড সিস্টেমের নির্দেশিকা পরিষেবা ক্যাশে বিভিন্ন বিভাগ সম্পর্কে তথ্য অনুসন্ধান করতে ব্যবহৃত হয়। -q
বিকল্পটি বিভাগ আপনি জিজ্ঞাসা করতে চান উল্লেখ করতে দেয়। উপলভ্য বিভাগগুলি হ'ল গ্রুপ, হোস্ট, মাউন্ট, প্রোটোকল, আরপিসি, পরিষেবা এবং ব্যবহারকারী। -a
বিকল্পের সাথে একটি মূল মান জুটি নির্দিষ্ট করে আমরা সেই বিভাগটি আরও জিজ্ঞাসা করি । এই ক্ষেত্রে, আমরা name
মানটির সমান চাবিযুক্ত গোষ্ঠীটি তালিকাভুক্ত করতে চাই admin
। dscacheutil
কমান্ড উপরে ভালো আউটপুট উত্পাদন করে:
name: admin
password: *
gid: 80
users: root yourusername
এরপরে আমরা এই পাঠ্যটি পাইপ করি grep
এবং users:
শুরুতে স্ট্রিং যুক্ত লাইনটি বের করি । -e
বিকল্প, grep চিনতে তোলে রেগুলার এক্সপ্রেশনের । ^
চরিত্র নির্দিষ্ট করে আমরা চাই users:
লাইন শুরুতে যাবে।
এটি আমাদের দেয়
users: root yourusername
অবশেষে, আমরা এটিকে উপদ্রব মধ্যে পাস এবং users:
খালি স্ট্রিং সঙ্গে টেক্সট প্রতিস্থাপন । ইন কিন্তু , প্রথম চিঠি s
প্রতিস্থাপন মানে। প্রথম জোড় স্ল্যাশ ( /users: /
) এর মধ্যে পাঠ্যটি হ'ল আমরা প্রতিস্থাপন করতে চাই এবং পরবর্তী জোড় স্ল্যাশ ( //
) যা আমরা প্রতিস্থাপন করতে চাই (এই ক্ষেত্রে কিছুই নয়)।
এখানে এই সমস্যা যা হয়েছিল একটি বাস্তবায়ন উদ্ভূত একটি একটি বাস্তবায়ন থেকে সংশ্লিষ্ট আলোচনা । রুটিনটি কিছুটা জেনেরিক, কোনও নির্দিষ্ট প্ল্যাটফর্ম / আর্কিটেকচারের জন্য ডিরেক্টরি পরিষেবা লুপ লুকের হুক সহ, তাই এটি ভিন্ন ভিন্ন নেটওয়ার্কে কোনও পরিবর্তন ছাড়াই ব্যবহার করা যায়। আমরা এই ইউটিলিটির নামের একটি প্রতীকী লিঙ্ক ইনস্টল করেছি 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";
}
}