Tetap di direktori kerja yang sama saat berganti ke sudo


25

Saat bekerja pada baris perintah, saya sering mengganti ke sudo menggunakan sudo -i. Namun, direktori kerja saya berubah secara otomatis menjadi /root. Saya tidak pernah ingin pergi ke sana; Saya ingin tetap di tempat saya! Bagaimana saya bisa mencapai ini?

Jawaban:


28

Anda dapat menggunakannya sudo -ssebagai gantinya, itu tidak akan mengubah direktori Anda saat ini /root, meskipun beberapa variabel lingkungan Anda tidak akan menjadi root.

Halaman ini dari Forum Ubuntu memiliki ringkasan yang bagus:

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

Halaman ini dari dokumentasi Ubuntu memiliki lebih banyak informasi latar belakang tentang sudo .


1
Indah! Terima kasih banyak, ikhtisar sederhana tapi bagus!
Pasang kembali Monica

@ user1162541 Senang bisa membantu.
Levon

sudo -iubekerja untuk saya ubuntuforums.org/…
rofrol

Selama pengujian saya, vv dari sudo -imasih rusak oleh vv. Satu-satunya cara untuk menghindari hal ini adalah menggunakan su -l.
Simba

5

Jika Anda ingin menggunakan su, ada cara untuk tetap berada di direktori yang sama.

su - user -c "cd` pwd`; bash "

Apa yang terjadi di sini:

  • su - user = masuk sebagai user
  • -c yang berarti "jalankan perintah di shell pengguna baru"
  • -c "cd `pwd`"perintah yang kita berikan adalah untuk beralih ke direktori saat ini ( `pwd`) - tetapi karena kita menggunakan backticks dalam tanda kutip ganda, pwdperintah tersebut dievaluasi sebelum kita menjalankan superintah, sehingga kita benar-benar beralih ke direktori yang kita berada di SEKARANG seperti yang lama pengguna.

    • Sebaliknya, -c 'cd `pwd`'akan menjalankan pwdperintah di shell baru, jadi ini akan mengevaluasi cd /root, yang, tentu saja, tidak akan mencapai apa pun.

    Satu-satunya masalah di sini adalah bahwa shell baru keluar tepat setelah menjalankan perintah, jadi kami menambahkan:

  • -c "cd `pwd`; bash"yang berarti "jalankan bash(shell baru) setelah menjalankan cdperintah. Shell bash tidak keluar sampai kita keluar.

Perhatikan bahwa Anda dapat menggantinya `pwd`dengan $(pwd). Secara fungsional mereka sama, tetapi banyaknya karakter seperti kutipan bisa menjadi sulit dibaca.


0

Saya telah menghadapi masalah yang sama dan saya tidak diizinkan menjalankan apa pun selain sudo su - devuserdi server dev, jadi inilah yang saya kemukakan:

  1. Dalam. Profil profil beralih kembali ke rumah pengguna sebelumnya jika ditemukan:
prev_user_home=$(~/bin/home.sh)
if [ -n $prev_user_home ] ; then
        cd $prev_user_home
fi
  1. Sebuah skrip untuk menentukan pengguna sebelumnya. Script ditempatkan di direktori bin devuser:
#!/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

Ini naik pohon proses dan memeriksa apakah proses yang memiliki pengguna berubah.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.