web-dev-qa-db-ja.com

「Sudo su-」と「Sudo -i」と「Sudo / bin / bash」-どちらが使用されるか、または何が問題なのか。

ルートを何十回も連続して入力する必要がある場合は、セッションをルートセッションに切り替えます。インターネットで使用したさまざまなチュートリアルと手順では、Sudo suSudo su -Sudo -i、およびSudo /bin/bashがルートセッションを開くために使用されていますが、これらの違いと、その違いが重要かどうか、またはその違いが重要かどうかについては明確ではありません。

誰かが私のためにこれをクリアできますか?

251
Paul

これを説明するには、プログラムが何をするのかを知る必要があります。

  • su-コマンドsuを使用して別のユーザーに切り替えます(s witch ser)が、rootユーザーに切り替えることもできますパラメーターなしでコマンドを呼び出します。 suは、ユーザーの環境に切り替えたパスワードを入力した後、切り替えるユーザーのパスワードを尋ねます。
  • Sudo-Sudoは、root権限で単一のコマンドを実行することを意図しています。ただし、suとは異なり、現在のユーザーのパスワードの入力を求められます。このユーザーは、sudoersファイル(またはsudoersファイルにあるグループ)に存在する必要があります。デフォルトでは、Ubuntuは15分間パスワードを「記憶」しているため、毎回パスワードを入力する必要はありません。
  • bash-コンピューターと対話するためのテキストインターフェイス。ログインシェル、非ログインシェル、インタラクティブシェルと非インタラクティブシェルの違いを理解することが重要です。

シェルの種類:

  • ログインシェル:ログインシェルは、指定されたユーザーとしてシステムにログインします。これにはユーザー名とパスワードが必要です。打ったとき ctrl+alt+F1 仮想シェルにログインするには、ログインシェルに正常にログインした後に取得します。
  • 非ログインシェル:ログインせずに実行されるシェル。これに必要なのは、現在ログインしているユーザーです。 gnomeでグラフィックターミナルを開くと、非ログインシェルになります。
  • インタラクティブシェル:インタラクティブにコマンドを入力または中断できるシェル(ログインまたは非ログイン)。たとえば、gnome端末。
  • 非対話型シェル:おそらく自動化されたプロセスから実行される(サブ)シェル。入力も出力も表示されません。

ケースは次のとおりです。

  • Sudo suSudoコマンドでsuを呼び出します。 Bashは、対話型の非ログインシェルと呼ばれます。そのため、bashは.bashrcのみを実行します。ルートに切り替えた後も同じディレクトリにいることがわかります。

    user@Host:~$ Sudo su
    root@Host:/home/user#
    
  • Sudo su -今回はログインシェルであるため、/etc/profile.profile、および.bashrcが実行され、ルートのホームディレクトリにルートの環境が表示されます。

  • Sudo -iこれはSudo su -とほぼ同じです。-i(初期ログインのシミュレーション)オプションは、ターゲットユーザーのパスワードデータベースエントリで指定されたシェルをログインシェルとして実行します。これは、.profile.bashrc、または.loginなどのログイン固有のリソースファイルがシェルによって読み取られ、実行されることを意味します。

  • Sudo /bin/bashこれは、コマンド/bin/bashSudoを呼び出すことを意味します。 /bin/bashは非ログインシェルとして起動されるため、すべてのドットファイルは実行されませんが、bash自体は呼び出しユーザーの.bashrcを読み取ります。環境は変わりません。あなたの家は根の家ではありません。したがって、あなたはルートですが、呼び出しユーザーの環境にいます。

  • Sudo -s$Shell変数を読み取り、コンテンツを実行します。 $Shell/bin/bashを含む場合、Sudo /bin/bashを呼び出します(上記を参照)。

チェック:

ログインシェルであるかどうかを確認するには(shoptは組み込みコマンドであるため、bashでのみ動作します):

shopt -q login_Shell && echo 'Login Shell' || echo 'No login Shell'
321
chaos