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, .profileund .bashrcwerden ausgeführt , und Sie werden sich in root Home - Verzeichnis mit root - Umgebung finden.
sudo -iist fast identisch mit sudo su -Mit der -iOption (Erstanmeldung simulieren) wird die durch den Kennwortdatenbankeintrag des Zielbenutzers angegebene Shell als Anmeldeshell ausgeführt. Dies bedeutet , dass Login spezifische Ressourcendateien wie .profile, .bashrcoder .loginwird von der Shell gelesen und ausgeführt werden.
sudo su gegen sudo -s
sudo suruft sudomit dem befehl auf su. Bash wird als interaktive Nicht-Login-Shell bezeichnet. Also bashnur 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 -sliest die $SHELLVariable und führt den Inhalt aus. Wenn es $SHELLenthält /bin/bash, ruft es auf sudo /bin/bash, was bedeutet, dass /bin/bashes als Nicht-Login-Shell gestartet wird, so dass alle Punktedateien nicht ausgeführt werden, sondern bashselbst gelesen werden. bashrcdes 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 -iFlagge wurde hinzugefügt , um sudoin 2004 , eine ähnliche Funktion zur Verfügung zu stellen sudo su -, so sudo su -war die Vorlage für sudo -iund 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 sudonur 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 sudowurde mit solchen Mechanismen erweitert, weil sich die Leute darüber ärgerten, warum sie sudovor jedem Befehl etwas benutzen sollten .
Also wurde die Bedeutung von sudomissbraucht. sudosollte den Benutzer ermutigen, die Verwendung von Root-Rechten zu minimieren.
Was wir jetzt haben, sudowird 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 sudomag 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 sudowar 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 susie veraltet sind und vollständig sudoersetzt werden su.
Aus diesem Grund ist es meines Erachtens am besten, die sudointernen Mechanismen ( -s, -i) zu verwenden, anstatt sich auf ein altes Tool wie z su.
ubuntuBenutzer vom Standard abhaltensu -. Sie haben ein Problem geschaffen und jetzt gibt es endlose Diskussionen darüber, wie man es löst.