लिनक्स समूह में सभी उपयोगकर्ताओं को कैसे सूचीबद्ध किया जाए?


273

मैं लिनक्स में एक समूह के सभी सदस्यों (और संभवतः अन्य यूनियनों) को कैसे सूचीबद्ध करूं?


1
@ Silmari89, नहीं तो वह इसे प्रोग्रामेटिक रूप से करना चाहते हैं।
पॉल टॉम्बलिन

2
मैं यहां नया हूं, मुझे पता चला कि प्रश्न पोस्ट करने के बाद ही एसएफ मौजूद है। मैं मानता हूं कि यह एसएफ या एसओ का है।
user323094

5
हेह, ज़ाहिर है, अब इसका एक प्रोग्रामेटिक समाधान है, इसलिए इसे यहाँ भी उचित ठहराया जा सकता है।
जेड

जवाबों:


103

दुर्भाग्य से, ऐसा करने के लिए कोई अच्छा, पोर्टेबल तरीका नहीं है जो मुझे पता है। यदि आप पार्स / आदि / समूह का प्रयास करते हैं, जैसा कि अन्य सुझाव दे रहे हैं, तो आप उन उपयोगकर्ताओं को याद करेंगे जिनके पास उस समूह को उनके प्राथमिक समूह के रूप में रखा गया है और कोई भी जो उस समूह में UNIX फ्लैट फ़ाइलों (यानी LDAP, NIS) के अलावा एक तंत्र के माध्यम से जोड़ा गया है, pam-pgsql, आदि)।

अगर मुझे पूरी तरह से खुद ऐसा करना है, तो शायद मैं इसे उल्टा idकरूंगा: सिस्टम पर प्रत्येक उपयोगकर्ता के समूह को प्राप्त करने के लिए उपयोग करें (जो एनएसएस को दिखाई देने वाले सभी स्रोतों को खींच लेगा), और हैश बनाए रखने के लिए पर्ल या कुछ समान का उपयोग करें प्रत्येक समूह के लिए तालिका ने उस उपयोगकर्ता की सदस्यता को देखा।

संपादित करें: बेशक, यह आपको एक समान समस्या के साथ छोड़ देता है: सिस्टम पर प्रत्येक उपयोगकर्ता की सूची कैसे प्राप्त करें। चूंकि मेरा स्थान केवल फ्लैट फ़ाइलों और LDAP का उपयोग करता है, मैं सिर्फ दोनों स्थानों से एक सूची प्राप्त कर सकता हूं, लेकिन यह आपके पर्यावरण के लिए सच हो सकता है या नहीं।

संपादन 2: किसी ने मुझे याद दिलाया कि getent passwdसिस्टम पर सभी उपयोगकर्ताओं की सूची लौटाएगी, जिनमें LDAP /IS / etc शामिल हैं, लेकिन फिर getent group भी अभी भी उन उपयोगकर्ताओं को याद करेंगे जो केवल डिफ़ॉल्ट समूह प्रविष्टि के माध्यम से सदस्य हैं, जिससे मुझे प्रेरणा मिली। यह त्वरित हैक लिखें।


#!/usr/bin/perl -T
#
# Lists members of all groups, or optionally just the group
# specified on the command line
#
# 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";

my $wantedgroup = shift;

my %groupmembers;
my $usertext = `getent passwd`;

my @users = $usertext =~ /^([a-zA-Z0-9_-]+):/gm;

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";
    }
}

3
सभी उत्तर देने वालों का धन्यवाद। मैं इसे करने के लिए एक पोर्टेबल तरीके की तलाश कर रहा था। आपकी जानकारी है कि एक आसान और पोर्टेबल तरीका मददगार नहीं था। आपने उन परिस्थितियों पर भी सबसे अधिक विस्तार किया, जिनसे मुझे समस्या को और गहराई से समझने में मदद मिली, मैं इसकी सराहना करता हूं और मैंने आपके उत्तर को स्वीकृत के रूप में चुना।
user323094

2
क्या आपके लिए अपनी नींव लिनक्स फाउंडेशन को दान करना संभव होगा? यह 2012 है और एक समूह के सदस्यों को प्राप्त करने का कोई आसान तरीका नहीं है। यही वह चीज है जो मुझे लिनक्स के बारे में निराश करती है।
वाइनटेक

