タイトルが示すように、次の2つのコマンドには違いがあります。
sudo su - root
sudo -u root -H /bin/bash
私はGNU / Linuxを使用しています。違いがあればね。
答え1
ルートになりたい場合は、最良の方法はsudo -i
初期ログインをシミュレートすることです(ルートログインに関連するすべてのパスと変数を提供)。 rootユーザーなしでログインする場合文書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
また、デフォルトではrootとして実行されますが、 sudoerで-u root
実行される冗長環境変数SUDO_USER、SUDO_UID、およびSUDO_COMMANDは、それぞれ呼び出し元名/ uidおよびbashに設定されます。 sudo
-H /bin/bash
ただし、この場合、bashはログインシェルとして実行されません。
答え3
明らかに、ルートシェルが/bin/bashでない場合は異なる場合があります。これは、マイクロまたは組み込みLinux環境で、またはrootユーザーが/ bin / [t] cshを好む既存のBSDシステムで可能です。また、「su -」は、一部の端末関連変数を除くすべての環境を削除します。環境では、sudoの動作は設定可能です(/ etc / sudoersのenv_resetを参照)。だから細かい部分まで注意深く見てください...
答え4
リストされている2つのコマンドの主な違いは、実行するとシェルがsu -
ログインシェルになることです。これは、ルートシェルのログインスクリプトが実行され(例:bashの場合は.bash_profile)、PWDが$ HOMEに設定され、環境の一部が初期化されることを意味します。 sudo bash
ターゲットユーザーのシェルで新しいシェルを実行すると、-Hは$ HOME変数をターゲットユーザーのホームディレクトリに初期化します。他の変数は設定されておらず、一部の変数はsudoポリシーで定義されているように新しいシェルに転送されます。