web-dev-qa-db-ja.com

「Sudo -s」コマンドは何をし、この例ではどのように使用されますか?

次の疑問があります。私がフォローしているソフトウェアのインストールに関連するチュートリアルでは、次のコマンドを実行する必要があると言っています(ssh Shellで実行しているため、このステップのリストはexitコマンドで終了します)。

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

私の疑問は:

Sudoコマンドの後、-sパラメーターは正確に何をしますか?

ウェブで検索すると、次のことがわかりました。

‑ s [command] ‑s(シェル)オプションは、シェル環境変数が設定されている場合はシェル環境変数で指定されたシェルを実行し、パスワードデータベースで指定されたシェルを実行します。コマンドが指定されている場合、シェルの‑cオプションを介して実行するためにシェルに渡されます。コマンドが指定されていない場合、対話型シェルが実行されます

Sudo -sは、シェルの環境変数を使用してコマンドを実行するようです。

しかし、これは私には明らかではありません。この場合、環境変数で実行されるコマンドは何ですか? (Sudo -sではなくSudo -s [command]のみを実行します)。

8
AndreaNobili

簡単な答えは、ルートシェルを提供することです。それがここで使われていることです。 nix.SEのsuSudo -iSudo -sおよびSudo suメソッドの技術的な比較 がありますが、ここでは実際には関係ありません。コードは任意のものを使用することができ、機能するはずでした。

ヘルプナゲットにはいくつかの意味があります。

  • $Shell環境変数でコマンドを探しています。 echo $Shellを実行すると、おそらく/bin/bashが表示されます。つまり、Bashのルートインスタンスを取得できます。 zshにいる場合は、zshのルートインスタンスを取得することになります。

  • $Shellが空の場合、そのユーザーの/etc/passwdで定義されているデフォルトのシェルにフォールバックします。

  • コマンド(たとえば、Sudo -s whoami)を指定すると、実際に実行されます:Sudo /bin/bash -c "whoami"

  • コマンドを渡さない場合は、-c引数を渡さないため、対話型のシェルを取得するだけです。

「ルート」というフレーズを何度か使用しました。 BydefaultSudoはルートとして物事を実行することについてすべてですが、Sudo(およびsu)は他のユーザーとして物事を実行できます(ifあなたにはそうする許可があります)。これは、Sudo -s -u $USERが上記のように約束したように、-sがルートシェルを与えないことを叫ぶ学童のためだけに述べています。


そして、私のhumblest意見では、たった2つのコマンドのルートになるのは本当に愚かです。ルート。 rootとして何かを実行したい場合、または実行する必要がある場合は、コマンドの前にSudoを付けてください。

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

実行するコマンドが大量にある場合を除き、ルートシェルを取得することを提案したチュートリアルは疑わしいと思います。さらに、スクリプトがあります。

7
Oli