Come hai affermato nella tua domanda, la differenza principale è l'ambiente.
sudo su - vs. sudo -i
In questo caso sudo su -è una shell di accesso, quindi /etc/profile, .profilee .bashrcvengono eseguite e ti troverai nella directory principale di root con l'ambiente di root.
sudo -iè quasi lo stesso di sudo su -The -i(simulare login iniziale) opzione consente di eseguire la shell specificata dalla voce del database password dell'utente di destinazione come una shell di login. Ciò significa che specifica risorsa-login file come .profile, .bashrco .loginsarà letto ed eseguito dalla shell.
sudo su vs. sudo -s
sudo suchiama sudocon il comando su. Bash è chiamato come shell interattiva senza accesso. Quindi bashesegue solo .bashrc. Puoi vedere che dopo essere passati a root sei ancora nella stessa directory:
user@host:~$ sudo su
root@host:/home/user#
sudo -slegge la $SHELLvariabile ed esegue il contenuto. Se lo $SHELLcontiene /bin/bash, invoca sudo /bin/bash, il che significa che /bin/bashviene avviato come shell non di accesso, quindi tutti i file dot non vengono eseguiti, ma vengono bashletti. bashrcdell'utente chiamante. Il tuo ambiente rimane lo stesso. La tua casa non sarà la casa di root. Quindi sei root, ma nell'ambiente dell'utente chiamante.
Conclusione
La -ibandiera è stata aggiunta sudonel 2004 , per fornire una funzione simile a sudo su -, così come lo è sudo su -stato il modello sudo -ie voleva funzionare allo stesso modo. Penso che non importa quale usi, a meno che l'ambiente non sia importante.
aggiunta
Un punto di base che deve essere menzionato qui è che è sudostato progettato per eseguire un solo comando con privilegi più elevati e quindi rilasciare tali privilegi su quelli originali. Non è mai stato pensato per cambiare davvero l'utente e lasciare aperta una shell di root. Nel corso del tempo, è sudostato ampliato con tali meccanismi, perché le persone erano infastidite dal perché usare sudodi fronte a ogni comando.
Quindi il significato di è sudostato abusato. sudodoveva incoraggiare l'utente a ridurre al minimo l'uso dei privilegi di root.
Ciò che abbiamo ora è sudodiventato sempre più popolare. È integrato in quasi ogni distribuzione linux ben nota. Lo strumento originale per passare a un altro account utente è su. Per un veterano della vecchia scuola * nix cose del genere sudopotrebbero sembrare inutili. Aggiunge complessità e si comporta con maggiore probabilità ai meccanismi che conosciamo dalla famiglia os di Microsoft, e quindi è in contrasto con la filosofia della semplicità dei sistemi * nix.
Non sono davvero un veterano, ma anche a mio avviso sudoè sempre stata una spina nel fianco, dal momento in cui è stato introdotto e ho sempre lavorato sull'uso di sudo, se possibile. Sono più riluttante a usare sudo. Su tutti i miei sistemi, l'account di root è abilitato. Ma le cose cambiano, forse verrà il momento, quando susarà deprecato e sudorimpiazzerà sucompletamente.
Quindi penso che sarà il migliore per usare sudoi meccanismi interni ( -s, -i) invece di fare affidamento su un vecchio strumento come su.
ubuntuche impediscono agli utenti di essere standardsu -. Hanno creato il problema e ora ci sono discussioni infinite su come risolverlo.