¿Cuál es la diferencia entre "su" con y sin guión?

88

Soy bastante nuevo al terminal de Linux y no estoy muy seguro de cuál es la diferencia entre suun guión y susin guión es, por ejemplo: su - usernamevs su username.

Miré en la documentación pero allí, esto no fue mencionado. ¿Podría alguien ayudarme?

usuario574183
fuente
un "shell de inicio de sesión" a menudo significa shell interactivo. Esto es frente a un shell que solo ejecuta un script y sale.
Shahbaz
66
Está justo allí, en la misma página de manual con la que se vincula : " -, -l, --login: hacer que el shell sea un shell de inicio de sesión "
ArjunShankar
1
ni siquiera tiene que buscarlo en google, solo escriba su --help.
Art Shayderov
1
Es de destacar: esto es particularmente útil cuando se aspira a rootear, ya que sin usar el hypen para iniciar un nuevo shell de inicio de sesión, $PATHno se actualizará y, por lo tanto, no podrá llamar directamente binarios solo de root en /sbiny/usr/sbin
Garrett

Respuestas:

86

La diferencia entre "-" y "sin guión" es que este último mantiene su entorno existente (variables, etc.); el primero crea un nuevo entorno (con la configuración del usuario real, no el suyo).

https://wiki.archlinux.org/index.php/Su

El guión tiene dos efectos:

1) cambia del directorio actual al directorio de inicio del nuevo usuario (por ejemplo, a / root en el caso del usuario root) iniciando sesión como ese usuario

2) cambia las variables ambientales a las del nuevo usuario según lo dicte su ~ / .bashrc. Es decir, si el primer argumento para su es un guión, el directorio y el entorno actuales cambiarán a lo que se esperaría si el nuevo usuario hubiera iniciado sesión en una nueva sesión (en lugar de simplemente asumir una sesión existente).

paulsm4
fuente
este sitio -> admon.org/difference-between-login-shell-and-non-login-shell dice que cuando se usa sin guión, los archivos / etc / profile y ~ / .bash_profile no se ejecutan. ¿Qué importancia tienen estos dos archivos en el entorno del usuario?
user574183
2
Esas dos cosas son los archivos que configuran el entorno del usuario :) No ejecutarlos significa mantener su entorno original. Ejecutarlos (mediante el uso de "-") significa hacer que su entorno sea el mismo que el usuario al que está "demandando". Usar el guión suele ser lo que desea : uso "-" habitualmente cada vez que "su".
paulsm4
¿Importa realmente el orden de ejecución? Estoy preguntando esto porque en ese sitio han mencionado que los dos archivos / etc / bashrc ~ / .bashrc se ejecutan en orden inverso cuando se encuentran en un shell sin inicio de sesión. Alguien por favor ayúdame
user574183
1
@ user574183, por supuesto, por ejemplo, si uno establece algo pero el otro desarma algo o establece algo diferente
fikr4n
3

su -inicia un shell de inicio de sesión para root. Para conocer las diferencias con un shell normal, consulte este sitio, por ejemplo.

Lars Kotthoff
fuente
2
Eso es cierto, pero no es la pregunta :)
paulsm4
Eso es incorrecto, puede ejecutar su con un guión y hacer que inicie un shell para un usuario diferente. Ejecute lo siguiente y vea la salidasudo su - "testuser" -c "whoami"
David Hergert
@DavidHergert Sí, y sin un nombre de usuario, abre un shell para root.
Lars Kotthoff
@LarsKotthoff - ok, lo siento, la forma en que fue redactada sonaba como si el guión fuera lo que lo convierte en un shell raíz, no el hecho de que dejar a un usuario por defecto sea root. Incluso mi residente local SA me confundió sobre esto. :)
David Hergert