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?
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:
Bunun sudo -s
yerine, /root
ortam 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 .
sudo -iu
benim için çalışıyor ubuntuforums.org/…
sudo -i
hala kullanıcının env değişkenleri tarafından bozulmuş. Bundan kaçınmanın tek yolu kullanmaktır su -l
.
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, pwd
komut çalıştırılmadan önce komut değerlendirilir su
, böylece aslında ŞİMDİ olduğumuz dizine geçelim. kullanıcı.
-c 'cd `pwd`'
çalıştıracaktır pwd
Buna değerlendirmek diye, yeni kabuk komutu cd /root
elbette 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) cd
komutunu ç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.
Aynı sorunla karşılaştım ve sudo su - devuser
dev sunucuda başka bir şey çalıştırma iznim yok , bu yüzden şu şekilde buldum:
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
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.