मैं यह कैसे पता लगा सकता हूं कि कौन से उपयोगकर्ता लिनक्स के भीतर एक समूह में हैं?


67

मैं हाल ही में नए उपयोगकर्ता बना रहा हूं और उन्हें कुछ समूहों को सौंप रहा हूं। मैं सोच रहा था कि क्या ऐसी कोई कमान है जो सभी उपयोगकर्ताओं को एक निश्चित समूह को सौंपे? मैंने 'समूह' कमांड का उपयोग करने की कोशिश की है लेकिन जब भी मैं इसका उपयोग करता हूं तो यह कहता है कि 'समूह: नहीं मिला'


3
वह groupsआज्ञा है। यह संभावना नहीं है कि आपके पास यह लिनक्स पर नहीं है, क्योंकि यह कोरुटिल का हिस्सा है।
थॉमस डिकी

@ThomasDickey लेकिन यह संभव है - कुछ नासेस पर।
थॉमस डब्ल्यू।

जवाबों:


43

आप grep का उपयोग कर सकते हैं:

grep '^group_name_here:' /etc/group

यह केवल अनुपूरक समूह के सदस्यों को सूचीबद्ध करता है, न कि उस उपयोगकर्ता को जो इस समूह को अपने प्राथमिक समूह के रूप में रखता है। और यह केवल स्थानीय समूहों को पाता है, न कि LDAP जैसी नेटवर्क सेवा से समूह।


6
केंद्रीकृत प्रमाणीकरण के साथ काम नहीं करता है।
मैक्सिम एगोरुस्किन

1
यह प्राथमिक / माध्यमिक अंतर के कारण वास्तव में भ्रमित हो सकता है। मुझे लगता है कि इसके पक्ष में बचना चाहिए। मेरे sudo lid -g {group}पास एक ऐसी प्रणाली है जहां यह उत्तर समूह में 8 उपयोगकर्ताओं को सूचीबद्ध करता है, जबकि sudo lid -g {group}सूची 10.
DKroot

getentनीचे उत्तर देखें @ मूर्रे जेन्सेन
स्क्रूटरी

83

मैं का उपयोग करना पसंद getent आदेश ...

चूंकि getent सिस्टम के समान नाम सेवा का उपयोग करता है, इसलिए getent सभी जानकारी दिखाएगा, जिसमें नेटवर्क सूचना स्रोतों जैसे LDAP से प्राप्त किया गया है।

तो एक समूह के लिए, आपको निम्नलिखित का उपयोग करना चाहिए ...

getent group name_of_group

जहाँ name_of_group उस समूह के साथ बदल दिया जाता है जिसे आप देखना चाहते हैं। ध्यान दें कि यह केवल पूरक समूह सदस्यता देता है, इसमें उन उपयोगकर्ताओं को शामिल नहीं किया जाता है जिनके पास यह समूह उनके प्राथमिक समूह के रूप में है।

कई अन्य लुकअप हैं जो आप कर सकते हैं ... passwdएक और उपयोगी है, जिसे आपको प्राथमिक समूहों को सूचीबद्ध करना होगा।


1
यदि आप व्यवस्थापक नहीं हैं तो अन्य उत्तर लागू नहीं होते हैं और समूह की जानकारी अन्य सर्वर में संग्रहीत होती है।
एंड्रेस अलकेराज़

1
यह प्राथमिक / माध्यमिक अंतर के कारण वास्तव में भ्रमित हो सकता है। मुझे लगता है कि इसके पक्ष में बचना चाहिए। मेरे sudo lid -g {group}पास एक ऐसी प्रणाली है जहां यह उत्तर समूह में 8 उपयोगकर्ताओं को सूचीबद्ध करता है, जबकि sudo lid -g {group}सूची 10.
DKroot

12

करने में आसान groups [username]

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

cat /etc/passwd | awk -F':' '{ print $1}' | xargs -n1 groups

यदि आपको "समूह: कमांड नहीं मिला", तो संभव है कि आपने अपने पर्यावरण पथ को बदतर के लिए संपादित किया हो, अपना पथ रीसेट करें PATH=$(getconf PATH)


यह एक विशेष समूह के लिए काम करता है, तो | grep {group}जोड़ दिया जाता है और विपरीत सही जवाब देता है getent group name_of_groupयाgrep '^group_name_here:' /etc/group
DKroot

1
इसके बजाय cat /etc/passwd, आपको gentent passwdnis / ldap में उपयोगकर्ताओं को अभी भी सूचीबद्ध होना चाहिए। एकमात्र दोष यह है कि इसमें काफी समय लग सकता है।
ब्रायन मिंटन

