質問で述べたように、主な違いは環境です。
sudo su - 対 sudo -i
以下の場合にはsudo su -、それログインシェルである、そう/etc/profile、.profileおよび.bashrc実行され、あなたがrootの環境とrootのホームディレクトリに自分自身を見つけるでしょう。
sudo -iほぼ同じである(最初のログインをシミュレート)オプションは、ログインシェルとして、ターゲットユーザのパスワードデータベースのエントリで指定されたシェルを実行します。これは、次のようなログイン固有のリソースファイルことを意味し、またはシェルによって読み込まれて実行されます。sudo su --i.profile.bashrc.login
sudo su 対 sudo -s
sudo susudoコマンドで呼び出しますsu。Bashは、対話型の非ログインシェルと呼ばれます。したがってbash、実行のみ.bashrcです。ルートに切り替えた後も同じディレクトリにいることがわかります。
user@host:~$ sudo su
root@host:/home/user#
sudo -s$SHELL変数を読み取り、コンテンツを実行します。$SHELLが含まれ/bin/bashている場合、それを呼び出しますsudo /bin/bash。つまり、/bin/bash非ログインシェルとして起動されるため、すべてのドットファイルは実行されず、それbash自体が読み取ります。bashrc呼び出し元ユーザーの。環境は変わりません。あなたの家は根の家ではありません。したがって、あなたはルートですが、呼び出しユーザーの環境にいます。
結論
この-iフラグは2004年に追加さsudoれ、同様の機能を提供するため、テンプレートも同様に機能するようになりました。環境が重要でない限り、どちらを使用するかは重要ではないと思います。sudo su -sudo su -sudo -i
添加
ここで言及しなければならない基本的なポイントは、より高い特権で1つのコマンドsudoのみを実行し、それらの特権を元のコマンドにドロップするように設計されていることです。ユーザーを実際に切り替えて、ルートシェルを開いたままにすることを意図したものではありません。時間が経つsudoにつれて、そのようなメカニズムで拡張されました。なぜなら、人々はsudoすべてのコマンドの前で使用する理由について悩んでいたからです。
の意味sudoが乱用されました。sudoユーザーにルート権限の使用を最小限に抑えることを奨励するためのものでした。
私たちが今持っているものはsudo、ますます一般的になっています。ほぼすべての有名なLinuxディストリビューションに統合されています。別のユーザーアカウントに切り替える元のツールはsuです。古い学校の* nixベテランにとって、そのようなsudoことは不必要に思えるかもしれません。Microsoftのos-familyから私たちが知っているメカニズムに複雑さを加え、動作する可能性が高いため、* nixシステムのシンプルさの哲学に反しています。
私は本当にベテランではありませんが、私の意見でsudoは常に私の側にいばらsudoでした。私は使用することに最も消極的ですsudo。すべてのシステムで、ルートアカウントが有効になっています。しかし、状況は変わります。おそらく、su廃止される時期が来て、完全にsudo置き換えられsuます。
したがって、などの古いツールに頼るのではなく、sudo内部メカニズム(-s、-i)を使用するのが最善だと思いますsu。
ubuntuユーザーが標準化するのを妨げるそのような派手なシステムを理解したことがないsu -。彼らは問題を作成し、今ではそれを解決する方法についての議論が絶え間なくあります。