技術ノート Linux Linux 上の Bash で環境変数を設定する方法

Linux 上の Bash で環境変数を設定する方法

重要なポイント

  • 環境変数は、Linux でターミナル ウィンドウとシェルの設定と構成を定義するために使用されます。
  • 環境変数には、システム全体の変数、セッション全体の変数、シェル固有の変数など、さまざまな種類があります。
  • 「echo」や「export」などのコマンドを使用して環境変数を表示および作成でき、/etc/environment や「.bash_rc」などの特定のファイルに追加することで再起動後も環境変数を永続化できます。

Linux には複数の種類の環境変数があります。それらを確認する方法、ローカルおよびリモート ログイン用にそれらを作成する方法、再起動後も存続させる方法を学びます。

環境変数の仕組み

ターミナル ウィンドウと その中のシェル を起動すると、シェルが正しく構成されていることを確認するために変数のコレクションが参照されます。これらの変数により、ターミナル ウィンドウとシェルが参照する必要がある情報が利用可能になることも保証されます。これらの変数は集合的に、コマンド プロンプトの外観に至るまで、ターミナル ウィンドウ内の環境を定義する設定を保持します。したがって、当然のことながら、それらは環境変数と呼ばれます。

一部の環境変数はシステム全体またはグローバルです。その他はセッション全体に適用され、自分だけが見ることができます。他の人はセッション環境変数を参照できません。シェル内には 3 番目の環境変数セットが定義されています。ロケール、タイムゾーン、キーボードの設定、シェルがコマンドを見つけようとするときに検索されるディレクトリのセット、およびデフォルトのエディタはすべてシェル環境変数に保存されます。

システムに存在する環境変数を確認する方法と、独自の環境変数を作成する方法について説明します。また、それらを子プロセスで使用できるようにし、再起動後も永続的に保つ方法についても説明します。

Linux 上の Bash で環境変数を設定する方法

環境と継承

シェルが開始されると、初期化フェーズが実行されます。この時点で、シェルの環境を定義する環境変数が読み取られます。

プログラムまたはコマンドがそのシェル (子プロセスと呼ばれる) から起動されると、親プロセスの環境が継承されますが、注意してください。これから説明するように、環境に追加されない変数を作成して、子プロセスに継承されないようにすることができます。

子プロセスがシェルの場合、そのシェルは独自の新しい変数セットから初期化されます。したがって、現在のシェルでコマンド プロンプトを変更してから子シェルを起動すると、子シェルは親の変更されたコマンド プロンプトを継承しません。

Linux 上の Bash で環境変数を設定する方法

地球環境変数

慣例により、環境変数には大文字の名前が付けられます。以下に、グローバル環境変数の一部と、それらに含まれる値が何を表すかを示します。

  • SHELL: ターミナル ウィンドウを開いたときに起動するシェルの名前。ほとんどの Linux ディストリビューションでは、デフォルトから変更しない限り、 これは bash になります
  • 用語: ターミナル ウィンドウは、実際にはハードウェア ターミナルのエミュレーションです。これは、エミュレートされるハードウェア端末のタイプを保持します。
  • USER: システムを現在使用している人のユーザー名。
  • PWD: 現在の作業ディレクトリへのパス。
  • OLDPWD: 現在の作業ディレクトリに移動する前のディレクトリ。
  • LS_COLORS: ls で使用されるカラー コードのリストは 、さまざまなファイル タイプを強調表示します
  • MAIL: Linux コンピュータにメール システムが設定されている場合 (デフォルトでは設定されていません)、これには 現在のユーザーのメールボックスへのパス が保持されます。
  • PATH: シェルがコマンド実行可能ファイルを見つけるために検索するディレクトリのリスト。
  • LANG: 言語、ローカリゼーション、および文字エンコーディングの設定。
  • HOME: 現在のユーザーのホーム ディレクトリ。
  • _: アンダースコア ( _ ) 環境変数は、最後に入力されたコマンドを保持します。

これらの一部が何に設定されているかを確認するには 、値をターミナル ウィンドウに書き込む echo より高度なものを使用します。環境変数が保持する値を確認するには、その名前の先頭にドル記号 ( $ ) を追加する必要があります。