6
मैंने आपके लिए एक ISC जैसा लाइसेंस जोड़ा है, जो किसी भी समूह के बारे में संगत होना चाहिए। बेझिझक इसे कहीं भी प्रस्तुत करें आपको लगता है कि इसे स्वीकार कर लिया जाएगा।
जेड

PAM खाता जानकारी की आपूर्ति नहीं करता है। यह नाम सेवा स्विच (nsswitch) है जो ऐसा करता है। सभी 'डेटाबेस' (डेटा प्रदाता) गणन का समर्थन करेंगे तो getent passwdकाम नहीं कर सकते हैं (यदि उदाहरण के लिए आप sssd का उपयोग कर रहे हैं)।

PAM बनाम NSS के बारे में मान्य बिंदु - मैंने संदर्भ बदल दिया है। हालाँकि मैंने इसका उपयोग नहीं किया है, sssd एक उचित डेटा प्रदाता के बजाय पहली नज़र में एक nscd प्रतिस्थापन की तरह दिखता है, और यदि यह टूट जाता है तो getent passwdमैं इस बात पर विचार करूँगा कि sssd में बग है।
जेड

239
getent group <groupname>;

यह लिनक्स और सोलारिस दोनों में पोर्टेबल है, और यह स्थानीय समूह / पासवर्ड फ़ाइलों, एनआईएस और एलडीएपी कॉन्फ़िगरेशन के साथ काम करता है।


43
उन उपयोगकर्ताओं को नहीं दिखाता, जिनके पास समूह उनके डिफ़ॉल्ट समूह के रूप में है।
rlpowell

40

समूह के सदस्यों को सूचीबद्ध करने के लिए पायथन का उपयोग करें:

अजगर-सी "आयात जीआरपी; प्रिंट जीआरपी। प्रिंटग्रेन ('GROUP_NAME') [3]"

Https://docs.python.org/2/library/grp.html देखें


1
दुर्भाग्य से, डोमेन समूह के सदस्यों की रिपोर्ट नहीं करता है।
simlev

39
lid -g groupname | cut -f1 -d'(' 

