Sudo'ya geçerken aynı çalışma dizininde kalın


25

Komut satırında çalışırken genellikle sudo kullanarak değiştirilirim sudo -i. Ancak çalışma dizim otomatik olarak değişiyor /root. Oraya asla gitmek istemiyorum; Olduğum yerde kalmak istiyorum! Bunu nasıl başarabilirim?

Yanıtlar:


28

Bunun sudo -syerine, /rootortam değişkenlerinizden bazıları kök dizin olmasa da , geçerli dizininizi değiştirmez .

Ubuntu Forumları'nın bu sayfasının güzel bir özeti var:

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'nun belgelerine ait bu sayfa , sudo hakkında çok daha fazla arka plan bilgisine sahiptir .


1
Güzel! Bir demet teşekkürler, basit ama harika bir genel bakış!
Monica

@ user1162541 Yardımcı olabildiğim için mutluyum.
Levon

sudo -iubenim için çalışıyor ubuntuforums.org/…
rofrol

Testim sırasında, env değişkenleri sudo -ihala kullanıcının env değişkenleri tarafından bozulmuş. Bundan kaçınmanın tek yolu kullanmaktır su -l.
Simba

5

Kullanmak istiyorsanız su, aynı dizinde kalmanın bir yolu var.

su - kullanıcı -c "cd` pwd`; bash "

Burada neler oluyor:

  • su - user = olarak giriş yap user
  • -c bu, "yeni kullanıcının kabuğunda bir komut çalıştır" anlamına gelir
  • -c "cd `pwd`"Verdiğimiz komut geçerli dizine ( `pwd`) geçmektir - fakat çift tırnaklarda backticks kullandığımız için, pwdkomut çalıştırılmadan önce komut değerlendirilir su, böylece aslında ŞİMDİ olduğumuz dizine geçelim. kullanıcı.

    • Buna karşılık, -c 'cd `pwd`'çalıştıracaktır pwdBuna değerlendirmek diye, yeni kabuk komutu cd /rootelbette her şeyi başarabilir olmaz ki.

    Buradaki tek sorun, komutu çalıştırdıktan hemen sonra yeni kabuğun çıkmasıdır.

  • -c "cd `pwd`; bash"" Komutu bashçalıştırdıktan sonra " run (new shell) cdkomutunu çalıştırır .

Eğer yerine geçebileceğini Not `pwd`ile $(pwd). İşlevsel olarak aynılar, ancak alıntı benzeri karakterlerin bolluğu okunması zor olabilir.


0

Aynı sorunla karşılaştım ve sudo su - devuserdev sunucuda başka bir şey çalıştırma iznim yok , bu yüzden şu şekilde buldum:

  1. Cihazın .profile dosyasında bulunan önceki kullanıcı evine geri dönün:
prev_user_home=$(~/bin/home.sh)
if [ -n $prev_user_home ] ; then
        cd $prev_user_home
fi
  1. Önceki bir kullanıcıyı belirlemek için bir komut dosyası. Betik devuser's bin dizinine yerleştirilir:
#!/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

Bir işlem ağacına gider ve kullanıcının sahibi olan işlemin değişip değişmediğini kontrol eder.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.