ホームページ >テクノロジー周辺機器 >IT業界 >理解 *nixログインスクリプト

理解 *nixログインスクリプト

Lisa Kudrow
Lisa Kudrowオリジナル
2025-02-19 12:30:12558ブラウズ

Understanding *NIX Login Scripts

理解 *nixログインスクリプト

キーテイクアウト

  • ログイン中にすべてのシェルで読み取られる /etc /プロファイルスクリプトは、$ PATHと$ PS1を設定し、 /etc /bash.bashrcを設定するために使用されます。
  • 個々のbashユーザーアカウントは、ファイルのいずれかを作成できます〜/.bash_profile、〜/.bash_login、または〜/.profileを調達して、ユーザー固有の設定を可能にします。
  • bashは、ログインシェルではないインタラクティブシェルとして開始されたときに/etc/etc/bash.bashrcと〜/.bashrcの両方を読み取りますが、debianは/etc/プロファイルと〜/.profile loginスクリプトからこれらのファイルを調達しますそれぞれ。
  • 〜/.xsessionrcは、Xセッションにのみ適用される発売時に環境変数をロードするか、1回限りのユーティリティを実行するのに最適な場所です。 システム全体の環境変数の場合、/etc/profile.d/somefile.shは良い賭けですが、移動する可能性のある個人ディレクトリの場所では、.profileまたは.bashrcは、間のトレードオフに応じて使用できます。効率とセッションの柔軟性。
  • 環境変数を設定したり、シェルやデスクトップ環境を変更するプログラムを実行する必要があるシナリオに直面したことはありませんが、それを呼び出すのに最適な場所を知りませんでしたか?
  • これは一般的な状況です。多くのタスクでは、Debianパッケージングユーティリティの実行からIAASとその間のすべての管理まで、環境変数が正しく機能する必要があります。
通常、プログラムは、Xrandrコマンドなど、最初にログインするときに1回だけ実行する必要がある場合があります。また、プログラムは、Rbenv、RVM、SitePoint独自のEnvswitchユーティリティなど、シェルに注入されることがある場合があります。

これらの設定は、どこからでもロードされるべきではありません。時には、最高の場所について判断する前に考慮すべきいくつかの要因があります。

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および〜/.xsessionrc

ディスプレイマネージャーを介してローカルにログインしているGNU/Linuxデスクトップユーザー(Gettyを介したログインプログラムとは対照的に)、/etc/Profileおよび〜/.profileが機能するとは期待できない場合。一部のディスプレイマネージャーは、GNOMEディスプレイマネージャーなど、これらのファイルを誤って直接調達していますが、LightDMなどの他のDMはそうではありません。幸いなことに、他のオプションがあります。

