Wie Sie in Ihrer Frage festgestellt haben, ist der Hauptunterschied die Umgebung.
sudo su -
gegen sudo -i
Im Falle der sudo su -
es sich um eine Login - Shell, so /etc/profile
, .profile
und .bashrc
werden ausgeführt , und Sie werden sich in root Home - Verzeichnis mit root - Umgebung finden.
sudo -i
ist fast identisch mit sudo su -
Mit der -i
Option (Erstanmeldung simulieren) wird die durch den Kennwortdatenbankeintrag des Zielbenutzers angegebene Shell als Anmeldeshell ausgeführt. Dies bedeutet , dass Login spezifische Ressourcendateien wie .profile
, .bashrc
oder .login
wird von der Shell gelesen und ausgeführt werden.
sudo su
gegen sudo -s
sudo su
ruft sudo
mit dem befehl auf su
. Bash wird als interaktive Nicht-Login-Shell bezeichnet. Also bash
nur ausführbar .bashrc
. Sie sehen, dass Sie sich nach dem Wechsel zu root immer noch im selben Verzeichnis befinden:
user@host:~$ sudo su
root@host:/home/user#
sudo -s
liest die $SHELL
Variable und führt den Inhalt aus. Wenn es $SHELL
enthält /bin/bash
, ruft es auf sudo /bin/bash
, was bedeutet, dass /bin/bash
es als Nicht-Login-Shell gestartet wird, so dass alle Punktedateien nicht ausgeführt werden, sondern bash
selbst gelesen werden. bashrc
des anrufenden Benutzers. Ihre Umgebung bleibt gleich. Dein Zuhause wird nicht das Zuhause von root sein. Sie sind also root, aber in der Umgebung des anrufenden Benutzers.
Fazit
Die -i
Flagge wurde hinzugefügt , um sudo
in 2004 , eine ähnliche Funktion zur Verfügung zu stellen sudo su -
, so sudo su -
war die Vorlage für sudo -i
und gemeint , wie es zu arbeiten. Ich denke, es spielt keine Rolle, welche Sie verwenden, es sei denn, die Umgebung ist nicht wichtig.
Zusatz
Ein grundlegender Punkt, der hier erwähnt werden muss, ist, dass sudo
nur ein einziger Befehl mit höheren Berechtigungen ausgeführt und diese Berechtigungen dann auf die ursprünglichen Berechtigungen zurückgesetzt werden sollen. Es war nie beabsichtigt, den Benutzer wirklich zu wechseln und eine Root-Shell offen zu lassen. Im Laufe der Zeit sudo
wurde mit solchen Mechanismen erweitert, weil sich die Leute darüber ärgerten, warum sie sudo
vor jedem Befehl etwas benutzen sollten .
Also wurde die Bedeutung von sudo
missbraucht. sudo
sollte den Benutzer ermutigen, die Verwendung von Root-Rechten zu minimieren.
Was wir jetzt haben, sudo
wird immer beliebter. Es ist in nahezu jede bekannte Linux-Distribution integriert. Das ursprüngliche Tool zum Wechseln zu einem anderen Benutzerkonto ist su
. Für einen Old School * nix-Veteranen sudo
mag so etwas unnötig erscheinen. Es erhöht die Komplexität und das Verhalten der Mechanismen, die wir von Microsofts OS-Familie kennen, und widerspricht somit der Philosophie der Einfachheit von * nix-Systemen.
Ich bin nicht wirklich ein Veteran, aber auch meiner Meinung nach sudo
war mir immer ein Dorn im Auge, ab wann es eingeführt wurde und ich habe immer an der Nutzung gearbeitet sudo
, wenn es möglich war. Ich bin sehr zurückhaltend sudo
. Auf allen meinen Systemen ist das Root-Konto aktiviert. Aber die Dinge ändern sich, vielleicht wird die Zeit kommen, wenn su
sie veraltet sind und vollständig sudo
ersetzt werden su
.
Aus diesem Grund ist es meines Erachtens am besten, die sudo
internen Mechanismen ( -s
, -i
) zu verwenden, anstatt sich auf ein altes Tool wie z su
.
ubuntu
Benutzer vom Standard abhaltensu -
. Sie haben ein Problem geschaffen und jetzt gibt es endlose Diskussionen darüber, wie man es löst.