次の疑問があります。私がフォローしているソフトウェアのインストールに関連するチュートリアルでは、次のコマンドを実行する必要があると言っています(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]
のみを実行します)。
簡単な答えは、ルートシェルを提供することです。それがここで使われていることです。 nix.SEのsu
、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
引数を渡さないため、対話型のシェルを取得するだけです。
「ルート」というフレーズを何度か使用しました。 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
実行するコマンドが大量にある場合を除き、ルートシェルを取得することを提案したチュートリアルは疑わしいと思います。さらに、スクリプトがあります。