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
, .profile
e .bashrc
vengono 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
, .bashrc
o .login
sarà letto ed eseguito dalla shell.
sudo su
vs. sudo -s
sudo su
chiama sudo
con il comando su
. Bash è chiamato come shell interattiva senza accesso. Quindi bash
esegue solo .bashrc
. Puoi vedere che dopo essere passati a root sei ancora nella stessa directory:
user@host:~$ sudo su
root@host:/home/user#
sudo -s
legge la $SHELL
variabile ed esegue il contenuto. Se lo $SHELL
contiene /bin/bash
, invoca sudo /bin/bash
, il che significa che /bin/bash
viene avviato come shell non di accesso, quindi tutti i file dot non vengono eseguiti, ma vengono bash
letti. bashrc
dell'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 -i
bandiera è stata aggiunta sudo
nel 2004 , per fornire una funzione simile a sudo su -
, così come lo è sudo su -
stato il modello sudo -i
e 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 è sudo
stato 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, è sudo
stato ampliato con tali meccanismi, perché le persone erano infastidite dal perché usare sudo
di fronte a ogni comando.
Quindi il significato di è sudo
stato abusato. sudo
doveva incoraggiare l'utente a ridurre al minimo l'uso dei privilegi di root.
Ciò che abbiamo ora è sudo
diventato 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 sudo
potrebbero 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 su
sarà deprecato e sudo
rimpiazzerà su
completamente.
Quindi penso che sarà il migliore per usare sudo
i meccanismi interni ( -s
, -i
) invece di fare affidamento su un vecchio strumento come su
.
ubuntu
che impediscono agli utenti di essere standardsu -
. Hanno creato il problema e ora ci sono discussioni infinite su come risolverlo.