अन्य उपयोगकर्ता का पर्यावरण चर प्राप्त करें [बंद]


23

क्या कोई ऐसा तरीका है जिससे मैं किसी अन्य उपयोगकर्ता का पर्यावरण चर देख सकता हूं? मैं इसे रूट के रूप में करना चाहता हूं, इसलिए अनुमतियाँ एक समस्या नहीं होगी जो मुझे लगता है।

उपयोगकर्ता स्वयं के लिए, मैं उपयोग करता हूं echo $PATHया set | grep PATH(या setजब मुझे चर नाम याद नहीं है)। एक अन्य उपयोगकर्ता के लिए एक समान निर्देश क्या होगा?

इसके लायक क्या है, मैं उबंटू सर्वर 13.04 पर हूं।


4
उपयोगकर्ताओं के पास पर्यावरण चर नहीं हैं, प्रक्रियाएं हैं। यह एक उपयोगकर्ता द्वारा निष्पादित प्रक्रियाओं के लिए सामान्य है, सभी के लिए समान वातावरण नहीं है। आप कौनसी समस्याएं हल करने की कोशिश कर रहे हैं?
गिल्स एसओ- बुराई को रोकें '

@ उदाहरण के लिए, मैं जानना चाहता हूं कि एक उपयोगकर्ता के पास मेल फ़ोल्डर क्या है। मैं उस उपयोगकर्ता के रूप में लॉगिन कर सकता हूं, फिर कर echo $MAILसकता हूं, लेकिन मुझे लगा कि कोई शॉर्टकट हो सकता है।

3
यह अभी भी प्रश्न को उपयोगी रूप से परिभाषित नहीं करता है (और उदाहरण के लिए आपके द्वारा स्वीकार किए गए उत्तर बहुत सारे कारकों के आधार पर काम कर सकते हैं या नहीं भी कर सकते हैं)। क्या आप डिफ़ॉल्ट मेलबॉक्स स्थान की तलाश कर रहे हैं? क्या आप उस स्थान की तलाश कर रहे हैं जहाँ उपयोगकर्ता वास्तव में अपना स्थानीय मेल प्राप्त करता है (जो भिन्न हो सकता है, और मौजूद नहीं हो सकता है, यदि उपयोगकर्ता के पास .forward) है? उपयोगकर्ता अक्सर अपनी .profileया अन्य कॉन्फ़िगरेशन फ़ाइलों में कुछ चर सेट करते हैं, और उन सभी को मज़बूती से समझने का कोई तरीका नहीं है। फिर, आप किस समस्या को हल करने की कोशिश कर रहे हैं?
गिल्स एसओ- बुराई को रोकें '

जवाबों:


20

एक अन्य विकल्प का उपयोग करना है env। इसे इस रूप में चलाएं root:

sudo -Hiu $user env | grep $var

उदाहरण के लिए

sudo -Hiu terdon env | grep HOME
HOME=/home/terdon

1
जब मैं रूट के रूप में लॉग इन करता हूं और अपने मानक उपयोगकर्ता नाम के लिए इस कमांड को निष्पादित करता हूं, तो मुझे मिलता है HOME=/root। यही कारण है कि जड़ की होम निर्देशिका है, लेकिन यह है नहीं मेरी मानक घर निर्देशिका। यदि आप उस पर्यावरण को जानना चाहते हैं जो किसी विशेष उपयोगकर्ता को लॉग इन करते समय मिलेगा, तो आपको इस विशेष उपयोगकर्ता के लॉगिन शेल की स्टार्टअप स्क्रिप्ट को चलाना होगा (और याद रखें कि उसका लॉगिन शेल आपके लॉगिन शेल से अलग हो सकता है)।
उवे

@ हम किस सिस्टम पर हैं? यह मेरे लिए ठीक काम करता है। क्या आपका मतलब है कि आप rootलॉगिन प्रबंधक से लॉग इन करते हैं ? यह ठीक काम करता है अगर मैं एक tty के लिए ड्रॉप और में लॉग इन करें root
terdon

