Was macht der Befehl „sudo -s“ und wie wird er in diesem Beispiel verwendet?

Was macht der Befehl „sudo -s“ und wie wird er in diesem Beispiel verwendet?

Ich habe folgende Zweifel. In einem Tutorial zu einer Softwareinstallation, die ich befolge, steht, dass ich die folgenden Befehle ausführen muss (ich mache das in einemsshShell, daher endet diese Liste der Schritte mit dem exitBefehl):

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

Meine Zweifel sind:

Was genau macht der -sParameter nach sudodem Befehl?

Bei meiner Suche im Internet habe ich Folgendes herausgefunden:

-s [Befehl] Die Option -s (Shell) führt die Shell aus, die durch die Umgebungsvariable SHELL angegeben ist, sofern diese gesetzt ist, oder die Shell, die in der Kennwortdatenbank angegeben ist. Wenn ein Befehl angegeben ist, wird er über die Option -c der Shell zur Ausführung an die Shell übergeben. Wenn kein Befehl angegeben ist, wird eine interaktive Shell ausgeführt.

Mir scheint, dass sudo -sein Befehl unter Verwendung der Umgebungsvariable der Shell ausgeführt wird.

Aber das ist mir nicht klar: Was ist in diesem Fall der Befehl, der mit der Umgebungsvariable ausgeführt wird? (er führt nur aus sudo -sund nicht sudo -s [command]).

Antwort1

Die einfache Antwort ist, dass es Ihnen eine Root-Shell gibt. Dafür wird es hier verwendet. Es gibt eine gutetechnischer Vergleich zwischen den Methoden su, sudo -i, sudo -sund sudo suauf Unix.SEaber das ist hier wirklich nicht relevant. Der Code hätte jeden verwenden können und hätte funktioniert.

Das Hilfe-Nugget bedeutet mehrere Dinge:

  • Es sucht nach einem Befehl in der $SHELLUmgebungsvariable. Wenn Sie es ausführen, echo $SHELLsehen Sie wahrscheinlich /bin/bash. Das bedeutet, dass Sie eine Root-Instanz von Bash erhalten. Ich bin sicher, wenn Sie darin wären, zshwürden Sie eine Root-Instanz von erhalten zsh.

  • Wenn $SHELLleer ist, wird auf die /etc/passwdfür diesen Benutzer definierte Standard-Shell zurückgegriffen.

  • Wenn Sie einen Befehl angeben (z. B. sudo -s whoami), wird dieser tatsächlich ausgeführt:sudo /bin/bash -c "whoami"

  • Wenn Sie keinen Befehl übergeben, wird kein -cArgument übergeben, sodass Sie nur eine interaktive Shell erhalten.

Ich habe den Ausdruck „Wurzel“ mehrmals verwendet.Standard sudodreht sich alles darum, Dinge als Root auszuführen, aber sudo(und su) Dinge als andere Benutzer ausführen zu können (wenn Sie die Berechtigung dazu haben). Ich sage das nur für die Pedanten, die aufschreien werden, dass sudo -s -u $USERsie dadurch keine Root-Shell erhalten, wie ich -soben versprochen habe.


Und in meinembescheidensteMeinung, es ist wirklich dumm, für nur zwei Befehle Root zu werden, ganz zu schweigen davon, dass ein Benutzer versehentlich weitere Befehle als Root ausführen könnte. Wenn Sie etwas als Root ausführen möchten oder müssen, stellen Sie dem Befehl einfach Folgendes voran sudo:

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

Ich wäre gegenüber jedem Tutorial skeptisch, das die Anschaffung einer Root-Shell vorschlägt, außer in den Fällen, in denen Sie wirklich haufenweise Befehle ausführen müssen … Und selbst dann gibt es noch Skripting.

Antwort2

sudo -sführt einen Befehl im aktuellen Verzeichnis aus, wie es ein normaler Benutzer tun würde. Beispiel:

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)

Natürlich ist die Zeitersparnis möglicherweise nicht so groß, wenn man -sanstelle des Präfixes für den Befehl verwendet../

verwandte Informationen