コンピュータシステムにおける
コマンドとは、システムに対する指示や命令のことです。ジョブやタスクを
コンピュータに実行させるために用いられ、
コンピュータ本体と
周辺機器間、ソフトウェア間の通信、エンドユーザーからの対話的な操作など、様々な状況で使用されます。また、命令型
プログラミング言語においても「コマンド」という用語が用いられることがあります。
OSコマンド
対話環境を持つ
オペレーティングシステム (OS) において、
コマンドラインインタプリタ (
シェル) が解釈し実行する
文字列を「コマンド」と呼びます。多くのOSコマンドは、
引数を任意に取ることができます。
引数は通常
文字列ですが、コマンドの対象となるオブジェクト(ファイルなど)や、動作を細かく変更するオプションを指定するために使用されます。オプション
文字列には、
Unix系システムではハイフン `-`、
MS-DOSではスラッシュ `/` を前置する慣習があります。オプションを省略した場合、既定値が適用されます。
内部コマンドと外部コマンド
コマンドの例
以下に、
コマンドラインインタプリタ (
Unix系の
シェル) で使用されるコマンドの例を示します。
`cd /home/pete`: ユーザーのカレント
ディレクトリを `/home/pete` に変更します。`cd` がコマンド本体、`/home/pete` が
引数です。
`echo "Hello World"`: 「Hello World」という
文字列を標準出力ストリームに出力し表示します。`echo` がコマンド本体、`"Hello World"` が
引数です。引用符は、`Hello` と `World` が別々の
引数として解釈されるのを防ぐために使用されています。
`ls -l -t -r /bin` または `ls -ltr /bin`: `/bin`
ディレクトリにあるファイルの一覧を表示します。`ls` がコマンド本体、`/bin` が
引数、`-l`, `-t`, `-r` がフラグです。
`cat ch1.txt ch2.txt`: `ch1.txt` と `ch2.txt` というファイルの内容を表示します。`cat` がコマンド本体、`ch1.txt` と `ch2.txt` が
引数です。
`touch hoge.txt piyo.txt`: `hoge.txt` と `piyo.txt` という2つのファイルを作成します。`touch` がコマンド本体、`hoge.txt` と `piyo.txt` が
引数です。
以下は、別の
コマンドラインインタプリタ (DOS, OS/2,
Microsoft Windows のコマンドプロンプト) で使用されるコマンドの例です。フラグの定義は環境によって異なりますが、概念は同様です。
`dir /A`: カレント
ディレクトリの内容を一覧表示します。`dir` がコマンド本体、`/A` はフラグです。
`type /P readme.txt`: ファイル `readme.txt` の内容を表示します。`type` がコマンド本体、`readme.txt` が
引数、`/P` はパラメータです。
コマンドプロセッサの起動とセキュリティ脆弱性
C言語および
C++では、ホスト環境のコマンドプロセッサを起動してコマンドを実行できる `system()` 関数が用意されています。
POSIXには、パイプを利用したストリームを開く `popen()` 関数も存在します。これらの機能を利用すると、システムが提供するコマンドを
アプリケーションソフトウェアで直接利用できます。
Perlや
Pythonなどのスクリプト言語にも同様の機能があります。
しかし、ユーザーが入力したコマンド
文字列を適切に無害化せずに、任意のOSコマンドを実行できるようにした場合、攻撃者が悪意のあるコマンド
文字列を入力することで、実行環境への侵入や乗っ取り、システム破壊を許してしまうセキュリティ脆弱性が生じることがあります。この種の攻撃手法は「OSコマンドインジェクション」または「コマンドインジェクション」と呼ばれます。
コンピュータに接続された
周辺機器を制御するための指令も「コマンド」と呼ばれます。ソフトウェアは
シリアル通信などの規格化されたインターフェイスを介して、機器の仕様に従った情報を送信することで、コマンドを発行しハードウェアと通信します。例えば、グラフィックスハードウェア (GPU) や
プリンターに対する描画命令が該当します。コマンドは、ハードウェアを高度に抽象化したAPIやデバイスドライバを通じて発行されることもあり、その場合、
アプリケーションソフトウェア層ではコマンドの存在を意識する必要がないこともあります。
GUIにおけるコマンド
グラフィカルユーザーインターフェイス (GUI) の要素を操作することで、対応するアクションを発生させることを「コマンド」と呼ぶことがあります。例えば、メニュー内の各アイテムや、ボタンをクリックした際に特定の動作をソフトウェアに実行させることを、ソフトウェアや
コンピュータに対する指示とみなします。この「コマンド」は、GUIフレームワークにおける概念・用語として使用されることがあります。
コンピュータゲームにおいて、ユーザー (プレイヤー) がゲーム内のキャラクターに与える指示を「コマンド」と呼ぶことがあります。
古典的な
アドベンチャーゲームや
シミュレーションゲーム、ターン制
ロールプレイングゲーム (
コンピュータRPG) では、場面に応じて各キャラクターが次にとる行動がいくつかの選択肢として用意されており、これらの選択肢がコマンドと呼ばれます。画面上でコマンドが配置されている領域はコマンドメニューと呼ばれ、テキストが列挙されていたり、アイコンが配置されていたりします。コマンドを選択後、動作の対象となるもの(攻撃目標やアイテムなど)を選択する必要がある場合もあります。
対戦型格闘ゲームでは、キャラクターごとに用意された固有の必殺技を繰り出すための、
ジョイスティックやボタンを使った一連の入力手順や組み合わせをコマンドと呼びます。一般的に、威力の高い技ほどコマンドが複雑になります。
特定の画面または状況で、一定時間内に特定の方向キーやボタンを順番に入力することで、公式マニュアルには記載されていないオプション (裏技) が使えるようになる「
隠しコマンド」を持つ作品もあります。
関連項目
メニュー (
コンピュータ)
*
Command パターン