bash.bashrcと/ etc / environmentファイルの違い


42

bash.bashrcファイルに環境変数を設定するために使用した日付まで。最近、/etc/environmentファイルを使用するように言われました。まあ、両方ともうまくいきます。

それで、それらの違いは何ですか?

私はこれをグーグルで検索し、「bashrcは特定のユーザーと環境、システム全体で使用されている」ことを発見しました。ここでシステム全体とはどういう意味ですか?/etc/bash.bashrcシステム全体に変更を適用していると思います。間違っている場合は修正してください。どんな種類の助けも大歓迎です。

回答:


35

違いの1つは、/etc/environment変数の定義のみが含まれており、変数の展開/補間を一切行っていないように見えることです。したがって、定義内の変数を参照することはできません。たとえば、これは機能しません:

A="else"
B="something $A"

Bは文字通りになりますがsomething $A、期待していませんsomething else

この質問をご覧ください。

ちなみに、Googleで見つけた答え~/.bashrcは、システム全体ではなく、ユーザーのものを指しているよう/etc/bash.bashrcです。それが混乱を引き起こしている可能性があります。


同じことを行う/ etc / environmentと/etc/bash.bashrcの2つのファイルがある場合、〜/ .bashrcの目的は何ですか?
trapaank

6
ユーザーがbashを開くと、/ etc / bash.bashrcが実行されます。〜/ .bashrcは、保存先のホームディレクトリの所有者がbashを開いた場合にのみ実行されます。
アンドレスタネク

18

この/etc/environmentファイルは、ブート時にすべてのユーザーに対して変数システム全体を設定します。/etc/bash.bashrcare 内のコマンドは、bashユーザーがシェルを開くと実行されます。したがって、bashシェルが少なくとも1回開かれない限り、変数は設定されません。


申し訳ありませんが、Linuxの初心者です。bashシェルが開くのはなぜですか?また、bashシェルを開くと、/ etc / enviornmentで設定された変数がオーバーライドされるかどうかが決まりますか?
trapaank

/ etc / environmentがいつ正確に実行されるかはわかりませんが、デスクトップ環境に入ると、Ubuntuによって/etc/bash.bashrcが実行されます。そのため、そこに変数を設定すると機能します。私の推測では、デスクトップに入る前に起動中に/ etc / environmentが1回実行され、/ etc / bash.bashrcを実行すると変数が上書きされます。しかし、もう一度:これについてはわかりません。
アンドレスタネク

4
ログイン時であり、起動時ではありません!
slm

6

そして、あなたが「システム全体」について尋ねているように:

/etcディレクトリにある構成ファイルは、システム上のすべてのユーザーに適用されます。以下のために/etc/bash.bashrc、このすべてと、そのマシン上でバッシュ別名「ボルネAgainシェル」を使用しているすべてを意味します。あなたがそれを使用して人間だけだとしても、単純に見てみましょう(「技術的なユーザーは、」影響を受けるがあるかもしれない/etc/passwd、または使用-用語「/ binに/ bashが」そこに記載されている頻度を確認しgrep bash /etc/passwd | wc -l、あなたにこれを与える必要があり、その番号を直接(意味:ファイル "/ etc / passwd"から文字列 "bash"を含むすべての行を取得し、結果( "|")をコマンド "wc"(単語数)に送信して行を数えます( "-l")。

したがって、ユーザーにとっては、~/.bashrc代わりに変更する方がはるかに安全です(たとえば、ホームディレクトリ内のファイル ".bashrc"-先頭にドットが付いていることを意味します/home/ankur/.bashrc)。 。ファイルは/etc、システム全体の変更が本当に意図されている場合にのみ変更する必要があります。

その他:両方の構成が存在する場合に使用されます。まず、システム全体のファイル(ここで/etc/bash.bashrcは)が読み取られ、「ソース」(現在のセッションに適用される設定)/home/username/.bashrcが行われ、ユーザーは同じように処理されるため、グローバルから設定を追加または変更/上書きすることもできます/etc/bash.bashrcファイル。


3

システム全体とユーザー全体の範囲の議論を超えて、最も重要な違いの1つは以外のスクリプトでは/etc/environmentありません~/.bashrc

/etc/environment(roadmrで既に述べたように)文字列で行の値をとる変数の割り当ての内部で変数を逆参照することはできません。

新しいパスを追加しようとして$PATH内部/etc/environmentを台無しにすると、Ubuntuはロックアウトします

PATH=$PATH:/new_path

Ubuntu GnomeまたはUnityのログインページで、パスワードを間違えることなく申し込むことができなかった場合。そして、あなたは最近修正しました/etc/environment、それはほとんどの場合です。

この修正は、仮想コンソールにログインすることですCTRL+ ALT+ F1手動で、ログインコンソールをチェック$PATHし、修正/etc/environmentファイル。

よると、この/etc/environmentラインで環境変数の行を移入PAMスタックによってロードされます。


-1

2つの違いは、/etc/enivironmentファイルがすべてのユーザーに対して機能するのに対して、bash.bashrcファイルは特にそのユーザーに対してのみ機能することです。また、/etc/environmentファイルで何か間違ったことをすると、/ etc / environmentファイルの内容をコピーしてbash.bashrcファイルの変更を簡単に取り消すことができる一方で、結果が深刻になる可能性があります。ただし、最初の設定はbash.bashrcファイルに、次に/ etc / environmentファイルに設定します。bash.bashrcファイルに変更を加えた場合、ターミナルは最初にローカルユーザーファイル(つまりbash.bashrc)を優先し、次にメインファイル(つまり)を優先します/etc/environment


〜/ .bashrcおよび/etc/bash.bashrcファイルを混乱させていると思います。1つ目はシェルを開くユーザーに対してローカルであり、2つ目はシェルを開くすべてのユーザーに対してグローバルです。
デニス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.