मैं एक डेबियन मशीन पर हूं। मैं उव के रूप में लॉग इन करता हूं, एक एक्सटर्म खोलता हूं, चलाता हूं env | grep HOMEऔर प्राप्त करता HOME=/home/uweहूं; मैं निष्पादित करता हूं suऔर फिर एक बार env | grep HOMEऔर प्राप्त करता HOME=/rootहूं, फिर मैं दौड़ता हूं sudo -u uwe env | grep HOMEऔर फिर भी मिलता हूं HOME=/root
उवे

@ बहुत अजीब है। मैं एक डेबियन (LMDE) मशीन पर भी हूं, मैंने आपके द्वारा वर्णित (यहां तक ​​कि xtermमेरे सामान्य टर्मिनल के बजाय इस्तेमाल किया गया) सटीक प्रक्रिया की और अपेक्षित परिणाम प्राप्त किया।
terdon

मैनुअल के अनुसार, sudoगृह चर को केवल तभी सेट करें जब -Hविकल्प मौजूद हो या यदि संगत प्रविष्टि /etc/sudoersसेट हो। ऐसा लगता है कि हमारे sudoers फाइलें अलग हैं। वैसे भी, यह शायद -Hयहाँ उपयोग करने के लिए एक अच्छा विचार है, और संभवतः भी -i
उवे

2

एक उपयोगकर्ता के लिए, आप ऐसा कर सकते हैं:

su - <username> -c '. ~/.profile; echo $PATH'

सभी उपयोगकर्ताओं की $ PATH सूची:

for user in $(cat /etc/passwd | awk -F: '{print $1}'); do
  su - $user -c '. ~/.profile; printf "%s\n" "$PATH"'
done

@Camil स्टैप्स

. ~/.profileइस प्रकार मैं अपने पसंदीदा व्यक्ति पीटरिस क्रुमिन से सीखता हूं। उन्होंने यहां का ट्रिक समझाया । हो सकता है कि बाद में बैश संस्करण में विकल्प के साथ निर्माण किया गया हो NON_INTERACTIVE_LOGIN_SHELLS


धन्यवाद! इसके लिए $PATHभी . ~/.profile; भाग के बिना काम करता है - यह किस लिए है?

@CamilStaps "यह काम करता है" से आपका क्या मतलब है? हां, $PATHबिना सोर्सिंग के भी आपको एक मूल्य मिलता है ~/.profile, लेकिन यह लगभग निश्चित रूप से ऐसा नहीं है जो आप चाहते हैं (= वह मूल्य जो यह उपयोगकर्ता तब देखता है जब वह लॉग इन होता है)। यहां तक ​​कि सोर्सिंग ~/.profileपूरी तरह से विश्वसनीय नहीं है, क्योंकि उपयोगकर्ता एक शेल का उपयोग कर सकता है, जिसकी स्टार्टअप फ़ाइल अलग है ~/.profile
उवे

@ मुझे बिना समान आउटपुट मिला है, लेकिन मुझे लगता है कि यह सिर्फ एक संयोग है।

आप मान रहे हैं कि उपयोगकर्ता csh का उपयोग नहीं कर रहा है।
ग्लेन जैकमैन

@CamilStaps पहला सवाल यह है कि क्या वह विशेष उपयोगकर्ता अपने PATH ~/.profileको बिल्कुल भी संशोधित करता है । लेकिन किसी भी मामले में, व्यवहार को sudoबहुत अधिक कॉन्फ़िगर किया जा सकता है /etc/sudoers(टेराडन के साथ मेरी चर्चा देखें), इसलिए जब हमारे सिस्टम अलग-अलग व्यवहार करते हैं, तो संभवतः कॉन्फ़िगरेशन फ़ाइलों में अंतर के कारण होता है।
ऊव

0

रूट से आप su -उपयोगकर्ता को देख सकते हैं और फिर उस पर्यावरण चर को प्राप्त कर सकते हैं जिसे आप देखना चाहते हैं:

su - <username> -c 'echo $PATH'


किसी कारण से यह मेरे लिए काम नहीं करता है, भले ही कमांड एक अलग उपयोगकर्ता के रूप में निष्पादित हो। मैंने "env" का उपयोग करके समाप्त किया, इसलिए sth जैसे runuser -l <username> -c "env | grep <var>" | cut -d '=' -f 2मेरे लिए ठीक काम करता है। यदि आप रूट नहीं कर रहे हैं, के साथ उपसर्ग कमांड की जरूरत है sudo
आंद्रेई-निकुला पेट्रे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.