7
यह सबसे अच्छा तरीका होगा, सिवाय इसके कि ढक्कन एक मानक डेबियन स्थापना में नहीं है। उबंटू में यह लिबास के वैकल्पिक पैकेज में है (यह एक ही नाम वाले आईडी-बर्तनों में नहीं है)। मुझे यह डेबियन में नहीं मिला :(
user323094

मेरे लिए साइंटिफिक लिनक्स पर काम किया
ब्लोंड करें

डेबियन माउज़ी पर, लिबास पैकेज पर भी ढक्कन लगा हुआ है
लूलीज़ जूल

2
@ जॉनमेकहे आरएचईएल को ऑस्टेरेलिनक्स कहा जाना चाहिए
गोआलाकैश

1
'-ग' मेरे लिए कोई विकल्प नहीं है। मेरे पास id-utils संस्करण 4.6 है जो Ubuntu 16.04 पर स्थापित किया गया है।
विल्सन बिग्स

25

निम्न आदेश संबंधित सभी उपयोगकर्ताओं को सूचीबद्ध करेगा <your_group_name>, लेकिन केवल वे जो /etc/groupडेटाबेस द्वारा प्रबंधित होते हैं, एलडीएपी, एनआईएस, आदि नहीं। यह केवल द्वितीयक समूहों के लिए भी काम करता है , यह उन उपयोगकर्ताओं को सूचीबद्ध नहीं करेगा जिनके पास प्राथमिक समूह के बाद से समूह के रूप में सेट है। GIDफ़ाइल में (संख्यात्मक समूह आईडी) के रूप में संग्रहीत /etc/passwd

grep <your_group_name> /etc/group

4
आप सीधे grep <username> / etc / group जैसी उस फ़ाइल पर grep कर सकते हैं। तेज़ और कम ओवरहेड।
पेंटबॉक्स

16

निम्न आदेश संबंधित सभी उपयोगकर्ताओं को सूचीबद्ध करेगा <your_group_name>, लेकिन केवल वे जो /etc/groupडेटाबेस द्वारा प्रबंधित होते हैं, एलडीएपी, एनआईएस, आदि नहीं। यह केवल द्वितीयक समूहों के लिए भी काम करता है , यह उन उपयोगकर्ताओं को सूचीबद्ध नहीं करेगा जिनके पास प्राथमिक समूह के बाद से समूह के रूप में सेट है। GIDफ़ाइल में (संख्यात्मक समूह आईडी) के रूप में संग्रहीत /etc/passwd

awk -F: '/^groupname/ {print $4;}' /etc/group

7
उन उपयोगकर्ताओं को नहीं दिखाता, जिनके पास समूह उनके डिफ़ॉल्ट समूह के रूप में है।
rlpowell

3
एनआईएस और एलडीएपी की जांच नहीं करता है।
पावेल नाडोलस्की

12

निम्नलिखित शेल स्क्रिप्ट सभी उपयोगकर्ताओं के माध्यम से दिखाई देगी और केवल उन उपयोगकर्ता नामों को प्रिंट करेगी जो किसी दिए गए समूह से संबंधित हैं:

#!/usr/bin/env bash
getent passwd | while IFS=: read name trash
do
    groups $name 2>/dev/null | cut -f2 -d: | grep -i -q -w "$1" && echo $name
done
true

उपयोग उदाहरण:

./script 'DOMAIN+Group Name'

नोट: यह समाधान उपयोगकर्ताओं और समूहों (न केवल passwdऔर groupफ़ाइलों) के लिए एनआईएस और एलडीएपी की जांच करेगा । यह उन उपयोगकर्ताओं को भी ध्यान में रखेगा, जिन्हें समूह में नहीं जोड़ा गया है, लेकिन समूह को प्राथमिक समूह के रूप में सेट किया गया है।

संपादित करें: दुर्लभ परिदृश्य के लिए जोड़ा गया फिक्स जहां उपयोगकर्ता एक ही नाम वाले समूह से संबंधित नहीं है।

संपादित करें: एक शेल स्क्रिप्ट के रूप में लिखा गया; @Max Chernyak उर्फ ​​hakunin द्वारा सुझाए गए अनुसार स्थिति trueसे बाहर निकलने के लिए जोड़ा गया ; कभी-कभार छोड़ देने के लिए छोड़ दिया गया ।0stderrgroups: cannot find name for group ID xxxxxx


यह बहुत अच्छा है, और बहुत संक्षिप्त है, लेकिन यह समूह के नाम के साथ-साथ उपयोगकर्ता नामों को भी प्रिंट करता है
andrew lorien

@andrewlorien, मुझे आशा है कि मैंने आपके द्वारा बताए गए मुद्दे को ठीक कर दिया है, यदि कृपया अधिक विवरण प्रदान न करें।
पावेल नाडोलस्की

यह स्निपेट अच्छा है, लेकिन यह एग्जिट कोड 1 लौटाता है, किसी भी कारण से यह 0 नहीं लौटाता है? शायद आसान तय?
मैक्स चिरनायक

@hakunin, यह 0 नहीं लौटाता है जब अंतिम उपयोगकर्ता नाम समूह से संबंधित नहीं होता है। आप अंतिम कथन पर हमेशा "0" प्राप्त कर सकते हैं, यदि आप यही चाहते हैं। आप किसी भी उपयोगकर्ता को देखने के लिए आउटपुट की जांच कर सकते हैं।
पावेल नाडोलस्की

@ PawełNadolski मुझे एहसास हुआ, इसलिए समाप्त हो गया ; true। रिटर्निंग 0 आपके विन्यास प्रबंधन प्रणाली (बावर्ची, उत्तर देने योग्य, आदि) को टालने से बचने के लिए अच्छा है।
मैक्स चेर्नाक

7

आप इसे एक ही कमांड लाइन में कर सकते हैं:

cut -d: -f1,4 /etc/passwd | grep $(getent group <groupname> | cut -d: -f3) | cut -d: -f1

ऊपर दिए गए आदेश में उन सभी उपयोगकर्ताओं को सूचीबद्ध किया गया है जो अपने प्राथमिक समूह के रूप में groupname रखते हैं

यदि आप भी groupname वाले उपयोगकर्ताओं को उनके द्वितीयक समूह के रूप में सूचीबद्ध करना चाहते हैं , तो निम्न कमांड का उपयोग करें

getent group <groupname> | cut -d: -f4 |  tr ',' '\n'

1
कैविएट: grepएक उपयोगकर्ता से मेल खाएगा जिसके नाम में समूह संख्या होती है (जैसे समूह के sc0ttभाग के रूप में दिखाया जाएगा root)। यदि यह एक समस्या है, तो रेगेक्स का उपयोग करें :$(getent group <groupname> | cut -d: -f3)\$(अर्धविराम, समूह आईडी और पंक्ति के अंत से मेल खाता है)। (रेगेक्स में उद्धरण न जोड़ें, और न ही शिकायत करें।)
स्कॉट स्टीवंस

@ScottS एक कानूनी गड्ढे में गिरना। सुझाए गए चरणों की सिफारिश करेंगे
भाविष्ट

3

बस थोड़ा सा क्रेप और tr:

$ grep ^$GROUP /etc/group | grep -o '[^:]*$' | tr ',' '\n'
user1
user2
user3

4
उन उपयोगकर्ताओं को नहीं दिखाता, जिनके पास समूह उनके डिफ़ॉल्ट समूह के रूप में है।
rlpowell

3

जेड के कार्यान्वयन को संभवतः कुछ अन्य प्रमुख यूनिक्स पर काम करने के लिए विस्तारित किया जाना चाहिए।

किसी के पास Solaris या HP-UX हार्डवेयर है ;; उन मामलों का परीक्षण नहीं किया।

#!/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";
    }
}

