「sudo -i」と「sudo bash -l」の違いは何ですか


13

ルートとして機能する複数のシステム管理者に関する最近の質問があり、sudo bash -l参照されました。

私はGoogleとSEに、この検索が、私は違いを理解していないsudo bash -lとしますsudo -i

bashとsudoのmanページからsudo bash -lは、rootユーザーの〜/ .bash_profile、〜/ .bash_login、〜/ .profile、および〜/ .bash_logoutを実行する違いがあるように見えますが、自分自身をテストすると次のようになりますルートユーザーではなく、通常のユーザーの.bashrcを実行します。〜式がmanページで参照しているユーザーを誤解している可能性があります。違いと使用シナリオの明確化をいただければ幸いです。

回答:


10

/ etc / passwdで指定されたrootユーザーログインシェルがbashでない場合、2番目のコマンドはrootとしてbashシェルを取得し、最初のコマンドはrootユーザーが持っている対話型シェルを使用します。


こんにちは、@ johnshen64、さまざまな使用シナリオを明確にできますか?
Rqomey

2
使用しているシェルが気に入っているため、bashを使用する場合は、2番目のフォームを使用する必要があります。2番目の形式も実際のログインをシミュレートします(つまり、-lの意味)。もちろん、sudo -iを使用する場合、ユーザー(デフォルトではroot)が対話型シェルとしてbashを持たないことがわかった場合は、bashと入力することもできます。それ以外の場合、違いはごくわずかです。他の答えが示すように、いくつかの小さな環境の違いもあります。ほとんどの場合、違いは重要ではなく、最初の違いは短くなります。ほとんどの一般的なディストリビューションはbashを使用しているためです。私はめったに2番目のフォームを使用しません。
johnshen64

4

また、@ johnshen64の回答に追加するために、sudo -i呼び出しによって$USERNAMEenv変数がユーザーhome rootとの間で更新されることに気付きましたcd ~

$ sudo -i
[root@workstation001 ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@workstation001 ~]# echo $USERNAME
root
[root@workstation001 userXXX]# echo $PWD
/root

ただし、for sudo bash -l $USERNAMEは最適化されており、作業ディレクトリは変更されません。(これは他のユーザー間で一貫していませんが、コメントを参照してください...)

$ sudo bash -l
[root@workstation001 userXXX]# id
uid=0(root) gid=0(root) groups=0(root)
[root@workstation001 userXXX]# echo $USERNAME
userXXX
[root@workstation001 userXXX]# echo $PWD
/home/userXXX

したがって、おそらく同じのセットを取得していない~/.bashrcか、同じ順序ではないなどです。

(私の箱は私の.bashrc手直しによって少し台無しにされたかもしれないので、YMMV)


@Tom Hに感謝しecho $USERNAMEます:私のためにrootを返します(ubuntuデスクトップとcentos 5.2で)。ただし、PWDは報告どおりです。
-Rqomey
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.