Linux の環境変数

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

Linux の環境変数に関するこのハンズオン ラボへようこそ!環境変数は、コンピュータ上で実行中のプロセスの動作に影響を与えることができる動的な値です。これらは、システム構成とプログラム実行において重要な役割を果たします。環境変数をマスターすることで、Linux システム管理とソフトウェア開発に不可欠なスキルを身につけることができます。

このラボでは、環境変数を作成、表示、変更、削除する方法を学びます。また、これらの変更を恒久的にする方法と、Linux で最も重要な組み込み環境変数のいくつかを理解する方法についても探求します。初心者であろうと、理解を深めたい方であろうと、このラボは貴重なハンズオン 経験を提供します。

さあ、始めましょう!

Linux の変数の理解

環境変数に取り組む前に、まず基本的なシェル変数から始めましょう。これにより、Linux の変数の概念を理解するのに役立ちます。

  1. ターミナルを開きます。/home/labex/project ディレクトリにいる必要があります。そうでない場合は、次のコマンドを使用してこのディレクトリに移動できます。

    cd /home/labex/project
  2. 次に、簡単なシェル変数を作成しましょう。Linux では、名前に値を割り当てるだけで変数を作成できます。my_var という名前の変数を作成しましょう。

    my_var="Hello, Linux"

    重要な注意事項:Bash(このラボで使用している Zsh も同様)で変数を割り当てる場合、イコール記号 (=) の前後には空白を入れないでくださいmy_var = "Hello, Linux" または my_var= "Hello, Linux" はエラーを引き起こします。

  3. 変数の値を表示するには、変数名の前に $ を付けた echo コマンドを使用します。$ は、シェルに変数の値を置き換えるように指示します。

    echo $my_var

    次の出力が表示されるはずです。

    Hello, Linux
  4. 他のコマンドや割り当ての中でも変数を使用できます。たとえば:

    echo "The value of my_var is: $my_var"

    これにより、The value of my_var is: Hello, Linux と出力されます。

素晴らしいです!初めてのシェル変数を作成して使用しました。ただし、この変数は現在のシェル セッション内でのみ利用可能です。新しいターミナル ウィンドウやタブを開いた場合、この変数はそこでは利用できません。このときこそ、環境変数が役に立ちます。

環境変数の紹介

基本的な変数を理解したので、環境変数を探求しましょう。環境変数は、シェルの任意の子プロセスに利用可能な変数です。これは、そのシェルから実行されるスクリプトやプログラムがアクセスできることを意味します。

  1. 現在のすべての環境変数を表示するには、env コマンドを使用します。

    env

    これにより、長い変数の一覧が表示されます。まだすべてを理解していなくても心配しないでください。後で最も重要なもののいくつかを説明します。

  2. 最も重要な環境変数の 1 つは PATH です。見てみましょう。

    echo $PATH

    PATH 変数は、システムが実行可能プログラムを探すディレクトリをリストしています。各ディレクトリはコロン (:) で区切られています。

  3. 次に、独自の環境変数を作成しましょう。環境変数を作成するには export コマンドを使用します。

    export MY_ENV_VAR="This is an environment variable"

    export コマンドにより、子プロセスに変数が利用可能になります。これが、シェル変数と環境変数の主な違いです。

  4. この違いを示すために、通常のシェル変数と環境変数の両方にアクセスしようとするシェル スクリプトを作成しましょう。

    echo '#!/bin/bash
    echo "Shell variable: $my_var"
    echo "Environment variable: $MY_ENV_VAR"' > test_vars.sh

    スクリプトを実行可能にします。

    chmod +x test_vars.sh

    次に、スクリプトを実行します。

    ./test_vars.sh

    環境変数 (MY_ENV_VAR) はアクセス可能であるのに対し、シェル変数 (my_var) はアクセスできないことがわかるはずです。これは、my_var がエクスポートされていないため、子プロセス(この場合はスクリプト)がそれを知らないからです。

  5. MY_ENV_VAR が現在の環境変数であることを確認するには、再度 env コマンドを使用しますが、今回は grep を使って出力をフィルタリングします。

    env | grep MY_ENV_VAR

    出力に新しい変数が表示されるはずです。

  6. 新しい環境変数の値を直接確認することもできます。

    echo $MY_ENV_VAR

素晴らしい!これで初めての環境変数を作成し、シェル変数とどのように異なるかを確認しました。主な違いは、export で作成された環境変数は子プロセスに利用可能であるのに対し、シェル変数はそうではないということです。

環境変数とシェル変数はそれぞれ独自のスコープを持っています。変数をエクスポートすると(たとえば export MY_ENV_VAR="something")、そのシェルから開始される任意のサブプロセス(たとえば同じシェルで実行されるシェル スクリプト)に利用可能になります。ただし、完全に別のシェル セッションを開いた場合、現在のシェルの変数を継承しないため、起動ファイル(たとえば .zshrc.bashrc)で明示的に設定しない限りです。