Xウィンドウシステムセッションが開始されたとき(仮想端子のディスプレイマネージャーまたは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スクリプトを作成する場合があります。

もちろん、多くのディスプレイマネージャーは、ログイン画面から一般的なセッションマネージャーを直接選択する機能を提供するため、このファイルは必要ではないことがよくあります。ただし、.xsessionは多くの柔軟性を提供し、セッションマネージャーだけでなく、ここでプログラムを呼び出すこともできます。たとえば、基本的なキオスクモードのセットアップを実装するために、ここではクロムまたはアイスウェーゼルをここでhereループで呼び出すことができます。

〜/.bash_logout

ユーザーがインタラクティブなバッシュログインシェルを実行したときに読み取られたファイルを以前にカバーしましたが、ログアウトするときにプログラムを実行したい場合はどうでしょうか。そのユースケースのために、〜/.bash_logoutはあなたの友達です。 Debianに含まれるデフォルトは、画面をクリアするためにのみ使用されます(これはセキュリティの観点から重要だと思います)が、たとえば、他の目的には想像力が少し使用できます。たとえば、数秒前にリマインダーを表示するために使用できます。マシンから離れてください。

主な制限要因は、.bash_logoutがインタラクティブなシェルからログアウトするときにのみ読み取られることであり、xセッションからログアウトするときにロードされると想定できないことです。

その他のオプション

あなたが利用できる最も一般的なオプションをカバーすることについて。インストール( /etc /環境など)に応じて、他のオプションが存在する場合がありますが、他のプラットフォームに存在する可能性が高いとは考えておらず、それらに触れる必要性はほとんどありませんでした。

では、システム全体の環境変数をどこに配置する必要がありますか?環境変数がすべてのユーザーに影響を与える場合、/etc/profile.d/somefile.shは良い賭けです。ただし、これは、ソース /など /プロファイルを使用しているログインマネージャーを使用していることを前提としています。そうでない場合は、(管理者として)/etc/x11/xsession.d/にスクリプトを追加することができます。

スクリプトを個人ディレクトリの場所を見つけてパスに追加する場合は、ディレクトリがたくさん移動するかどうかを考慮する必要があります。それを.profileに行うためにコードを追加すると、ユーザーはユーザーセッション中にディレクトリの変更を反映するためにパスを再度ログアウトしてから再度ログアウトする必要があります。代わりにコードを.bashrcに追加した場合、ユーザーがXtermを開くたびにコードが実行されることを意味します。したがって、トレードオフを検討する問題です

個人ログインセッションのみに環境変数が必要な場合はどうなりますか? Xセッションのみに関係する場合は、〜/.xsessionrcに追加できます。これには、X Session Managerを起動する前に設定されているため、X Session Managerを通じて開始されたすべてのプログラムが通常利用できるという利点があり、したがって継承されます。たとえば、一部のグラフィックドライバーは、を実行してVSyncを無効にすることができます。

so.xsessionrcにそれを配置すると、すべてのプログラムに影響を与えるはずです。

しかし、その行が.bashrcに追加された場合、Xtermを介して起動されたプログラムのみが影響を受けます。ウィンドウマネージャーランチャーを介して起動されたプログラムは、通常どおり実行されます。 .xsessionrcから.profile and source .profileに追加できますが、xサーバーが実行されていない場合でも、環境変数を不必要にエクスポートします。

うまくいけば、Login and LogoutスクリプトがDebian GNU/Linuxシステムでどのように機能するかをよりよく理解できるようになりました。これらのログインスクリプトとログアウトスクリプトのために特に興味深いまたは創造的な用途を作成または遭遇した場合、コメントでお知らせください。 このシリーズで次に、Dotfile管理オプションについて説明します。

nixログインスクリプトに関するよくある質問(FAQ)

システム構成におけるnixログインスクリプトの重要性は何ですか?

nixログインスクリプトは、システム構成において重要な役割を果たします。ユーザーがNIXシステムにログインするたびに自動的に実行されるスクリプトです。これらのスクリプトは、環境変数の設定、機能の定義、その他のスクリプトの実行など、ユーザーの環境のセットアップに使用されます。これにより、さまざまなセッションやさまざまなマシンで一貫した再現可能な環境が可能になります。また、ログイン時に実行する必要があるタスクを自動化する方法を提供し、時間を節約し、エラーの可能性を減らします。スクリプトには、ユーザーがログインしたときに実行されるシェルスクリプトを作成します。このスクリプトは通常、ユーザーのホームディレクトリに配置され、.nix-profileという名前です。スクリプトには、環境変数の設定やサービスの開始など、ログイン時に実行するコマンドを含めることができます。スクリプトが作成されたら、コマンドchmod x .nix-profileを実行して実行可能にすることができます。スクリプトの先頭にset -xを追加することによって行われます。これにより、シェルが実行される前に各コマンドを印刷するため、エラーや予期しない動作を識別するのに役立ちます。スクリプトがエラーなしで実行されているが、予想される結果を作成していない場合、スクリプト全体にエコーステートメントを追加して、何が起こっているかを理解するのに役立つ変数またはその他の情報の値を印刷することができます。 nixログインスクリプトパッケージを管理するには、

はい、nixログインスクリプトを使用してパッケージを管理できます。 Nixには、一貫した再現性のある方法でパッケージをインストール、アップグレード、削除できる強力なパッケージ管理システムがあります。 Nixログインスクリプトを使用して、ログインするたびにパッケージを自動的にインストールまたは更新できます。環境には常に最新のバージョンが必要なソフトウェアを確保できます。

nixログインスクリプトを使用して環境変数を設定するにはどうすればよいですか?

nixログインスクリプトの環境変数の設定は、スクリプトにエクスポートVarname =値などの行を追加するのと同じくらい簡単です。これにより、環境変数のVarnameがログインセッションの期間中の値値に設定されます。エクスポートコマンドを使用して、変数をサブプロセスで利用できるようにすることもできます。たとえば、エクスポートパス= $ path:/path/to/dirはパス環境変数に/path/to/dirを追加し、そのディレクトリの実行可能ファイルをフルパスを指定する必要なく利用可能にします。 nixログインスクリプトを使用してサービスを実行しますか?

はい、nixログインスクリプトを使用してサービスを開始できます。これは、目的のサービスを開始するスクリプトにコマンドを追加することで実行できます。たとえば、SystemCtl Start ServicEnameなどのラインを追加して、SystemDサービスを開始できます。サービスを開始するために適切なアクセス許可が必要になるため、Sudoまたはrootでスクリプトを実行する必要がある場合があります。 nixログインスクリプトをログイン時に自動的に実行するには、シェルのスタートアップファイルの適切な場所に追加する必要があります。 Bashの場合、これは通常、ホームディレクトリの.bash_profileまたは.bashrcファイルです。このファイルにソースのような行を追加することができます。新しいバッシュセッションを開始するたびにnixログインスクリプトを実行するためにnix-profileを実行できます。 >

はい、nixログインスクリプトを使用して、シェルプロンプトをカスタマイズできます。これは、スクリプトにPS1環境変数を設定することで実行できます。たとえば、PS1 = "u@h:w $"のエクスポートは、プロンプトを設定してユーザー名、ホスト名、および現在のディレクトリを表示します。

nixログインスクリプトでパスを管理するには、パス環境変数にディレクトリを追加することが含まれます。これは、エクスポートパス= $ path:/path/to/dirなどの行で実行できます。これにより、フルパスを指定する必要なく、そのディレクトリ内の実行可能ファイルが利用可能になります。

以上が理解 *nixログインスクリプトの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。