/etc/profile.dのスクリプトは何をしますか?


85

Linux Command LineとShell Scripting Bibleから基本的なシェルスクリプトについて読んでいます。

この/etc/profileファイルは、Bashシェルの起動時に環境変数を設定すると書かれています。この/etc/profile.dディレクトリには、アプリケーション固有の起動ファイルを含む他のスクリプトが含まれています。これらのファイルは、起動時にシェルによっても実行されます。

  • これらのファイル/etc/profileがBashの起動にとっても重要である場合、なぜこれらのファイルは含まれないのですか?

  • これらのファイルがアプリケーション固有のスタートアップファイルであり、Bashのスタートアップにとって重要ではない場合、なぜスタートアッププロセスの一部なのですか?設定が含まれている特定のアプリケーションが実行されたときにのみ実行されないのはなぜですか?

回答:


71

Bashの起動にも重要な場合、これらのファイルはなぜ/ etc / profileの一部ではないのですか?

「なぜそれらが1つの巨大なスクリプトに結合されないのですか?」という意味であれば、答えは次のとおりです。

  1. それは、スクリプトの責任者にとってメンテナンスの悪夢だからです。
  2. スクリプトを独立したモジュールとしてロードすると、システム全体がより動的に調整可能になるため、他のスクリプトに影響を与えることなく個々のスクリプトを追加および削除できます。等。
  3. それらは/ etc / profileを介してロードされるため、いずれにしても同じ方法でbashの「プロファイル」の一部になります。

これらのファイルがアプリケーション固有のスタートアップファイルであり、Bashのスタートアップにとって重要ではない場合、なぜスタートアッププロセスの一部なのですか?設定が含まれている特定のアプリケーションが実行されたときにのみ実行されないのはなぜですか?

それは、私が2つに分割するより広範な設計哲学の質問のように思えます。最初の質問は、シェル環境を使用する価値と適切性に関するものです。正の値を持っていますか?はい、便利です。すべての構成の問題に対する最善の解決策ですか?いいえ。ただし、単純なパラメーターの管理には非常に効率的であり、広く認識され理解されています。それとは対照的に、そのようなものを異種で構成することを決定すると、おそらく$ PATHは別個の独立したツールで管理でき、$ EDITORなどの優先ツールはどこかのsqliteファイルにあり、$ LC langのものはテキストファイルにあります他の場所などのカスタム形式-単にenv変数と/etc/profile.d突然簡単に見える?おそらくenv変数が何であるか、どのように機能し、どのように使用するかを既に知っているでしょう。vs 適切に「環境」と呼ばれるものの5つの異なるユビキタスな側面のための5つの完全に異なるメカニズムを学ぶこと

2番目の質問は、「これはスタートアップに適した時間ですか?」です。これは、非常に効率的ではないという異議を申し立てます(使用される可能性のあるデータまたは使用されないデータなど)。しかし:

  • 現実には、それほど多くのデータではありません。部分的には、彼らの正しい心の誰もそれを少数の単純なパラメーター以上に使用しないからです(アプリケーションを構成する他の手段があるため)。
  • 一般的に呼び出されるものに関して賢明に使用される場合、たとえば、呼び出すたびにどこかでファイルからデフォルトの$ CFLAGSを設定するのはgcc効率的ではありません。ここでも、関連するメモリの量は無限であることに注意してください。
  • これには、複数のアプリケーションが関与する可能性のある体系的なものが含まれることがあり、シェルは共通の基盤です。

そのリストにさらに追加することもできますが、うまくいけば問題の長所と短所、つまり主要な「プロ」と主要な「コン」がグローバルネームスペースであることについてのアイデアが得られます。


Does it have positive ... and understood.ここで何を言おうとしているのですか?私はその段落以外のすべてを理解しました。
-asheeshr

3
シェル環境は通常、シェル自体およびその他のユビキタスツールを構成するために使用されます。これは設定を行う唯一の方法ではないため、環境が他のオプションよりも優れているか悪いかを検討する価値があります。「正の値」を持つことにより、環境を使用することは、少なくともWRTの「単純なパラメーターを管理する」他のオプションに比べていくつかの利点があるように見えることを意味しました。そのフレーズをさらに説明するために少し追加します。
goldilocks

profile.localに行を追加するのはどうですか?profile.dフォルダーにスクリプトを作成するのとこれは許容されますか?
アビンドラグールチャラン14