यदि इस सुझाव को साझा करने का कोई बेहतर तरीका है, तो कृपया मुझे बताएं; मैंने कई तरीकों पर विचार किया, और यही वह है जिसके साथ मैं आया था।


परिवर्तित id -Gnकरने के बाद सोलारिस 10 पर काम करने की पुष्टि की/usr/xpg4/bin/id -G -n
user667489

3

मैंने ऊपर दिए गए पर्ल कोड के समान ही किया है, लेकिन मूल पर्ल फ़ंक्शन के साथ गेटेंट और आईडी को बदल दिया है। यह बहुत तेज़ है और अलग-अलग * निक्स फ्लेवर में काम करना चाहिए।

#!/usr/bin/env perl

use strict;
my $arg=shift;
my %groupMembers; # defining outside of function so that hash is only built once for multiple function calls

sub expandGroupMembers{
my $groupQuery=shift;
unless (%groupMembers){
    while (my($name,$pass,$uid,$gid,$quota,$comment,$gcos,$dir,$shell,$expire)=getpwent()) {
            my $primaryGroup=getgrgid($gid);
            $groupMembers{$primaryGroup}->{$name}=1;
    }
    while (my($gname,$gpasswd,$gid,$members)=getgrent()) {
            foreach my $member (split / /, $members){
                    $groupMembers{$gname}->{$member}=1;
            }
    }
}
my $membersConcat=join(",",sort keys %{$groupMembers{$groupQuery}});
return "$membersConcat" || "$groupQuery Does have any members";
}
print &expandGroupMembers($arg)."\n";

केवल लिंक के साथ एक उत्तर स्टैक ओवरफ्लो पर एक अच्छा जवाब नहीं माना जाता है। कृपया इसे हटाने पर विचार करें क्योंकि यह प्रश्न का उत्तर प्रदान नहीं करता है या इस बात को अधिक विस्तृत करता है कि यह उत्तर स्वीकृत उत्तर से बेहतर कैसे है। या आप इसे एक टिप्पणी के रूप में जोड़ सकते हैं जब आपके पास पर्याप्त प्रतिष्ठा हो। आप हमेशा अपनी पोस्ट पर टिप्पणी कर सकते हैं।
दीपन शाह

2

एक आसान डेबियन और उबंटू पैकेज है जिसे ' सदस्य ' कहा जाता है जो इस कार्यक्षमता को प्रदान करता है:

विवरण: एक समूह के सदस्यों को दर्शाता है; डिफ़ॉल्ट रूप से, सभी सदस्यों के सदस्य समूहों के पूरक होते हैं: जबकि समूह उन समूहों को दिखाते हैं जो एक निर्दिष्ट उपयोगकर्ता से संबंधित हैं, सदस्य एक निर्दिष्ट समूह से संबंधित उपयोगकर्ताओं को दिखाते हैं।

... आप प्राथमिक सदस्यों, माध्यमिक सदस्यों, दोनों को एक पंक्ति में, प्रत्येक को अलग-अलग पंक्तियों के लिए कह सकते हैं।


क्या होगा अगर ऑप ओपनर का उपयोग करें?
user2284570

