ऐसा क्यों है कि जब मैं उपयोगकर्ता को स्विच करता हूं su <username>
और फिर निष्पादित करता who am i
है तो पिछले उपयोगकर्ता का आउटपुट होता है जिसे मैंने लॉग इन किया था और वह नहीं जिसे मैंने स्विच किया है?
ऐसा क्यों है कि जब मैं उपयोगकर्ता को स्विच करता हूं su <username>
और फिर निष्पादित करता who am i
है तो पिछले उपयोगकर्ता का आउटपुट होता है जिसे मैंने लॉग इन किया था और वह नहीं जिसे मैंने स्विच किया है?
जवाबों:
आप गलत कमांड चला रहे हैं।
who
यह दिखाने के लिए है कि कौन लॉग इन है, अर्थात कौन सा उपयोगकर्ता टर्मिनल का मालिक है। यह इस तरह एक लाइन देता है:
ckhan pts/1 2012-11-05 03:06 (c-21-13-25-10.ddw.ca.isp.net)
whoami
आपको यह दिखाने के लिए है कि इसे चलाने वाले व्यक्ति की प्रभावी उपयोगकर्ता आईडी क्या है। यह सिर्फ एक ही नाम देता है, जैसे (और चलने के बराबर id -un
):
ckhan
मुझे लगता है कि आपने who am i
टर्मिनल पर शाब्दिक रूप से टाइप किया होगा, जो who
दो उपेक्षित तर्कों ( am
, i
) के साथ चला।
देखें man who
और man whoami
अधिक जानकारी के लिए।
मेरे उबंटू 12.04.2 मैन पेज के लिए 'हू' कमांड, 'मैं कौन हूं' (या किसी भी दो तर्कों के साथ) 'हू-एम' के समान है और आपको एसटीडीआईएन के साथ जुड़े होस्टनाम और उपयोगकर्ता को देना चाहिए। हालाँकि मुझे 'मैं कौन हूँ' के साथ कोई आउटपुट नहीं मिला। या तो मैन पेज गलत है या कमांड में बग है। भले ही, जैसा कि पहले ckhan द्वारा उत्तर दिया गया था, 'whoami' कमांड आपको अपने प्रभावी उपयोगकर्ता आईडी के लिए उपयोगकर्ता नाम देगा। कम से कम उबंटू 12.04.2 में, आईडी से कोई नहीं, 'मैं कौन हूं', या 'वोअमी' आपको वर्तमान टर्मिनल पर लॉग इन किए हुए व्यक्ति का उपयोगकर्ता नाम देगा। वर्कअराउंड के रूप में आप इसके साथ मिल सकते हैं:
who | sed 's/ .*//'
वर्कअराउंड :
ls -l `tty` | awk '{print $3}'
से प्रतिस्थापन के रूप में काम करता है who am i | awk '{print $1}'
। नीचे स्पष्टीकरण:
कई प्रणालियों पर " who am i
" " " के बराबर है who -m
। यहाँ समस्या यह है कि कुछ टर्मिनलों के साथ , " who -m
" कुछ भी नहीं लौटाता है!
उदाहरण # xfce4- टर्मिनल से 1 रन
Pegasus ~ # whoami
root
Pegasus ~ # who am i
thomas pts/1 2017-08-19 11:15 (:0.0)
Pegasus ~ # who -m
thomas pts/1 2017-08-19 11:15 (:0.0)
Pegasus ~ # who
thomas tty8 2017-08-19 10:18 (:0)
thomas pts/1 2017-08-19 11:15 (:0.0)
thomas pts/5 2017-08-19 16:16 (:0.0)
Pegasus ~ # who am i | awk '{print $1}'
thomas
Pegasus ~ #
लेकिन उदाहरण # 2 एक सूक्ति-टर्मिनल (एक ही कंप्यूटर, एक ही कमांड) से
Pegasus ~ # whoami
root
Pegasus ~ # who am i
Pegasus ~ # who -m
Pegasus ~ # who
thomas tty8 2017-08-19 10:18 (:0)
thomas pts/1 2017-08-19 11:15 (:0.0)
thomas pts/5 2017-08-19 16:16 (:0.0)
Pegasus ~ #
यह सूक्ति प्रविष्टियों को जोड़ने के लिए सूक्ति-टर्मिनल का परिणाम प्रतीत होता है ...
stat
इसके बजाय का उपयोग करें : stat -c '%U' "$(tty)"
आप शायद who am i
या तो पार्स नहीं करना चाहिए , क्योंकि उपयोगकर्ता नाम कुछ दुर्लभ मामलों में रिक्त स्थान हो सकते हैं।
am
औरi
नजरअंदाज नहीं किया जाता है, वे भी POSIX द्वारा निर्दिष्ट किए जाते हैं: "POSIX लोकेल में, आउटपुट उपयोगकर्ता का वर्णन करने के लिए आउटपुट को सीमित करता है,-m
विकल्प के बराबर ।"