UNIXやその互換OSであるLinuxでは、何らかの処理を実行する際のプログラムをコマンドと呼ぶのでUNIXのコマンド、Linuxのコマンドという意味でそれぞれUNIXコマンド、Linuxコマンド、または、システムコマンドなどと呼ばれることがあります。
UNIX/Linuxには、視覚的、直感的な操作性のGUI/Graphical User InterfaceであるX Window SystemもあるもののUNIX/Linuxが文字ベースのCUI/character User Interfaceがベースにあることもあり、命令や命令の組み合わせをワンライナー含め1行に収めて書くことは極めて一般的です。
そこに記述する命令やその組み合わせは、プログラムや実行ファイルというよりは、そのまま命令・指示という方が自然であり、米国で生まれたUNIXが、その米語であるcommand/コマンドと呼んで今に至るのもなるほど納得でき、その入力行は命令行であるコマンドラインと呼ばれ、GUIが基本であるWindowsでさえWindows用CUIプログラムをコマンドプロンプトと呼んでいます。
このいわゆるコマンドを使ってユーザーはOSであるUNIX/Linuxへの操作、処理命令を主にshellを介して行うことができ、そのコマンドと言われるものには様々なものがあり、システム日付を見事なまでに表示するこのコマンドもその命令の一つです。
date
見事なまでにというのは決して大げさな話ではなく、コンピュータでは違う方法で日付と時刻を見やすく並べて表示させようと思っても意外と手間がかかり大変なことなので、このたった4文字のアルファベットから成るコマンドを入力してEnterを押すだけで表示されるなんてすごいことなんです。
diff ファイル名1 ファイル名2
はdifferent/differenceの略で2つのファイルの違い(差分)を
ls ファイル名
はlistの略でディレクトリ内のファイル一覧を
wc ファイル名
はword countの略で単語数の他、文字数と行数を表示しますが、これらに至ってはアルファベット2文字だけでこの機能性です。
これらコマンドは、たいていの場合、複数のオプションスイッチを持っており、その命令に関連する付加機能を加えたり、省いたりすることもできます。
また、UNIX/Linuxにおけるコマンドには、UNIX/Linuxのログイン・ログアウトまでを管理するシェルにあらかじめ組み込まれたいわゆる『シェル組み込みコマンド』、『その他標準的なコマンド』、『GNUコマンド』から成っています。
FSF/Free Software Foundation(フリーソフトウェア財団)は、米プログラマ且つフリーソフトウェア活動家として知られるRichard Matthew Stallman氏が1985年に設立した非営利組織であり、「誰もが自由に作成、改変、再配布でき、再配布されたソフトウェアに関しても、その改変、再配布は自由であり、それが社会にとって有益である」といった主旨の下、"Free Software, Free Society"(自由なソフトウェア、自由な社会)というスローガンを掲げて活動しています。
また、代表的なフリーソフトウェアと言えば、FSFのGNU Projectが手がけたGNUツール群でしょう。
GNUとは、FSF設立以前にRichard Matthew Stallman氏がMIT/マサチューセッツ工科大学で発表したプロジェクトで、その後、FSFのメインプロジェクト(GNU Project)として継承され、その命題は、「全て無償で実装することができるOSを作ること」であり、そのOSとしての名称はGNU/Hurdとされました。
GNUはオープンソースとしてのUNIX代替OS開発リリースを目指す中でBourne Shellの拡張版bash、cc/UNIX C Compilerの拡張改良版gcc、UNIX makeの拡張改良版gmake/GNU makeなどLinuxでは標準となっているツール、コマンド群を開発するFSFの主なプロジェクトの1つです。
1992年頃、GNU/Hurd以外の環境が整い、前年の1991年、フィンランドのLinus Benedict Torvalds氏がGPLライセンスで公開した当時係争の絶えなかったオリジナルのUNIXのソースを一切使わないLinuxカーネルを採用することでGNUとLinuxカーネルを組わせ、目的の「全て無償で実装することができるOS」が誕生します。
以後、LinuxカーネルとGNUツール群によるOSの派生ディストリビューション(配布パッケージ)が多々登場することになりますが、シェル自体もコマンドの集まり、UNIX/LinuxはOSとして捉えられがちですが、実際には、UNIX/Linuxカーネルと(デーモン、更には)shellを含むコマンド群で構成されており、特にLinuxにおいてはGNUの開発したShellであるbashやGNUコマンド群から成っている為、FSFではGNU/Linuxと呼ぶべきと主張しています。
UNIX/Linuxでは、標準的なディレクトリ構成がある程度決まっていて状況によって存在しない場合や格納されているコマンドに多少の違いはあるにしても、その慣習に沿っているディストリビューション(オープンソースを含む配布される一連のパッケージ)が多いようです。
その中でコマンドを格納するディレクトリとしてシステム管理用の
/sbin # 管理用コマンドファイル
、その他システムに必須のコマンドと場合によって一部のコマンドが格納されるのが、
/bin # 主要なコマンド実行ファイル
、一般ユーザーが使用するディレクトリ階層が、読み出し専用の
/usr
以下で、それぞれに
/usr/sbin
/usr/bin
があり、更に自分のマシンなら自分が(プロジェクトならシステム管理者が一般ユーザー用に)そのマシンだけで使用するローカルなソフトウェアをインストールするディレクトリが、
/usr/local
以下で
/usr/local/sbin
/usr/local/bin
のようにそれぞれsbin/、bin/ディレクトリがあり、/(ルート階層)以外の管理コマンドやその他コマンドが格納されます。
スクリプトを書く際に1行めに記述するインタプリタ実行ファイルパスは、多くの場合、
/usr/bin
/usr/local/bin
ですが、ここにあるコマンドの中には、/binにあるコマンドもあるもののシステム管理者が使用する特別なコマンド群以外のシステムによって異なるであろう全ユーザー共通のコマンドという意味では、/binはシステム管理者用、/usr/bin、/usr/local/binは、そのディレクトリ名の通りユーザー用とするというのは運用上、理に適っていると思います。
尚、シェル組み込みコマンドはシェルそのものが内包している為、これらのディレクトリには存在しませんが、例えばbashではファイルシステム内に同名のコマンドがある場合には、shシェル組み込みコマンド/bashシェル組み込みコマンドが優先して使用され、シェル関数によるコマンドがある場合にはシェル関数がより優先され、これを回避するコマンドなどもあります。
なんらかの理由でシェル関数でない組み込みコマンドを利用したい場合にはbashシェル組み込みコマンドであるbuiltinコマンド、シェル関数でもシェル組み込みコマンドでもなく同名のUNIX/Linuxシステムコマンドを利用したい場合には、同じくbash組み込みのcommandコマンドで指定するか、明示的にパス付でコマンドを指定するか、または-nオプション付きでenableコマンドを実行するとよいでしょう。
既に知っているコマンドのパスを知るには、例えばbash、kshなどsh(Bourne Shell)系シェルの場合、
$ type sh
とすれば、それが/sbinや/binにあるLinuxコマンドならパス付で結果が返されますし、
$ which sh
とし、それぞれいくつかオプションがありますが[-a]オプションで全てのパスを調べることができ、
$ whereis sh
とすると、実行ファイルパス以外にmanファイルパスやincludeパスなども知ることができます。
尚、whereisはシステムコマンド、whichコマンドはhashというsh組み込みコマンドを内包した作用を持つシステムコマンド、typeコマンドは、それが組み込みコマンドである場合には、パスの代わりにその旨を表示するコマンドでtypeコマンド自体もbash組み込みコマンドです。