काम वास्तव में, लेकिन दुर्भाग्य से डोमेन समूह के सदस्यों को रिपोर्ट नहीं करता है।
16

1
getent group insert_group_name_here | awk -F ':' '{print $4}' | sed 's|,| |g'

यह उन उपयोगकर्ताओं की एक अंतरिक्ष से अलग सूची देता है, जिनका उपयोग मैंने स्क्रिप्ट में सरणियों को आबाद करने के लिए किया है।

for i in $(getent group ftp | awk -F ':' '{print $4}' | sed 's|,| |g')
    do
        userarray+=("$i")
    done

या

userarray+=("$(getent group GROUPNAME | awk -F ':' '{print $4}' | sed 's|,| |g')")

0

यहाँ एक स्क्रिप्ट है जो / etc / passwd और / etc / समूह के उपयोगकर्ताओं की सूची लौटाता है जो इसे NIS या LDAP की जाँच नहीं करता है, लेकिन यह उन उपयोगकर्ताओं को दिखाता है जिनके समूह में उनका डिफ़ॉल्ट समूह डेबियन 4.7 और सोलारिस 9 पर परीक्षण किया गया है

#!/bin/bash

MYGROUP="user"

# get the group ID
MYGID=`grep $MYGROUP /etc/group | cut -d ":" -f3`
if [[ $MYGID != "" ]]
then
  # get a newline-separated list of users from /etc/group 
  MYUSERS=`grep $MYGROUP /etc/group | cut -d ":" -f4| tr "," "\n"`
  # add a newline
  MYUSERS=$MYUSERS$'\n'
  # add the users whose default group is MYGROUP from /etc/passwod 
  MYUSERS=$MYUSERS`cat /etc/passwd |grep $MYGID | cut -d ":" -f1`

  #print the result as a newline-separated list with no duplicates (ready to pass into a bash FOR loop)
  printf '%s\n' $MYUSERS  | sort | uniq
fi

या एक-लाइनर के रूप में आप यहां से सीधे कट और पेस्ट कर सकते हैं (पहले चर में समूह का नाम बदल सकते हैं)

MYGROUP="user";MYGID=`grep $MYGROUP /etc/group | cut -d ":" -f3`;printf '%s\n' `grep $MYGROUP /etc/group | cut -d ":" -f4| tr "," "\n"`$'\n'`cat /etc/passwd |grep $MYGID | cut -d ":" -f1`  | sort | uniq

0

UNIX में (GNU / Linux के विपरीत), सूची सूची कमांड है। सूचियों के लिए सोलारिस मैन पेज देखें ।

ध्यान दें कि यह कमांड ओपन-सोर्स हीरलूम प्रोजेक्ट का हिस्सा है । मुझे लगता है कि यह GNU / Linux से गायब है क्योंकि RMS समूहों और अनुमतियों में विश्वास नहीं करता है। :-)


1
हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक-केवल उत्तर अमान्य हो सकते हैं यदि लिंक किए गए पृष्ठ बदल जाते हैं। - समीक्षा से
knuhol

NAME listusers - print a list of user logins SYNOPSIS listusers [-g groups] [-l logins] DESCRIPTION Listusers prints the name and the gecos information of all users known to the system, sorted by username. Valid options are: -g groups Only print the names of users that belong to the given group. Multiple groups are accepted if separated by commas. -l logins Print only user names that match logins. Multiple user names are accepted if separated by commas.
एलन कार

हिरलूम प्रोजेक्ट वेब साइट से: हिरलूम प्रोजेक्ट मानक यूनिक्स उपयोगिताओं के पारंपरिक कार्यान्वयन प्रदान करता है। कई मामलों में, उन्हें मूल स्रोत से जारी किया गया है, जिसे काल्डेरा और सन द्वारा ओपन सोर्स के रूप में जारी किया गया है। पारंपरिक प्रथाओं का पालन करते हैं; वे आमतौर पर सिस्टम V के साथ संगत रहते हैं, हालांकि समय के दौरान सामान्य उपयोग हो जाने वाले एक्सटेंशन कभी-कभी प्रदान किए जाते हैं। अधिकांश उपयोगिताओं को भी वैरिएंट में शामिल किया गया है जिसका उद्देश्य POSIX अनुरूपता है।
एलन कार

0

यहाँ एक बहुत ही सरल awk स्क्रिप्ट है जो अन्य उत्तरों में सूचीबद्ध सभी सामान्य नुकसानों को ध्यान में रखती है:

