¿Cuál es la diferencia entre "sudo -i" y "sudo bash -l"

13

Hay una pregunta reciente con respecto a varios administradores de sistemas que funcionan como root, y sudo bash -lse hizo referencia a ella.

Busqué esto en google y SE, pero no entiendo la diferencia entre sudo bash -ly sudo -i.

De las páginas de manual para bash y sudo parece que la diferencia puede ser que sudo bash -lejecuta ~ / .bash_profile, ~ / .bash_login y ~ / .profile, y ~ / .bash_logout del usuario root, pero al probarme a mí mismo parece que ejecuta el .bashrc del usuario normal y no el root. Es posible que haya entendido mal a qué usuario hace referencia la expresión ~ en las páginas de manual. Se agradecería la aclaración de la diferencia y los escenarios de uso.

Rqomey
fuente

Respuestas:

10

Se diferencian en que si el shell de inicio de sesión del usuario root especificado en / etc / passwd no es bash, entonces el segundo comando obtendrá un shell bash como root, mientras que el primer comando usará el shell interactivo que tenga el usuario root.

johnshen64
fuente
Hola @ johnshen64, ¿podrías aclarar los diferentes escenarios de uso?
Rqomey
2
a las personas les gusta el shell que están usando, por lo que si desea asegurarse de usar bash, debe usar el segundo formulario. el segundo formulario también simula un inicio de sesión real (eso es lo que significa -l). por supuesto, también podría escribir bash cuando descubra que el usuario (predeterminado a root) no tiene bash como shell interactivo al usar sudo -i. de lo contrario, la diferencia es muy pequeña. Como muestra la otra respuesta, también hay algunas diferencias menores en el entorno. en la mayoría de los casos, la diferencia no importa y la primera es más corta, ya que las distribuciones más comunes usan bash. Raramente uso la segunda forma.
johnshen64
4

También añadir a @ johnshen64 responder me di cuenta de que la sudo -iinvocación actualiza la $USERNAMEvariable de entorno a rooty cd ~al inicio del usuario como tal;

$ sudo -i
[root@workstation001 ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@workstation001 ~]# echo $USERNAME
root
[root@workstation001 userXXX]# echo $PWD
/root

Sin embargo, for no sudo bash -l $USERNAMEes molestado y el directorio de trabajo no cambia. (aunque esto no es coherente con otros usuarios, vea los comentarios ...)

$ sudo bash -l
[root@workstation001 userXXX]# id
uid=0(root) gid=0(root) groups=0(root)
[root@workstation001 userXXX]# echo $USERNAME
userXXX
[root@workstation001 userXXX]# echo $PWD
/home/userXXX

Entonces, presumiblemente, no está obteniendo exactamente el mismo conjunto ~/.bashrco no está en el mismo orden, etc.

(mi caja podría haber estado un poco desordenada por mis .bashrcretoques, así que YMMV)

Tom H
fuente
Gracias @Tom H: me echo $USERNAMEdevuelve root las dos veces (en mi escritorio ubuntu y centos 5.2). PWD es como informas sin embargo.
Rqomey