
Tengo la siguiente duda. En un tutorial relacionado con una instalación de software que estoy siguiendo dice que tengo que ejecutar los siguientes comandos (lo estoy haciendo en unsshshell, por lo que esta lista de pasos termina con el exit
comando):
sudo -s
apt-get update
apt-get install -y build-essential libtool libcurl4-openssl-dev libncurses5-dev libudev-dev autoconf automake screen
exit
Mis dudas son:
¿Qué hace exactamente el -s
parámetro después sudo
del comando?
Buscando en la web encontré que:
-s [comando] La opción -s (shell) ejecuta el shell especificado por la variable de entorno SHELL si está configurado o el shell como se especifica en la base de datos de contraseñas. Si se especifica un comando, se pasa al shell para su ejecución mediante la opción -c del shell. Si no se especifica ningún comando, se ejecuta un shell interactivo
Me parece que sudo -s
ejecuta un comando usando la variable de entorno del Shell.
Pero esto no me queda claro: en este caso ¿cuál es el comando que se ejecuta con la variable de entorno? (solo se ejecuta sudo -s
y no sudo -s [command]
).
Respuesta1
La respuesta simple es que te brinda un shell raíz. Para eso se utiliza aquí. hay una buenacomparación técnica entre los métodos , su
y en Unix.SEsudo -i
sudo -s
sudo su
pero eso realmente no es relevante aquí. El código podría haber usado cualquiera y habría funcionado.
La pepita de ayuda significa algunas cosas:
Está buscando un comando en la
$SHELL
variable de entorno. Si corresecho $SHELL
probablemente verás/bin/bash
. Eso significa que obtendrás una instancia raíz de Bash. Estoy seguro de que si estuvieras ahízsh
significaría que obtendrías una instancia raíz dezsh
.Si
$SHELL
está vacío, vuelve al shell predeterminado definido/etc/passwd
para ese usuario.Si proporciona un comando (por ejemplo
sudo -s whoami
), en realidad se está ejecutando:sudo /bin/bash -c "whoami"
Si no pasa un comando, no pasa un
-c
argumento, por lo que solo obtiene un shell interactivo.
He usado la frase "raíz" varias veces. Porpor defecto sudo
se trata de ejecutar cosas como root pero sudo
(y su) pueden ejecutar cosas como otros usuarios (si tiene permiso para hacerlo). Sólo digo esto para los pedantes que gritarán que sudo -s -u $USER
no les da un shell raíz como prometí -s
anteriormente.
y en mimás humildeDe opiniones, es realmente tonto convertirse en root para solo dos comandos, sin mencionar que podría dejar a un usuario ejecutando accidentalmente más comandos como root. Si desea o necesita ejecutar algo como root, simplemente anteponga el comando con sudo
:
sudo apt-get update
sudo apt-get install -y build-essential libtool libcurl4-openssl-dev libncurses5-dev libudev-dev autoconf automake screen
Dudaría de cualquier tutorial que sugiriera obtener un shell raíz, excepto en los casos en los que tienes una gran cantidad de comandos para ejecutar... E incluso entonces, hay secuencias de comandos.
Respuesta2
sudo -s
ejecutará un comando en el directorio actual como lo haría un usuario normal. Por ejemplo:
rick@alien:~/askubuntu$ suspendtime
Nov 12 14:06:27 to Nov 12 17:22:21 lasting 11,754 seconds
Nov 12 22:23:37 to Nov 13 04:24:37 lasting 21,660 seconds
(... SNIP ...)
Dec 02 21:58:49 to Dec 03 04:20:52 lasting 22,923 seconds
Dec 03 05:52:43 to Dec 03 16:37:44 lasting 38,701 seconds
Linux uptime 1,859,356 seconds (21 days, 12 hours, 29 minutes, 16 seconds)
45 Suspends 1,173,341 seconds (13 days, 13 hours, 55 minutes, 41 seconds)
Real uptime 686,015 seconds (7 days, 22 hours, 33 minutes, 35 seconds)
rick@alien:~/askubuntu$ sudo suspendtime
sudo: suspendtime: command not found
rick@alien:~/askubuntu$ sudo -H suspendtime
sudo: suspendtime: command not found
rick@alien:~/askubuntu$ sudo -s suspendtime
Nov 12 14:06:27 to Nov 12 17:22:21 lasting 11,754 seconds
(...SNIP...)
Dec 03 05:52:43 to Dec 03 16:37:44 lasting 38,701 seconds
Linux uptime 1,859,431 seconds (21 days, 12 hours, 30 minutes, 31 seconds)
45 Suspends 1,173,341 seconds (13 days, 13 hours, 55 minutes, 41 seconds)
Real uptime 686,090 seconds (7 days, 22 hours, 34 minutes, 50 seconds)
Por supuesto, usar -s
en lugar de anteponer el comando ./
puede no suponer un gran ahorro de tiempo.