Linuxの環境変数でパスの設定をする方法とシェル変数の扱い方を解説
2020/08/18
Linuxでの環境変数とシェル変数の扱い方
Linuxのコマンドは環境変数「PATH」に記述されたパスの場所を探す
Linuxにプログラムを入れたりライブラリを入れたときは、パスが通っている場所に設置するか、設置した場所にパスを通すか、の対応が必要になります。
それを行わないと、せっかく入れたプログラムやライブラリが正しく動作しません。
と言うわけで、Linuxでパスの設定をするために必要となる変数の扱い方、そして、環境変数の設定の仕方について解説をしていきます。
なお、Windows環境での環境変数の設定の仕方については下記の記事を書いていますので、そちらを参考にしてください。
Windowsで環境変数のパスの設定方法解説。不具合時のチェックポイントも紹介
環境変数「PATH」とその値の表示の方法
Linuxでコマンドを実行する際、プログラムまでのパスを指定せずにコマンドのみで実行した場合は、Linuxはあらかじめ決められた場所(ディレクトリ)にコマンドのプログラムを探しに行きます。
そのコマンドを入力したとき探しに行く場所は「PATH」と言う環境変数に記述されています。
この環境変数「PATH」に記述されている値を表示するには「echo」というコマンドを使用します。
また、シェルの中で変数を表示する場合には、変数名の前に「$」を付けます。
1 2 |
$ echo $PATH /usr/local/bin:/usr/bin:/bin |
上記の通り、「PATH」という環境変数の値を表示する場合は、「PATH」の先頭に「$」を付けた「$PATH」を引数として、「echo」コマンドを実行します。
表示された値「/usr/local/bin:/usr/bin:/bin」は「:(コロン)」で区切られて複数のフォルダが指示してあります。
上記の礼では、「/usr/local/bin」「/usr/bin」「/bin」がコマンドを実行したときに探しに行く場所となっています。
左から順番に探しに行き、コマンドがあればそのコマンドが実行されます。
※「:」のような「区切り文字」のことを「デリミタ」とも言います。
パスを記述しないコマンドだけでコマンドを実行したい場合は、「PATH」に記述されたフォルダの中にプログラムを設置します。
「PATH」に書かれていないフォルダにプログラムを設置したい場合は、「PATH」にプログラムを設置するフォルダのパスを記述する方法もあります。
それは、次項で解説します。
シェルでの変数の代入、追記、削除の方法、および、環境変数の設定方法
環境変数を設定する方法を理解するには、まずは、シェルで変数を扱う方法(値の代入、追加、削除の方法)を理解することが必要です。
まずは、その方法を解説します。
シェルで変数に値を代入する方法
変数に値を代入するときは以下のように行います。
1 2 |
$ HENSU1=abcde $ HENSU2="abcde fghij" |
「HENSU1」「HENSU2」は変数名です。
変数名には、アルファベット、数字、アンダースコア(_)を使用することができます。ただし、数値を 1文字目にすることはできません。また、大文字小文字は区別されます。
変数に値を代入する場合は、変数には「$」を付けません。
変数名の後ろに「=」をおき、続けて値を記述します。
「=」の前後にはスペースを入れてはいけません。
代入する値にスペースが含まれる場合は、「’(シングルクォート)」または「”(ダブルクォート)」で囲むことで代入が可能になります。
スペースが含まれない場合は、囲まなくても正しく代入することができます。
また、上記の代入した変数の値を確認する場合は、先に書いたように「echo」を使います。
こちらも先に書いたように、表示する場合は変数の先頭に「$」を付けます。
1 2 3 4 |
$ echo $HENSU1 abcde $ echo $HENSU2 abcde fghij |
変数に値を追加で代入する方法
先に紹介した方法は、変数に値を代入する方法です。
変数の中身を与えられた値に入れ替える(上書きする)方法です。
現在の値はそのままに、値を追加する場合は、下記の様に記述をします。
1 |
$ HENSU1=$HENSU1:xyz |
変数名「HENSU1」の先頭に「$」を付けた変数に、「:(コロン)」をつなげて、その後ろに追加をする値を追記します。
1 2 |
$ echo $HENSU1 abcde:xyz |
設定した変数を削除する方法
変数を削除する場合はコマンド「unset」を使用します。
1 2 |
$ unset HENSU1 $ unset HENSU2 |
削除する場合は、「$」は付けません。
以上のシェルにおける変数の扱い方を理解すれば、新たに環境変数「PATH」に新しいパスを追加する方法は理解できるかと思います。
環境変数「PATH」にパスとなるフォルダを追加する
すでに設定されてある環境変数「PATH」に「/home/bin」というフォルダを追加したい場合は、下記の様になります。
1 |
$ PATH=$PATH:/home/bin |
確認を含めた手順は以下のようになります。
1 2 3 4 5 6 7 |
$ echo $PATH /usr/local/bin:/usr/bin:/bin $ PATH=$PATH:/home/bin $ echo $PATH /usr/local/bin:/usr/bin:/bin:/home/bin |
1行目で「PATH」の中身を確認し、2行目で新たなパスを追加し、3行目で改めて確認をしています。
これで環境変数に新たなパスを追加することができました。
「PATH」を設定する場合の間違いやすいポイント
「PATH」を設定する場合に間違いやすい記述方法が以下のものです。
1 2 3 4 |
$ PATH=/home/bin $ echo $PATH /home/bin |
先に解説をしたとおり、あらかじめ設定している「PATH」に情報を追記する場合は「PATH=$PATH:/home/bin
」と書く必要がありますが、上記のように「$PATH:
」の部分を書き忘れることがあります。
この様に記述すると、新たに追加した「/home/bin」に設置したコマンドは実行できますが、それ以外のコマンドが使えなくなってしまいます。
ご注意ください。
シェル変数を環境変数にする exportコマンド
前項で紹介した「PATH」は環境変数ですので、シェルを起動してすぐに利用することができます。
パスを追加するとそれをすぐに他のシェルでも利用できるようになります。
ですが、この記事の例として作成した変数「HENSU1」「HENSU2」は、シェル変数と言われる変数で、設定したシェルのみで使用できる(別のシェルでは使用できない)変数です。
このシェル変数を環境変数として他のシェルでも利用できるようにするには exportコマンドを利用します。
1 2 |
$ HENSU1=abcde $ export HENSU1 |
1行目で変数「HENSU1」に値を代入し、2行目の exportで他のシェルでも使えるよう環境変数に変換します。
1 |
$ export HENSU1=abcde |
上記の通り 1行で表現することもできます。
今回は、環境変数「PATH」に値を追加することを想定して解説をしてきましたので、「PATH」にパスを追加する場合は下記の方法を紹介しました。
1 |
$ PATH=$PATH:/home/bin |
Linuxの設定ファイルの区切り文字はおおよそ「:」ですので、環境変数を変更する場合は問題になることは少ないと思いますが、それ以外の区切り文字を使いたい場合、区切り文字を使いたくない場合などの手続き方法については別の下記の記事にまとめましたので、あわせて参考にしてください。
Linuxのbashで変数に値を追加する方法を多数紹介。+=や""を使う方法など
変数の一覧表示は set、declare、printenv、envコマンドを使用
この記事で紹介した exportコマンドなどを使用して設定するシェル変数、環境変数ですが、これらを一覧表示するコマンドとして、「set」コマンド、「declare」コマンド、「printenv」コマンド、「env」コマンドが用意されています。
「set」コマンドは、下記のようにパラメータなしで実行することで登録されているシェル変数、環境変数を一覧表示します。
1 2 3 4 5 6 |
$ set BASH=/usr/bin/bash BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath BASH_ALIASES=() : 以下略 |
「declare」コマンドでは「-p」オプションを付与してコマンドを事項することで、変数とその属性を一覧表示します。
1 2 3 4 5 6 |
$ declare -p declare -- BASH="/usr/bin/bash" declare -r BASHOPTS="checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath" declare -ir BASHPID : 以下略 |
「printenv」「env」コマンドでは、下記のようにパラメータなしで実行することで登録されている環境変数を一覧表示します。(シェル変数は表示されません。)
1 2 3 4 5 6 7 |
$ printenv XDG_SESSION_ID=2 HOSTNAME=localhost.localdomain TERM=xterm SHELL=/bin/bash : 以下略 |
setコマンドはシェルの設定を行うコマンド
setコマンドは、シェルの設定を確認、変更するコマンドです。
その一つとして、変数一覧を表示する機能があります。
declareコマンドは変数を宣言するコマンド
declareコマンドは、変数を宣言するコマンドです。
変数を宣言するほか、定義済みの変数や関数について定義内容を表示することが出来ます。
そのため、exportコマンドと同様に変数を環境変数に設定することも出来ます。
下記のコマンドでは同様に「HENSU1」を環境変数にすることができます。
1 2 |
$ export HENSU1 $ declare -x HENSU1 |
printenvコマンドは環境変数を表示するコマンド
printenvコマンドは、環境変数を表示するためのコマンドです。
パタメータなしでコマンドを実行すると、登録されているすべての環境変数を一覧表示します。
また、下記のようにパラメータに環境変数を指定すると、指定した環境変数の内容を表示します。
1 2 |
$ printenv HOME /home/admin |
envコマンドは環境変数を表示、設定するコマンド
envコマンドは、環境変数を表示するためのコマンドです。
パタメータなしでコマンドを実行すると、登録されているすべての環境変数を一覧表示します。
パラメータなしで実行して表示される環境変数の情報は「env」も「printenv」も違いはありません。
「env」と「printenv」の違いはと言うと、printenvコマンドは環境変数を表示するコマンドのため、「printenv HOME
」のように環境変数を指定して個別に表示する機能がありますが、「env」コマンドにはそのような機能はありません。
ですが、「env」コマンドは環境変数を設定する機能があります。
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
Linuxのnlは行番号を付与してファイルの内容を表示するコマンド
Linuxでファイルを表示する際に行番号を付与するにはcatコマンドにnオプションを使うことでも可能。しかし、行番号を付与する専門のnlコマンドがある。ここではその使い方を詳細に解説。
-
UNIX・Linuxの sedコマンドで特定の文字列を置換する方法
UNIX・Linuxのコマンドで特定の文字列を置換する sedコマンドの使い方と、perlコマンドを使っての方法を解説しています。
-
cat、less、head、tail、split、sedなどLinuxでファイル、文字列を操作するコマンド
Linuxでファイル、テキストを操作するコマンドのまとめ。cat、less、head、tail、split、tr、sedなど、ファイルを表示、置換、連結、分割などの各コマンドの使い方の紹介と詳細ページの紹介。
-
Linuxのファイル表示・結合catの逆処理のtac、revコマンドの解説
Linuxにtac、revというコマンドがある。catの逆の処理なのだが、tacは最終行から逆に表示し、revは行末の文字から逆に表示をすることを解説しつつその使い方について詳しく解説をする。
-
Linuxのタイムスタンプはmtime、ctime、atimeの3種類。touchコマンドで更新する方法
Linuxのファイルのタイムスタンプにはmtime、ctime、atimeの3種類がある。その違いを詳細に解説しつつ、lsで表示するオプション、touchで更新するオプションを解説。
-
Linuxのheadコマンドは先頭行から、tailコマンドは最終行から指定した行を表示する
Linuxのhead、tailコマンドはファイルの先頭の一部、もしくは、末行の一部を表示するコマンド。行数や文字数で指定をする。tailはログを監視するためのオプションがある。
-
Linux findコマンドを使ってn日前のファイルを削除する 3つの記述方法
作成からn日経ったファイルを削除したい、そんなときにはfindコマンドを使う。コマンドの記述の方法は3種類あり、それぞれを解説。書き易さもあるがスピードに大きく差がある記述方法もある。
-
makewhatis、mandbコマンドでLinuxのオンラインマニュアル索引情報を更新
Linuxコマンドのオンラインマニュアルを検索するwhatis、aproposなどのコマンドはwhatisデータベースを対象に検索する。このデータベースを更新するmandb、makewhatisコマンドを解説。
-
Linuxのbashのコマンドの履歴をhistoryで確認し!、↓、↑で実行する
Linuxで実行したコマンドの履歴を確認するコマンド「history」。「history」の使い方、設定の変更、設定ファイルの設置場所について解説。「!番号」「!文字列」「!?文字列」など。
-
less、moreはページャー、ファイルの中身を表示するLinuxのコマンド
Linuxにはコマンドで実行した結果が長い場合、1画面ごとに区切って表示するコマンドが用意されている。それがページャーと呼ばれるmore、lessだ。この使い方を解説。