एक पंक्ति में कई उपयोगकर्ता को UNIX समूह में जोड़ें


13

पर Centos 6.5 (और शायद कोई हो) linux, मैं एक समूह बना सकते हैं:

sudo groupadd mygroup

और इसमें कई उपयोगकर्ता जोड़ें:

sudo usermod -a -G mygroup userA
sudo usermod -a -G mygroup userB
sudo usermod -a -G mygroup userC

मेरे विशेष मामले में उपयोगकर्ताओं की संख्या है 20। मैं कैसे एक लाइनर का उपयोग कर सकते हैं:

sudo usermod -a -G mygroup userA userB userC

यहां तक ​​कि लूप के लिए उपयोग करना ठीक होगा, लेकिन मैं बैश विशेषज्ञ नहीं हूं, इसलिए आश्चर्यचकित हूं।

bash  group 

जवाबों:


12

यदि gpasswdउपलब्ध है (उदाहरण के लिए सोलारिस को छोड़कर अधिकांश वितरणों पर होना चाहिए) तो आप समूह नाम के बाद उपयोगकर्ताओं की अल्पविराम से अलग सूची प्रदान कर सकते हैं:

gpasswd -M userA,userB,userC mygroup

1
यह एक उत्तर होना चाहिए।
ivanleoncz

4
ध्यान रखें कि यह समाधान मौजूदा समूह सदस्यों की सूची को ओवरराइट करता है। यह उपयोगकर्ताओं को "जोड़ना" से अलग बात usermod -aG mygroupहै।
माइकल


2

यह स्थितिगत मापदंडों के साथ एक रूढ़िवादी स्क्रिप्ट है, नीचे दी गई कोड को एक फ़ाइल में सहेजें fill_group.shऔर इसे निष्पादन योग्य बनाएं chmod +x fill_group.sh

फिर इसे एक पीएटीएच निर्देशिका में जोड़ें ( /usr/local/bin) या उसी डायर में निष्पादित करें जहां यह स्थित है ./fill_group.sh <group_name> <user1> ... <userN>

#!/bin/sh
#
# Name: fill_group.sh
# 
# Usage: 
# fill_group.sh <group_name> <user1> <user2> ... <userN>
#
# Description:
# add users to specific group passed as first parameter. 
# If the group doesn't exists add it to the system.
set -eu

# Exit if there is not at least 2 args (group,user1)
if [ $# -lt 2  ]; then exit 5; fi

group="${1}"; shift # extract group from arguments
if ! egrep --quiet "^${group}:" /etc/group; then
  sudo groupadd "${group}"
fi

for user in "${@}"; do
    sudo usermod -a -G "${group}" "${user}"
done

2
समूह को मान्य करने का दूसरा तरीका:if ! getent group "$group" >/dev/null
ग्लेन जैकमैन

@glennjackman: धन्यवाद, मैं getentअब तक कमांड से चूक गया (मेरे सिस्टम में सभी डेटाबेसों के निरीक्षण के लिए एक अच्छा स्वत: पूर्ण सुविधा भी है )।
गिउसेप्पे रिकुपरो

बहुत जटिल है, मैं इसे कमांड लाइन से निष्पादित करना चाहता हूं।

@HordonFreeman: स्क्रिप्ट जब बचाया एक oneliner के रूप में क्रियान्वित किया जाता है: fill_group.sh <group> <user1> ... <userN>। यदि आप वास्तव में एक ऑन्लाइनर चाहते हैं: for user in "userA userB userC"; do sudo usermod -a -G "groupName" "${user}"; doneया यदि आपके पास एक उपयोगकर्ता सूची है जिसे प्रति फ़ाइल एक पंक्ति में कहा जाता है users.list:group=mygroup && while read user; do sudo usermod -a -G "${group}" "${user}"; done < users.list
Giuseppe Ricupero

1

फेडोरा, रेड हैट, सेंटोस और अन्य डाउनस्ट्रीम वितरणों पर, newusersउपयोगिता आपको बहुत आसानी से नए उपयोगकर्ताओं के बैच को एक सिस्टम में जोड़ने के लिए सक्षम करती है, बिना बैश स्क्रिप्ट लिखने के।

मई डेबियन और उबंटू में भी उपलब्ध हो सकता है।


0

टॉमबार्ट के और मास्टरफूल के जवाबों के बारे में। पुराने डिस्टोस (SLES 11 SP1) के लिए, छाया उपकरण थोड़ा अलग हैं। मैनुअल कोई संस्करण संख्या नहीं देते हैं, लेकिन 2009-2010 दिनांकित हैं।

Gpasswd में -M विकल्प मौजूद नहीं है, (लेकिन किसी और चीज़ के लिए gpasswd की आवश्यकता है)। तो मास्टरफूल द्वारा लूप विकल्प के लिए जाने की आवश्यकता है। लेकिन यहाँ -ए मौजूद नहीं है, इसके बजाय -ए -ए -जी के रूप में व्यवहार करता है।

मैं सिस्टम के लोड करने के लिए रोलआउट एक्सेस करने के लिए यह कर रहा हूं और मेरा पूरा "ग्रुप बनाएं और पॉपुलेट करें" अब तक जैसा दिखता है:

/usr/sbin/groupadd -g GID### mygroup
gpasswd -r mygroup
for user in userA userB userC; do sudo usermod -A mygroup "$user"; done

इसलिए, सेट GID के साथ समूह बनाएं, नए समूह को निष्क्रिय / सक्रिय करें, कुछ उपयोगकर्ताओं को जोड़ें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.