ルートを何十回も続けて入力する必要がある場合は、セッションをルートセッションに切り替えます。私は、インターネット上で使用されてきた様々なチュートリアルや指示では、私が見る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 susudoコマンドで呼び出しますsu。Bashは、対話型の非ログインシェルと呼ばれます。したがって、bashは実行のみを行い.bashrcます。ルートに切り替えた後も同じディレクトリにいることがわかります。
user@host:~$ sudo su
root@host:/home/user#sudo su -今回はログインシェルであるため/etc/profile、.profileと.bashrcが実行され、ルートのホームディレクトリにルートの環境が表示されます。
sudo -isudo 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。