Cuando estoy haciendo algo que requiere que la raíz se escriba decenas de veces seguidas, prefiero cambiar mi sesión a una sesión raíz. En los diversos tutoriales e instrucciones que he utilizado en Internet, veo sudo su
, sudo su -
, sudo -i
y sudo /bin/bash
se utiliza para abrir una sesión de raíz, pero no estoy claro sobre la diferencia entre estos y cuándo o si lo que importa de diferencia.
¿Alguien puede aclarar esto por mí?
command-line
bash
sudo
su
Pablo
fuente
fuente
sudo -s
ysudo su
.Respuestas:
Para explicar esto, necesita saber qué hacen los programas:
su
- El comandosu
se usa para cambiar a otro usuario ( s witch u ser), pero también puede cambiar al usuario raíz invocando el comando sin ningún parámetro.su
le pide la contraseña del usuario para cambiar, después de escribir la contraseña que cambió al entorno del usuario.sudo
-sudo
está destinado a ejecutar un solo comando con privilegios de root. Pero a diferencia desu
esto, le solicita la contraseña del usuario actual. Este usuario debe estar en el archivo sudoers (o en un grupo que esté en el archivo sudoers). De forma predeterminada, Ubuntu "recuerda" su contraseña durante 15 minutos, para que no tenga que escribirla cada vez.bash
- Una interfaz de texto para interactuar con la computadora. Es importante comprender la diferencia entre inicio de sesión, no inicio de sesión, shells interactivos y no interactivos:Tipos de conchas:
Entonces los casos son:
sudo su
Llamadassudo
con el comandosu
. Bash se llama como shell interactivo sin inicio de sesión. Entonces bash solo se ejecuta.bashrc
. Puede ver que después de cambiar a root todavía está en el mismo directorio:sudo su -
Esta vez se trata de un shell de entrada, por lo que/etc/profile
,.profile
y.bashrc
se ejecutan y se encontrará en el directorio inicial de la raíz con el medio ambiente de la raíz.sudo -i
Es casi lo mismo que lasudo su -
opción -i (simular inicio de sesión inicial) ejecuta el shell especificado por la entrada de la base de datos de contraseñas del usuario objetivo como un shell de inicio de sesión. Esto significa que los archivos de recursos específicos de inicio de sesión como.profile
,.bashrc
o.login
serán leídos y ejecutados por el shell.sudo /bin/bash
Esto significa que llamassudo
con el comando/bin/bash
./bin/bash
se inicia como un shell sin inicio de sesión, por lo que no se ejecutan todos los archivos de puntos, sino que bash mismo lee.bashrc
al usuario que llama. Tu entorno permanece igual. Su hogar no será el hogar de la raíz. Entonces eres root, pero en el entorno del usuario que llama.sudo -s
lee la$SHELL
variable y ejecuta el contenido. Si lo$SHELL
contiene/bin/bash
, invocasudo /bin/bash
(ver arriba).Cheque:
Para verificar si está en un shell de inicio de sesión o no (funciona solo en bash porque
shopt
es un comando incorporado):fuente
sudo
permite a un usuario permitido ejecutar un comando como superusuario u otro usuario . De todos modos, +1 por tu esfuerzo.root
sesión de usuario (en lugar de usarsudo
) es cuando estoy haciendo algo que requiere un uso intensivo deroot
privilegios, como cuando instalo algo nuevo o realizo una reconfiguración importante . He estado usandosudo /bin/bash
, pero aparentemente ese método tiene una mala reputación por alguna razón que no entiendo.sudo -i
se sugiere. Lea aquí: ubuntuforums.org/showthread.php?t=1817402 y aquí: unix.stackexchange.com/questions/98531/…Para buscar diferencias, puede controlar el entorno resultante entre las diferentes invocaciones.
Puede encontrar algunas diferencias "pequeñas" en algunas variables críticas:
PATH
`LD_LIBRARY_PATH
`LD_PRELOAD
o alguna diferencia en ~ /. manejo de archivos de puntos (
~/.config
).Considere también la propiedad de los archivos de registro basados en $ HOME (
~/.xsession.errors
, etc.) o las cookies xauth (~/.Xauthority
) que generan los comandos.Pruebe estos comandos:
fuente