อยู่ในไดเรกทอรีการทำงานเดียวกันเมื่อเปลี่ยนเป็น sudo


25

sudo -iเมื่อทำงานในบรรทัดคำสั่งผมมักจะเปลี่ยนไปใช้ sudo /rootอย่างไรก็ตามไดเรกทอรีการทำงานของฉันเปลี่ยนแปลงโดยอัตโนมัติ ฉันไม่ต้องการไปที่นั่น ฉันต้องการที่จะอยู่ในที่ที่ฉันอยู่! ฉันจะบรรลุสิ่งนี้ได้อย่างไร

คำตอบ:


28

คุณสามารถใช้sudo -sแทนมันจะไม่เปลี่ยนไดเรกทอรีปัจจุบันของคุณถึง/rootแม้ว่าตัวแปรสภาพแวดล้อมบางส่วนของคุณจะไม่เป็นของรูต

หน้านี้จากฟอรัม Ubuntu มีบทสรุปที่ดี:

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

หน้าจากจากเอกสารของ Ubuntu นี้มีมากขึ้นข้อมูลพื้นฐานเกี่ยวกับ sudo


1
สวย! ขอบคุณภาพรวมเล็ก ๆ น้อย ๆ ที่เรียบง่าย แต่ยอดเยี่ยม!
Reinstate Monica

@ user1162541 มีความสุขที่สามารถช่วยได้
Levon

sudo -iuทำงานได้สำหรับฉันubuntuforums.org/…
rofrol

ในระหว่างการทดสอบของฉัน env vars ของsudo -iยังคงเสียหายโดย env vars ของผู้ใช้ su -lวิธีที่จะหลีกเลี่ยงการนี้คือการใช้งาน
สิงโต

5

หากคุณต้องการใช้suมีวิธีอยู่ในไดเรกทอรีเดียวกัน

su - ผู้ใช้ -c "cd` pwd`; bash "

เกิดอะไรขึ้นที่นี่:

  • su - user = เข้าสู่ระบบเป็น user
  • -c ซึ่งหมายถึง "เรียกใช้คำสั่งในเชลล์ผู้ใช้ใหม่"
  • -c "cd `pwd`"คำสั่งที่เราให้คือการสลับไปยังไดเรกทอรีปัจจุบัน ( `pwd`) - แต่เนื่องจากเราใช้ backticks ในเครื่องหมายคำพูดคู่คำpwdสั่งจะถูกประเมินก่อนที่เราจะเรียกใช้suคำสั่งเพื่อให้เราเปลี่ยนไปยังไดเรกทอรีที่เราอยู่ในตอนนี้เหมือนเก่า ผู้ใช้งาน

    • ในทางตรงกันข้าม-c 'cd `pwd`'จะรันpwdคำสั่งในเชลล์ใหม่ดังนั้นสิ่งนี้จะประเมินcd /rootว่าแน่นอนว่าจะไม่ทำอะไรให้สำเร็จ

    ปัญหาเดียวที่นี่คือเชลล์ใหม่ออกทันทีหลังจากรันคำสั่งดังนั้นเราจึงเพิ่ม:

  • -c "cd `pwd`; bash"ซึ่งหมายถึง "run bash(new shell) หลังจากรันcdคำสั่ง bash shell ไม่ออกจนกว่าเราจะออกจากระบบ

โปรดทราบว่าคุณสามารถแทนที่ด้วย`pwd` $(pwd)พวกมันใช้งานได้เหมือนกัน แต่ตัวละครที่มีเครื่องหมายคำพูดมากมายสามารถอ่านได้ยาก


0

ฉันประสบปัญหาเดียวกันและฉันไม่ได้รับอนุญาตให้ทำงานอย่างอื่นนอกจากsudo su - devuserเซิร์ฟเวอร์ dev ดังนั้นนี่คือสิ่งที่ฉันได้รับ:

  1. ใน. โปรไฟล์ของ devuser สลับกลับไปที่บ้านผู้ใช้ก่อนหน้านี้หากพบ
prev_user_home=$(~/bin/home.sh)
if [ -n $prev_user_home ] ; then
        cd $prev_user_home
fi
  1. สคริปต์เพื่อกำหนดผู้ใช้ก่อนหน้า สคริปต์ถูกวางในไดเร็กทอรี bin ของผู้พัฒนา:
#!/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.