সুডোতে পরিবর্তন করার সময় একই কার্যকারী ডিরেক্টরিতে থাকুন


25

কমান্ড লাইনে কাজ করার সময় আমি প্রায়শই সুডো ব্যবহার করে পরিবর্তিত হয়ে থাকি sudo -i। তবে আমার ওয়ার্কিং ডিরেক্টরিটি স্বয়ংক্রিয়ভাবে পরিবর্তিত হয় /root। আমি কখনই সেখানে যেতে চাই না; আমি যেখানে ছিলাম সেখানে থাকতে চাই! আমি কীভাবে এটি অর্জন করতে পারি?

উত্তর:


28

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

উবুন্টুর ডকুমেন্টেশনের এই পৃষ্ঠাটিতে সুডো সম্পর্কে অনেক বেশি পটভূমি তথ্য রয়েছে


1
সুন্দর! ধন্যবাদ একটি গুচ্ছ, সহজ তবে দুর্দান্ত সামান্য ওভারভিউ!
মনিকা

@ ব্যবহারকারী 1162541 সাহায্য করতে সক্ষম হওয়ায় খুশি।
লেভন

sudo -iuআমার জন্য কাজ করে ubuntuforums.org/…
rofrol

আমার পরীক্ষার সময়, এনভ ভার্সগুলি sudo -iএখনও ব্যবহারকারীর এনভি ভার্স দ্বারা দূষিত। এটি এড়ানোর একমাত্র উপায় হ'ল ব্যবহার করা su -l
সিম্বা

5

আপনি যদি ব্যবহার করতে চান suতবে একই ডিরেক্টরিতে থাকার উপায় আছে।

su - ব্যবহারকারী -c "সিডি` pwd`; বাশ "

এখানে কি হচ্ছে:

  • su - user = হিসাবে লগইন করুন user
  • -c যার অর্থ "নতুন ব্যবহারকারীর শেলতে একটি কমান্ড চালান"
  • -c "cd `pwd`"আমরা যে কমান্ডটি দিচ্ছি তা হ'ল বর্তমান ডিরেক্টরিতে স্যুইচ করা ( `pwd`) - তবে যেহেতু আমরা ডাবল উদ্ধৃতিতে ব্যাকটিক্স ব্যবহার pwdকরি su, তাই কমান্ডটি চালানোর আগে কমান্ডটি মূল্যায়ন করা হয় , যাতে আমরা আসলে এখন যে ডিরেক্টরিটি পেয়েছি সেটিকে পুরানো হিসাবে নিয়ে যেতে পারি ব্যবহারকারী।

    • বিপরীতে, নতুন শেলের মধ্যে কমান্ডটি -c 'cd `pwd`'কার্যকর করবে pwd, সুতরাং এটি মূল্যায়ন করবে cd /root, যা অবশ্যই কোনও কাজ সম্পাদন করবে না।

    এখানে কেবল সমস্যাটি হ'ল নতুন শেলটি কমান্ডটি চালানোর পরেই বেরিয়ে আসে, সুতরাং আমরা যুক্ত করব:

  • -c "cd `pwd`; bash"যার অর্থ হ'ল কমান্ডটি bashচালানোর পরে রান (নতুন শেল) cdwe বাশ শেলটি এটি থেকে লগ আউট না হওয়া পর্যন্ত প্রস্থান করে না।

মনে রাখবেন আপনি প্রতিস্থাপন করতে পারেন `pwd`সঙ্গে $(pwd)। এগুলি কার্যকরীভাবে একই, তবে উদ্ধৃতি-জাতীয় চরিত্রগুলির প্রাচুর্য পড়া শক্ত হয়ে উঠতে পারে।


0

আমি একই সমস্যার মুখোমুখি হয়েছি এবং আমাকে sudo su - devuserদেব সার্ভার ছাড়া অন্য কোনও কিছু চালানোর অনুমতি নেই , তাই এটিই আমি এনেছি:

  1. ডিভুজারের। প্রোফাইলে যদি পূর্ববর্তী ব্যবহারকারীর বাড়িতে ফিরে যায় তবে স্যুইচ করুন:
prev_user_home=$(~/bin/home.sh)
if [ -n $prev_user_home ] ; then
        cd $prev_user_home
fi
  1. পূর্ববর্তী ব্যবহারকারী নির্ধারণের জন্য একটি স্ক্রিপ্ট। স্ক্রিপ্টটি ডিভুসারের বিন ডিরেক্টরিতে স্থাপন করা হয়েছে:
#!/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

এটি একটি প্রক্রিয়া ট্রি পর্যন্ত যায় এবং প্রক্রিয়াটির নিজস্ব ব্যবহারকারীর পরিবর্তন হয়েছে কিনা তা পরীক্ষা করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.