2011-09-16 5 views
21

ps -eafचल रही प्रक्रियाएं। उपयोगकर्ता नाम के बजाय यूआईडी नंबर क्यों प्रदर्शित किया?

..

kude  22593 12078 0 09:06 ?  00:00:02 smbd -D 
hasi  22929 12078 0 09:12 ?  00:00:00 someprog.pl 
root  22950 43 0 Sep08 ?  00:00:19 [nfsiod] 
root  24558 43 0 Sep09 ?  00:00:28 [pdflush] 
root  25320  1 0 00:00 ?  00:00:01 /usr/bin/atop -a -w /var/log/atop/atop_20110916 600 
1466  25757 12078 0 10:12 ?  00:00:00 smbd -D 
root  26752 12078 0 10:32 ?  00:00:01 smbd -D 

..

आईडी USERNAME2

uid = 1466 (USERNAME2) gid = 513 (DomainUsers) समूहों = 513 (DomainUsers)

LDAP में सभी उपयोगकर्ता (/etc/nsswitch.conf सही है, सब कुछ सही है - लेकिन केवल इस प्रयोक्ता न दिखाएं)

यूजर नंबर (1466) के बजाय उपयोगकर्ता नाम क्यों प्रदर्शित किया?

+1

शायद क्योंकि यूआईडी संख्याओं की अनुमानित अधिकतम लंबाई है, जबकि उपयोगकर्ता नाम काफी लंबा हो सकते हैं? –

+10

हां यह उपयोगकर्ता नाम की लंबाई है (यदि 8 वर्णों से अधिक लंबा है, तो 'ps aux' नाम के लिए यूआईडी को प्रतिस्थापित करेगा)। विवरण प्राप्त करने के लिए अब 'मैन पीएस' चल रहा है। –

उत्तर

35

उपयोगकर्ता नामों के लिए ps -ef (POSIX) या ps aux (बीएसडी-डेरिवेटिव) में सूचीबद्ध होने के लिए 8-वर्ण सीमा है। Explanation of options

मैंने मैक और लिनक्स बॉक्स दोनों पर मैन पेजों की खोज की है और वहां दर्ज की गई सीमा को नहीं देखा है।

प्रश्न नियमित रूप से उत्तर के रूप में 8-वर्ण सीमा वाले फ़ोरम पर दिखाई देता है।

मैं किया अंत में this page जिसमें "बग" डेबियन के खिलाफ सूचना मिली थी लेकिन एक बग नहीं होने के रूप में बंद कर दिया पर आते हैं। वे this page का संदर्भ देते हैं जो इस बारे में भी दावा करता है कि नाम कितने लंबे समय तक पॉज़िक्स और यूनिक्स मानकों को यूआईडी पर वापस गिरने की आवश्यकता होती है। वास्तविक POSIX मानक से भी नहीं।

मुझे नहीं पता कि यह आधिकारिक है, लेकिन यह उस व्यवहार को समझाता है जिसे आप 9-वर्ण उपयोगकर्ता नाम से देख रहे हैं। :)

शायद कोई और अधिक आधिकारिक लिंक का उत्तर पोस्ट कर सकता है?

+0

'ps aux' सामान्य बीएसडी वाक्यविन्यास है। बीएसडी के रूप में सूचीबद्ध चीज पुरानी एसआईएसवी सिस्टैक्स की बजाय है। – tchrist

+0

पीछे की तरफ। धन्यवाद @pst। फिक्स्ड। –

11

जैसा कि रे टोल का उल्लेख है कि यह 8-वर्ण सीमा तक ही सीमित है। यह एक बग नहीं है लेकिन रे द्वारा वर्णित मानक का हिस्सा फिर से है। आप ps (procps पैकेज का हिस्सा) के स्रोत कोड की जांच टिप्पणियों में से एक का कहना है

The Open Group Base Specifications Issue 6 (IEEE Std 1003.1, 2004 Edition) 
requires that user and group names print as decimal numbers if there is 
not enough room in the column, so tough luck if you don't like it. 

The UNIX and POSIX way to change column width is to rename it: 
    ps -o pid,user=CumbersomeUserNames -o comm 
The easy way is to directly specify the desired width: 
    ps -o pid,user:19,comm 