7
groupmems -g groupname -l

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


ध्यान दें कि groupmemsअधिकांश लिनक्स डिस्ट्रोस पर उपयोग किए जाने वाले छाया के बर्तनों का एक हिस्सा है, हालांकि groupmemsवर्तमान में डेबियन और व्युत्पन्न ( अब बग तय किया गया है, लेकिन किसी भी रिलीज में शामिल नहीं है) (नवंबर 2016 तक)
स्टीफन चेज़लस

2
यह भी ध्यान दें कि groupmemsकेवल समूहों के साथ काम करता है /etc/group(LDAP या अन्य उपयोगकर्ता डेटाबेस में नहीं) और सुपरसुसर विशेषाधिकारों की आवश्यकता है क्योंकि यह / etc / gshadow खोलने की कोशिश करता है।
स्टीफन चेज़लस

ऊपर उल्लिखित केवेट्स के बावजूद, यह कमांड कुछ स्थितियों के लिए आदर्श है, क्योंकि इसमें आउटपुट (यानी cutऔर दोस्तों) के अतिरिक्त पार्सिंग की आवश्यकता नहीं है ।
bonh

यह प्राथमिक / माध्यमिक अंतर के कारण वास्तव में भ्रमित हो सकता है। मुझे लगता है कि इसके पक्ष में टालना चाहिए sudo lid -g {group}। मेरे पास एक प्रणाली है जहां यह उत्तर समूह में 8 उपयोगकर्ताओं को sudo lid -g {group}सूचीबद्ध करता है जबकि सूची 10.
DKroot

5

मुझे आश्चर्य है कि किसी ने उल्लेख नहीं किया

id <user>

यह कमांड उन समूहों की सूची देगा जो उपयोगकर्ता अंदर हैं।


3
क्योंकि - शीर्षक के विपरीत - प्रश्नकर्ता किसी दिए गए समूह के भीतर उपयोगकर्ताओं को जानना चाहता था, न कि किसी दिए गए उपयोगकर्ता के समूह, जैसा कि प्रश्न में विस्तृत है। मैंने अब सामग्री से मिलान करने के लिए शीर्षक को फिर से परिभाषित किया।
डबू

आहा, मैं देख रहा हूं। मुझे प्रश्न पाठ को बेहतर ढंग से पढ़ना चाहिए था। धन्यवाद।
एलेक्स

3

groupsआदेश उपयोगकर्ता के लिए समूह सदस्यता प्रिंट करता है। आप lidउपयोगकर्ताओं को एक समूह में सूचीबद्ध करने के लिए कमांड का उपयोग कर सकते हैं जैसे:

# lid -g <groupname>

4
lidलिबासर का हिस्सा है, जो कई वितरणों पर डिफ़ॉल्ट रूप से स्थापित नहीं है।
क्रिस डाउन

2

ओपी ने समूह कमांड का उपयोग करने की संभावना को बाहर करने के लिए प्रश्न को दोहराया । चूंकि लिनक्स पर कोरुटिल्स का हिस्सा है, या तो (ए) इसे हटा दिया गया था, या (बी) ओपी नाम को गलत कर रहा है।

groupsउदाहरण के लिए, ओपी इस तरह का उपयोग कर सकता था :

for name in $(cut -d: -f1 /etc/passwd);do groups $name|grep -w sudo|awk '{print $1;}';done

समूह के नाम के लिए सिर्फ एक सुझाव है grep का सुझाव दिया /etc/group। कभी-कभी यह काम करता है।

Grep का थोड़ा बेहतर उपयोग निम्नलिखित के सिंटैक्स को ध्यान में रखता है /etc/group:

group_name:password:GID:user_list

इतना है कि केवल पहली बृहदान्त्र से पहले का हिस्सा एक मान्य समूह-नाम है। सिंटैक्स (और होगा) के संबंध के बिना एक सादा grep फ़ाइल से भ्रामक मिलान करता है। Grep मैच को बनाने के लिए नियमित अभिव्यक्तियों का उपयोग करें, जिसकी आवश्यकता है:

grep -E '^users:' /etc/group |sed -e 's/^.*://'

या शेल चर का उपयोग करना:

grep -E '^'$groupname':' /etc/group |sed -e 's/^.*://'

