「環境変数」の版間の差分
細 (内部リンクの修正) |
(同期) |
||
4行目: | 4行目: | ||
[[ru:Environment variables]] |
[[ru:Environment variables]] |
||
[[zh-cn:Environment variables]] |
[[zh-cn:Environment variables]] |
||
+ | {{Related articles start}} |
||
+ | {{Related|デフォルトアプリケーション}} |
||
+ | {{Related|Xdg-open}} |
||
+ | {{Related articles end}} |
||
環境変数とは1つ、または複数のアプリケーションによって使用されるデータを含んだ名前付きオブジェクトです。簡単に言えば、名前と値がある変数です。環境変数の値は例えば、実行可能ファイルのファイルシステムにおける場所や使用するデフォルトのエディタ、システムロケールの設定などになります。Linux に慣れてないユーザーは、環境変数で設定をするのは御しがたいと考えがちですが、複数のアプリケーションと Linux のプロセスの設定を共有するシンプルな方法として環境変数が存在しています。 |
環境変数とは1つ、または複数のアプリケーションによって使用されるデータを含んだ名前付きオブジェクトです。簡単に言えば、名前と値がある変数です。環境変数の値は例えば、実行可能ファイルのファイルシステムにおける場所や使用するデフォルトのエディタ、システムロケールの設定などになります。Linux に慣れてないユーザーは、環境変数で設定をするのは御しがたいと考えがちですが、複数のアプリケーションと Linux のプロセスの設定を共有するシンプルな方法として環境変数が存在しています。 |
||
24行目: | 28行目: | ||
# envof 1 |
# envof 1 |
||
TERM=linux |
TERM=linux |
||
+ | |||
+ | == 変数の定義 == |
||
+ | |||
+ | === グローバル === |
||
+ | |||
+ | 大半の Linux ディストリビューションは、あなたに {{ic|/etc/profile}} 等のファイルに環境変数の追加・変更を行うよう指示します。環境変数を維持管理し、それらを含む膨大な数のファイルに気を配る必要があります。原則的にあらゆるシェルスクリプトは環境変数の定義に使われる可能性がありますが、以下のような UNIX の慣例に従い特定のファイルでのみ行われるべきものです。 |
||
+ | |||
+ | 次のファイルがグローバルな環境変数の定義に使われるべきです: {{ic|/etc/profile}}、{{ic|/etc/bash.bashrc}}、および {{ic|/etc/environment}}。ファイルにはそれぞれ制限があるため、注意深く目的にあったものを選ぶべきです。 |
||
+ | |||
+ | *{{ic|/etc/profile}} はログインシェル''のみ''において変数を初期化します。ただし、スクリプトを実行したり、全ての [[wikipedia:ja:Bourne Shell|Bourne shell]] 互換シェルで使うことができます。 |
||
+ | *{{ic|/etc/bash.bashrc}} はインタラクティブシェル''のみ''において変数を初期化します。スクリプトも実行しますが (名前から分かる通り) Bash でしか使えません。 |
||
+ | *{{ic|/etc/environment}} は PAM-env モジュールによって使われ、ログインシェルであるかそうでないか、インタラクティブシェルであるかそうでないか、また、Bash であるかそうでないかは関係ありません。そのためスクリプトやグロブ展開を使うことは不可能です。このファイルに記述できるのは {{ic|1=''variable=value''}} のペアだけです。 |
||
+ | |||
+ | 以下の例では、特定のユーザーで {{ic|~/bin}} ディレクトリを {{ic|PATH}} に追加しています。適当な環境変数設定ファイル ({{ic|/etc/profile}} あるいは {{ic|/etc/bash.bashrc}}) に記述することで使うことができます: |
||
+ | |||
+ | {{bc|<nowiki> |
||
+ | # If user ID is greater than or equal to 1000 & if ~/bin exists and is a directory & if ~/bin is not already in your $PATH |
||
+ | # then export ~/bin to your $PATH. |
||
+ | if [[ $UID -ge 1000 && -d $HOME/bin && -z $(echo $PATH | grep -o $HOME/bin) ]] |
||
+ | then |
||
+ | export PATH=$HOME/bin:${PATH} |
||
+ | fi |
||
+ | </nowiki>}} |
||
+ | |||
+ | === ユーザーごと === |
||
+ | |||
+ | {{Note|dbus デーモンや systemd のユーザーインスタンスは {{ic|.bashrc}} などで設定された環境変数を継承しません。そのため、D-Bus によって Nautilus などのアプリケーションが起動した場合、デフォルトで設定された環境変数を使いません。[[Systemd/ユーザー#環境変数]]を参照してください。}} |
||
+ | |||
+ | 環境変数をグローバルに定義したくないという時もあるでしょう。例えば、{{ic|PATH}} に {{ic|/home/my_user/bin}} を追加したいが、システム上の他のユーザーには同じ {{ic|PATH}} を使って欲しくないという場合が考えられます。様々なファイルを使うことでローカルに環境変数を定義することができます: |
||
+ | |||
+ | # シェルの設定ファイル、例えば [[Bash#設定ファイル]] や [[Zsh#設定ファイル]]。 |
||
+ | # {{ic|~/.profile}} は多数のシェルによってフォールバックとして使われます。[[wikipedia:Unix_shell#Configuration_files_for_shells]] を参照。 |
||
+ | # {{ic|~/.pam_environment}} は {{ic|/etc/environment}} のユーザー個別の設定で、PAM-env モジュールによって使われます。詳しくは {{ic|pam_env(8)}} を参照。 |
||
+ | |||
+ | ローカルで {{ic|PATH}} にディレクトリを追加したい場合、以下のように {{ic|~/.bash_profile}} に記述します: |
||
+ | |||
+ | export PATH="${PATH}:/home/my_user/bin" |
||
+ | |||
+ | 変数をアップデートするために、再ログインするかファイルを ''source'' してください: {{ic|$ source ~/.bash_profile}}。 |
||
+ | |||
+ | ==== グラフィカルアプリケーション ==== |
||
+ | |||
+ | GUI アプリケーションの環境変数を設定したいときは、[[xinitrc]] ([[ディスプレイマネージャ]]を使う場合 [[xprofile]]) に変数を記述することができます。例: |
||
+ | |||
+ | {{hc|1=~/.xinitrc|2= |
||
+ | export PATH="${PATH}:~/scripts" |
||
+ | export GUIVAR=value}} |
||
+ | |||
+ | === セッションごと === |
||
+ | |||
+ | 時としてもっと限られた定義が必要になる場面もあります。絶対パスを入力せずに指定したディレクトリから一時的に実行ファイルを起動したい場合や、アプリケーションを実行するために短時間だけ {{ic|~/.bash_profile}} を編集しなくてはならない場合などです。 |
||
+ | |||
+ | その場合、''export'' コマンドを使うことで、現在のセッションのみで {{ic|PATH}} 変数を定義することができます。ログアウトするまでは、{{ic|PATH}} 変数は一時的な設定が使われます。{{ic|PATH}} に特定のディレクトリを追加するには、次を実行: |
||
+ | |||
+ | $ export PATH="${PATH}:/home/my_user/tmp/usr/bin" |
||
== サンプル == |
== サンプル == |
||
84行目: | 143行目: | ||
*{{ic|TZ}} はユーザー別にシステムと違うタイムゾーンを指定するために使うことができます。{{ic|/usr/share/zoneinfo/}} に記載されているタイムゾーンを参考にしてください。 例: {{ic|1=TZ="/usr/share/zoneinfo/Pacific/Fiji"}}。 |
*{{ic|TZ}} はユーザー別にシステムと違うタイムゾーンを指定するために使うことができます。{{ic|/usr/share/zoneinfo/}} に記載されているタイムゾーンを参考にしてください。 例: {{ic|1=TZ="/usr/share/zoneinfo/Pacific/Fiji"}}。 |
||
− | |||
− | == 変数の定義 == |
||
− | |||
− | [[Systemd/ユーザー#環境変数]]も見て下さい。 |
||
− | |||
− | === グローバル === |
||
− | |||
− | 大半の Linux ディストリビューションは、あなたに {{ic|/etc/profile}} 等のファイルに環境変数の追加・変更を行うよう指示します。環境変数を維持管理し、それらを含む膨大な数のファイルに気を配る必要があります。原則的にあらゆるシェルスクリプトは環境変数の定義に使われる可能性がありますが、以下のような UNIX の慣例に従い特定のファイルでのみ行われるべきものです。 |
||
− | |||
− | 次のファイルがグローバルな環境変数の定義に使われるべきです: {{ic|/etc/profile}}、{{ic|/etc/bash.bashrc}}、および {{ic|/etc/environment}}。ファイルにはそれぞれ制限があるため、注意深く目的にあったものを選ぶべきです。 |
||
− | |||
− | *{{ic|/etc/profile}} initializes variables for login shells ''only''. It does, however, run scripts and can be used all [[wikipedia:Bourne shell|Bourne shell]] compatible shells. |
||
− | *{{ic|/etc/bash.bashrc}} initializes variables for interactive shells ''only''. It also runs scripts but (as its name implies) is Bash specific. |
||
− | *{{ic|/etc/environment}} is used by the PAM-env module and is agnostic to login/non-login, interactive/non-interactive and also Bash/non-Bash, so scripting or glob expansion cannot be used. The file only accepts {{ic|1=''variable=value''}} pairs. |
||
− | |||
− | In this example, we add {{ic|~/bin}} directory to the {{ic|PATH}} for respective user. To do this, just put this in your preferred global environment variable config file ({{ic|/etc/profile}} or {{ic|/etc/bash.bashrc}}): |
||
− | |||
− | {{bc|<nowiki> |
||
− | # If user ID is greater than or equal to 1000 & if ~/bin exists and is a directory & if ~/bin is not already in your $PATH |
||
− | # then export ~/bin to your $PATH. |
||
− | if [[ $UID -ge 1000 && -d $HOME/bin && -z $(echo $PATH | grep -o $HOME/bin) ]] |
||
− | then |
||
− | export PATH=$HOME/bin:${PATH} |
||
− | fi |
||
− | </nowiki>}} |
||
− | |||
− | === ユーザーごと === |
||
− | |||
− | 環境変数をグローバルに定義したくないという時もあるでしょう。例えば、{{ic|PATH}} に {{ic|/home/my_user/bin}} を追加したいが、システム上の他のユーザーには同じ {{ic|PATH}} を使って欲しくないという場合が考えられます。様々なファイルを使うことでローカルに環境変数を定義することができます: |
||
− | |||
− | # シェルの設定ファイル、例えば [[Bash#設定ファイル]] や [[Zsh#設定ファイル]]。 |
||
− | # {{ic|~/.profile}} は多数のシェルによってフォールバックとして使われます。[[wikipedia:Unix_shell#Configuration_files_for_shells]] を参照。 |
||
− | # {{ic|~/.pam_environment}} は {{ic|/etc/environment}} のユーザー個別の設定で、PAM-env モジュールによって使われます。詳しくは {{ic|pam_env(8)}} を参照。 |
||
− | |||
− | ローカルで {{ic|PATH}} にディレクトリを追加したい場合、以下のように {{ic|~/.bash_profile}} に記述します: |
||
− | |||
− | export PATH="${PATH}:/home/my_user/bin" |
||
− | |||
− | 変数をアップデートするために、再ログインするかファイルを ''source'' してください: {{ic|$ source ~/.bash_profile}}。 |
||
− | |||
− | ==== グラフィカルアプリケーション ==== |
||
− | |||
− | GUI アプリケーションの環境変数を設定したいときは、[[xinitrc]] ([[ディスプレイマネージャ]]を使う場合 [[xprofile]]) に変数を記述することができます。例: |
||
− | |||
− | {{hc|1=~/.xinitrc|2= |
||
− | export PATH="${PATH}:~/scripts" |
||
− | export GUIVAR=value}} |
||
− | |||
− | === セッションごと === |
||
− | |||
− | Sometimes even stricter definitions are required. One might want to temporarily run executables from a specific directory created without having to type the absolute path to each one, or editing {{ic|~/.bash_profile}} for the short time needed to run them. |
||
− | |||
− | In this case, you can define the {{ic|PATH}} variable in your current session, combined with the ''export'' command. As long as you do not log out, the {{ic|PATH}} variable will be using the temporary settings. To add a session-specific directory to {{ic|PATH}}, issue: |
||
− | |||
− | $ export PATH="${PATH}:/home/my_user/tmp/usr/bin" |
||
== 参照 == |
== 参照 == |
||
* [https://wiki.gentoo.org/wiki/Handbook:X86/Working/EnvVar/ja Gentoo Linux ドキュメント] |
* [https://wiki.gentoo.org/wiki/Handbook:X86/Working/EnvVar/ja Gentoo Linux ドキュメント] |
||
− | * [[デフォルトアプリケーション]] |
||
− | * [[Xdg-open]] |
2016年2月18日 (木) 19:46時点における版
関連記事
環境変数とは1つ、または複数のアプリケーションによって使用されるデータを含んだ名前付きオブジェクトです。簡単に言えば、名前と値がある変数です。環境変数の値は例えば、実行可能ファイルのファイルシステムにおける場所や使用するデフォルトのエディタ、システムロケールの設定などになります。Linux に慣れてないユーザーは、環境変数で設定をするのは御しがたいと考えがちですが、複数のアプリケーションと Linux のプロセスの設定を共有するシンプルな方法として環境変数が存在しています。
ユーティリティ
coreutils パッケージには printenv と env というプログラムが入っています。現在設定されている環境変数とその値を表示するには:
$ printenv
env
ユーティリティを使うことで環境変数を変更してコマンドを実行することができます。以下の例では環境変数 EDITOR
を vim
に設定して xterm を起動します。以下のコマンドを実行してもグローバルな環境変数 EDITOR
に影響は与えません。
$ env EDITOR=vim xterm
Bash に組み込まれている set はシェルのオプションの値を変更したり、位置のパラメータを設定したり、シェル変数の名前や値を表示することができます。詳しくは、set のドキュメントを見て下さい: [1]。
特定のプロセスで使われている環境変数を確認したい場合は、/proc/${PID}/environ
を見て下さい。このファイルには特殊な \x0
文字が含まれています。次の関数を使うことでファイルを解析できます。
# envof() { sed 's/\x0/\n/g' /proc/${1}/environ; } # envof 1 TERM=linux
変数の定義
グローバル
大半の Linux ディストリビューションは、あなたに /etc/profile
等のファイルに環境変数の追加・変更を行うよう指示します。環境変数を維持管理し、それらを含む膨大な数のファイルに気を配る必要があります。原則的にあらゆるシェルスクリプトは環境変数の定義に使われる可能性がありますが、以下のような UNIX の慣例に従い特定のファイルでのみ行われるべきものです。
次のファイルがグローバルな環境変数の定義に使われるべきです: /etc/profile
、/etc/bash.bashrc
、および /etc/environment
。ファイルにはそれぞれ制限があるため、注意深く目的にあったものを選ぶべきです。
/etc/profile
はログインシェルのみにおいて変数を初期化します。ただし、スクリプトを実行したり、全ての Bourne shell 互換シェルで使うことができます。/etc/bash.bashrc
はインタラクティブシェルのみにおいて変数を初期化します。スクリプトも実行しますが (名前から分かる通り) Bash でしか使えません。/etc/environment
は PAM-env モジュールによって使われ、ログインシェルであるかそうでないか、インタラクティブシェルであるかそうでないか、また、Bash であるかそうでないかは関係ありません。そのためスクリプトやグロブ展開を使うことは不可能です。このファイルに記述できるのはvariable=value
のペアだけです。
以下の例では、特定のユーザーで ~/bin
ディレクトリを PATH
に追加しています。適当な環境変数設定ファイル (/etc/profile
あるいは /etc/bash.bashrc
) に記述することで使うことができます:
# If user ID is greater than or equal to 1000 & if ~/bin exists and is a directory & if ~/bin is not already in your $PATH # then export ~/bin to your $PATH. if [[ $UID -ge 1000 && -d $HOME/bin && -z $(echo $PATH | grep -o $HOME/bin) ]] then export PATH=$HOME/bin:${PATH} fi
ユーザーごと
環境変数をグローバルに定義したくないという時もあるでしょう。例えば、PATH
に /home/my_user/bin
を追加したいが、システム上の他のユーザーには同じ PATH
を使って欲しくないという場合が考えられます。様々なファイルを使うことでローカルに環境変数を定義することができます:
- シェルの設定ファイル、例えば Bash#設定ファイル や Zsh#設定ファイル。
~/.profile
は多数のシェルによってフォールバックとして使われます。wikipedia:Unix_shell#Configuration_files_for_shells を参照。~/.pam_environment
は/etc/environment
のユーザー個別の設定で、PAM-env モジュールによって使われます。詳しくはpam_env(8)
を参照。
ローカルで PATH
にディレクトリを追加したい場合、以下のように ~/.bash_profile
に記述します:
export PATH="${PATH}:/home/my_user/bin"
変数をアップデートするために、再ログインするかファイルを source してください: $ source ~/.bash_profile
。
グラフィカルアプリケーション
GUI アプリケーションの環境変数を設定したいときは、xinitrc (ディスプレイマネージャを使う場合 xprofile) に変数を記述することができます。例:
~/.xinitrc
export PATH="${PATH}:~/scripts" export GUIVAR=value
セッションごと
時としてもっと限られた定義が必要になる場面もあります。絶対パスを入力せずに指定したディレクトリから一時的に実行ファイルを起動したい場合や、アプリケーションを実行するために短時間だけ ~/.bash_profile
を編集しなくてはならない場合などです。
その場合、export コマンドを使うことで、現在のセッションのみで PATH
変数を定義することができます。ログアウトするまでは、PATH
変数は一時的な設定が使われます。PATH
に特定のディレクトリを追加するには、次を実行:
$ export PATH="${PATH}:/home/my_user/tmp/usr/bin"
サンプル
以下のセクションでは Linux システムで一般的に使われている環境変数を並べており、それぞれの値について説明しています。
DE
は使用しているデスクトップ環境 (Desktop Environment) を示します。xdg-open はこの環境変数を使ってデスクトップ環境に含まれているユーザーフレンドリーなファイルオープナアプリケーションを選択します。この機能を使うにはインストールする必要があるパッケージが存在します。GNOME の場合、libgnome が必要です。Xfce の場合、exo が必要です。使用されるDE
変数の値:gnome
,kde
,xfce
,lxde
,mate
。
DE
環境変数はウィンドウマネージャを起動する前にエクスポートする必要があります。例:
~/.xinitrc
export DE="xfce" exec openbox
- 上記の設定をすると、Xfce の中で実行されていると認識され xdg-open がユーザーフレンドリーな exo-open を使うようになります。設定したいときは exo-preferred-applications を使って下さい。
DESKTOP_SESSION
はDE
と似ていますが、LXDE デスクトップ環境で使われています:DESKTOP_SESSION
がLXDE
に設定されている場合、xdg-open は pcmanfm のファイル関連付けを使います。
PATH
はコロンで区切られたディレクトリのリストで、システムが実行ファイルを探す対象となります。通常のコマンド (例: pacman, systemctl など) をシェルに打ち込むと、このリストにあるディレクトリから同じ名前の実行ファイルが探され、そして実行されます。PATH
に含まれないディレクトリ下のものを実行するには、実行ファイルへの絶対パスが必要です:/opt/adobe-air-sdk/bin/adl
。
HOME
は現在のユーザーのホームディレクトリが入ります。この変数は、アプリケーションが現在のユーザーに関連した設定ファイル等を見つけるために使われます。
PWD
にはワーキングディレクトリのパスが入ります。
OLDPWD
には前のワーキングディレクトリのパスが入ります。つまり最後に cd を実行する前のPWD
です。
SHELL
には実行中の、インタラクティブシェルの名前が入ります。例:bash
。
TERM
には実行中のターミナルの名前が入ります。例:xterm
。
PAGER
にはテキストファイルを閲覧するために使われるコマンドが入ります。例:/bin/less
。
EDITOR
にはテキストファイルを編集するために使われる軽量なエディタのコマンドが入ります。例:/usr/bin/nano
。例えば、以下のようにすることで X 環境下では gedit、そうでなければ nano を使用するようにできます:
export EDITOR="$(if [[ -n $DISPLAY ]]; then echo 'gedit'; else echo 'nano'; fi)"
MAIL
には受信したメールの保存場所が入ります。一般的な設定は/var/spool/mail/$LOGNAME
です。
BROWSER
にはウェブブラウザのパスを指定します。インタラクティブシェルの設定ファイルで以下のように設定することで、X など、グラフィカル環境が存在するかどうかで動的にウェブブラウザを変更することが可能です:
if [ -n "$DISPLAY" ]; then export BROWSER=firefox else export BROWSER=links fi
ftp_proxy
とhttp_proxy
にはそれぞれ FTP と HTTP プロキシサーバーを記述します:
ftp_proxy="ftp://192.168.0.1:21" http_proxy="http://192.168.0.1:80"
MANPATH
には man が man ページを探すときに使うコロン区切りのディレクトリのリストが入ります。
INFODIR
には info コマンドが info ページを探す際に使うコロン区切りのディレクトリのリストが入ります。例:/usr/share/info:/usr/local/share/info
。
TZ
はユーザー別にシステムと違うタイムゾーンを指定するために使うことができます。/usr/share/zoneinfo/
に記載されているタイムゾーンを参考にしてください。 例:TZ="/usr/share/zoneinfo/Pacific/Fiji"
。