Linux env コマンド完全ガイド

Linux コマンド大全

env は Linux/Unix システムで非常に便利なコマンドラインツールで、主に環境変数の表示と変更、およびカスタム環境でのプログラム実行に使用されます。

環境変数はオペレーティングシステムやユーザーが設定する動的な値で、実行中のプロセスの動作に影響を与えます。env コマンドは、これらの変数を表示・操作する便利な方法を提供します。

類推で理解する:環境変数はオフィスの掲示板のようなもので、すべてのスタッフ(プログラム)がそこに書かれた情報(環境変数)を見ることができ、その情報に応じて自分の働き方を調整します。


env コマンドの基本構文

env コマンドの基本構文は次のとおりです:

env [OPTION]... [NAME=VALUE]... [COMMAND [ARG]...]

引数を付けずに直接実行すると、env現在のすべての環境変数とその値が表示されます。


よく使うオプションと引数

env コマンドは以下のよく使うオプションをサポートしています:

オプション 説明
-i, --ignore-environment 空の環境から開始し、継承した環境変数を無視する
-u, --unset=NAME 環境から指定した変数を削除する
-C, --chdir=DIR コマンドを実行する前に指定したディレクトリに移動する
-S, --split-string=S 引数を複数の引数に分割する
--help ヘルプ情報を表示する
--version バージョン情報を表示する

基本的な使用例

1. すべての環境変数を表示する

最も簡単な使い方は、直接envコマンドを入力することです:

例

env

これにより、現在のシェル内のすべての環境変数が出力されます。形式は変数名=値で、例えば:

USER=john
HOME=/home/john
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

2. カスタム環境でコマンドを実行する

環境変数を一時的に設定してプログラムを実行できます:

例

env LANG=C ls

この例では、一時的にLANG=Cを設定してから、lsコマンドを実行します。これにより、lsコマンドの出力言語が影響を受けます。

3. クリーンな環境を作成してプログラムを実行する

オプションを使用すると、-iクリーンな環境(既存の環境変数を一切継承しない)を作成できます:

例

env -i PATH=/bin:/usr/bin ls

ここでは、PATH変数だけを持つクリーンな環境を作成して、lsコマンドを実行しています。


高度な使い方

変数を一時的に変更してスクリプトを実行する

例

env EDITOR=nano crontab -e

このコマンドは一時的にEDITOR環境変数をnanoに設定してから、crontab -eを実行します。これにより、nano エディターを使用して crontab を編集します。

2. 特定の環境変数を削除する

例

env -u HOME ls

このコマンドは、lsを実行する際に、HOME環境変数を削除します。

3. shebang と組み合わせて使う

env はスクリプトの shebang 行でよく使われ、スクリプトの移植性を高めます:

例

#!/usr/bin/env bash

この書き方は、直接/bin/bashを指定するより柔軟です。PATH環境変数の中から bash の場所を探すためです。


実際の活用シーン

1. 環境変数の問題をデバッグする

プログラムの動作が異常な場合、env を使って実行時の環境を確認できます:

例

env -i /path/to/program

これにより環境変数の干渉を排除し、環境変数が原因の問題かどうかを判断できます。

2. 信頼できないスクリプトを安全に実行する

出所不明のスクリプトを実行する場合、制限付きの環境を作成できます:

例

env -i PATH=/bin:/usr/bin /path/to/script.sh

3. 異なるロケール環境でのプログラムの動作をテストする

例

env LANG=fr_FR.UTF-8 program
env LANG=zh_CN.UTF-8 program

これにより、プログラムが異なるロケール環境でどのように動作するかをテストできます。


注意事項

  1. 変数の上書き:env で設定した変数は、既存の同名の環境変数を上書きします
  2. 子プロセスへの影響:env が変更した環境変数は、それが起動した子プロセスにのみ影響し、現在のシェルには影響しません
  3. セキュリティ:機密情報(パスワードなど)は環境変数で渡すべきではありません
  4. 変数の順序:後で設定した変数は、先に設定した同名の変数を上書きします

Linux コマンド大全

その他の拡張