便利な点は、 タブ補完 を使用して環境変数名を入力できることです。名前を数文字入力し、Tab キーを押します。変数の名前はシェルによって補完されます。これが起こらない場合は、同じ文字で始まる名前を持つ他のコマンドと環境変数を区別するために、さらにいくつかの文字を入力する必要があります。

エコー $SHELL

 $LANGをエコーする

エコー $HOME

エコー $PWD 

Linux 上の Bash で環境変数を設定する方法

Linux でグローバル環境変数を設定する

独自のグローバル環境変数を作成するには、それらを /etc/environment ファイルに追加します。このファイルを編集するには sudo を使用する必要があります。

 sudo gedit /etc/環境

環境変数を追加するには、その名前、等号 ( = )、および環境変数に保持したい値を入力します。等号 ( = ) の前後にスペースを入れないでください。環境変数の名前には、文字、アンダースコア ( _ )、または数字を含めることができます。ただし、名前の最初の文字を数字にすることはできません。

値にスペースが含まれている場合は、必ず値全体を引用符 ( " ) で囲んでください。

ファイルを保存し、ログアウトして再度ログインします。 echo を使用して、新しい変数が存在し、設定した値を保持していることをテストします。

エコー $WEBSITE

これはグローバル環境変数であり、誰でも利用できるため、ユーザー mary 次回ログインするときに環境変数を参照できます。

エコー $WEBSITE

すべての環境変数を一度に表示する には、 printenv と入力します。出力がたくさんあるので、それを sort にパイプしてから、 less に渡すのが理にかなっています。

プリントエンブ |並べ替え |少ない

環境変数のソートされたリストは、 less に表示されます。

grep を介して出力をパイプして、 特定のトピックに関連する 環境変数を探すことができます。

プリントエンブ | grep GNOME 

Linux 上の Bash で環境変数を設定する方法

便利な Bash 環境変数

これらは、bash の動作と機能を指示または記録するために bash で使用されるシェル環境変数の一部です。一部の値は、端末を使用すると更新されます。たとえば、 COLUMNS 環境変数は、ターミナル ウィンドウの幅に加えた変更を反映するように更新されます。

  • BASHOPTS: bash 起動時に使用されたコマンドライン オプション。
  • BASH_VERSION: 単語と数字の文字列としての bash バージョン番号。
  • BASH_VERSINFO: 数字で表した bash バージョン。
  • COLUMNS: ターミナル ウィンドウの現在の幅。
  • DIRSTACK: pushd コマンドによって ディレクトリ スタックに追加され たディレクトリ。
  • HISTFILESIZE: history ファイル に許可される最大行 数。
  • HISTSIZE: メモリ内で許可される history の行数。
  • HOSTNAME: コンピューターのホスト名。
  • IFS: コマンドラインで入力を区切るために使用される 内部フィールド区切り記号 。デフォルトでは、これはスペースです。
  • PS1: PS1 環境変数には、プライマリ、デフォルト、およびコマンド プロンプトの定義が保持されます。エスケープ シーケンスと呼ばれる一連のトークンをコマンド プロンプトの定義に含めることができます。これらは、ホスト名、ユーザー名、現在の作業ディレクトリ、時刻などを表します。
  • PS2: コマンドが複数行にまたがり、さらに多くの入力が予想される場合は、2 番目のコマンド プロンプトが表示されます。 PS2 環境変数には、この 2 番目のプロンプトの定義が保持されます。デフォルトでは、大なり記号 ( > ) です。
  • SHELLOPTS: set オプションを使用して設定できるシェル オプション。
  • UID: 現在のユーザーの ユーザー識別子

これらのシェル変数のいくつかを確認してみましょう。

 $BASH_VERSION をエコーする

$HOSTNAME をエコーする

エコー $COLUMNS

エコー $HISTFILESIZE

エコー $UID

完全を期すために、コマンド プロンプト定義で使用できるトークンを次に示します。

  • \t: HH:MM:SS 形式の現在の時刻。
  • \d: 現在の日付。曜日、月、日で表されます。
  • \n: 改行文字。
  • \s: シェルの名前。
  • \W: 現在の作業ディレクトリの名前。
  • \w: 現在の作業ディレクトリへのパス。
  • \u: ログインしているユーザーのユーザー名。
  • \h: コンピュータのホスト名。
  • \#: シェル内の各コマンドには番号が付けられます。これにより、コマンド プロンプトでコマンドの番号を確認できるようになります。これは、コマンドの history リストに含まれる番号と同じではありません。
  • \$: プロンプトの最後の文字を、通常のユーザーの場合はドル記号 ( $ )、root ユーザーの場合はハッシュ記号 ( # ) に設定します。これは、ユーザーの UID をチェックすることで機能します。ゼロの場合、ユーザーは root です。

PS1 環境変数の定義は .bashrc ファイルにあります。

このセクションでは特に Bash について説明しますが、考え方は ZSH などの他のシェルでも同じです。ただし、シェル変数には違いがあります。

「 Linux 上の Bash で環境変数を設定する方法」に関するベスト動画選定!

Linux徹底攻略-初学者でもこれ一本で現場で戦える!コマンド、カーネル、シェル、グロブ、パスdnf、ディストリビューション、プロンプト、EC2インスタンスやTeraterm導入まで2時間の濃密講義
【Linux入門】初心者向け!Linuxの基本的なコマンド操作を学ぼう!  〜 Ubuntu 環境で実演〜
Linux 上の Bash で環境変数を設定する方法

Bash 環境変数を設定する

独自に使用する環境変数を作成するには、 .bashrc ファイルの最後に環境変数を追加します。 SSH 接続などのリモート セッションで環境変数を使用できるようにしたい場合は、環境変数を .bash_profile ファイルにも追加する必要があります。

環境変数定義の形式は両方のファイルで同じです。 .bash_profile ファイルに定義を追加するには、ホーム ディレクトリに次のように入力します。

 gedit .bashrc

INHERITED_VAR という環境変数を追加しました。行の先頭にある「export」という単語に注目してください。

編集が終了したら、ファイルを保存して閉じます。ログアウトして再度ログインすることも、次のようにドット コマンド ( . ) を使用してシェルに .bash_profile ファイルを再読み取りさせることもできます。

 。 .bashrc

次に、コマンドラインで環境変数を作成しましょう。

 LOCAL_VAR="このセッションのみ"

echo 使用すると、両方の環境変数にアクセスできることがわかります。

エコー $LOCAL_VAR

エコー $INHERITED_VAR

INHERITED_VAR 環境変数の定義の行頭に「export」という単語が含まれていることがわかります。これは、環境変数が現在のシェルの子プロセスに継承されることを意味します。 bash コマンドを使用して別の変数を起動すると、子シェル内から 2 つの変数を再度確認できます。

バッシュ

エコー $LOCAL_VAR

エコー $INHERITED_VAR

ご覧のとおり、 INHERITED_VAR は子シェルからアクセスできますが、 LOCAL_VAR にはアクセスできません。単純に空行が表示されます。

「export」は子プロセスが引き継ぐ環境に環境変数部分を追加しますが、 INHERITED_VAR グローバル環境変数ではありません。たとえば、ユーザー mary それを参照できません。

エコー $INHERITED_VAR

bash セッションを閉じるには、 exit 使用します。

出口

継承された環境はスクリプトにも影響します。以下は、3 つの環境変数の値をターミナル ウィンドウに書き込む単純なスクリプトです。

 #!/bin/bshecho "WEBSITE" $WEBSITEecho "LOCAL_VAR" $LOCAL_VARecho "INHERITED_VAR" $INHERITED_VAR

これは envtest.sh というファイルに保存され、次のコマンドで実行可能になりました。

 chmod +x envtest.sh

スクリプトを実行すると、3 つの環境変数のうち 2 つにアクセスできます。

 ./envtest.sh

スクリプトでは、 WEBSITE グローバル環境変数と INHERITED_VAR エクスポートされた環境変数を確認できます。変数が作成されたのと同じシェルでスクリプトが実行されている場合でも、 LOCAL_VAR にアクセスできません。

必要に応じて、コマンド ラインから環境変数をエクスポートできます。これを LOCAL_VAR に対して実行してから、スクリプトを再度実行します。

 LOCAL_VAR をエクスポート

./envtest.sh

環境変数は現在のシェルの環境に追加されているため、スクリプトによって継承される環境に表示されます。スクリプトはその環境変数を参照することもできます。

Linux 上の Bash で環境変数を設定する方法

リモート接続

グローバル環境変数はリモート ログイン セッションからアクセスできますが、ローカルに定義された環境変数をリモートから利用できるようにしたい場合は、それらの環境変数を .bash_profile ファイルに追加する必要があります。 .bashrc ファイルと .bash_profile ファイル に同じ環境変数を異なる値で設定できます。これは、たとえば、システムをローカルまたはリモートで使用しているユーザーの動作を変更するスクリプトによって取得される可能性があります。

(混乱を招く恐れがありますが、 .profile ファイルもあります。環境変数の定義も保持できます。ただし、 .bash_profile ファイルが存在する場合、 .profile ファイルは読み取られません。したがって、最も安全な方法は — – そして bash に準拠した方法 — は .bash_profile ファイルを使用することです。)

.bash_profile ファイルを編集するには、再度 gedit を使用します。

 gedit .bash_profile

以前に使用したのと同じ値を持つ同じ環境変数を追加します。

変更を保存し、 gedit を閉じます。

別のコンピュータで、 テスト コンピュータへの SSH 接続を確立します。

 ssh dave@.local

接続したら、スクリプトをもう一度実行します。

 ./envtest.sh

.bash_profile ファイルはリモート ログインの初期化の一部として読み取られており、 INHERITED_VAR 環境変数は私たちとスクリプトからアクセス可能です。

環境変数の設定を解除する

環境変数の設定を解除するには、 unset コマンドを 使用します。グローバル環境変数 WEBSITE とエクスポートされた環境変数 INHERITED_VAR の設定を解除すると、それらはコマンド ラインでも子プロセスでも使用できなくなります。

ウェブサイトの設定を解除

INHERITED_VAR の設定を解除する

./envtest.sh

エコー $WEBSITE

注意すべき点は、これにより変更されるのは、このセッションでのグローバル環境変数の可用性のみであるということです。同時にログインしている別の人は、引き続きそのグローバル環境変数のインスタンスにアクセスできます。彼のインスタンスはログイン プロセス中に初期化され、 /etc/environment ファイルから読み取られ、他のユーザーの変数のコピーから独立しています。

たとえば、ユーザー dave がセッションで unset た場合でも、ユーザー mary 引き続き WEBSITE 環境変数にアクセスしてその値を読み取ることができます。

エコー $WEBSITE

環境管理

環境変数を使用すると、スクリプトやアプリケーションにどのように動作すべきかを知らせることができます。設定や少量のデータを保存するために使用できます。たとえば、スクリプトは、ファイルに書き込むことなく他のスクリプトから参照できる値を環境に設定できます。

Linuxコマンド

ファイル

tar pv cat tac chmod grep diff sed ar man pushd popd fsck testdisk seq fd pandoc cd $PATH awk join jq fold uniq journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · パッチ · 変換 · rclone · シュレッド · srm · scp · gzip · chattr · カット · 検索 · umask · wc · tr

プロセス

エイリアス · スクリーン · トップ · ナイス · renice · 進行状況 · strace · systemd · tmux · chsh · 履歴 · at · バッチ · フリー · what · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · タイムアウト · ウォール · はい · キル · スリープ · sudo · su · タイム · groupadd · usermod · グループ · lshw · シャットダウン · 再起動 · 停止 · パワーオフ · パスワード · lscpu · crontab · 日付 · bg · fg · pidof · nohup · pmap

ネットワーキング

netstat ping ip ss whois fail2ban bmon dig finger nmap ftp curl wget who whoami w iptables ssh-keygen ufw arping firewalld