आप अनुभाग में link जांच STDOUT यह कहना है कि क्षेत्र (उपयोगकर्ता, ruser , समूह, rgroup) मुद्रित किया जाएगा यदि इसे प्राप्त किया जा सकता है और फ़ील्ड चौड़ाई परमिट, या दशमलव प्रतिनिधित्व अन्यथा।
उपयोगकर्ता & समूह नाम फ़ील्ड चौड़ाई 8 तक सीमित है legacy support के लिए हो सकता है लेकिन यह केवल एक अनुमान है।

3

ps -eo user:$(cut -d: -f1 /etc/passwd | wc -L),pid,ppid,c,stime,tname,time,cmd

-o विकल्प के लिए एक उपयोगकर्ता ps आदेश के उत्पादन के लिए परिभाषित प्रारूप निर्दिष्ट करने के लिए प्रयोग किया जाता है।

निर्दिष्ट उपयोगकर्ता परिभाषित प्रारूप उपयोगकर्ता, पिड, पीपीआईडी, स्टेम, tname, समय और cmd फ़ील्ड को आउटपुट करने के लिए कहता है।

cut -d: -f1 /etc/passwd | wc -L पासवर्ड फ़ाइल में सबसे लंबे लॉगिन नाम में वर्णों की संख्या निर्धारित करता है। इसलिए user:$(cut -d: -f1 /etc/passwd | wc -L) सबसे लंबे लॉगिन नाम की अधिकतम लंबाई का उपयोग कर उपयोगकर्ता फ़ील्ड को आउटपुट करने के लिए ps कमांड को बताता है।

+0

क्या आप कमांड क्या कर रहे हैं इसके बारे में कुछ अतिरिक्त जानकारी जोड़ सकते हैं? – dmportella

0

मूसाका के उत्तर (उदाहरण के लिए, यदि आपके पास बहुत लंबे समय तक उपयोगकर्ता नाम हैं, लेकिन जो बहुत ही कम उपयोग किए जाते हैं और आप अधिकतर समय बर्बाद नहीं करना चाहते हैं) के लिए गतिशील लंबाई आउटपुट के लिए, आप इसका उपयोग कर सकते हैं:

ps -eo उपयोगकर्ता: $ (ps axho uid | तरह -u | xargs getent पासवर्ड | कटौती -f1 -d: | WC एल), पीआईडी, ppid, ग, STIME, tname, समय, cmd

यह उपयोगकर्ता नाम कॉलम की लंबाई को तब तक बनाएगा जब तक वर्तमान में चल रहे प्रक्रिया का सबसे लंबा उपयोगकर्ता नाम। (ध्यान दें कि यह बुलेटप्रूफ नहीं है, और यदि कमांडर चलने के दौरान लंबे समय तक उपयोगकर्ता नाम के साथ नई प्रक्रिया शुरू होती है, तो आपको अभी भी एक संख्या प्रदर्शित हो सकती है। लेकिन 99.99% समय के लिए यह बहुत अच्छा आउटपुट है)

स्पष्टीकरण: $(ps axho uid [...] | wc -L) वर्तमान में चल रहे प्रक्रिया की अधिकतम उपयोगकर्ता नाम लंबाई की गणना करता है, और फिर हम उपयोगकर्ता नाम की कि लंबाई के साथ सामान्य ps निष्पादित

वैकल्पिक रूप से, अगर आप कम के उपयोगकर्ता नाम (< = 8 वर्ण) के लिए हमेशा की तरह देखने के लिए ps चाहते हैं, और नहीं है आउटपुट में कुछ लंबे उपयोगकर्ता नामों के लिए दिमाग के साथ गलत तरीके से हस्ताक्षर किए जाने के लिए दिमाग, आप कुछ ऐसा कर सकते हैं:

ps ax -o उपयोगकर्ता: 40, पिड, पीपीआईडी, सी, स्थिर, tname, समय, cmd | perl -pe 'अगर (/^(\ S +)/और लंबाई $ 1> 8) {s/^ (\ S +) \ s +/$ 1 /} अन्य {s/^ (। {9}) \ s +/$ 1 /} '

क्या करता है उत्पादन उपयोगकर्ता नाम स्तंभ बहुत लंबे बनाने (-o user:40) है, और फिर उत्पादन इतने लंबे समय के उपयोगकर्ता नाम (length $1 > 8) उन्हें और अगले कॉलम, और कम के उपयोगकर्ता नाम (else {) के बीच सिर्फ एक जगह है छंटनी कर रहे हैं postprocesses डिफ़ॉल्ट पर वापस (8 वर्ण तक उपयोगकर्ता नाम, और शेष 9वीं वर्ण रिक्त स्थान हैं)

संबंधित मुद्दे