ルートを何十回も続けて入力する必要がある場合は、セッションをルートセッションに切り替えます。私は、インターネット上で使用されてきた様々なチュートリアルや指示では、私が見るsudo su
、sudo su -
、sudo -i
およびsudo /bin/bash
ルートセッションを開くために使用されているが、私はこれらのときまたはその差が重要かの違いに明確ではありませんよ。
誰かが私のためにこれをクリアできますか?
ルートを何十回も続けて入力する必要がある場合は、セッションをルートセッションに切り替えます。私は、インターネット上で使用されてきた様々なチュートリアルや指示では、私が見るsudo su
、sudo su -
、sudo -i
およびsudo /bin/bash
ルートセッションを開くために使用されているが、私はこれらのときまたはその差が重要かの違いに明確ではありませんよ。
誰かが私のためにこれをクリアできますか?
回答:
これを説明するには、プログラムが何をするのかを知る必要があります。
su
-このコマンドsu
は、別のユーザー(s witch u ser)に切り替えるために使用されますが、パラメーターを指定せずにコマンドを呼び出すことでrootユーザーに切り替えることもできます。su
ユーザーの環境に切り替えたパスワードを入力した後、切り替えるユーザーのパスワードを尋ねます。 sudo
- sudo
ルート権限で単一のコマンドを実行することを意味します。しかし、とは違ってsu
、それは現在のユーザーのパスワードを入力するように求められます。このユーザーは、sudoersファイル(またはsudoersファイルにあるグループ)に存在する必要があります。デフォルトでは、Ubuntuは15分間パスワードを「記憶」しているため、毎回パスワードを入力する必要はありません。bash
-コンピューターと対話するためのテキストインターフェイス。ログインシェル、非ログインシェル、インタラクティブシェルと非インタラクティブシェルの違いを理解することが重要です。シェルの種類:
ケースは次のとおりです。
sudo su
sudo
コマンドで呼び出します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
これはsudo
、コマンドで呼び出すことを意味します/bin/bash
。/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'
sudo
許可されたユーザーがスーパーユーザーまたは別のユーザーとしてコマンドを実行できるようにします。とにかく、あなたの努力のために+1。
root
ますが、ユーザーセッションを開くための最も一般的な使用sudo
方法はroot
、新しいものをインストールするときやメジャーな再構成を実行するときなど、権限を頻繁に使用する必要がある場合です。私はを使用してきましたがsudo /bin/bash
、どうやらその方法は理解できない何らかの理由で悪いラップを持っているようです。
sudo -i
が推奨されます。ここで読む:ubuntuforums.org/showthread.php?t=1817402、ここで:unix.stackexchange.com/questions/98531/...
違いを探すには、異なる呼び出し間で結果の環境を叩くかもしれません。
いくつかの重要な変数には、いくつかの「小さな」違いがあります。
PATH
、LD_LIBRARY_PATH
、LD_PRELOAD
または〜/の違い。ドットファイル処理(~/.config
)。
コマンドが生成する$ HOMEベースのログファイル(~/.xsession.errors
など)またはxauth Cookie(~/.Xauthority
)の所有権も考慮してください。
これらのコマンドを試してください:
# 'su -' vs 'su'
diff <(sudo su - -c env | sort) <(sudo su -c env | sort)
# 'su -' vs 'sudo -i'
diff <(sudo su - -c env | sort) <(sudo -i env | sort)
sudo -s
とについて質問するのを忘れましたsudo su
。