Bleiben Sie beim Wechsel zu sudo im selben Arbeitsverzeichnis

Bleiben Sie beim Wechsel zu sudo im selben Arbeitsverzeichnis

Wenn ich auf der Kommandozeile arbeite, wechsle ich oft mit zu sudo sudo -i. Mein Arbeitsverzeichnis ändert sich jedoch automatisch zu /root. Dorthin möchte ich nie gehen, ich möchte dort bleiben, wo ich war! Wie kann ich das erreichen?

Antwort1

Sie könnten stattdessen verwenden sudo -s. Dadurch würde Ihr aktuelles Verzeichnis nicht in geändert /root, allerdings wären einige Ihrer Umgebungsvariablen nicht die von root.

DasSeiteaus den Ubuntu-Foren bietet eine schöne Zusammenfassung:

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

Diese Seite aus der Ubuntu-Dokumentation enthält viel mehrHintergrundinformationen zu sudo.

Antwort2

Wenn Sie verwenden möchten su, gibt es eine Möglichkeit, im selben Verzeichnis zu bleiben.

so -Benutzer-c "cd `pwd`; bash"

Was ist denn hier los:

  • su - user= Anmelden alsuser
  • -cwas bedeutet: „Führen Sie einen Befehl in der Shell des neuen Benutzers aus“
  • -c "cd `pwd`"Der von uns eingegebene Befehl dient zum Wechseln in das aktuelle Verzeichnis ( `pwd`) – da wir jedoch die Backticks in Anführungszeichen verwenden, pwdwird der Befehl ausgewertet, bevor wir ihn ausführen su, sodass wir tatsächlich in das Verzeichnis wechseln, in dem wir uns JETZT als alter Benutzer befinden.

    • Im Gegensatz dazu -c 'cd `pwd`'würde der Befehl in der neuen Shell ausgeführt pwd, sodass dies als ausgewertet würde cd /root, was natürlich nichts bewirkt.

    Das einzige Problem hierbei ist, dass die neue Shell direkt nach dem Ausführen des Befehls beendet wird. Daher fügen wir Folgendes hinzu:

  • -c "cd `pwd`; bash"was bedeutet, „ bash(neue Shell) nach dem Ausführen des cdBefehls auszuführen. Die Bash-Shell wird erst beendet, wenn wir uns abmelden.“

`pwd`Beachten Sie, dass Sie durch ersetzen können $(pwd). Sie sind funktional gleich, aber die Vielzahl an Anführungszeichen kann das Lesen erschweren.

Antwort3

Ich hatte das gleiche Problem und darf nichts anderes als sudo su - devuserauf dem Entwicklungsserver ausführen. Das hier ist mir also eingefallen:

  1. Wechseln Sie im .profile des Devusers zurück zum vorherigen Benutzer-Home, falls Folgendes gefunden wird:
prev_user_home=$(~/bin/home.sh)
if [ -n $prev_user_home ] ; then
        cd $prev_user_home
fi
  1. Ein Skript zum Ermitteln eines vorherigen Benutzers. Das Skript wird im Bin-Verzeichnis von devuser abgelegt:
#!/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

Es durchläuft einen Prozessbaum und prüft, ob sich der Benutzer geändert hat, der den Prozess besitzt.

Antwort4

Wenn beide Benutzer Zugriff auf das Arbeitsverzeichnis haben:

sudo su -- $USER

Beachten Sie: Wenn Sie ein Benutzer werden, der keinen Zugriff auf das Arbeitsverzeichnis hat, kann der neue Benutzer darin keine Lese-/Schreibvorgänge ausführen.

Oder seien Sie einfach Root im Arbeitsverzeichnis:

sudo su --

verwandte Informationen