Sudo के लिए PATH को कैसे जोड़ें / संशोधित करें?


1

मैंने पायथन के दो संस्करण स्थापित किए हैं।

  • पायथन 2.7.14 में /usr/local/bin
  • पायथन 2.7.5 इंच /usr/bin

जब मैं टाइप # pythonकरता 2.7.14हूं sudo python, तो यह संस्करण का उपयोग करता है, लेकिन जब मैं टाइप करता हूं , तो यह संस्करण का उपयोग करता है 2.7.5। मैं sudo pythonसंस्करण के लिए बिंदु कैसे बना सकता हूं 2.7.14?

के आउटपुट में sudo env | grep PATH, /usr/local/binपहले दिखाई देता है /usr/binलेकिन फिर भी यह पायथन से उठा रहा है /usr/bin

PATH=/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

जब मैं sudo suरूट शेल में प्रवेश करना चाहता हूं, तो यह मुझे देता है python 2.7.14लेकिन उसी सत्र में यदि मैं टाइप करता हूं sudo python, तो यह मुझे देता है python 2.7.5

मैं इस सवाल से गुज़रा लेकिन स्वीकार किए गए उत्तर में यह नहीं बताया गया है कि कैसे सुधो सही मार्ग का उपयोग करता है।

यहां बताया गया है कि सुरक्षित मार्ग कैसा दिखता है:

secure_path = /usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

1
का आउटपुट क्या है sudo type python? (मुझे संदेह है कि आपने pythonकिसी और चीज़ की ओर इशारा किया, या कहीं एक समारोह बनाया।)
फ्रैंकलिन यू

@ फ्रेंकलिन जो मेरे लिए काम नहीं करता है। कहते हैं sudo: type: command not found । मैंने एक उपनाम बनाया, लेकिन मैंने इसे हटा दिया क्योंकि यह सुडो के लिए काम नहीं कर रहा था
मनोज

सब ठीक है, कैसे sudo bash -c 'type python'?
फ्रैंकलिन यू

python is /bin/python
मनोज

आप कौन सा ओएस उपयोग कर रहे हैं? क्या बैश लॉग-इन शेल रूट के लिए है, या कुछ अन्य शेल है?
फ्रैंकलिन यू

जवाबों:


0

यह निश्चित रूप से एक sudoऔर GNU/Linuxसवाल है, वास्तव में Pythonसवाल नहीं है। जब आप sudo foo arg1 arg2सिस्टम चलाते हैं तो पहले एक शेल (रूट के लिए एक सेट, आप नहीं) को आग लगाता है जो कि root"रन" के रूप में चल रहा है foo arg1 arg2। यह लॉग-इन करने rootऔर foo arg1 arg2कमांड-लाइन पर टाइप करने के समान नहीं है , लेकिन करीब है। ऐसे निष्पादनयोग्य हैं जो एक sudo-ed उपयोगकर्ता को चलाने के लिए या कुछ चीजें और कुछ अतिरिक्त वातावरण चर आपके लिए सेट करने की अनुमति नहीं देंगे, जिन्हें आप देख सकते हैं कि क्या आप चलाते हैं sudo env। आप कुछ इस तरह देखेंगे:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PS1=%%
PS2=cont>
MAIL=/var/mail/root
LOGNAME=root
USER=root
USERNAME=root
HOME=/root
SHELL=/bin/bash
SUDO_COMMAND=/usr/bin/env
SUDO_USER=my_user
SUDO_USER=spt
SUDO_UID=1000
SUDO_GID=1000
SUDO_COMMAND=/usr/bin/env

और यदि शेल बैश है, तो उप-प्रकार की सामग्री में /root/.bashrcमौजूद होने की संभावना है। इसके अतिरिक्त, my_userबैश शेल पहले आइटम पर उर्फ ​​विस्तार करेगा (यानी, सुडो में sudo foo arg1 arg2) और दूसरा नहीं ( फू )। इसलिए यदि fooकोई अन्य व्यक्ति भी है, तो उसका विस्तार नहीं किया जाएगा और इसलिए चल रहा उप-भाग एक शाब्दिक के रूप में rootचलाने की कोशिश करेगा foo, न fooकि आपके द्वारा बनाए गए उपनाम के रूप में my_user। आपकी समस्या को "ठीक" करने के कुछ तरीके हैं। एक sudoअनुगामी स्थान के साथ एक अन्य को परिभाषित करता है:

alias='sudo '

जैसा कि यहां बताया गया है , यह कारण होगा कि sodoउर्फ-विस्तारित होने के बाद क्या होता है और इसे चलाने के लिए उपधारा में भेजने से पहले

एक अन्य विकल्प /root/.bashrcया समतुल्य फ़ाइल को संपादित करना और कई काम करना है:

  1. $PATHकुछ इस तरह का उपयोग करके चर के लिए वांछित अजगर के स्थान को रोकेंexport PATH=/path/to/foo:$PATH
  2. उर्फ को परिभाषित करें (तों) आप इसे वहां चाहते हैं

या, आप कुछ (हल्के) जोखिम भरे और आलसी लेकिन अत्यधिक प्रभावी और बस चला सकते हैं sudo (cd /root && ln -s /home/my_user/.bashrc)और rootहमेशा आपकी my_user/.bashrcफ़ाइल का स्रोत बनेंगे।

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