(run-commands)= # インスタンス内でコマンドを実行するには LXDでは、ネットワークを経由してインスタンスにアクセスする必要なしに、LXDクライアントを使用してインスタンス内でコマンドを実行できます。 コンテナでは、これは常に機能し、LXDによって直接処理されます。 仮想マシンでは、これが機能するには、仮想マシン内`lxd-agent`プロセスが稼働している必要があります。 インスタンス内部でコマンドを実行するには `lxc exec` コマンドを使います。 シェルコマンド (例えば、 `/bin/bash`) を実行することで、インスタンスにシェルアクセスできます。 ## インスタンス内部でコマンドを実行する ホストマシンの端末から単一のコマンドを実行するには、`lxc exec`コマンドを使います。 lxc exec -- 例えば、コンテナ上のパッケージリストを更新するには以下のコマンドを入力します。 lxc exec ubuntu-container -- apt-get update ### 実行モード インタラクティブ・モードでは、入力(stdin)と出力(stdout, stderr)を扱うために疑似端末装置(PTS)が使用されます。 これは、ターミナル・エミュレータに接続されている場合(スクリプトから実行されていない場合)、CLIによって自動的に選択されます。 インタラクティブ・モードを強制するには、`--force-interactive`か`--mode interactive`をコマンドに追加します。 非インタラクティブ・モードでは、代わりにパイプが (stdin、stdout、stderrのそれぞれに1つずつ) 割り当てられます。 これにより、多くのスクリプトで必要とされるように、コマンドを実行しながら、stdin、stdout、stderrを別々に適切に取得することができます。 非インタラクティブ・モードを強制するには、`--force-noninteractive`か`--mode non-interactive`をコマンドに追加します。 ### ユーザー、グループ、作業ディレクトリ LXDはインスタンス内のデータを読まない、あるいはその中にあるものを信用しないというポリシーを持っています。 これは、LXDがユーザーやグループの解決を処理するために、`/etc/passwd`、`/etc/group`や`/etc/nsswitch.conf`のようなものを解析しないことを意味しています。 結果として、LXDはユーザのホームディレクトリがどこにあるか、あるいはどのような補助的なグループがあるかを知りません。 デフォルトでは、LXDはroot (UID 0)、デフォルトのグループ(GID 0)としてコマンドを実行し、作業ディレクトリは`/root`に設定されています。 ユーザー、グループ、作業ディレクトリは以下のフラグによって上書きできます。 - `--user` - コマンドを実行するユーザID - `--group` - コマンドを実行するグループID - `--cwd` - コマンドを実行するディレクトリ ## 環境 以下の2つの方法でexecセッションに環境変数を渡せます。 インスタンスオプションとして環境変数を渡す : インスタンス内で`ENVVAR`環境変数を`VALUE`に設定するには、`environment.ENVVAR` {ref}`インスタンスオプション `を設定します。 lxc config set environment.ENVVAR=VALUE execコマンドに環境変数を渡す : execコマンドに環境変数を渡すには、`--env`フラグを使います。 例えば以下のようにします。 lxc exec --env ENVVAR=VALUE -- さらに、LXDは (上記のいずれかの方法で渡されない限り) 以下のデフォルト値を設定します。 ```{list-table} :header-rows: 1 * - 変数名 - 条件 - 値 * - `PATH` - \- - 以下を連結したもの - `/usr/local/sbin` - `/usr/local/bin` - `/usr/sbin` - `/usr/bin` - `/sbin` - `/bin` - `/snap` (適切な場合) - `/etc/NIXOS` (適切な場合) * - `LANG` - \- - `C.UTF-8` * - `HOME` - rootで実行する場合(UID 0) - `/root` * - `USER` - rootで実行する場合(UID 0) - `root` ``` ## インスタンスにシェルアクセスする インスタンス内で直接コマンドを実行したい場合、インスタンス内でシェルコマンドを実行します。 例えば、以下のコマンド(インスタンス内に`/bin/bash`コマンドが存在する想定)を入力します。 lxc exec -- /bin/bash デフォルトでは`root`ユーザでログインします。 別のユーザでログインしたい場合は、以下のコマンドを入力します。 lxc exec -- su --login ```{note} インスタンス内で稼働しているオペレーティングシステムによっては、先にユーザを作成する必要があるかもしれません。 ``` インスタンスシェルを終了するには、`exit`を入力するか`Ctrl`+`d`を押します。