言い換えると:

  • 通常のシェル変数は、現在のセッション内でのみ表示されます。
  • エクスポートされた変数は、そのセッションから起動される子プロセスに利用可能です。
  • シェル起動ファイル(たとえば .zshrc)で設定された変数は、そのシェルのすべての新しいセッションに適用されます。

他のユーザーや別のシェルの変数を直接読み取ることはできません。なぜなら、各プロセスは独自の環境を維持しているからです。新しいシェルを起動すると、親のエクスポートされた変数のコピーを取得しますが、export なしで元のシェルにのみ設定された変数は取得しません。

次の手順で、環境変数を恒久的に設定する方法を学びます。

PATH 環境変数の変更

PATH 変数は Linux で最も重要な環境変数の 1 つです。これは、システムに実行可能ファイルを探す場所を示します。新しいディレクトリを追加するために変更してみましょう。

  1. まず、カスタム スクリプトを保存するための新しいディレクトリを作成しましょう。

    mkdir ~/my_scripts

    これにより、ホーム ディレクトリに my_scripts という名前のディレクトリが作成されます。~ 記号はホーム ディレクトリ パスのショートカットで、この実験では /home/labex です。

  2. 次に、この新しいディレクトリを PATH に追加しましょう。export コマンドを使用しますが、今回は既存の変数を変更しています。

    export PATH="$PATH:$HOME/my_scripts"

    これを分解してみましょう。

    • $PATH は PATH 環境変数の現在の値です。既存の値を使用して追加しています。
    • : は PATH 内のディレクトリを区切るために使用されます。コロンを省略すると、シェルは追加したディレクトリ内の実行可能ファイルを見つけることができません。
    • $HOME は、ホーム ディレクトリを指す環境変数です(今回の場合も /home/labex)。
    • したがって、既存の PATH に :$HOME/my_scripts を追加しています。これにより、システムには、元の PATH 内のディレクトリを検索した後に my_scripts 内の実行可能ファイルを探すように指示されます。
  3. 新しいディレクトリが追加されたことを確認しましょう。

    echo $PATH

    出力の末尾に /home/labex/my_scripts が表示されるはずです。末尾に表示されない場合は、別の方法で変更した可能性がありますが、問題ありません。ただし、PATH に /home/labex/my_scripts パスが含まれている必要があります。

  4. これをテストするために、新しいディレクトリに簡単なスクリプトを作成しましょう。

    echo '#!/bin/bash
    echo "Hello from my custom script!"' > ~/my_scripts/hello.sh

    これにより、~/my_scripts ディレクトリに hello.sh という名前のシェル スクリプトが作成されます。最初の行の #!/bin/bash は、これが bash スクリプトであることをシステムに伝え、プログラムとして実行できるようにします。

  5. スクリプトを実行可能にします。

    chmod +x ~/my_scripts/hello.sh

    chmod +x コマンドは、スクリプトに実行許可を追加し、プログラムとして実行できるようにします。この手順を行わないと、実行しようとすると「許可が拒否されました」というエラーが表示されます。

  6. これで、どこからでもスクリプト名だけで実行できるようになります。

    hello.sh

    すべてが正しく動作していれば、Hello from my custom script! と表示されるはずです。

これが機能するのは、my_scripts ディレクトリを PATH に追加したからです。コマンドを入力すると、シェルは PATH にリストされている各ディレクトリでその名前の実行可能ファイルを順に探します。my_scriptsPATH に追加することで、シェルにそこにも実行可能ファイルを探すように指示したのです。

これを示すために、別のディレクトリに移動してスクリプトを再度実行してみてください。

cd /tmp
hello.sh

スクリプトが配置されているディレクトリにいなくても、スクリプトがまだ実行されることがわかります。これが PATH 変数の力です。PATH にリストされているディレクトリにあれば、システム内のどこからでも実行可能ファイルを実行できるようになります。

素晴らしい!あなたは成功裏に PATH 環境変数を変更し、どこからでも実行できるカスタム スクリプトを作成しました。

環境変数を恒久的に設定する

ターミナルを閉じると、設定した環境変数が失われます。恒久的にするには、シェル設定ファイルに追加する必要があります。正確なファイルは、使用しているシェルによって異なります。

この実験環境では、Bourne Shell(sh)の拡張バージョンであるZ shell(zsh)を使用しています。これには、Bash、ksh、tcshのいくつかの機能を含む多くの改善が施されています。Zshはますます人気があり、現在はmacOSのデフォルト シェルになっています。

