उबंटू सिस्टम पर सभी उपयोगकर्ताओं को सूचीबद्ध करने के लिए उपयोगकर्ता के अनुकूल कमांड?


22

क्या एक उपयोगकर्ता के अनुकूल कमांड है जिसका उपयोग मैं यू-ट्यूब सिस्टम पर कंसोल में उपयोगकर्ताओं को सूचीबद्ध करने के लिए कर सकता हूं?

जब मुझे cat /etc/passwdउपयोगकर्ताओं की हार्ड-टू-रीड सूची मिलती है। एक वर्णानुक्रम सूची को देखना अच्छा होगा, जिसमें प्रविष्टियों को स्तंभों में व्यवस्थित किया गया है, और समूह आईडी के साथ कोष्ठक में समूह नामों के साथ।


2
अच्छी तरह से, / etc / पासवर्ड है स्तंभों में व्यवस्थित किया ... यदि आप केवल कुछ ही colums को देखने के लिए, शायद का उपयोग करना चाहते cut। वर्णमाला के लिए, वहाँ है sort। यदि आपको समूह के नाम की आवश्यकता है, तो ज्वाइन से खेलें (जो वास्तव में केवल कॉलम, btw का एक सबसेट दिखाने में सक्षम हो सकता है)।
njsg

जवाबों:


27

/ Etc / passwd फ़ाइल के अच्छे आउटपुट के लिए अच्छा तरीका:

$ column -nts: /etc/passwd

अब आप इसे सॉर्ट कर सकते हैं:

$ column -nts: /etc/passwd | sort

अंतिम कॉलम में समूह के नाम (कोई कोष्ठक नहीं):

$ paste -d: /etc/passwd <(groups $(cut -d: -f1 /etc/passwd) | sed 's/.*: //') | column -nts: | sort

धन्यवाद, ये आज्ञाएं वही करती हैं जो मैं चाहता हूं। एक नौसिखिया के लिए यह बहुत चुनौतीपूर्ण है ... मुझे लगता है कि मुझे सीखना होगा कि उनके लिए एक उपनाम कैसे बनाया जाए।
एम। डडले

Centos कॉलम पर nविकल्प पसंद नहीं आया । column -ts: /etc/passwdठीक काम किया।
user1014251

9

यदि आपके पास मशीन पर रूट एक्सेस है, तो आप निम्न कार्य कर सकते हैं:

sudo grep -vE '^[^*!]+:[*!]:' /etc/shadow | sort | cut -d: -f1 | while read user; do id $user; done | column -ts' ,' | vi '+set nowrap' -

यह काम किस प्रकार करता है

छाया फ़ाइल पढ़ने के लिए रूट बनें। आपको केवल रूट विशेषाधिकारों की आवश्यकता है यदि आप जांचना चाहते हैं कि उपयोगकर्ता के पास पासवर्ड सेट (मानव उपयोगकर्ता) है, अन्यथा आप cat /etc/passwdइसके बजाय बस कर सकते हैं sudo grep ...:

sudo 

केवल वे उपयोगकर्ता दिखाएं जिनके पास पासवर्ड सेट है:

grep -vE '^[^*!]+:[*!]:' /etc/shadow

उपयोगकर्ता नाम से छाँटें:

sort 

उपयोगकर्ता नाम को छोड़कर सभी जानकारी छोड़ें:

cut -d: -f1

उपयोगकर्ता नाम के माध्यम से Iterate करें और इसे समूह सूचना से समृद्ध करें:

while read user; do id $user; done

कॉलम में इनपुट को प्रारूपित करें:

column -ts' ,'

परिणाम देखने के लिए vi का उपयोग करें:

vi '+set nowrap' - 

यदि आपके पास रूट एक्सेस नहीं है,

कुछ इस तरह की कोशिश करो:

cut -d: -f1 /etc/passwd | sort | while read user; do id $user; done | sed 's/\(\()\|^\)[^(]*(\|)\)/ /g' | column -t

इसका आउटपुट थोड़ा अलग है, लेकिन मैं इसे एक उत्तर के रूप में पाठक को एक अभ्यास के रूप में छोड़ देता हूं ताकि इस उत्तर में दो भागों को जोड़ दिया जाए जो पूरी तरह से नौकरी के लायक है। (क्या तुम सिर्फ प्यार नहीं करते sed?)


"मैं इसे पाठक को एक अभ्यास के रूप में छोड़ देता हूं ..." :)
इमानुएल बर्ग

1

उबंटू में यह इस प्रकार हो सकता है:

$ f1, f2 ..., $ f7 में संग्रहीत / etc / passwd से सात फ़ील्ड

while IFS=: read -r f1 f2 f3 f4 f5 f6 f7
do
 echo "User $f1 use $f7 shell and stores files in $f6 directory."
done < /etc/passwd

1

कुछ ऐसा जो मैं करता हूं और यह मेरे उद्देश्यों के लिए काम करता है

ls /home

दी गई, जो वास्तव में आपको उपयोगकर्ताओं की सूची नहीं देता है, बल्कि उपयोगकर्ता के होम निर्देशिकाओं और पिछले उपयोगकर्ता निर्देशिकाओं की एक सूची देता है, लेकिन कोई भी आदेश जिसे आप उपयोगकर्ता पर करना चाहते हैं, जो टर्मिनल मौजूद नहीं है, आपको बताएगा और हटाने के लिए संकेत हो सकता है। होम फ़ाइल जिसमें कोई उपयोगकर्ता नहीं है या इसे स्थानांतरित नहीं करता है!


यह मुझे पंसद है। यह एक बुनियादी स्तर पर काम हो जाता है।
आलाप

0

मैंने सोचा था कि यह आसान होगा join, लेकिन joinफाइलों को ज्वाइन फील्ड पर सॉर्ट करने की आवश्यकता है । तो यह आवश्यक (?) अस्थायी फ़ाइलों के साथ एक वैकल्पिक हल। आउटपुट उपयोगकर्ता पर सॉर्ट किया जाता है, और उपयोगकर्ता, समूह और समूह आईडी प्रदर्शित करता है।

uag () {
  TEMP_GROUPS=/var/tmp/sorted_groups
  TEMP_USERS=/var/tmp/sorted_users
  cat /etc/group  | tr ":" " " | sort -k 3 -o $TEMP_GROUPS
  cat /etc/passwd | tr ":" " " | sort -k 4 -o $TEMP_USERS
  join -1 4 -2 3 -o 1.1,2.1,2.3 $TEMP_USERS $TEMP_GROUPS | sort
  rm $TEMP_GROUPS $TEMP_USERS
}

एक चरित्र का दूसरे के साथ अनुवाद करें tr; sortके साथ एक महत्वपूर्ण क्षेत्र के अनुसार -k, आउटपुट फाइल करने के लिए -o; पहली ( -1) और दूसरी ( -2) फ़ाइल में फ़ील्ड के संबंध में शामिल हों, पहली फ़ाइल में कुछ फ़ील्ड्स ( -o 1.1) के साथ-साथ दूसरी ( ,2.1,2.3) में आउटपुट करें ।


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