हालाँकि, यह केवल उन लोगों को सूचीबद्ध करता है जो डिफ़ॉल्ट समूह में नहीं हैं । जोड़ने के लिए उन है, तो आप से समूह-आईडी नंबर निकाल कर, पासवर्ड फ़ाइल, जैसे खाते में लेने की जरूरत /etc/groupहै, और जिन उपयोगकर्ताओं की डिफ़ॉल्ट समूह से मेल खाता है मुद्रण /etc/passwd, जैसे,

grp=$(awk -F: '$1 ~ /^users$/ {print $3; }' </etc/group)
awk -F: '$4 ~ /^'$grp'$/ { print $1; }' </etc/passwd

आप केवल grep और sed का उपयोग करके एक ही काम कर सकते हैं, लेकिन यह awk के उपयोग से अधिक काम है।

एक अन्य सुझाए गए उत्तर का उपयोग करके प्रस्तावित किया गया है getent, जो कि लिनक्स मशीन पर होने की संभावना है (डेबियन के साथ, यह GNU libc का हिस्सा है)। हालाँकि इसकी एक त्वरित जाँच केवल /etc/groupसामग्री प्रदान करती है।

मैं (अधिकांश की तरह) नहीं है libusersया lidस्थापित नहीं है , इसलिए मैं इस पर टिप्पणी नहीं कर सकता कि क्या यह ओपी की शर्तों को पूरा करता है।

idकार्यक्रम भी है , जो समूह की जानकारी देता है। संभव जवाब के रूप में कोई उस पर विस्तार कर सकता है।


या सिर्फ sed -n "s/^$groupname:.*://p" /etc/groupलेकिन फिर भी गलत परिणाम की सूचना दे सकता है यदि समूह के नाम में आरई ऑपरेटर शामिल हैं ( .उदाहरण के लिए समूह नामों में असामान्य नहीं है)।
स्टीफन चेज़लस 21

GNU getentभी LDAP / NIS को क्वेरी करेगा ... हालांकि संभवतः नहीं जब समूह डेटाबेस के लिए गणना स्पष्ट रूप से अक्षम हो।
स्टीफन चेज़लस

ध्यान दें कि groupsयह मदद नहीं करेगा क्योंकि यह उन समूहों को सूचीबद्ध करता है जो किसी दिए गए समूह के सदस्यों की सूची के विपरीत एक उपयोगकर्ता है।
स्टीफन चेजेलस

2

एक जादू की तरह काम करता है:

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

@ARG के स्वीकृत उत्तर के विपरीत, यह कमांड उन उपयोगकर्ताओं को सूचीबद्ध करता है जिनके <groupname> उनके प्राथमिक समूह के रूप में हैं
Bhavik

यह स्वीकृत उत्तर होना चाहिए
निकोले नेनोव

1
मैं असहमत हूं। क्योंकि यह उपयोगकर्ताओं को / etc / passwd में पढ़ता है, यह अन्य nsswitch मॉड्यूल के साथ काम नहीं करेगा जो LDAP आदि तक
पहुंचते हैं

मेरे लिए सही तरीके से काम नहीं किया: मुझे एक समूह में 4 सदस्य मिले जबकि sudo lid -gसूचियां 8. @Bikik स्वीकृत उत्तर भी सही नहीं है।
DKroot

2

कुछ आपको libuser ('ढक्कन' के लिए) या सदस्य ('सदस्यों' के लिए) स्थापित करने के लिए कहेंगे। लेकिन जवाब में निर्माण https://unix.stackexchange.com/a/349648/77959 जो लॉगिन समूह सदस्यता के साथ इस मुद्दे को संभाला मैंने पाया कि एक और समूह उस स्क्रिप्ट द्वारा कवर नहीं किया जा रहा है। तो - यहाँ दोनों दृष्टिकोणों का सबसे अच्छा संयुक्त है:

#!/bin/bash
if [ $# -eq 1 ]; then
        list_a=`cut -d: -f1,4 /etc/passwd | grep $(getent group "$1"| cut -d: -f3) | cut -d: -f1`
        list_b=`getent group "$1"|cut -d: -f4|sed 's/,/\n/g'`
        echo -e "$list_a\n$list_b"|grep -v "^$"|sort|uniq
else
        echo "pass me a group to find the members of"
fi

यह मेरे सिस्टम पर सही तरीके से काम करता है जिसमें शामिल हैं getentया grep'^group_name_here:' /etc/group
DKroot

0

User3717722 दृष्टिकोण का यह संशोधन एक NIS डेटाबेस में समूह के सदस्यों को सूचीबद्ध करेगा:

ypcat passwd | cut -d: -f1,4 | grep $(getent group <groupname> | cut -d: -f3) | cut -d: -f1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.