
私は次のような疑問を抱いています。私が従っているソフトウェアのインストールに関するチュートリアルでは、次のコマンドを実行する必要があると言われています(私はsshシェルなので、この手順のリストは次のexit
コマンドで終わります:
sudo -s
apt-get update
apt-get install -y build-essential libtool libcurl4-openssl-dev libncurses5-dev libudev-dev autoconf automake screen
exit
私の疑問は次のとおりです:
コマンド-s
の後のパラメータは具体的に何をするのでしょうか?sudo
ウェブで検索したところ、次のことがわかりました。
‑s [コマンド] ‑s (シェル) オプションは、SHELL 環境変数が設定されている場合はそのシェル、またはパスワード データベースで指定されているシェルを実行します。コマンドが指定されている場合は、シェルの ‑c オプションを介してシェルに渡され、実行されます。コマンドが指定されていない場合は、対話型シェルが実行されます。
sudo -s
シェルの環境変数を使用してコマンドを実行するようです。
しかし、これは私には明確ではありません。この場合、環境変数で実行されるコマンドは何ですか? (のみが実行されsudo -s
、 は実行されませんsudo -s [command]
)。
答え1
簡単に答えると、ルートシェルが提供されます。それがここで使用されている目的です。su
Unix.SE の、、sudo -i
およびメソッドsudo -s
間の技術的な比較sudo su
しかし、それはここではあまり関係ありません。コードではどれでも使用でき、機能したはずです。
ヘルプ ナゲットはいくつかの意味を持ちます:
環境変数でコマンドを検索しています
$SHELL
。 を実行すると、echo $SHELL
おそらく が表示されます/bin/bash
。つまり、Bash のルート インスタンスが取得されます。 に入っている場合は、zsh
のルート インスタンスが取得されるはずですzsh
。が空の場合は、そのユーザーに対して で
$SHELL
定義されているデフォルトのシェルにフォールバックします。/etc/passwd
コマンド (例
sudo -s whoami
) を指定すると、実際に実行されます。sudo /bin/bash -c "whoami"
コマンドを渡さない場合は
-c
引数も渡されないので、対話型シェルが取得されます。
私は「ルート」というフレーズを何度も使ってきました。デフォルト sudo
は、root として実行することですが、 (su も) 他のユーザーとして実行することもできます (権限がある場合)。これは、上で約束したように、root シェルが提供されないsudo
と主張する細かい人のために言っているだけです。sudo -s -u $USER
-s
そして私の最も謙虚な意見の通り、たった 2 つのコマンドのために root になるのは本当に愚かなことです。言うまでもなく、ユーザーが誤ってさらにコマンドを root として実行してしまう可能性もあります。何かを root として実行したい場合、または実行する必要がある場合は、コマンドの前にsudo
:を付けるだけです。
sudo apt-get update
sudo apt-get install -y build-essential libtool libcurl4-openssl-dev libncurses5-dev libudev-dev autoconf automake screen
大量のコマンドを実行する場合を除き、ルート シェルを取得することを提案するチュートリアルには疑問を感じます...その場合でも、スクリプトがあります。
答え2
sudo -s
通常のユーザーと同じように、現在のディレクトリでコマンドを実行します。例:
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)
もちろん、-s
コマンドの前に を付ける代わりにを使用すると、./
それほど大きな時間節約にはならないかもしれません。