Cosa fa il comando 'sudo -s' e come viene utilizzato in questo esempio?


8

Ho il seguente dubbio. In un tutorial relativo a un'installazione software che sto seguendo, dico che devo eseguire i seguenti comandi (lo sto facendo in una shell ssh , quindi questo elenco di passaggi termina con il exitcomando):

sudo -s
apt-get update
apt-get install -y build-essential libtool libcurl4-openssl-dev libncurses5-dev libudev-dev autoconf automake screen
exit

I miei dubbi sono:

Cosa fa esattamente il -sparametro dopo il sudocomando?

Cercando sul web ho scoperto che:

‑S [comando] L'opzione ‑s (shell) esegue la shell specificata dalla variabile d'ambiente SHELL se è impostata o la shell come specificato nel database delle password. Se viene specificato un comando, viene passato alla shell per l'esecuzione tramite l'opzione -c della shell. Se non viene specificato alcun comando, viene eseguita una shell interattiva

Mi sembra che sudo -sesegua un comando usando la variabile d'ambiente della shell.

Ma questo non è chiaro per me: in questo caso qual è il comando eseguito con la variabile d'ambiente? (esegue solo sudo -se non sudo -s [command]).

Risposte:


7

La semplice risposta è che ti dà una shell di root. Questo è ciò per cui viene utilizzato qui. C'è un buon confronto tecnico tra il su, sudo -i, sudo -se sudo sumetodi su Unix.SE ma che non è davvero rilevante qui. Il codice avrebbe potuto usare qualsiasi e avrebbe funzionato.

La pepita di aiuto significa alcune cose:

  • Sta cercando un comando nella $SHELLvariabile d'ambiente. Se corri echo $SHELL, probabilmente vedrai /bin/bash. Ciò significa che otterrai un'istanza di root di Bash. Sono sicuro che se ci fossi dentro zshsignificherebbe che ottieni un'istanza di root di zsh.

  • Se $SHELLè vuoto, ricade nella shell predefinita definita /etc/passwdper quell'utente.

  • Se si fornisce un comando (ad esempio sudo -s whoami), è effettivamente in esecuzione:sudo /bin/bash -c "whoami"

  • Se non si passa un comando, non passa un -cargomento, quindi si ottiene solo una shell interattiva.

Ho usato la frase "radice" più volte. Per impostazione predefinita si sudo tratta di eseguire cose come root ma sudo(e su) possono eseguire cose come altri utenti (se si dispone dell'autorizzazione per farlo). Lo sto solo affermando per i pedanti che piangeranno, il che sudo -s -u $USERnon dà loro un guscio di radice come avevo promesso -ssopra.


E nella mia più umile opinione, è davvero sciocco diventare root per solo due comandi, per non parlare del fatto che potrebbe lasciare accidentalmente un utente che esegue altri comandi come root. Se vuoi o devi eseguire qualcosa come root, premi il 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

Sarei dubbioso di qualsiasi tutorial che suggerisse di ottenere una shell di root, tranne nei casi in cui hai un sacco di comandi da eseguire ... E anche allora, ci sono script.


Spiegazione perfetta. Ora è tutto più chiaro. Un ultimo dubbio. Se preaddendo sudo a tutti i comandi precedenti otterrò lo stesso risultato finale? è vero o mi sto perdendo qualcosa?
AndreaNobili,

@Oli hai ragione al 100% su Zsh, "sudo -s" accede a una shell "root" come "root" non come Super User.
RCF,

@AndreaNobili Sì, questo è ciò che sudogeneralmente serve; eseguendo un comando come root senza accedere manualmente come root.
Oli

Cordiali saluti, ho pubblicato una risposta sotto la tua e la mia opinione sudo -sè drasticamente diversa a causa delle mie conoscenze limitate e del verificarsi accidentale della situazione. Tuttavia potresti voler leggere la mia risposta "umile" e possibilmente aggiornare la tua risposta di 1/2 decennio.
WinEunuuchs2Unix

0

sudo -seseguirà un comando nella directory corrente come farebbe un utente normale. Per esempio:

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)

Ovviamente usare al -sposto del prefisso con il comando ./potrebbe non essere un grande risparmio di tempo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.