Linux の環境変数には、システム レベルとユーザー レベルが含まれます。システム レベルの環境変数は、システムにログインするすべてのユーザーが読み取る必要があるシステム変数ですが、ユーザー レベルの環境変数は、システム レベルの環境変数です。ユーザーはシステムを使用します。したがって、次の記事では、Linux の環境変数設定に関する関連情報を主に紹介します。必要な方は参考にしてください。
はじめに
私たちが普段 Linux を使用するとき、いくつかの環境変数を設定する必要があることがよくありますが、このとき、通常はネットで検索するだけで、誰かがその経験を紹介します。しかし、問題は、設定が /etc/profile にあるという人もいれば、/etc/environment に設定されているという人も、~/.bash_profile に設定されているという人も、~ に設定されているという人もいます。 /.bashrc で構成されているという人もいますが、~/.bash_login で構成されているという人もいます。また、~/.profile で構成されているという人もいます。 。 。これは実に公平かつ合理的です。 。 。そこで問題は、Linux が設定ファイルをどのように読み取るのか、そしてその根拠は何なのかということです。以下の記事で詳しく紹介していますので、見ていきましょう。
Documentation
私は、出典を言わずに結論だけを言うという、「なぜ信じなければならないのか」という印象を与える行為がいつも大嫌いです。そして実際、ソースのない何気ない議論から導き出される結論は、基本的に他人の発言に基づいています。実際、他の人に質問するのではなく、ドキュメントに質問してください。 しばらく検索したところ、環境変数の設定に関する関連ドキュメントが実際には bash コマンドの man ドキュメントにあることがわかりました。結局のところ、これは私たちがよく使用するシェルです。
$man bash で、次のテキストを見つけました:
INVOCATION A login shell is one whose first character of argument zero is a -, or one started with the --login option. An interactive shell is one started without non-option arguments and without the -c option whose standard input and error are both connected to terminals (as determined by isatty(3)), or one started with the -i option. PS1 is set and $- includes i if bash is interactive, allowing a shell script or a startup file to test this state. The following paragraphs describe how bash executes its startup files. If any of the files exist but cannot be read, bash reports an error. Tildes are expanded in filenames as described below under Tilde Expan‐ sion in the EXPANSION section. When bash is invoked as an interactive login shell, or as a non-inter‐ active shell with the --login option, it first reads and executes com‐ mands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior. When a login shell exits, bash reads and executes commands from the file ~/.bash_logout, if it exists. When an interactive shell that is not a login shell is started, bash reads and executes commands from /etc/bash.bashrc and ~/.bashrc, if these files exist. This may be inhibited by using the --norc option. The --rcfile file option will force bash to read and execute commands from file instead of /etc/bash.bashrc and ~/.bashrc. When bash is started non-interactively, to run a shell script, for example, it looks for the variable BASH_ENV in the environment, expands its value if it appears there, and uses the expanded value as the name of a file to read and execute. Bash behaves as if the following com‐ mand were executed: if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi but the value of the PATH variable is not used to search for the file‐ name.
このテキストを通じて、いわゆる環境変数設定ファイルは、シェルのログイン時に自動的にロードされるファイルであることがわかりました。ただし、彼が定義したログインは、
ログイン シェル ログインの 2 つのタイプに分類されます。
対話型シェルログイン。
ログインシェルログイン
いわゆるログインシェルログインは、実際にはパスワードの入力を必要とするログインを指します。具体的には、起動、ssh ログイン、bash --login と入力して「パスワードを入力してログインするふり」をすることが含まれます。 このログイン方法では、システムは最初に /etc/profile ファイルを読み取り、次に 3 つのファイル ~/.bash_profile、~/.bash_login、および ~/.profile を順番に検索し、最初のファイルのみを実行します。そのうちの 1 つが存在します。 特に、最後の 3 つのファイル間の「論理 OR」関係に注意する必要があります。多くの場合、~/.profile ファイルが変更されていることがわかりますが、再度ログインしても設定が有効にならないのはなぜですか?これは、最初の 2 つのファイルのうち 1 つがシステムに存在し、残りのファイルが読み取られない可能性があるためです。
以下の 3 つの図は、この問題を非常によく示しています:
対話型シェル ログイン
いわゆる対話型シェル ログインは、実際にはログイン シェル ログインに関連しています。の条件。通常、ログイン後に右クリックしてターミナルを開くか、CTRL+ALT+T を押してターミナルを開きます (対話型シェル ログイン)。 このログイン方法では、システムは /etc/bash.bashrc と ~/.bashrc を順番に読み込んで実行します。 通常の状況では、一部の定数と一部のエイリアスは、デフォルトで ~/.bashrc ファイルに記録されます。特に $PS1 変数は、bash プロンプトの形式、スタイル、色を決定します。
注:
これら 2 つのログイン方法は異なる設定ファイルを読み取り、相互に重複がないことに注意してください。したがって、環境変数を設定する必要がある場合は、独自の環境変数に従って設定する必要があります。ログイン メソッドは、必要な変数を別のファイルに設定します。 たとえば、次のような古典的な質問です。
典型的な問題
異常な環境設定ファイルの設定の例としては、SSH を使用してサーバーにログインすると、次のようなプロンプトが表示されることが挙げられます:
bash-4.3$
はい、3 番目と同じです。上の画像 画像の bash と同様に、プロンプトは非常に奇妙で、ls を入力したときにファイルとフォルダーの色の区別がありません。 この問題は明らかに、$PS1 環境変数が設定されていないためにデフォルト値が使用されていることが原因ですが、.bashrc ファイルをチェックすると、$PS1 変数が定義されていることがわかります。 , しかし、sshはログインシェルに属しているため、ログイン時に読み込む設定ファイルは/etc/profileなどのファイルであり、.bashrcは読み込まれません。 この問題の原因は通常、/etc/profile 内のデフォルト設定ファイルを誤って削除したことであるため、解決策も非常に簡単です。 。 。 .bashrc 内のいくつかのファイルを /etc/profile にコピーするだけです。
この質問が私たちに与える啓発は、サーバーの変数を構成するときは、/etc/profile または ~/.bash_profile で構成するようにしてください。ssh を使用してサーバーにログインする場合、.bashrc ファイルは基本的に使用されないためです。自分のコンピュータの環境変数を構成するときは、.bashrc で環境変数を構成するようにしてください。そうすれば、ターミナルを開いている限りこのファイルが読み取られるため、ログアウトせずに構成を適用できます (/etc/ はログアウトして再度ログインしたプロファイルに適用されます)。
概要
以上がLinux で環境変数を構成する手順を共有する (写真)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。