Lucidを実行しているマシンでシェル環境の問題をデバッグしようとしています。
Rootとuserの両方が/ etc/passwdのシェルとして/ bin/bashを持っています "Sudo su --user"を使用すると、PATHに次のディレクトリが含まれます:/usr/local/rvm/rubies/Ruby-1.9.3-p194/bin/Ruby「sshuser @ machine」の場合:/usr/local/rvm/rubies/Ruby-1.9.2-p290/bin/Ruby
さて、ここにはおそらくRuby/rvm固有の答えがいくつかあります-それは私が探しているものではありません、私が理解しようとしているのは、パスを設定しているものを見つけるためにどこを探すかという一般的な問題です。/etc/profileが実行されることは知っていますが、どちらの場合も実行されているので、問題が何であるかわかりません-ログイン時にロードされる他のファイルがあります-1つのケースではありますが、他のケースではありません?/PATHを設定している可能性のある、ロードされている他の何か?
したがって、/ etc/profileがロードされる前に何かが起こっているように見えます。/etc/profileの最初の行に環境をエコーしました。sshの場合、パスにはすでに/usr/local/rvm/rubies/Ruby-1.9.2-p290/binへの参照が含まれています。 Sudosu-そうでなかった場合。/etc/environmentはsshの場合に使用されているようですが、Sudosuの場合には使用されていません。
私が最近見つけたもう1つの関連するものは、次のとおりです。 ハイフンがある場合とない場合の「su」の違いは何ですか?
/etc/login.defsファイルはsuを実行するときに使用され、/ etc/environmentPATH設定はそこでENV_PATHまたはENV_SUPATHによって上書きされます...
1つの説明/ etc/profileはログインシェルに使用されますが、非ログインシェルには使用されません。 Sudo envは、/ etc/profileにのみ設定されている変数を表示しません
アカウントにログインしている間は、/ etc/environmentにのみ設定されている変数は表示されません
これはおそらく、ログインシェルとインタラクティブシェルの違いによるものです。素敵な要約については ここ を参照してください。
システムが変数を設定するために最初に読み取るファイルは/etc/environment
です。その後、どのファイルが読み取られるかは、bashが呼び出された方法によって異なります。 ssh user@machine
の場合、ログインシェルを開始しますが、su username
の場合、インタラクティブな非ログインシェル。 Bashは、それぞれの場合に異なるファイルから初期化設定を読み取ります。以下はbashのmanページ(私の強調)からのものです:
Bashが対話型ログインシェルとして、または--loginオプションを指定した非対話型シェルとして呼び出されると、最初にファイル/ etc/profile(ファイルの場合)からコマンドを読み取って実行します。存在します。そのファイルを読み取った後、〜/ .bash_profile、〜/ .bash_login、および〜/ .profileをこの順序で検索し、存在する最初のコマンドからコマンドを読み取って実行します。読み取り可能。 --noprofileオプションは、シェルの起動時にこの動作を禁止するために使用できます。
ログインシェルではない対話型シェルが開始されると、bashは/etc/bash.bashrcおよび〜/ .bashrcからコマンドを読み取って実行しますifこれらのファイルは存在します。これは、-norcオプションを使用することで禁止できます。 --rcfile fileオプションは、bashに/etc/bash.bashrcおよび〜/ .bashrcの代わりにファイルからコマンドを読み取って実行するように強制します。
そのため、bashは、呼び出しに応じて異なる起動ファイルを読み取ります。マシン内のこれらのファイルの内容を見てください。おそらく、$PATH
がさまざまな方法で定義されていることがわかります。
そうは言っても、@ mpyがコメントで正しく指摘しているように、Sudo su - user
はログインシェルを開始する必要があります。あなたはsureSudo su -
を使用していて、単純なSudo su
ではなく、単にsu
を使用していますか? -
は、ssh user
とまったく同じ起動ファイルを読み取るログインシェルを起動する必要があります。