@AvindraGoolcharan異なるディストリビューションは、この種のことに対して異なるスキームを使用する場合があります。profile.dその内容はによって供給されるので、ディレクトリにのみ動作し/etc/profile、そのようなスタートアップファイルとしてbashのようにシェルによって指定され、(中INVOCATIONを参照してくださいman bash)。編集する/etc/profile場合は、無効にすることができます/etc/profile.d/etc/profile.localSUSEの発明のようで、おそらくどこかから供給されている/etc/profileので、そこに自分のものを置くことができます。ただし、SUSE以外のシステムに移動し、他の調整を行わない場合、何にも使用されません。
goldilocks 14

ガッチャ、それは非常に明確です。ええ、私は仕事でSUSEを使用しています。/ etc / profile。はるかに良い賭けのようです。
アビンドラグールチャラン14

13

これらのファイルはアプリケーション固有のものですが、アプリケーションの起動時ではなく、シェルの起動時に取得されます。構成ディレクトリは、他の多くの場所にあるのと同じ理由でここで使用されます。これにより、アプリケーションまたはソフトウェアパッケージで構成を変更できます。ユーザーが変更できる単一の構成ファイルを管理/更新しようとする複数のパッケージはバグが多く、面倒なため、これは分割構成なしでは不可能です。

また、サイドノートは、/etc/profilebashだけでなく、すべてのシェルから提供されます。bash固有の構成ファイルはbashrcであり、対話型シェルのみをソースとしています。


3
2番目の段落は興味深いものです。異なるシェルは異なる構文をサポートしているため、これには重要な共通構文が必要になります。bashとshには当てはまりますが、cshやtcshのような独自のグローバルログインスタートアップスクリプトを持つ他の人にはそうは思いません。多くのシステムでは、/ bin / shは/ bin / bashへの単なるリンクです。ただし、bashは、shとして呼び出されると、その動作をposix準拠に変更します。したがって、/ etc / profile.d内のスクリプトの作成者は、posixサブセットの外部でbash拡張機能を使用しないように注意する必要があると考えるでしょう。
sootsnoot 14年

Linuxでは、2つの主要なシェルタイプに個別の.cshファイルと.shファイルがあります。
スターク

0

ヨルダンの答えは間違っています。/etc/profileすべてのシェルから提供されるわけではありません。あなたが指摘するように、によって供給されていないcshtcsh-私はわからないんだけどzshshKorn Shell(ksh)やBASH(bash)などのBourne shell()派生物をソースとしています。cshを使用し/etc/loginます。Borne Shell派生物のみを使用する傾向がある人々は、他のシェルの存在を忘れがちです。彼らは/etc/profileそれを「すべてのユーザー」に適用することを期待して何かを追加し、奇妙なCシェルユーザー(そして私たちは奇妙なロットです)が彼らが設定したものを持っていないことに驚いています/etc/profile

それでも、人々は他のBorne Shell派生シェルが存在することを忘れがちです。bashまたはを使用する場合、変数を定義して同じ行にエクスポートするなど、Bourne Shellでは無効なksh構文を自由に追加できます/etc/profile。次に、そうするスクリプトを取得しますが#!/bin/sh、それは構文に窒息します。/etc/profileBourne Shell互換の構文に従う必要があります。

同様に、あなたは自分でそれを固執する必要があります.profile.bash_profilebash構文が必要な場合に使用します)-それは少し余分な入力かもしれませんが、それはあなたが一度だけ行う余分な入力です。リファレンス${HOME}ではなく~、などいくつかのUnix系、cronジョブは、下の実行sh、あなたの各行は、Makefileによって処理されるshので、あなたは、UNIXの複数のフレーバー間で作業している場合、それは本当にあなたの保つために支払う.profile互換性Bourneシェルを。SysAdminとして、.profileBourne Shellと互換性があるように修正することで、私が誰かを助けた回数を話すことはできません。

Linuxでは、/bin/shへのリンクである/bin/bash、あなたはそれを実行すると、それはそれを実行するために使用されたパスを見て、(理論的に)ボーンシェルがサポートしている唯一のものに自分自身を制限します。同様にvi、Linuxでは本当にvim制限されます。ときどき、機能が「にじむ」ことがあります。時折vimのふりvi何かやるだろうvimことはサポートされていviないのではないの著者があるためvim、「viの後方互換性」モードでこれを無効にするのを忘れました。bashふりをするようshな似たような「ブリードスルー」機能があれば、私は驚かないでしょう。一部の機能が「LinuxのBorne Shellで動作する」場合でも、System VまたはBSDベースのUNIX(AIX、OpenBSDなど)では動作しない場合は驚くことではありません。


「Linux上で/bin/shは」へのリンク/bin/bashですか?それは健全な声明です。
41754
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.