質問で述べたように、主な違いは環境です。
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 su
sudo
コマンドで呼び出します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 -
。彼らは問題を作成し、今ではそれを解決する方法についての議論が絶え間なくあります。