¿Qué hace el comando 'sudo -s' y cómo se utiliza en este ejemplo?

¿Qué hace el comando 'sudo -s' y cómo se utiliza en este ejemplo?

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 exitcomando):

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 -sparámetro después sudodel 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 -sejecuta 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 -sy 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 , suy en Unix.SEsudo -isudo -ssudo supero 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 $SHELLvariable de entorno. Si corres echo $SHELLprobablemente verás /bin/bash. Eso significa que obtendrás una instancia raíz de Bash. Estoy seguro de que si estuvieras ahí zshsignificaría que obtendrías una instancia raíz de zsh.

  • Si $SHELLestá vacío, vuelve al shell predeterminado definido /etc/passwdpara 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 -cargumento, por lo que solo obtiene un shell interactivo.

He usado la frase "raíz" varias veces. Porpor defecto sudose 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 $USERno les da un shell raíz como prometí -santeriormente.


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 -sejecutará 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 -sen lugar de anteponer el comando ./puede no suponer un gran ahorro de tiempo.

información relacionada