शेल स्क्रिप्ट में मैं कैसे पता लगा सकता हूं कि क्या मौजूदा सिस्टम पर किसी उपयोगकर्ता का नाम मौजूद है?
/etc/passwd
और /etc/shadow
अपूर्ण हैं। OS X की डायरेक्टरी सर्विसेज या लिनक्स पर इसी तरह एक्टिव डायरेक्ट्री इंटीग्रेशन पर विचार करें।
शेल स्क्रिप्ट में मैं कैसे पता लगा सकता हूं कि क्या मौजूदा सिस्टम पर किसी उपयोगकर्ता का नाम मौजूद है?
/etc/passwd
और /etc/shadow
अपूर्ण हैं। OS X की डायरेक्टरी सर्विसेज या लिनक्स पर इसी तरह एक्टिव डायरेक्ट्री इंटीग्रेशन पर विचार करें।
जवाबों:
इसके लिए उपयोग किए जाने वाले सबसे बुनियादी साधनों में से एक संभवतः है id
।
#!/bin/bash
if id "$1" >/dev/null 2>&1; then
echo "user exists"
else
echo "user does not exist"
fi
जो पैदा करता है
$ ./userexists root
user exists
$ ./userexists alice
user does not exist
$ ./userexists
user does not exist
if
नकारात्मक परिणाम चेकर की आवश्यकता है तो क्या होगा?
id -u $1 1>/dev/null 2>&1; echo $?
पाइप के लिए इस्तेमाल किया जा सकता है
getent
इस कमांड को उन डेटाबेस के लिए प्रविष्टियाँ एकत्र करने के लिए डिज़ाइन किया गया है जो / etc फ़ाइलों और LDAP, AD, NIS / Yellow Pages, DNS और पसंद जैसी विभिन्न दूरस्थ सेवाओं द्वारा समर्थित हो सकते हैं।
यह जानने के लिए कि क्या यूज़रनेम पासवर्ड के नामकरण सेवाओं में से एक द्वारा जाना जाता है, बस चलाएं:
getent passwd username
यह ओएस और कार्यान्वयन के आधार पर समूह, मेजबानों और अन्य लोगों के साथ भी काम करता है।
getent
नहीं हैgetent
finger
का आउटपुट पार्स करें finger -m <username>
। कोई त्रुटि कोड नहीं अगर कोई उपयोगकर्ता नहीं मिला, दुर्भाग्य से, लेकिन अगर नहीं मिला, तो त्रुटि आउटपुट लिखा जाएगा। अब तक कोई कमियां नहीं हैं।
finger -ms <username> 2>&1 1>/dev/null | wc -l
0
यदि उपयोगकर्ता नहीं मिला है, तो प्रिंट करेगा (क्योंकि कोई त्रुटि आउटपुट नहीं है), अन्यथा बड़ी संख्या।
chown
भागो (किसी भी उपयोगकर्ता के रूप में, आश्चर्यजनक रूप से):
T=$( mktemp -t foo.XXX ) ; chown <username> $T
यदि यह विफल रहता है root
, तो खाता नाम अमान्य है।
यदि यह गैर- root
उपयोगकर्ता के रूप में विफल रहता है , तो ऑपरेशन के लिए संभवतः स्थानीयकृत आउटपुट को पार्स न करें या अमान्य उपयोगकर्ता (या समकक्ष) नहीं। LANG
इसे मज़बूती से करने के लिए पहले से सेट करें ।
मैं कहूंगा कि आप पर /etc/passwd
और इसी तरह (जैसे /etc/shadow
कि छाया आधारित प्रणालियों के लिए, ऑफ-टॉपिक साइड-नोट पर), कुछ इसी तरह की प्रणालियां /etc/master.passwd
या अन्य ऐसी फाइलों का उपयोग कर सकती हैं ।
/etc/passwd
आम तौर पर एक उपयोगकर्ता है या नहीं, इस पर पूर्ण आधिकारिक निर्णय के रूप में व्यवहार किया जाता है। यदि आप इस पृष्ठ पर वर्णित अन्य विधियों में से किसी का भी उपयोग करते हैं, और यदि वे अन्य विधियाँ किसी मौजूदा उपयोगकर्ता को इंगित /etc/passwd
करती हैं, लेकिन ऐसा नहीं है, तो मैं कहूंगा कि उपयोगकर्ता सिस्टम पर ठीक से मौजूद नहीं है, सबसे सामान्य मानक की परिभाषा से सॉफ्टवेयर की संभावना पर भरोसा होगा।
उस ने कहा, मैं कुछ अन्य विकल्पों के मिश्रण को जोड़ने के लिए दूसरे तरीके से फेंक दूंगा जिसका उपयोग किया जा सकता है।
ls -l /home | grep ^customUserName$<BR>
echo $?
स्पष्ट रूप से, "customuserName" को उस उपयोगकर्ता के नाम से बदलें, जिसे आप चेक करना चाहते हैं। यदि आपके सिस्टम का उपयोग होता है, तो उसे / उपयोगकर्ताओं के साथ / घर बदलें। यह सभी उपयोगकर्ताओं को / etc / passwd में नहीं मिल सकता है यदि कोई विशेष निर्देशिका के लिए कोई गृह निर्देशिका नहीं बनाई गई थी, जो तब हो सकती है जब आप बस उपयोगकर्ताओं को आयात करते हैं (अर्थात, पाठ की पंक्तियाँ / etc / passwd में) और यदि गृह निर्देशिकाएँ नहीं हैं जब तक / जब तक कोई व्यक्ति लॉग इन नहीं करता है, तब तक तैयार रहें।
id
या getent
नहीं होने की सूचना दी गई है, खासकर जब ओपी स्पष्ट रूप से नामकरण सेवाओं का उल्लेख कर रहे हैं सुविचारित करने के लिए।
if id -u "$1" >/dev/null 2>&1; then
...