初心者向けです。
まずは以下をご覧ください。
cdコマンド実行。publicというディレクトリに移動しているのが分かります。
pingコマンド実行。GoogleのキャッシュDNSサーバに通信しているのが分かります。
…うん、どちらもコマンドを実行しただけじゃないとお思いかもしれませんが、実はこの2つのコマンドは異なる仕組みで実装されています。
そもそもコマンドの正体とは、というのがこのブログの内容です。
内部コマンド(組み込みコマンド)
例:cd、rmとか
これらはcmd.exeなどのシェルの内部に組み込まれているコマンドです。
つまり、『もし cd と打ち込まれたら、それに続くパスに移動』というコードがそのままcmd.exe内で定義されているものと思われます。
cmd.exeの開発者が「これは使えた方が便利だよね」という意図で、cmd.exe単体で利用できるようにcmd.exeに埋め込んだもの…ということです。
cmd.exeの中身(バイナリデータ)を取り出したら、このへんのコマンドが定義されてそうな箇所があった。
外部コマンド
ping、とか
これは外部のファイルを参照して動いています。
つまり、ping.exeという外部にpingを飛ばす処理が書かれたファイルがあり、それを読み込んでいるだけです。
cmd.exeから、別の実行ファイル"ping.exe"を動かしている訳ですからcmd.exeだけで完結する処理ではありません。
タスクマネージャーを見ても、実行した瞬間にプロセスが発生していることが確認できます。
当然ですが、cdコマンドなどはcmdやpowershell内で完結しているので、新しいプロセスは発生していません。
実行前はping.exeはないが、
実行すると動く。結果が表示されたらping.exeのプロセスは勝手に終了して閉じる。
外部コマンドについて
結局はただファイルを実行しているだけ。
しかし、本来はこのように「CドライブのWindowsのSystem32にあるPING.exeを実行してください。」という風に、そのファイルの保存場所と拡張子(.exe)まで正確に指定しないと動かない。
私はDMMGamesからウマ娘をプレイしているが、DMMGamePlayer.exeだけでは実行できない。
ではなぜPing.exeは正確に入力した場合はもちろん、ファイル名だけで実行できるのか。
その答えは パスを通しているから。
パスを通すとは
指定したパス内にあるファイルは、ファイル名だけで実行できるというもの。
ここのPathで指定されているもの。確かにPing.exeがあるC:\Widnows\system32も登録されている。
目的はただ一つ。便利だから。