Como você afirmou em sua pergunta, a principal diferença é o meio ambiente.
sudo su -
vs. sudo -i
No caso de sudo su -
, é um shell de login, então /etc/profile
, .profile
e .bashrc
são executados e você se encontrará no diretório inicial do root com o ambiente do root.
sudo -i
é quase igual a sudo su -
A opção -i
(simular login inicial) executa o shell especificado pela entrada do banco de dados de senha do usuário de destino como um shell de login. Isso significa que os arquivos de recursos específicos de login, como .profile
, .bashrc
ou .login
, serão lidos e executados pelo shell.
sudo su
vs. sudo -s
sudo su
chama sudo
com o comando su
. O Bash é chamado como shell interativo de não-login. Portanto, bash
apenas executa .bashrc
. Você pode ver que depois de mudar para o root você ainda está no mesmo diretório:
user@host:~$ sudo su
root@host:/home/user#
sudo -s
lê a variável $SHELL
e executa o conteúdo. Se $SHELL
contiver /bin/bash
, invoca sudo /bin/bash
, o que significa que /bin/bash
é iniciado como shell de não-login, portanto, todos os arquivos de pontos não são executados, mas bash
lê. bashrc
do chamando usuário. Seu ambiente permanece o mesmo. Sua casa não será a casa da raiz. Então você é root, mas no ambiente do usuário chamador.
Conclusão
A -i
bandeira foi adicionada a sudo
em 2004 , para fornecer uma função semelhante a sudo su -
, então sudo su -
foi o modelo para sudo -i
e pretendia funcionar como ele. Eu acho que não importa qual você usa, a menos que o ambiente não seja importante.
Adição
Um ponto básico que deve ser mencionado aqui é que sudo
foi projetado para executar somente um único comando com privilégios mais altos e, em seguida, descartar esses privilégios para os originais. Nunca foi feito para realmente trocar o usuário e deixar abrir um shell de root. Com o passar do tempo, sudo
foi expandido com esses mecanismos, porque as pessoas ficaram incomodadas com a razão de usar sudo
na frente de cada comando.
Então o significado de sudo
foi abusado. sudo
foi criado para incentivar o usuário a minimizar o uso de privilégios de root.
O que temos agora é sudo
cada vez mais popular. Está integrado em quase todas as distribuições de linux bem conhecidas. A ferramenta original para alternar para outra conta de usuário é su
. Para uma veterana da velha escola, algo como sudo
pode parecer desnecessário. Ele adiciona complexidade e se comporta com maior probabilidade aos mecanismos que conhecemos da os-family da Microsofts e, portanto, é contrário à filosofia de simplicidade dos sistemas * nix.
Eu não sou realmente um veterano, mas também na minha opinião sudo
sempre foi um espinho ao meu lado, desde o momento em que foi introduzido e sempre trabalhei em torno do uso de sudo
, se fosse possível. Estou muito relutante em usar sudo
. Em todos os meus sistemas, a conta root está ativada. Mas as coisas mudam, talvez a hora chegue, quando su
será preterido e sudo
substituirá su
completamente.
Portanto, acho que será o melhor para usar os mecanismos internos do sudo
( -s
, -i
) em vez de depender de uma ferramenta antiga, como su
.