कमांड लाइन पर काम करते समय, मैं अक्सर सूडो का उपयोग करके बदल जाता हूं sudo -i
। हालाँकि, मेरी वर्किंग डायरेक्टरी अपने आप बदल जाती है /root
। मैं वहां जाना कभी नहीं चाहता; मैं वहीं रहना चाहता हूं, जहां मैं था! इसे कैसे प्राप्त किया जा सकता है?
कमांड लाइन पर काम करते समय, मैं अक्सर सूडो का उपयोग करके बदल जाता हूं sudo -i
। हालाँकि, मेरी वर्किंग डायरेक्टरी अपने आप बदल जाती है /root
। मैं वहां जाना कभी नहीं चाहता; मैं वहीं रहना चाहता हूं, जहां मैं था! इसे कैसे प्राप्त किया जा सकता है?
जवाबों:
आप sudo -s
इसके बजाय उपयोग कर सकते हैं , यह आपकी वर्तमान निर्देशिका को नहीं बदलेगा /root
, हालांकि आपके कुछ पर्यावरण चर जड़ के नहीं होंगे।
उबंटू मंच से इस पृष्ठ का एक अच्छा सारांश है:
Summary of the differences found
corrupted by user's
HOME=/root uses root's PATH env vars
sudo -i Y Y[2] N
sudo -s N Y[2] Y
sudo bash N Y[2] Y
sudo su Y N[1] Y
उबंटू के दस्तावेज़ों के इस पृष्ठ में सुडो पर पृष्ठभूमि की अधिक जानकारी है ।
sudo -iu
मेरे लिए ubuntuforums.org/…
sudo -i
उपयोगकर्ता के env var द्वारा अभी भी भ्रष्ट है। इससे बचने का एक ही तरीका है कि हम इसका इस्तेमाल करें su -l
।
यदि आप उपयोग करना चाहते हैं su
, तो उसी निर्देशिका में रहने का एक तरीका है।
su - उपयोगकर्ता -c "cd` pwd`; बाश "
यहाँ क्या चल रहा है:
su - user
= के रूप में लॉगिन करें user
-c
जिसका अर्थ है "नए उपयोगकर्ता के शेल में एक कमांड चलाना"-c "cd `pwd`"
हम जो कमांड देते हैं, वह वर्तमान निर्देशिका ( `pwd`
) पर स्विच करने के लिए है - लेकिन क्योंकि हम दोहरे कोट्स में बैकटिक्स का उपयोग करते हैं, pwd
कमांड का मूल्यांकन हम su
कमांड चलाने से पहले करते हैं , ताकि हम वास्तव में उस निर्देशिका में स्विच कर सकें जो अब हम पुराने रूप में कर रहे हैं उपयोगकर्ता।
-c 'cd `pwd`'
निष्पादित करेगा pwd
, इसलिए यह मूल्यांकन करेगा cd /root
, जो निश्चित रूप से, कुछ भी पूरा नहीं करेगा।यहां एकमात्र समस्या यह है कि कमांड चलाने के बाद नया शेल सही निकलता है, इसलिए हम जोड़ते हैं:
-c "cd `pwd`; bash"
जिसका अर्थ है "रन bash
(नया शेल) cd
कमांड को चलाने के बाद । बैश शेल तब तक बाहर नहीं निकलता जब तक हम उससे बाहर नहीं निकल जाते।ध्यान दें कि आप के `pwd`
साथ बदल सकते हैं $(pwd)
। वे कार्यात्मक रूप से समान हैं, लेकिन उद्धरण जैसे वर्णों की प्रचुरता को पढ़ना मुश्किल हो सकता है।
मैंने एक ही मुद्दे का सामना किया है और मुझे sudo su - devuser
देव सर्वर पर इसके अलावा कुछ भी चलाने की अनुमति नहीं है, इसलिए यही मैं साथ आया हूँ:
prev_user_home=$(~/bin/home.sh)
if [ -n $prev_user_home ] ; then
cd $prev_user_home
fi
#!/bin/bash
#brings you back home after sudo su
function get_owner {
pid=$1
echo $(ps ouid -p $pid h | tr -d ' ')
}
pid=$$
my_uid=$(get_owner $pid)
uid=$my_uid
i=0
while [[ $uid == $my_uid && $i -lt 20 ]] ; do
pid=$(ps -o ppid= $pid)
uid=$(get_owner $pid)
i=$((i+1))
done
user_home=$(getent passwd $uid | cut -d ':' -f '6')
if [[ -d $user_home && $uid != 0 ]] ; then
echo $user_home
fi
यह एक प्रक्रिया ट्री ऊपर जाता है और जाँचता है कि क्या प्रक्रिया के मालिक ने उपयोगकर्ता बदल दिया है।