ホームページ >テクノロジー周辺機器 >IT業界 >理解 *nixログインスクリプト
これらの設定は、どこからでもロードされるべきではありません。時には、最高の場所について判断する前に考慮すべきいくつかの要因があります。
Debian Gnu/Linux Jessieのインストールに存在するいくつかの一般的なオプションを見て、それをすべて理解してみましょう。
/etc/profileデフォルトでは、Debianは /etc /プロファイルを提供します。これは、すぐに$パスを設定するために使用されます(コマンド検索パスの宣言に使用)。
利便性のために、ルートユーザー(ユーザーID 0)は、他のすべての人に定義された異なるパスを取得します。これは、システムバイナリ(SBIN)の場所が、ルートとして実行する必要があるシステム管理またはプログラムのために理想的に予約されているためです。絶対に必要でない限り、ルートユーザーとしてプログラムを実行しないでください。
次に、 /etc /プロファイルは、プライマリプロンプト文字列を設定するために使用される$ ps1のセットアップを処理します。定義されたデフォルト値は、シェルがバッシュでない限り、「$」(またはrootの「#」)です。シェルがbashの場合、 /etc /bash.bashrcは代わりにそれを処理するように供給されます。 /etc/bash.bashrcについてはまもなく説明します
この時点で、ログイン中に /etc /プロファイルがすべてのシェルによって読み取られることを推測できます(つまり、ログインコマンドによって)。より効率的なBashビルトイン変数$ {UID}を使用してユーザーIDを決定する代わりに、 /etc /プロファイルは代わりにIDコマンドを呼び出します。派手なシェルプロンプトを定義する代わりに、BASH固有の構成が供給されました。BASHは、他の多くのシェルがそうではないU(ユーザー名)やH(ホスト名)などのバックスラッシュエスケープの特殊文字をサポートしているためです。 /etc/プロフィールは、ユーザーが自分でインストールする可能性のあるシェルと互換性があるように、POSIXに準拠するようにしてください。
Debian Gnu/Linuxには、Posix(および一部のバークレー)の拡張機能のみを実装することのみを目的とする基本的なシェルであるDashが事前にインストールされていることがよくあります。 /etc /プロファイルを変更(最初にバックアップする!)を変更してps1 = '$'行を別の値を設定し、ダッシュログインをシミュレートする(dash -lコマンドを介して)、Dashが定義したプロンプトを使用することがわかります。ただし、代わりに-L引数なしでダッシュコマンドを呼び出す場合、 /etc /プロファイルは読み取られておらず、ダッシュはデフォルト値に戻ります(偶然には、変更する前の元のPS1値が何であるか)。/etc /プロフィールについて注意する最後の興味深いことは、最後の次のスニペットです:
言い換えれば、/etc/profile.d /*.sh globと一致する読みやすいものはすべて供給されます。これは重要です。なぜなら、編集 /etc /プロファイルが実際には必要ないことを示しているためです(したがって、以前に作成したバックアップを復元してください!)。上記の変数はすべて、別のファイルでオーバーライドできます。これを行うことの利点の1つは、DebianのAPTパッケージ管理システムが通常変更された構成ファイルにタッチしないため、システムのアップグレードが /etc /プロファイルに変更を自動的に追加できることです。
<span>if [ "<span><span>`id -u`</span>"</span> -eq 0 ]; then </span> <span><span>PATH</span>="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" </span><span>else </span> <span><span>PATH</span>="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" </span><span>fi </span><span>export PATH</span>〜/.bash_profile、〜/.bash_login、および〜/.profile
/etc /プロファイルの潜在的な問題の1つは、システム全体のパスにあることです。つまり、そこに変化がシステム上のすべてのユーザーに影響を与えます。パーソナルコンピューターでは、それはあまり問題のようには見えないかもしれませんが、それに変更するにはルートの特権が必要です。これらの理由により、個々のBASHユーザーアカウントの各ファイルのいずれかを作成できます〜/.bash_profile、〜/.bash_login、または〜/.profileを調達することができます。残りのファイルは無視されます。ダッシュなどの他のシェルは、似たようなものをサポートしますが、〜/.profileのみを見てください。これにより、ユーザーはbash固有の状況のために.bash_profileを作成できます。また、ログインシェル(chsh -s dashコマンドなど)としてダッシュまたは他のシェルに切り替えることがある場合、〜/.profileは予約できます。そのユースケース。
これの重要性を念頭に置いておく必要があります。デフォルトのDebian Skeleton Directory(/etc/skel、ファイルとディレクトリを新しいユーザーアカウントにコピーするために使用するために使用される)には、.bash_profileまたは.bash_loginファイルではありません。また、DebianはデフォルトのユーザーシェルとしてBashを使用します。したがって、多くのユーザーは、.profile。
RVMなどのプロジェクトのインストール手順を見てきましたが、ユーザーに.bash_profileファイルを作成するように指示しますが、これはユーザーのシェル環境を壊す可能性があるため、危険です。ユーザーが.profileを変更しなかったとしても、$ PATH環境変数に〜/binを追加するデフォルトの〜/.profile機能を利用している可能性があります。これはもはや機能しません。安全性を向上させる可能性のあるオプションの1つは、ユーザーアカウントを作成する前に、 /etc /skelの.bashrcにsymlinkとして.bash_profileを追加することです。Debian Jessieのデフォルトのプロファイルスクリプトを見ると、次のスニペットを見ることができます。
これは、 /etc /プロファイルで見たものに似ています。ここで、 /etc/bash.bashrcが見つかった場合に供給され、シェルがbashです。これの重要性については、次のセクションで説明します。/etc/bash.bashrcおよび〜/.bashrc
<span>if [ "<span><span>`id -u`</span>"</span> -eq 0 ]; then </span> <span><span>PATH</span>="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" </span><span>else </span> <span><span>PATH</span>="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" </span><span>fi </span><span>export PATH</span>開始すると、bashはその順序で/etc/bash.bashrcと〜/.bashrcの両方を読み取りますが、ログインシェルではないインタラクティブシェルとして開始された場合のみ(通常はXtermを介して開始されたときに意味します)。これは、バッシュシェルの標準動作です。ただし、Debianは、/etc/プロファイルと〜/.profileログインスクリプトからこれらのファイルをそれぞれ調達します。これは、 /etc/bash.bashrcと.bashrc(存在する場合)が、ログインシェルであるかどうかに関係なく、Bashシェルが開始されたときに常に呼び出されるように動作を効果的に変化させます。この動作が異なる分布で同じであることを期待しないでください。
.bashrcはコマンドエイリアスを追加するのに最適な場所です。実際、一部の人々は非常に多くのエイリアスを持っているので、それらを別のファイルに保持することを好みます。 Debianのデフォルトの.bashrcは、〜/.bash_aliaseを探し、ファイルが存在する場合はソースを調達しているため、代わりにすべてのバッシュエイリアスを自由に保管してください。 .bashrcは、ユーザーが$ PS1や$ histsize(維持するコマンド履歴の量)などのシェル変数を上書きするのに最適な場所です。 Debianのデフォルトの.bashrcは100行の長さですが、非常に簡単な読書であり、よくコメントされています。名前が示すように、.bashrcは非バッシュシェルによって調達されるとは予想されていません。
〜/.xsessionおよび〜/.xsessionrcXウィンドウシステムセッションが開始されたとき(仮想端子のディスプレイマネージャーまたはStartXを使用することに関係なく)、/etc/x11/xsessionシェルスクリプトが実行されます。これは基本的に、ログインシェルで使用される /etc /プロファイルに相当し、xのみであり、調達されていませんが、直接実行されます。また、かなり複雑です。 /etc/プロファイルが/etc/profile.d、/etc/x11/xsessionソースのスクリプトのスクリプトで/etc/x11/xsession.dのスクリプトで読み取る方法と同様。このディレクトリのすべてのスクリプトは番号から始まるため、スクリプトは番号付きの順序でロードされます。
debianジェシーには、40x11-common_xsessionrcという名前のファイルが含まれています。それがするのは、〜/.xsessionrcが読みやすいかどうかを確認することだけで、(もしそうなら)調達しています。これにより、〜/.xSessionrcは、環境変数をロードするのに最適な場所になり、Xセッションにのみ適用される発売時に1回のユーティリティ(XrandrやXmodmapなど)を実行できます。これを使用して、/etc/profile、〜/.profileが必要な場合に使用することもできます。したがって、そこで指定された環境変数は、セッションマネージャーによっても継承されます(まだそうでない場合)。 .xsessionrcはデフォルトでは存在しないため、作成する必要があることに注意してください。/etc/x11/xsessionでファイルを閲覧し続けると、セッションマネージャーが 負荷。 〜/.xsessionファイルが存在し、実行可能な場合、99x11-common_startの一部として保存および実行されます。 〜/.xSessionはセッションマネージャーの実行を目的としているため、Xセッションはログアウトし、このスクリプトが終了すると表示マネージャーログイン画面に返されます。
〜/.xsessionrc、〜/.xsessionはデフォルトでは存在しないため、必要に応じて作成する必要があります。次のように見えるシンプルな.xsessionスクリプトを作成する場合があります。
ユーザーがインタラクティブなバッシュログインシェルを実行したときに読み取られたファイルを以前にカバーしましたが、ログアウトするときにプログラムを実行したい場合はどうでしょうか。そのユースケースのために、〜/.bash_logoutはあなたの友達です。 Debianに含まれるデフォルトは、画面をクリアするためにのみ使用されます(これはセキュリティの観点から重要だと思います)が、たとえば、他の目的には想像力が少し使用できます。たとえば、数秒前にリマインダーを表示するために使用できます。マシンから離れてください。 主な制限要因は、.bash_logoutがインタラクティブなシェルからログアウトするときにのみ読み取られることであり、xセッションからログアウトするときにロードされると想定できないことです。
例 個人ログインセッションのみに環境変数が必要な場合はどうなりますか? Xセッションのみに関係する場合は、〜/.xsessionrcに追加できます。これには、X Session Managerを起動する前に設定されているため、X Session Managerを通じて開始されたすべてのプログラムが通常利用できるという利点があり、したがって継承されます。たとえば、一部のグラフィックドライバーは、 so.xsessionrcにそれを配置すると、すべてのプログラムに影響を与えるはずです。 うまくいけば、Login and LogoutスクリプトがDebian GNU/Linuxシステムでどのように機能するかをよりよく理解できるようになりました。これらのログインスクリプトとログアウトスクリプトのために特に興味深いまたは創造的な用途を作成または遭遇した場合、コメントでお知らせください。
このシリーズで次に、Dotfile管理オプションについて説明します。
nixログインスクリプトの環境変数の設定は、スクリプトにエクスポートVarname =値などの行を追加するのと同じくらい簡単です。これにより、環境変数のVarnameがログインセッションの期間中の値値に設定されます。エクスポートコマンドを使用して、変数をサブプロセスで利用できるようにすることもできます。たとえば、エクスポートパス= $ path:/path/to/dirはパス環境変数に/path/to/dirを追加し、そのディレクトリの実行可能ファイルをフルパスを指定する必要なく利用可能にします。 nixログインスクリプトを使用してサービスを実行しますか? nixログインスクリプトでパスを管理するには、パス環境変数にディレクトリを追加することが含まれます。これは、エクスポートパス= $ path:/path/to/dirなどの行で実行できます。これにより、フルパスを指定する必要なく、そのディレクトリ内の実行可能ファイルが利用可能になります。 〜/.bash_logout
あなたが利用できる最も一般的なオプションをカバーすることについて。インストール( /etc /環境など)に応じて、他のオプションが存在する場合がありますが、他のプラットフォームに存在する可能性が高いとは考えておらず、それらに触れる必要性はほとんどありませんでした。
では、システム全体の環境変数をどこに配置する必要がありますか?環境変数がすべてのユーザーに影響を与える場合、/etc/profile.d/somefile.shは良い賭けです。ただし、これは、ソース /など /プロファイルを使用しているログインマネージャーを使用していることを前提としています。そうでない場合は、(管理者として)/etc/x11/xsession.d/にスクリプトを追加することができます。
スクリプトを個人ディレクトリの場所を見つけてパスに追加する場合は、ディレクトリがたくさん移動するかどうかを考慮する必要があります。それを.profileに行うためにコードを追加すると、ユーザーはユーザーセッション中にディレクトリの変更を反映するためにパスを再度ログアウトしてから再度ログアウトする必要があります。代わりにコードを.bashrcに追加した場合、ユーザーがXtermを開くたびにコードが実行されることを意味します。したがって、トレードオフを検討する問題です
はい、nixログインスクリプトを使用してパッケージを管理できます。 Nixには、一貫した再現性のある方法でパッケージをインストール、アップグレード、削除できる強力なパッケージ管理システムがあります。 Nixログインスクリプトを使用して、ログインするたびにパッケージを自動的にインストールまたは更新できます。環境には常に最新のバージョンが必要なソフトウェアを確保できます。 nixログインスクリプトを使用して環境変数を設定するにはどうすればよいですか?
はい、nixログインスクリプトを使用してサービスを開始できます。これは、目的のサービスを開始するスクリプトにコマンドを追加することで実行できます。たとえば、SystemCtl Start ServicEnameなどのラインを追加して、SystemDサービスを開始できます。サービスを開始するために適切なアクセス許可が必要になるため、Sudoまたはrootでスクリプトを実行する必要がある場合があります。 nixログインスクリプトをログイン時に自動的に実行するには、シェルのスタートアップファイルの適切な場所に追加する必要があります。 Bashの場合、これは通常、ホームディレクトリの.bash_profileまたは.bashrcファイルです。このファイルにソースのような行を追加することができます。新しいバッシュセッションを開始するたびにnixログインスクリプトを実行するためにnix-profileを実行できます。 >
はい、nixログインスクリプトを使用して、シェルプロンプトをカスタマイズできます。これは、スクリプトにPS1環境変数を設定することで実行できます。たとえば、PS1 = "u@h:w $"のエクスポートは、プロンプトを設定してユーザー名、ホスト名、および現在のディレクトリを表示します。
以上が理解 *nixログインスクリプトの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。