UNIX / Linuxシステムにログインすると、どの構成ファイルスクリプトが実行されますか?
通常、$ PATH変数とユーザーエクスペリエンスの異なる側面を設定するいくつかの構成ファイルスクリプトがあります。しかし、私が見たほとんどのユーザーは、CSH用の.cshrc、bash用の.bashrc、ksh用のkshrcなどを持っています。
ログイン時にすべて実行されますか?ユーザーのデフォルトシェルに基づいていますか?ログインスクリプトメカニズムはどのように機能しますか?
たとえば、suを使用するとどのスクリプトが実行されますか?
答え1
それはすべて始まるシェルに依存します。
各シェルのマニュアルページには、ログインまたはログアウト時にシェルが実行するスクリプトと順序を説明する章があります。章のタイトルは次のとおりです。開始と終了(man tcsh
)または呼ぶ(man bash
、man zsh
)。
実行されるスクリプトは、シェルが実行されているかどうかによって異なります。ログインシェルまたは/またはシェルが次から開始したかどうかインタラクティブモードまたは。
これにより、不要な作業の重複が防止されます。たとえば、他のプログラムの「シェルへのエスケープ」機能を介して実行されるシェルは、環境変数設定やその他の継承可能な設定を再実行する必要はありません。すでに親プロセスから継承され、最終的に取得された可能性があるためです。ログインシェルから。
同様に、非対話型シェルは、出力を生成するすべての初期化プロセスをスキップできます(そしてそれが必要です!)。これは、シェルの出力(および起動時に提供されるコマンドライン)が他のプログラムによって処理される可能性があるためです。この場合、「人間に優しい」出力は役に立たず、意図した処理に有害である可能性があります。
実行される特定の状況では、su -
このsu
コマンドはルートとしてテキストモードのログインと一致するように環境を完全に再初期化し、実際のログインのようにroot
「ログインシェルモード」でユーザーのデフォルトシェルを実行します。 。オプションは使用されないため、-c
シェルは対話型です。ほとんどすべての場合、シェルはPOSIXと互換性があるか、/bin/sh
サードパーティのパッケージに対する起動スクリプトの互換性を最大化するのと同じです。
(通常、ルートのシェルをオペレーティングシステムの工場出荷時のデフォルトまたは他のものに変更するのは悪い考えです/bin/sh
。
ログインシェルで始まる場合、POSIXsh
準拠シェルは通常、システム全体のデフォルトログインスクリプトを最初に実行し、次に/etc/profile
ユーザー固有のログインスクリプト~/.profile
(存在する場合)を実行します。