Bash(多くのLinuxディストリビューションでデフォルトです)を使用していた場合、.bashrcを変更します。しかし、zshを使用しているので、.zshrcを変更します。正しいファイルを使用することが非常に重要です。zshを使用している間に.bashrcを変更すると、変数が設定されません。

  1. ホーム ディレクトリの.zshrcファイルをテキストエディタで開きます。簡単な端末ベースのテキストエディタであるnanoを使用します。

    nano ~/.zshrc

    このコマンドは、~/.zshrcファイルを開きます。ここで~は再びホーム ディレクトリ/home/labexのショートカットです。.zshrcファイルが存在しない場合、nanoは新しいファイルを作成します。このファイルは、新しいターミナル セッションを開始するたびに実行されます。

  2. ファイルの末尾までスクロールします(矢印キーを使用できます)。そして、次の行を追加します。

    export MY_ENV_VAR="This is an environment variable"
    export PATH="$PATH:$HOME/my_scripts"

    これらの行をファイルの末尾に追加することを確認してください。スペルと構文が正しいこと、特に=記号の前後に空白がないことを確認してください。

  3. ファイルを保存してエディタを終了します。nanoでは、Ctrl+Xを押してからY(保存するため)を押し、その後Enterを押します。

  4. ターミナルを再起動せずにこれらの変更を適用するには、sourceコマンドを使用します。

    source ~/.zshrc

    sourceコマンドは、現在のシェル環境で引数として指定されたファイルからコマンドを読み取り実行します。これは、bash ~/.zshrcを使用してファイルを単に実行することとは異なります。後者は新しいシェルでスクリプトを実行し、現在のシェルには影響しません。sourceは現在のシェルで実行するため、変更が即座に反映されます。この手順を省略すると、現在のターミナルで変更が反映されず、変更を確認するにはターミナルを閉じて再開する必要があります。

これで、新しいターミナルを開くたびにこれらの環境変数が設定されます。これは、開発環境を一貫して設定する際に非常に便利です。

重要な環境変数の理解

Linux には、システム操作にとって重要ないくつかの組み込み環境変数があります。それらのいくつかを探求しましょう。

  1. HOME:現在のユーザーのホーム ディレクトリを指します。

    echo $HOME
  2. USER:現在のユーザーのユーザー名が含まれています。

    echo $USER
  3. SHELL:ユーザーのデフォルト シェルを指定します。

    echo $SHELL
  4. PWD:「Print Working Directory」の略です。現在のディレクトリのパスが含まれています。

    echo $PWD
  5. TERM:シェルを実行する際にエミュレートする端末の種類を指定します。

    echo $TERM

これらの変数を理解することで、Linux 環境をより上手に操作し制御することができます。

環境変数の削除

時には、環境変数を削除する必要がある場合があります。これは unset コマンドを使用して行われます。

  1. まず、MY_ENV_VAR がまだ設定されているかどうかを確認しましょう。

    echo $MY_ENV_VAR

    以前に設定した値が表示されるはずです。

  2. この変数を削除するには、unset コマンドを使用します。

    unset MY_ENV_VAR
  3. 変数が削除されたことを確認しましょう。

    echo $MY_ENV_VAR

    出力が表示されないはずで、これは変数がもはや存在しないことを示しています。

  4. unset-v オプションを付けて、変数を削除していることを確認することもできます。これにより、シェル関数ではなく変数を削除します。

    unset -v MY_ENV_VAR

    これは、unset MY_ENV_VAR を実行した場合と同じ結果になります。

忘れないでください。変数を .zshrc ファイルに追加している場合、次回ターミナルを開くか、.zshrc ファイルをソースするときに再作成されます。

まとめ

おめでとうございます!Linux 環境変数に関するこの包括的な実験を完了しました。学んだことを振り返りましょう。

  1. シンプルなシェル変数を作成し、そのスコープを理解しました。
  2. 環境変数について学び、シェル変数との違い、特に子プロセスへのアクセシビリティについて学び、export コマンドがこれにとって重要なキーであることを理解しました。
  3. 重要な PATH 変数を変更してカスタム ディレクトリを追加し、システム内のどこからでもスクリプトを実行できるようにしました。また、エントリを区切るためにコロン : を使用する重要性についても学びました。
  4. 環境変数を .zshrc に追加することで恒久的にし、Bash と Zsh のシェル設定の違いと、変更を適用するために source を使用する重要性を理解しました。
  5. Linux のいくつかの最も重要な組み込み環境変数を探求しました。
  6. 最後に、unset コマンドを使用して環境変数を削除する方法を学びました。

これらのスキルは、Linux システム管理とソフトウェア開発にとって基本的なものです。環境変数を使うことで、システムとアプリケーションを柔軟に設定できます。Linux を使い続けるうちに、環境変数をスクリプト、開発、システム設定に無数に使う場面があることがわかるでしょう。

忘れないでください。練習が熟達のもとです。さまざまな目的で独自の環境変数を作成し、さまざまなアプリケーションやスクリプトが環境変数をどのように使って動作を制御するかを探求してみてください。楽しい学びを!