एक उपयोगकर्ता को सिस्टम में जोड़ें * केवल अगर यह मौजूद नहीं है *


47

मैं useradd {user}अपने सिस्टम में उपयोगकर्ताओं को जोड़ने के लिए कमांड चला रहा हूं, हालांकि मैं इसे एक स्वचालित वातावरण में चलाने की योजना बनाता हूं, और यह अंत में फिर से चलाया जा सकता है, भले ही उपयोगकर्ता पहले से मौजूद हो।

क्या कोई तरीका है कि मैं इसे तभी चला सकता हूं जब उपयोगकर्ता पहले से मौजूद न हो? उपयोगकर्ता के पास एक होम फोल्डर नहीं है।


adduserआमतौर पर डेबियन / उबंटू सिस्टम पर पसंद किया जाता है।
फहीम मीठा

@FaheemMitha स्वचालित स्क्रिप्ट में, संभवतः अधिक सुसंगत का उपयोग करना बेहतर है useradd
द गाइज़ विथ द हाट

जवाबों:


69

id -u somename उपयोगकर्ता के मौजूद न होने पर एक गैर-शून्य निकास कोड लौटाता है।

आप इसे काफी सरलता से परख सकते हैं ... ( &>/dev/nullबस सामान्य आउटपुट / चेतावनी को दबा देते हैं)

id -u somename &>/dev/null || useradd somename 

1
पोर्टेबल तरीके से: "id -u somename> / dev / null 2> & 1 || useradd somename"
Tristan

13

इसे इस्तेमाल करे:

useradd {user} || echo "User already exists."

या यहां तक ​​कि:

useradd {user} || true

यदि उपयोगकर्ता पहले से मौजूद है, तो यह चेक को सुरक्षित रूप से विफल होने से बचाता है।
कवरोजीन

8

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

कठपुतली के लिए प्रलेखन http://docs.puppetlabs.com पर उपलब्ध है

कठपुतली में एक उदाहरण के रूप में:

user { "bob" : 
  password   => "$1$yv3n066X$Vpb05Ac/fHTicNdT9T5vz1", # generated with `openssl passwd -1`
  ensure     => present,                              # ensure => absent to remove
  managehome => true,
}

4
कठपुतली एक महान परियोजना है, लेकिन आप इस बारे में धारणा नहीं बना सकते हैं कि ओपी वास्तव में क्या पूछ रहा है :)
rahmu

1
ओपी ने लक्ष्य को बहुत स्पष्ट रूप से समझाया - स्वचालित और फिर से चलाने में सक्षम होने के बावजूद उपयोगकर्ता मौजूद है (idempotency)। कॉन्फ़िगरेशन प्रबंधन उपकरण के लिए ये सटीक उपयोग के मामले हैं। जब किसी को यह पता नहीं होता है कि इन समस्याओं को हल करने के लिए पहले से ही उपकरण मौजूद हैं, तो वे ऐसे प्रश्न पूछने की प्रवृत्ति रखते हैं जिनमें एक बहुत विशिष्ट, संकीर्ण रूप से केंद्रित समस्या को हल करना शामिल होता है जब समझ में आने के लिए एक बड़ी अवधारणा होती है।
एरॉन ब्राउन

मैं पहले से ही शेफ का उपयोग कर रहा हूं।
टारनफेल्ड

1
यदि उपयोगकर्ता मौजूद नहीं है तो बावर्ची केवल उपयोगकर्ताओं को जोड़ेगा। यही कारण है कि मैं बेरोजगारी है, इसलिए मैं इस सवाल (1.5 साल से बाहर) को नहीं समझता।
एरॉन ब्राउन

4

useradd उपयोगकर्ता को फिर से नहीं जोड़ेगा यदि यह पहले से मौजूद है, तो यह सुनिश्चित करने का इरादा रखता है कि यूआईडी नंबर और यूआईडी लॉगिन अद्वितीय हैं। यदि आप एक बैच के माध्यम से चलाने की योजना बना रहे हैं, तो सुनिश्चित करें कि उपयोग किए जा रहे यूआईडी अद्वितीय हैं; useradd समस्याग्रस्त प्रविष्टियों के लिए शिकायत करेगा और आपको यह देखने के लिए त्रुटियों / stderr को पकड़ने की आवश्यकता है कि किन उपयोगकर्ता खातों में खाता प्रणाली (/ etc / passwd, group, shadow) में समस्याएँ हैं।

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