Rimani nella stessa directory di lavoro quando cambi su sudo


25

Quando lavoro sulla riga di comando, cambio spesso a sudo usando sudo -i. Tuttavia, la mia directory di lavoro cambia automaticamente in /root. Non voglio mai andarci; Voglio rimanere dove ero! Come posso raggiungere questo obiettivo?

Risposte:


28

È possibile utilizzare sudo -sinvece, non cambierebbe la directory corrente in /root, anche se alcune delle variabili di ambiente non sarebbero quelle di root.

Questa pagina dai forum di Ubuntu ha un bel riassunto:

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

Questa pagina dalla documentazione di Ubuntu contiene molte più informazioni di base su sudo .


1
Bellissimo! Grazie mille, semplice ma ottima panoramica!
Ripristina Monica il

@ user1162541 Felice di poterti aiutare.
Levon,

sudo -iufunziona per me ubuntuforums.org/…
rofrol

Durante il mio test, env vars of sudo -iè ancora corrotto da env vars dell'utente. L'unico modo per evitarlo è usare su -l.
Simba

5

Se vuoi usare su, c'è un modo per rimanere nella stessa directory.

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

Cosa sta succedendo qui:

  • su - user = accedi come user
  • -c che significa "esegui un comando nella shell del nuovo utente"
  • -c "cd `pwd`"il comando che diamo è di passare alla directory corrente ( `pwd`) - ma poiché usiamo i backtick tra virgolette doppie, il pwdcomando viene valutato prima di eseguire il sucomando, in modo da passare alla directory in cui ci troviamo ADESSO come vecchio utente.

    • Al contrario, -c 'cd `pwd`'eseguirà il pwdcomando nella nuova shell, quindi valuterebbe ciò cd /root, che, ovviamente, non compirà nulla.

    L'unico problema qui è che la nuova shell esce subito dopo aver eseguito il comando, quindi aggiungiamo:

  • -c "cd `pwd`; bash"che significa "esegui bash(nuova shell) dopo aver eseguito il cdcomando. La shell bash non si chiude fino a quando non ci disconnettiamo da esso.

Si noti che è possibile sostituire `pwd`con $(pwd). Funzionalmente sono uguali, ma l'abbondanza di personaggi simili a virgolette può diventare difficile da leggere.


0

Ho riscontrato lo stesso problema e non mi è permesso eseguire altro che sudo su - devusersul server di sviluppo, quindi questo è quello che mi è venuto in mente:

  1. Nel file .profile di devuser, torna alla home dell'utente precedente se trovata:
prev_user_home=$(~/bin/home.sh)
if [ -n $prev_user_home ] ; then
        cd $prev_user_home
fi
  1. Uno script per determinare un utente precedente. Lo script viene inserito nella directory bin di 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

Va su un albero dei processi e controlla se l'utente proprietario del processo è cambiato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.