タイトルにあるように、次の 2 つのコマンドには違いがありますか :
sudo su - root
sudo -u root -H /bin/bash
違いがあるかどうかはわかりませんが、私は GNU/Linux を使用しています。
答え1
ルートになりたい場合、最も良い方法はsudo -i
、初期ログインをシミュレートする(ルートログインに関連するすべてのパスと変数を提供する)ことです。ルートユーザーを取得せずにログインしたい場合は、.ファイル、単に使用できますsudo su
(root ユーザーを指定する必要はありません)。
答え2
su - # causes the user to run a login shell aka bash --login
# the same as if the user had logged in as the root from the login prompt
これは、ルートを指定するsudo su -
のと同じでありsudo su - root
、冗長です。
sudo -u root -H /bin/bash
は-u root
冗長であり、sudo
デフォルトでは root として実行されますが、 は-H /bin/bash
sudoer として実行され、環境変数 SUDO_USER、SUDO_UID、および SUDO_COMMAND はそれぞれ呼び出し元の名前/uid と bash に設定されます。
しかし、この場合、bash はログイン シェルとして実行されません。
答え3
明らかに、ルート シェルが /bin/bash でない場合は、異なる可能性があります。これは、小規模または組み込み Linux 環境の場合、またはルート ユーザーに /bin/[t]csh を優先する BSD システムの場合に可能です。また、`su -' は、ターミナルに関連するいくつかの変数を除いて、すべての環境を削除します。sudo の環境に対する動作は構成可能です (/etc/sudoers の env_reset を参照)。したがって、詳細には注意してください...
答え4
リストした 2 つのコマンドの最大の違いは、実行するとsu -
シェルがログイン シェルになることです。つまり、ルートのシェルのログイン スクリプトが実行され (たとえば、bash の場合は .bash_profile)、PWD が $HOME に設定され、ユーザー環境の特定の部分が初期化されます。 sudo bash
は、新しいシェルをターゲット ユーザーのシェルとして実行し、-H は 1 つの変数 $HOME をターゲット ユーザーのホーム ディレクトリに初期化します。その他の変数は設定されず、sudo ポリシーで定義されているように、一部は新しいシェルに引き継がれます。