![環境変数どこに保管されていますか? [コピー]](https://linux33.com/image/63098/%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%E3%81%A9%E3%81%93%E3%81%AB%E4%BF%9D%E7%AE%A1%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
.bashrcまたは他の設定ファイルを編集しないと、ログアウトまたはターミナルを閉じるときに設定した環境変数が消えます。
私が疑問に思うのは、「一時的な」環境変数がどこに保存されているのかということです。
私は彼らが記憶の中にいるかもしれないと思います。端末が閉じると消えるので、これは意味があります(メモリから消えるのに使用する端末と同じ)。私は正しいですか?
答え1
環境変数はプロセスに関連するメモリに保存されます。
各プロセスは独自の環境変数セットにアクセスできます。子プロセス(「現在」プロセスによって開始されたプロセス)は継承されます。コピーこれらの変数。どのプロセスも他のプロセスの環境変数を変更できません。
たとえば、シェルを使用すると、bash
ログイン時に環境変数を定義したり、新しいbash
プロセスを開始したりできます。また、シェル自体によって定義された多くの環境変数があり(PWD
注釈プロンプトの後に判明しました)、例えばPATH
より深いレベルで使用される他の変数もありますshell
(この場合はシステムライブラリによって)。
答え2
厳密に言えば、環境変数は私たちが一般的に考えているように「保存」されません。プロセスのメモリに存在します。プロセスの開始時に生成されます(呼び出しプロセスの環境変数のコピーとして可能です)。
Linuxでは、実際にできる環境変数が必要なプロセスのPIDを知っている場合は、それを一種の「ファイル」にインポートします。彼らはそこにいる/proc/<pid>/environ
。
Bashでは、環境変数からPIDを取得できるため、$
目的のファイル/proc/$$/environ
は間にNULL文字の名前と値のペアで格納されます。これは実際にはファイルではありませんが(書き込むことはできません)、次のようにできます。使用する権利時には便利なので、ファイルのように動作します。
答え3
はい、いいえ(ただし、いいえよりははいが多い)。これはシェルのメモリに常駐するため、現在のシェルがシャットダウンしたときに消えるだけでなく、現在のシェル以外の場所で新しいシェルを開くと存在しません。