コマンド (コンピュータ)
コンピュータシステムにおけるコマンド(英: command)とは、システムへの指示・指令あるいは命令のことである[1]。ジョブ(タスク)などをコンピュータに実行させるために使われる。コマンドはコンピュータ本体と周辺機器との間や、ソフトウェア間の通信時に与えられることもあれば、エンドユーザーから対話環境にて与えられることもある。
また、命令型プログラミング言語でも「コマンド」という用語を使うことがある[2]。
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
- この2つのコマンドは同じタスクを実行する。/bin というディレクトリにあるファイルの一覧を表示する。"ls" がコマンド本体、"/bin" が引数で、3つのフラグ "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()
関数が用意されている[3][4]。POSIXにはパイプを利用したストリームを開くpopen()
関数も用意されている。これらの機能を利用すると、システムが提供するコマンドをアプリケーションソフトウェアで直接利用することも可能となる。これらはPerlやPythonのようなスクリプト言語にも用意されている。
しかし、ユーザーによって入力されたコマンド文字列を無害化するように配慮せず、任意のOSコマンドを実行できるようにしてしまった場合、攻撃者が悪意のあるコマンド文字列を入力することで実行環境への侵入・乗っ取りやシステム破壊を許してしまうセキュリティ脆弱性が発生することもある[5]。このような攻撃手法は「OSコマンドインジェクション」や「コマンドインジェクション」と呼ばれている[6]。
周辺機器の制御コマンド
[編集]コンピュータに接続された周辺機器を制御するための指令を「コマンド」と呼ぶ。ソフトウェアはシリアル通信などの規格化されたインターフェイスを経由して、機器の仕様にしたがった情報を送ることで、コマンドを発行してハードウェアと通信する。例えばグラフィックスハードウェア (GPU) やプリンターに対する描画命令などが挙げられる。コマンドはハードウェアを高度に抽象化したAPIやデバイスドライバーを通じて発行されることもあり、その場合アプリケーションソフトウェア層ではコマンドの存在を意識する必要がないことも多い。
GUIにおけるコマンド
[編集]グラフィカルユーザーインターフェイス (GUI) の要素を操作することで、対応するアクションを発生させることを「コマンド」と呼ぶこともある。例えばメニュー内の各アイテムや、ボタンをクリックしたときに特定の動作をソフトウェアに実行させることを、ソフトウェアやコンピュータに対する指示と見立てている。この「コマンド」は、GUIフレームワークにおける概念・用語として使用されていることがある[7]。
コンピュータゲームにおけるコマンド
[編集]コンピュータゲームにおいて、ユーザー(プレイヤー)がゲーム内のキャラクターに与える指示のことを「コマンド」と呼ぶことがある。
例えば古典的なアドベンチャーゲームやシミュレーションゲーム、ターン制のロールプレイングゲーム(コンピュータRPG)では、場面に応じて各キャラクターが次にとることのできる行動がいくつかの選択肢として用意されており、この選択肢をコマンドと呼ぶ。画面上でコマンドが配置されている領域をコマンドメニューと呼び、縦方向や横方向にコマンドのテキストが列挙されていることもあれば、コマンドの動作を視覚的に表すアイコンが縦や横、あるいは円形に配置されていることもあるが、いずれもカーソルを動かして選択・決定するだけで実行される。各コマンドを選択した後は、さらに動作の対象となるもの(攻撃目標や使用するアイテム・魔法など)を選択する必要があるケースもある。
対戦型格闘ゲームでは、キャラクターごとに用意された固有の必殺技を繰り出すためのジョイスティック(レバー)やボタンを使った一連の入力手順や組み合わせのことをコマンドと呼ぶ。コマンドを完成させるには、一連の入力を一定時間内に終えなければならない。一般的に威力の高い技ほどコマンドが長く複雑になり、入力難易度が上がる傾向にある。
特定の画面または状況で一定時間内に特定の方向キーやボタンを順番に入力することで、公式マニュアルには記載されていないオプション(裏技)が使えるようになる「隠しコマンド」を持つ作品もある。
脚注
[編集]出典
[編集]- ^ コマンド(command)とは - IT用語辞典 e-Words
- ^ Imperative Programming Languages (IPL) | School of Engineering & Applied Science | The George Washington University
- ^ system - cppreference.com
- ^ std::system - cppreference.com
- ^ ENV33-C. コマンドプロセッサが必要ない場合は system() を呼び出さない
- ^ OSコマンドインジェクションの被害事例とその対策について解説|ICT Digital Column 【公式】NTTPCコミュニケーションズ
- ^ コマンド実行の概要 - WPF .NET Framework | Microsoft Docs