環境変数のソースを確認するには?

環境変数のソースを確認するには?

しばらく前に設定したLinuxインスタンスがあります。起動してログインするときにrootいくつかの環境変数を設定しましたが、その変数がどこから来たのか覚えていないか、見つかりませんでした。

  • ~/.bash_profile/etc/.bash_rcすべての起動スクリプトを確認しました。
  • 私は無駄findに走ったgrep

きっとどこかを見るのを忘れてしまったようです。この問題を解決する方法はありますか?

答え1

zshログインシェルの場合:

zsh -xl

そしてbash

PS4='+$BASH_SOURCE> ' BASH_XTRACEFD=7 bash -xl 7>&2

これはログインシェルをエミュレートし、完了したすべての操作(リダイレクトされたstderrを使用する領域を除くzsh)と現在解釈されているファイル名を表示します。

したがって、すべきことは、その出力で環境変数の名前を見つけることです。 (このscriptコマンドを使用すると、シェルセッション全体の出力を保存できます。またはこのbash方法では、出力を端末の代わりに端末に保存する7> file.logために使用できます。)7>&2xtracefile.log

変数がないと、シェルは起動時にそれを継承する可能性があるため、以前にPAM構成で設定されていたか、~/.ssh/environmentX11セッションの開始時に読み取られた内容(~/.xinitrc、、~/.xsession)、またはログインマネージャを起動したサービス定義に設定されています。サーバーより早く起動スクリプトがあります。それではfind /etc -type f -exec grep -Fw THE_VAR {} +役に立ちます。

答え2

まず見ているところは次のとおりです。

システム全体

  • /etc/environment:特に環境変数用
  • /etc/env.d/*: 複数のファイルに分かれた環境変数
  • /etc/profile: すべてのタイプの初期化スクリプト
  • /etc/profile.d/*:初期化スクリプト
  • /etc/bashrc/etc/bash.bashrc:関数とエイリアス用

ユーザー別

  • ~/.profile: すべてのシェルについて
  • ~/.pam_environment: Linux プラグイン認証モジュールの一部
  • ~/.bash_profile:ログイン(bash-)シェルの初期化
  • ~/.bashrc: すべての対話型(bash-)シェルの初期化
  • ~/.cshrc, ~/.zshrc, ~/.tcshrc:bashではなくシェルに似ています

答え3

このenvコマンドを使用して変数を表示する場合は、変数をほぼ生成された順序で表示する必要があります。このガイドを使用して、ブートプロセスの最初にシステムによって設定されたこと、および後で.profileまたは他の設定ファイルによって設定されたことを確認できます。私の経験では、setコマンドexportは変数をアルファベット順に並べ替えるので、リストはあまり役に立ちません。

答え4

set -xまたは を入力すると、.profile以降.bash_profileのすべてのシェルコマンドが標準エラーに書き込まれ、そのうちの1つがこれらの変数を設定していることを確認できます。set -x上部に配置して追跡することもできます。/etc/profile出力が非常に冗長である可能性があるのでexec 2>/tmp/profile.log

pam_envシステムがPAMを使用している場合、またはでロード要求を見つけます。このモジュールは、指定されたファイルから環境変数をロードするか、ファイルが指定されていない場合(DebianおよびUbuntuの場合)、システムのデフォルトから環境変数をロードします。環境変数定義を含むLinux上の別のファイルは(で始まる行を検索する)です。/etc/pam.conf/etc/pam.d/*/etc/environment/etc/security/pam_env.conf/etc/login.defsENV_

関連情報