環境変数とは

かんきょうへんすう

プロセスが持つ「名前=値」の組の集まりで、プログラムの動きを外から設定するのに使う。プロセスを起動すると、親の環境変数の写しが子に引き継がれる。シェルでは export X=1 のように export した変数だけが環境変数になって子プロセスに渡り、代入しただけの変数はそのシェルの中だけで使われる。コマンドを探すディレクトリの PATH、ホームディレクトリの HOME、共有ライブラリを探す LD_LIBRARY_PATH のほか、EDAツールのライセンスサーバの指定などにも使われる。env や printenv で一覧を表示できる。

「環境変数」は、4分野の8問の練習問題に出てきます(クラウドとコンテナの基礎, Linuxとコマンドラインの基礎, リンカ・ローダと実行形式など)。

この用語の分野: Linuxとコマンドラインの基礎

環境変数の練習問題に挑戦

プログラムを起動するとき(Linuxのexecveなど)に、OSのローダが行うこととして正しいものはどれか。

  1. Aソースコードを読み込んで、その場でコンパイルしてから実行する
  2. B実行ファイルのプログラムヘッダにしたがって各部分をメモリに配置し、スタックに引数などを用意して、入口の番地から実行を始める
  3. C実行ファイルのすべてのシンボル名を画面に表示してから実行する
答えと解説を見る

正解:B. 実行ファイルのプログラムヘッダにしたがって各部分をメモリに配置し、スタックに引数などを用意して、入口の番地から実行を始める

ローダは実行ファイルのヘッダを読み、プログラムヘッダに書かれた各部分(セグメント)を、読み取り・書き込み・実行の権限を付けて仮想アドレス空間に対応づけます。BSSのための0の領域やスタックを用意し、コマンドライン引数や環境変数をスタックに積みます。動的リンクなら動的リンカを、そうでなければ実行ファイルの入口の番地から実行を始めます。

カレントディレクトリにある実行の権限が付いたスクリプト run.sh を、「run.sh」と入力して実行しようとすると「command not found」になり、「./run.sh」と入力すると実行できた。理由として、正しいものはどれか。

  1. Arun.sh に実行の権限が付いておらず、先頭に ./ を付けたときだけは権限がなくても実行できるから
  2. Bスラッシュを含まないコマンド名は環境変数 PATH のディレクトリだけで探され、カレントディレクトリは一般に含まれないから
  3. Crun.sh の1行目の #!/bin/bash(シバン)は、先頭に ./ を付けて実行したときにしか読まれないから
答えと解説を見る

正解:B. スラッシュを含まないコマンド名は環境変数 PATH のディレクトリだけで探され、カレントディレクトリは一般に含まれないから

シェルは、スラッシュを含まないコマンド名を受け取ると、環境変数 PATH にコロンで区切って並んだディレクトリ(/usr/local/bin:/usr/bin など)を順に探して実行します。カレントディレクトリは、別の場所に置かれた同じ名前の悪意あるプログラムを誤って実行しないように、一般に PATH に入れません。./run.sh のようにスラッシュを含むパスを書くと、PATH を探さずにそのファイルを直接実行します。1行目の #!/bin/bash(シバン)は、どちらの方法で起動しても、そのスクリプトを実行するインタプリタを指定します。

解説の中の「環境変数」

「環境変数」が出てくる問題(8問)

  1. 上のように、データベースの接続先をイメージに書き込まず、コンテナを起動するときに環境変数で渡すようにした。この設計の主な利点として、最も適切なものはどれか。
  2. プログラムを起動するとき(Linuxのexecveなど)に、OSのローダが行うこととして正しいものはどれか。
  3. カレントディレクトリにある実行の権限が付いたスクリプト run.sh を、「run.sh」と入力して実行しようとすると「command not found」になり、「./run.sh」と入力すると実行できた。理由として、正しいものはどれか。
  4. 上のコマンドを順に実行したときの、2つの bash -c の出力の組み合わせとして、正しいものはどれか。
  5. cron に「30 2 * * 1 /home/alice/backup.sh」と登録した。backup.sh が実行されるタイミングとして、正しいものはどれか。
  6. CGIでは、Webサーバがリクエストを受けるたびにプログラムを新しいプロセスとして起動し、処理が終わるとプロセスは終了する。FastCGIやアプリケーションサーバの方式が、CGIと比べて多くのリクエストを効率よく処理できる主な理由はどれか。
  7. KubernetesのSecretに、データベースのパスワードを保存する。Secretの説明として、正しいものはどれか。
  8. CI/CDのパイプラインで作ったコンテナイメージを、ステージング環境で試験し、合格した。このイメージを本番環境に出す方法として、最も適切なものはどれか。

Linuxとコマンドラインの基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

関連する用語

コンテナ Kubernetes シェル ローダ スタック 引数 動的リンク 動的リンカ 変数 cron

用語集の一覧へ