getent passwd | awk -F: -v group_name="wheel" '
  BEGIN {
    "getent group " group_name | getline groupline;
    if (!groupline) exit 1;
    split(groupline, groupdef, ":");
    guid = groupdef[3];
    split(groupdef[4], users, ",");
    for (k in users) print users[k]
  }
  $4 == guid {print $1}'

मैं अपने ldap- सक्षम सेटअप के साथ इसका उपयोग कर रहा हूं, कुछ मानकों पर चलता है, जो मानकों के अनुरूप है और awk, जिसमें Solaris 8+ और hpux शामिल हैं।


0
getent group groupname | awk -F: '{print $4}' | tr , '\n'

इसके 3 भाग हैं:

1 - getent group groupname"/ etc / group" फ़ाइल में समूह की लाइन दिखाता है। के लिए वैकल्पिक cat /etc/group | grep groupname

2 - awkएक ही पंक्ति में ',' के साथ अलग-अलग सदस्यों को प्रिंट करें।

3 - trएक नई पंक्ति के साथ 'की जगह', ​​और प्रत्येक उपयोगकर्ता को एक पंक्ति में प्रिंट करें।

4 - वैकल्पिक: sortयदि उपयोगकर्ता बहुत अधिक हैं, तो आप दूसरे पाइप का भी उपयोग कर सकते हैं।

सादर


0

मुझे लगता है कि सबसे आसान तरीका निम्नलिखित कदम है, आपको किसी भी पैकेज या सॉफ्टवेयर को स्थापित करने की आवश्यकता नहीं होगी:

  1. सबसे पहले, आप समूह के GID का पता लगाते हैं जिसे आप उपयोगकर्ताओं को जानना चाहते हैं, इसके लिए बहुत सारे तरीके हैं: बिल्ली / आदि / समूह (अंतिम स्तंभ GID है) आईडी उपयोगकर्ता (उपयोगकर्ता वह है जो किसी से संबंधित है समूह)

  2. अब आप फ़ाइल / etc / passwd पर सभी उपयोगकर्ता को सूचीबद्ध करेंगे, लेकिन आप पिछले समूह के सदस्यों को प्राप्त करने के लिए कमांड के निम्नलिखित सीक्वल के साथ कुछ फ़िल्टर लागू करेंगे।

कट -d: -f1,4 / etc / passwd | grep GID (GID वह संख्या है जो आपको चरण 1 से मिली थी)

कट कमांड फ़ाइल के कुछ "कॉलम" का चयन करेगा, पैरामीटर d को सीमांकित करता है ":" इस मामले में, पैरामीटर -f "फ़ील्ड" (या कॉलम) का चयन करता है जिसे आउट केस में 1 और 4 दिखाया जाना है (पर) फ़ाइल / etc / passwd, 1 / कॉलम उपयोगकर्ता का नाम है और 4 etc उस समूह का GID है जो उपयोगकर्ता का है), को अंतिम रूप देने के लिए। - grep GID सिर्फ समूह को फ़िल्टर करेगा (4% कॉलम पर) चुना था।


0

यहां एक और पायथन वन-लाइनर है जो उपयोगकर्ता की डिफ़ॉल्ट समूह सदस्यता ( /etc/passwd) के साथ-साथ समूह डेटाबेस ( /etc/group) से भी खाता है।

python -c "import grp,pwd; print set(grp.getgrnam('mysupercoolgroup')[3]).union([u[0] for u in pwd.getpwall() if u.pw_gid == grp.getgrnam('mysupercoolgroup')[2]])"

-1

मैंने कोशिश की है grep 'sample-group-name' /etc/group, जो आपके द्वारा निर्दिष्ट समूह के सभी सदस्यों को यहां उदाहरण के आधार पर सूचीबद्ध करेगा


1
ग्रीपिंग /etc/groupकम से कम 3 अन्य उत्तरों में पहले से ही है, आपका उत्तर उनके लिए किस मूल्य को जोड़ता है? इसके अलावा, उन सभी अन्य उत्तरों में टिप्पणियां हैं कि इस तरह के समाधान केवल माध्यमिक समूहों के लिए काम करते हैं और LDAP, NIS, आदि द्वारा प्रबंधित खाते के लिए भी काम नहीं करते हैं
डेविड फेरेंस्की रोगोजान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.