कई प्रणालियों एक है getent
सूची में आदेश या की सामग्री क्वेरी नाम सेवा जैसे डेटाबेस passwd
, group
, services
, protocols
...
getent passwd | cut -d: -f6
घर निर्देशिका (6 सूची चाहेंगे वें डेटाबेस किया जा सकता है में सभी उपयोगकर्ताओं के पेट के सीमांकित क्षेत्र) प्रगणित ।
उपयोगकर्ता नाम स्वयं पहले फ़ील्ड में है, इसलिए उपयोगकर्ता नामों की सूची के लिए:
getent passwd | cut -d: -f1
(ध्यान दें कि इसका मतलब यह नहीं है कि उपयोगकर्ता सिस्टम में लॉग इन कर सकते हैं या उनकी होम डायरेक्टरी बनाई गई है, लेकिन यह कि वे सिस्टम के लिए जाने जाते हैं, उन्हें एक यूजर आईडी में अनुवाद किया जा सकता है)।
उन डेटाबेस के लिए जिन्हें एनुमरेट नहीं किया जा सकता है, आप व्यक्तिगत रूप से प्रत्येक संभावित यूजर आईडी की कोशिश और क्वेरी कर सकते हैं:
getent passwd {0..65535} | cut -d: -f1,6
(यहां मान लिया गया कि 65535 पर यूडीएस रुक जाता है (कुछ सिस्टम अधिक समर्थन करते हैं) और एक शेल जो {x..y}
ब्रेस के विस्तार का समर्थन करता है )। लेकिन आप ऐसा नहीं करना चाहेंगे कि अक्सर उन प्रणालियों पर जहां उपयोगकर्ता डेटाबेस नेटवर्क है (और वहां सीमित स्थानीय कैशिंग है) जैसे LDAP, NIS +, SQL ... क्योंकि इससे बहुत अधिक नेटवर्क ट्रैफ़िक हो सकता है (और निर्देशिका सर्वर पर लोड हो सकता है) ) उन सभी प्रश्नों को बनाने के लिए।
इसका मतलब यह भी है कि यदि एक ही यूआईडी को साझा करने वाले कई उपयोगकर्ता हैं, तो आपको प्रत्येक यूआईडी के लिए केवल एक प्रविष्टि मिलेगी, इसलिए दूसरों को याद करें।
यदि आपके पास नहीं है getent
, तो आप इसका सहारा ले सकते हैं perl
:
perl -le 'while (@e = getpwent) {print $e[7]}'
के लिए getent passwd
( $e[0]
उपयोगकर्ता नाम के लिए), या:
perl -le 'for ($i=0;$i<65536;++$i) {
if (@e = getpwuid $i) {print $e[0] ": " $e[7]}}'
getent passwd {0..65535}
एक ही caveats के साथ के लिए ।
गोले में, आप ~user
घर की निर्देशिका प्राप्त करने के लिए उपयोग कर सकते हैं user
, लेकिन अधिकांश गोले में, यह केवल उपयोगकर्ता नामों के सीमित सेट के लिए काम करता है (उस ~
विस्तार ऑपरेटर के लिए समर्थित उपयोगकर्ता नामों में अनुमत वर्णों की सूची शेल से शेल तक भिन्न होती है) और के साथ कई गोले (सहित bash
), ~$user
काम नहीं करेंगे (आपको eval
उपयोगकर्ता के नाम को वहां चर में संग्रहीत करने पर सहारा लेना होगा)। और आपको उपयोगकर्ता नामों की सूची प्राप्त करने के लिए अभी भी एक रास्ता खोजना होगा।
कुछ शेल में उपयोगकर्ता नाम की सूची प्राप्त करने के लिए बिलिन समर्थन होता है।
bash
: compgen -u
उन डेटाबेस में उपयोगकर्ताओं की सूची लौटाएगा जिन्हें गणना की जा सकती है।
zsh
: $userdirs
साहचर्य सरणी उपयोगकर्ता के नामों को उनके होम डायरेक्टरी में (उन डेटाबेस तक सीमित है, जिन्हें एनुमरेट किया जा सकता है, लेकिन यदि आप किसी ~user
ऐसे उपयोगकर्ता के लिए विस्तार करते हैं, जो गैर- एन्यूमरेबल डेटाबेस में है, तो एक प्रविष्टि जोड़ी जाएगी $userdirs
)। तो आप कर सकते हैं:
printf '%s => %s\n' "${(kv@)userdirs}"
उपयोगकर्ताओं को उनके घर निर्देशिका के साथ सूचीबद्ध करने के लिए।
यह तभी काम करता है जब zsh
इंटरेक्टिव हो ।
tcsh
, fish
और yash
तीन अन्य गोले हैं जो उपयोगकर्ता के नामों को पूरा कर सकते हैं (उदाहरण के लिए ~<Tab>
तर्क पूरा करते समय), लेकिन ऐसा नहीं लगता कि वे आपको उपयोगकर्ता नामों की सूची को प्रोग्रामिक रूप से प्राप्त करने देते हैं।