रूट यूजर्स के लिए सोर्सिंग बैश प्रोफाइल


17

अग्रिम में क्षमा याचना अगर यह सवाल हर किसी को नरक से परेशान करता है जैसा कि मैं सराहना करता हूं, तो यह कई बार पहले कई तरीकों से पूछा गया है। कृपया आश्वस्त रहें, मैंने अभिलेख पढ़े हैं और कम से कम कुछ सुझावों की कोशिश की है, लेकिन अभी भी (सरल) मुद्दे को हल नहीं कर सकते हैं। उम्मीद है कि कोई एक जवाब दे सकता है और मैं उचित रूप से विनम्र महसूस कर सकता हूं। FYI करें, किसी भी अस्पष्टता से बचने के लिए, मैं सापेक्ष रास्तों के बजाय पूर्ण उपयोग करने जा रहा हूँ।

जब मैं लॉग इन करता हूं, तो मैं उपयोगकर्ता के रूप में ऐसा करता हूं adam। उपनाम /Users/adam/.bash_profileलोड किए गए हैं और मैं उन्हें तुरंत एक टर्मिनल को खींचने पर उपयोग कर सकता हूं। मैं एक .bashrcफ़ाइल का उपयोग नहीं करता हूं और यह ठीक है।

अब मैं suटर्मिनल में टाइप करके और फिर अपना पासवर्ड डालकर रूट करता हूं। शीघ्र परिवर्तन और मैं अब रूट उपयोगकर्ता हूं। मेरा सवाल यह है: रूट बनने के तुरंत बाद, क्या मेरे रूट बैश प्रोफाइल को मेरे द्वारा मैन्युअल रूप से प्रोफाइल फाइल को सोर्स किए बिना लोड किया जा सकता है? इसका कारण मुझे पता है कि यह स्वचालित रूप से नहीं होता है क्योंकि मेरे पास मेरी मूल प्रोफ़ाइल फ़ाइल और मेरे पास समान उपनाम हैं /Users/adam/.bash_profile। रूट उपयोगकर्ता बनने के बाद, जब तक मैं टाइप source [root_profile_file]नहीं करता, वे काम नहीं करते। मैंने निम्नलिखित क्रमपरिवर्तन स्थापित करने और फिर टर्मिनल के माध्यम से रूट करने की कोशिश की है, लेकिन उनमें से कोई भी स्वचालित रूप से प्रोफ़ाइल / उपनाम (नोट नहीं करता है, मेरे पास समवर्ती रूप से सेट किए गए विकल्पों में से कोई भी विकल्प नहीं है, इसलिए मुझे नहीं लगता कि मैं ' m प्रणाली को भ्रमित करना):

विकल्प 1: मेरे उपनाम को अंदर रखें/etc/profile

विकल्प 2:

  • में /etc/profile, डालें[ -r /etc/bashrc ] && . /etc/bashrc
  • मेरे उपनाम में डाल दिया /etc/bashrc

विकल्प 3:

  • में /etc/bash_profile, डालें[ -r /etc/bashrc ] && . /etc/bashrc
  • मेरे उपनाम में डाल दिया /etc/bashrc

विकल्प 4: मेरे उपनाम को अंदर रखें/var/root/.profile

विकल्प 5:

  • में /var/root/.profile, डालें[ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • मेरे उपनाम में डाल दिया /var/root/.bashrc

विकल्प 6:

  • में /var/root/.bash_profile, डालें[ -r /var/root/.bashrc ] && . /var/root/.bashrc
  • मेरे उपनाम में डाल दिया /var/root/.bashrc

कृपया ध्यान दें, उपरोक्त में से किसी के साथ, यदि मैं रूट पर स्विच करता हूं और फिर source root_profile_fileएलियास लोड किया जाता है, लेकिन केवल अगर मैं वास्तव में फ़ाइल को मैन्युअल रूप से स्रोत करता हूं। शायद मैंने पूरी तरह से गलत समझा है कि कैसे काम करता है और रूट पर स्विच करने के बाद एक प्रोफ़ाइल फ़ाइल को स्वचालित रूप से स्रोत करना संभव नहीं है, लेकिन मुझे उम्मीद है कि एक सरल समाधान है। इस संदेश को पढ़ने के लिए समय निकालने वाले किसी भी व्यक्ति के लिए अग्रिम धन्यवाद।

जवाबों:


14

आपके सामने जो समस्या आ रही है, वह यह है कि जब आप suस्वयं चलाते हैं, तो आप 'लॉगिन' शेल में प्रवेश नहीं कर रहे हैं। इसका अर्थ है कि आपका वातावरण, कार्यशील निर्देशिका, और यूआईडी / जीआईडी ​​को छोड़कर सब कुछ मूल उपयोगकर्ता के समान है।

लॉगिन ट्रिगर निष्पादित नहीं करते हैं, और आप उन मुद्दों का अनुभव करते हैं जो आप वर्णन करते हैं।

एक साधारण समस्या का सरल समाधान:

su -

से su(1)आदमी पेज:

सु आदेश एक लॉगिन सत्र के दौरान किसी अन्य उपयोगकर्ता बनने के लिए प्रयोग किया जाता है। एक उपयोगकर्ता नाम के बिना आह्वान किया, सु सुपरसियर बनने के लिए चूक। वैकल्पिक तर्क - का उपयोग उस वातावरण को प्रदान करने के लिए किया जा सकता है जैसा कि उपयोगकर्ता को उम्मीद थी कि उपयोगकर्ता ने सीधे लॉग इन किया होगा।

इसके अलावा:

   -, -l, --login
       Provide an environment similar to what the user would expect had the user logged in directly.

यदि आप suएक लॉगिन शेल में हैं, तो बैश आपसे अपेक्षा के अनुसार व्यवहार करेगा, और स्वचालित रूप से "लॉगिन" पर उपयुक्त फ़ाइलों को स्रोत कर देगा, बिना अत्यधिक हैक किए वर्कअराउंड की आवश्यकता के बिना।


1
मैं फिर भी हाई वू के नोटों को दूसरा बनाऊंगा: आप वास्तव में, वास्तव में, वास्तव में कभी भी suऔर न ही काम करना चाहिए root। नहीं है sudoउस उद्देश्य के लिए, या आप इस तरह से है कि आप सभी पर रूट विशेषाधिकारों की आवश्यकता नहीं है में काम कर सकते हैं।
जेसन सलज

आप और @Hai Vu दोनों को धन्यवाद। "सु -" चाल करता है और हाँ, पूरी तरह से समझा जाता है, जड़ को आम तौर पर बचा जाना चाहिए।
एडम गोल्ड

1
मैं पहले से ही su कमांड के बाद '-' जोड़ना जानता था, लेकिन फिर भी रूट यूजर के लिए मेरा .bash_profile नहीं मिल रहा था। फ्लोरियन बिदैब और पैट्रिक्स के उत्तर के बारे में नीचे दिए गए रूट शेल को शश से बैश में बदलने से मेरे लिए समस्या तय हो गई।
JaredC

9

वास्तव में रूट उपयोग /bin/sh(पुराना बोर्न शेल), .bash_profileऔर .bashrcबैश द्वारा पढ़ा जाता है।

यह मुश्किल हो जाता है क्योंकि उन फ़ाइलों में कार्यक्षमता उपलब्ध नहीं है का उपयोग कर सकते हैं sh। यहां तक ​​कि अगर आप source .bashrcया source .bash_profile, आप अभी भी उदाहरण के लिए जटिल कार्यों के साथ कुछ मुद्दा होगा।

इसे हल करने का एक तरीका है दौड़ना

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash

करने के लिए rootखोल को स्विच करने के लिए bash


रूट की /bin/shउपयोग /var/root/.profileफ़ाइल। @
माटिक

6

जब मैं पूरी तरह से, मैं sudo bashजो मुझे जड़ बनाता है , लेकिन JRobert के वातावरण के साथ। मेरे .bashrc में शामिल हैं:

# Prompt: 'jrobert@JRiMac ~' in green (red, if I'm root), '$' in white
if [[ $UID == 0 ]]; then
   export PS1="\[\e[1;31;40m\]\u@\h \W\[\e[0m\]\$ "
else
   export PS1="\[\e[32;40m\]\u@\h \W\[\e[0m\]\$ "
fi

जड़-शीघ्र चमक वापस करने के लिए लाल रंग में मुझ पर वापस जोर देने के लिए कि मैं अब (अधिक) अपने स्वयं के प्रति संवेदनशील हूं [एक चुनें: क्रूरता, विनम्रता, वसा-उंगली की प्रवृत्ति, अच्छी सलाह लेने के लिए अनिच्छा, अपंगता - चप्पू न छोड़ें]।


3

मैं sudo -iउपयोगकर्ता को रूट करने के लिए स्विच करने के लिए उपयोग कर रहा हूं । इस स्थिति में, शेल कॉन्फ़िगरेशन से पढ़ा जाता है /var/root/.profile


1

सामान्य तौर पर, मैं इसके खिलाफ सलाह देता हूं suक्योंकि यह खतरनाक है, बस इसके लिए खोज करें और आपको पता है कि क्यों। आपके प्रश्न पर, रूट खाता उसी तरह से काम करता है जिस तरह से आपका खाता करता है: यह स्रोत ~ / .bash_profile और / या ~ / .bashrc। मुझे नहीं पता कि कौन सा है, लेकिन मेरा अंतर्ज्ञान ~ / .bashrc की ओर झुकता है , इसलिए आप अपने उपनामों को वहां रखने की कोशिश कर सकते हैं। यहाँ एक सुझाव है:

su           # type password to get into root account
vi ~/.bashrc # put your aliases there
exit         # exit your root session
su           # try again to see if your aliases works

0

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash केवल यह काम करता है! मैंने export PS1=...इन सभी फाइलों में से किसी को ऊपर रखने की कोशिश की । / etc / प्रोफाइल, / etc / bashrc /var/root/.bashrc /var/root/.profile /var/root/.bash_profile।

इन सभी फ़ाइलों से /bin/sh, जानकारी नहीं पढ़ता है! (केवल बैश) (मैक ओएस एल कैपिटन)। और मुझे बैश करने के लिए खोल बदलना पड़ा।

इसके अलावा "su -"भी काम करता है। (यह शेल /var/root/.profileफ़ाइल पढ़ रहा है)


1
वहाँ फिर से पुष्टि मौजूदा उत्तर देने के लिए कोई जरूरत नहीं है ...
nohillside

-1

इसे हल करने का एक तरीका यह है कि रूट के शेल को बैश करने के लिए निम्नलिखित को चलाएं:

sudo dscl . -change /Users/root UserShell /bin/sh /bin/bash

इस समाधान ने मेरा मुद्दा भी तय कर दिया है।


-2

यदि आपके पास केवल एक 'डिफ़ॉल्ट' उपयोगकर्ता है और रूट उपयोगकर्ता जिसे आप alias su="su -"'डिफ़ॉल्ट' उपयोगकर्ता के .bash_profile पर रख सकते हैं और आपको वह प्रभाव मिलता है जो आप चाहते हैं। काम करता है और कोई हैकी चीजों के साथ नहीं।

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