コンピューターの歴史の進化を通じて、コマンド ライン インターフェイス(
CLI
) は常にユーザーにコンピューター システムと直接対話する機能を提供する中心的なコンポーネントでした。コマンドライン ツールは、初期のテキスト インターフェイスから最新の端末まで長い道のりを歩んできました。
この記事では、DOS、CMD、PowerShell、Shell、Windows Terminalの5つのツール(システム)の特徴、歴史、応用について深く掘り下げていきます。
記事ディレクトリ
1.コンセプト
1.1 DOS (ディスクオペレーティングシステム)
-
定義: DOS は1980 年代初頭の主流のオペレーティング システムであり、主に IBM PC 互換のパーソナル コンピュータで使用されていました。
-
歴史と発展:
- DOS はもともと IBM の最初のパーソナル コンピュータ用に開発されました。
- MS-DOS は、Microsoft によって開発された最も人気のあるバージョンです。
- DOS は Windows の出現により重要性が薄れましたが、その後のコマンド ライン ツールの基礎を築きました。
-
主な用途:
- ファイル管理。
- システム構成。
- 以前のアプリケーションを実行します。
1.2 CMD (コマンドプロンプト)
-
定義: CMD はWindows オペレーティング システムのコマンド ライン インタプリタであり、MS-DOS の多くの機能を継承しています。
-
歴史と発展:
- CMD は、MS-DOS の代替として Windows NT で初めて登場しました。
- MS-DOS のコア機能を保持しながら、Windows システムとの統合が向上します。
-
主な用途:
- ファイルとディレクトリの操作。
- ネットワーク診断。
- システムマネジメント。
1.3 パワーシェル
-
定義: PowerShell は、Microsoft によって開発されたクロスプラットフォームのタスク自動化および構成管理フレームワークです。
-
歴史と発展:
- PowerShell は元々、 CMD よりも強力なスクリプト環境を提供するために Windows Vista 用に開発されました。
- 現在では、Windows Server および Azure クラウド サービスの中核コンポーネントとなっています。
-
主な用途:
- システムの自動化。
- 構成管理。
- データの処理と分析。
1.4 シェル
-
定義: シェルはシステムのコマンドラインインタープリタ
Linux
です。Unix
-
歴史と発展:
- Unix シェルはもともと Unix オペレーティング システム用に開発され、その後他の多くのシステムで採用されています。
Bash
は最も一般的なシェルですが、Zsh、Fish、Tcsh などの他のオプションもあります。
-
主な用途:
- ファイルとプロセスの管理。
- スクリプトプログラミング。
- システム監視。
1.5 Windowsターミナル
-
定義: Windows ターミナルは、CMD、PowerShell、および WSL をサポートする統合環境を提供するMicrosoft の新しいターミナル アプリケーションです。
-
歴史と発展:
- Windows Terminal は、最新のターミナルに対する Microsoft の答えであり、2019 年に初めてリリースされました。
- その目標は、統合され、効率的で、高度にカスタマイズ可能な端末エクスペリエンスを提供することです。
-
主な用途:
- マルチタブインターフェイス。
- 豊富な視覚効果とテーマ。
- ユーザーによる高度なカスタマイズ。
実際、多くのユーザーは Windows ターミナルを使用することはほとんどありませんが、Windows ターミナルが起動される前と同様に cmd または powershell を直接使用しています。しかし、Windows ターミナルのエクスペリエンスは非常に優れており、より多くの行を表示できるほか、PowerShell でバッファーを最大まで引き出しても、一部のコマンドの出力を完全に表示できず、ページネーションや出力リダイレクトが必要になるなど、 Windows ターミナルでは、何千行も表示できます (実用的ではありませんが)。
Windows ターミナルとは異なり、Unix 系システムのターミナルはより強力な機能を備えており、シェル (コマンド インタプリタ) へのアクセスに加えて、アプリケーション実行 (vim)、リモート アクセス、スクリプト実行、等々。これはむしろコマンド インタプリタそのものです (実際はそうではありません)。
1.51 Linuxターミナル
「ターミナル エミュレータ」または単に「ターミナル」とも呼ばれる Linux ターミナルは、Linux システムと対話するためのテキスト インターフェイスをユーザーに提供するソフトウェア プログラムです。これは、グラフィカル インターフェイスではなくテキスト インターフェイスを使用していた初期のコンピュータの物理端末をエミュレートします。
Linux ターミナルの主な特徴と機能をいくつか示します。
-
コマンド ライン インターフェイス: ターミナルは、ユーザーがコマンドを入力してファイル管理、システム監視、ソフトウェア インストールなどのさまざまなタスクを実行できるコマンド ライン インターフェイスを提供します。
-
シェル アクセス: ユーザーはターミナルを介してシステムのシェル (Bash、Zsh、Fish など) にアクセスできます。シェルは、ユーザーが入力したコマンドを読み取り、実行するコマンド ライン インタープリターです。
-
スクリプトの実行: ユーザーはターミナルでシェル スクリプトを実行でき、これにより多くのタスクを自動化できます。
-
テキスト インターフェイス アプリケーション
vim
: テキスト エディターやnano
ファイル マネージャーなどの一部の Linux アプリケーションはmc
テキストベースであり、ターミナルで実行されます。 -
リモート アクセス: (セキュア シェル) などのツールを使用して
ssh
、ユーザーは 1 つの端末から別の Linux システムの端末にリモート アクセスできます。 -
多様性
gnome-terminal
: Linux には、 、konsole
、xterm
など、選択できるさまざまなターミナル エミュレータがありterminator
、それぞれに独自の特徴や機能があります。 -
高度なカスタマイズ性: ほとんどのターミナル エミュレーターでは、ユーザーがフォント、色、背景、ショートカット キーの変更など、外観や動作をカスタマイズできます。
1.52 MacOS ターミナル
macOS は Unix をベースにしているため、macOS のターミナルは多くの点で Linux のターミナルと似ています。macOS ターミナルの主な特徴と機能をいくつか示します。
-
コマンドライン インターフェイス: macOS 用ターミナルは、ユーザーがコマンドを入力してファイル管理、ネットワーク診断、システム構成などのさまざまなタスクを実行できるコマンドライン インターフェイスを提供します。
-
Bash シェル: macOS Catalina まで、macOS のデフォルトのシェルは Bash でした。macOS Catalina 以降、システムのデフォルトのシェルは Zsh に変更されましたが、ユーザーは引き続き Bash または他のシェルの使用を選択できます。
-
スクリプトの実行: Linux ターミナルと同様に、macOS ターミナルでもユーザーはシェル スクリプトを実行してタスクを自動化できます。
-
組み込みツール
grep
: macOS ターミナルには、awk
、 、sed
などの多くの Unix ツールが用意されていますssh
。 -
Homebrew : macOS ユーザーは、追加のコマンドライン ツールやアプリケーションをインストールするためのパッケージ マネージャーとして Homebrew を使用することがよくあります。
-
リモート アクセス: macOS ターミナルには、ユーザーが他のシステムにリモートでアクセスできるようにするツールが組み込まれています
ssh
。 -
高度なカスタマイズ性: macOS ターミナルは複数のタブとウィンドウをサポートしており、ユーザーはフォント、色、その他の外観設定をカスタマイズできます。
-
その他のターミナル アプリ: デフォルトの Terminal.app に加えて、macOS には iTerm2 などの他のサードパーティ製ターミナル アプリがあり、さらに多くの機能とカスタマイズ オプションを提供します。
-
統合開発環境 (IDE) の統合: Visual Studio Code や PyCharm などの多くの最新の IDE は、開発者が同じインターフェイスでコードを記述してコマンドを実行できるようにする統合ターミナルを提供します。
2. よく使われるコマンド(一部)
2.1 DOS (ディスクオペレーティングシステム)
DOS はテキストベースのオペレーティング システムであり、そのコマンドは主にファイルとディレクトリの管理に使用されます。一般的に使用される DOS コマンドをいくつか示します。
DIR
: ディレクトリ内のファイルとサブディレクトリを一覧表示します。COPY
:ファイルをコピーします。DEL
:ファイルを削除します。REN
: ファイルの名前を変更します。CD
: 現在のディレクトリを変更します。MKDIR
(またはMD
): 新しいディレクトリを作成します。RMDIR
(またはRD
): ディレクトリを削除します。TYPE
:ファイルの内容を表示します。
2.2 CMD (コマンドプロンプト)
CMD は Windows 用のコマンド ライン インタプリタで、DOS からいくつかのコマンドを継承し、いくつかの新しい機能を追加します。一般的に使用される CMD コマンドをいくつか示します。
CLS
:画面をクリアします。ECHO
:メッセージを表示したり、エコーをオン/オフします。FC
: 2 つのファイルを比較し、相違点を表示します。FIND
: ファイル内の文字列を検索します。IPCONFIG
:ネットワーク構成情報を表示します。NET
: ネットワークリソースを管理するために使用されます。SYSTEMINFO
:コンピュータのシステム情報を表示します。TASKLIST
:現在実行中のプロセスを表示します。
2.3 パワーシェル
cmdlet
PowerShell は、さまざまなタスクを実行するための多数のコマンド ( と呼ばれる)を提供する強力なスクリプト環境です。一般的に使用されるいくつかの PowerShell コマンドを次に示します (コマンドは基本的に述語とオブジェクトの構造です)。
Get-Command
: 使用可能なすべてのコマンドレットと関数をリストします。Get-Help
: コマンドレットのヘルプ情報を表示します。Get-Process
: 実行中のすべてのプロセスをリストします。Get-Service
: すべてのサービスとそのステータスをリストします。Set-ExecutionPolicy
:スクリプトの実行ポリシーを設定します。ConvertTo-Json
: オブジェクトを JSON 形式に変換します。Invoke-WebRequest
: Web リクエストを送信します。Export-Csv
: オブジェクトを CSV ファイルとしてエクスポートします。
PowerShell では多くの cmd コマンドも使用できますが、次のような違いがあります。
-
コマンドの互換性: PowerShell では外部プログラムの実行が許可されているため、ほとんどの CMD コマンドを実行できます。そのため、 PowerShell で
dir
、ipconfig
、などのnetstat
従来の CMD コマンドを実行できます。 -
エイリアス: CMD との一定の互換性を維持するために、PowerShell は一般的に使用される多くの CMD コマンドにエイリアスを提供します。たとえば、 PowerShell と入力すると
dir
、実際にはGet-ChildItem
コマンドレットが呼び出されます。つまり、PowerShell で使い慣れた CMD コマンドを使用できますが、PowerShell コマンドレットは実際にはバックグラウンドで実行されます。 -
コマンド構造: PowerShell は多くの CMD コマンドをサポートしていますが、動作が異なる場合があります。PowerShell はコマンドレットの構造を使用します。コマンドレットは通常、 、など
Verb-Noun
の命名規則に従います。Get-Content
Set-Item
-
パラメータの違い: 一部の CMD コマンドは PowerShell で動作しますが、そのパラメータと動作は CMD とは異なる場合があります。たとえば、一部のコマンドでは、
-
CMD の代わりにPowerShell のパラメーター プレフィックスが必要な場合があります/
。 -
拡張機能: PowerShell は、オブジェクト パイプライン、リモート管理、豊富なスクリプト機能など、CMD には存在しない多くの機能を提供します。
-
セキュリティ: PowerShell には、ユーザーが明示的に許可しない限り、特定のスクリプトの実行を妨げる実行ポリシー システムがあります。これは、悪意のあるスクリプトの実行に対するセキュリティを強化するためです。
PowerShell は多くの従来の CMD コマンドをサポートしていますが、動作が異なる場合や、パラメーターや機能が異なる場合があります。PowerShell を最大限に活用するには、従来の CMD コマンドだけに依存するのではなく、PowerShell のネイティブ コマンドレットと機能を学習して使用することをお勧めします。
2.4 シェル (Bash など)
Bash は、Linux および Unix システムで最も一般的に使用されるシェルです。一般的に使用される Bash コマンドをいくつか示します。
ls
: ディレクトリの内容を一覧表示します。cd
: 現在のディレクトリを変更します。pwd
: 現在の作業ディレクトリを表示します。echo
: テキストまたは変数を出力します。grep
: ファイル内の特定のテキストを検索します。chmod
: ファイルまたはディレクトリの権限を変更します。chown
: ファイルまたはディレクトリの所有者を変更します。ps
:現在実行中のプロセスを表示します。kill
:最終過程。
2.5 CMD または Powershell を使用する
2.51 全体的な比較
CMD
(コマンド プロンプト) とPowerShell
両方とも Windows オペレーティング システムのコマンド ライン インターフェイスですが、デザイン、機能、目的が異なります。両者の比較は次のとおりです。
CMD
(コマンド・プロンプト):
- 歴史: CMD は、MS-DOS のコマンド セットを継承した Windows 用の伝統的なコマンド ライン ツールです。
- 機能: 比較的基本的なもので、主にファイルとディレクトリの管理機能を提供します。
- スクリプト: スクリプトにはバッチ (.bat) ファイルを使用します。
- 互換性: その長い歴史により、一部の古いアプリケーションやスクリプトは依然として CMD に依存している可能性があります。
- インターフェイス: テキストベース。高度なテキスト処理やオブジェクト操作機能は組み込まれていません。
PowerShell
:
- 歴史: PowerShell は、2006 年に初めてリリースされた Windows 用の最新のコマンドラインおよびスクリプト環境です。
- 機能: 非常に強力で、リモート管理、イベント ログ アクセス、レジストリ操作などの多くの高度な機能を提供します。
- スクリプト: .ps1 スクリプト ファイルを使用し、より複雑なプログラミング構造と操作をサポートします。
- オブジェクト指向: PowerShell はオブジェクトベースです。つまり、コマンドの出力をテキストだけでなくオブジェクトとして扱うことができます。これにより、データの処理と操作がより柔軟かつ強力になります。
- 拡張性: PowerShell はモジュールと拡張機能をサポートしているため、ユーザーはさらにコマンドや機能を追加できます。
- クロスプラットフォーム: PowerShell Core は、Windows、Linux、および macOS 上で動作する PowerShell のオープンソース バージョンです。
提案:
- 基本的なファイルおよびディレクトリの管理タスクについては、CMD と PowerShell の両方が可能ですが、PowerShell の方がより高度な機能を提供します。
- 複雑なスクリプト作成、データ操作、またはシステム管理タスクを実行する必要がある場合は、PowerShell がより良い選択肢であることは間違いありません。
- 従来の DOS コマンドの使用に慣れているユーザーにとっては、CMD の方が馴染みがあるかもしれません。
- PowerShell は、最新のコマンド ライン スキルを学び、Windows システムの能力を最大限に活用したいと考えているユーザーに推奨されるツールです。
CMD または PowerShell を選択するかどうかは、特定のニーズ、経験、タスクの複雑さによって異なります。しかし、時間の経過とともに、Microsoft は明らかに PowerShell を主要なコマンド ライン ツールとして推進およびサポートすることに傾いてきました。
2.52 スクリプトの比較
CMD
スクリプトは、PowerShell
構文、機能、設計思想において大きく異なります。2 つのスクリプトの主な違いは次のとおりです。
-
スクリプトファイルの拡張子:
- CMD :
.bat
または を.cmd
バッチ スクリプトの拡張子として使用します。 - PowerShell :
.ps1
PowerShell スクリプトの拡張機能として使用します。
- CMD :
-
文法:
-
CMD : バッチ スクリプトの構文は比較的単純で、主に初期の DOS コマンドに基づいています。例えば、
echo
テキストの印刷に使用する、if
条件判定を行うために使用する、for
ループを実行するために使用する、などです。 -
PowerShell : PowerShell の構文はより豊富で強力です。関数、配列、ハッシュ テーブル、オブジェクト処理など、より複雑なプログラミング構造をサポートします。通常、PowerShell コマンドは、など
Verb-Noun
の の命名規則に従いますGet-ChildItem
。Set-Variable
-
-
関数:
-
CMD : バッチ スクリプトの機能は比較的限られており、主にファイルとディレクトリの管理、単純なテキスト処理、システム タスクに使用されます。
-
PowerShell : PowerShell は、リモート管理、イベント ログ アクセス、レジストリ操作、WMI クエリ、Active Directory 管理など、多くの高度な機能を提供します。
-
-
情報処理:
-
CMD : バッチスクリプトは主にテキストデータを処理します。テキスト処理には制限があり、多くの場合、テキスト検索や置換などの外部ツールの使用が必要になります
findstr
。 -
PowerShell : PowerShell はオブジェクトベースです。つまり、コマンドの出力をテキストだけでなくオブジェクトとして扱うことができます。これにより、データの処理と操作がより柔軟かつ強力になります。
-
-
エラー処理:
-
CMD : バッチ スクリプトのエラー処理は比較的単純で、多くの場合、
errorlevel
変数を使用して前のコマンドの終了ステータスを確認します。 -
PowerShell : PowerShell は、構造体などのより高度なエラー処理メカニズム
try-catch-finally
と、エラー オブジェクトへの詳細なアクセスを提供します。
-
-
安全性:
-
CMD : バッチ スクリプトにはセキュリティ メカニズムが組み込まれていません。
-
PowerShell : PowerShell には、不正なスクリプトの実行を防止する実行ポリシー システムがあります。さらに、PowerShell スクリプトにデジタル署名を付けて、その整合性と出所を保証することができます。
-
PowerShell スクリプトは、バッチ スクリプトよりも強力で柔軟な機能を提供します。バッチ スクリプトは一部の単純なタスクには依然として便利ですが、複雑なシステム管理や自動化タスクには PowerShell の方が適しています。
詩の最後に永遠に愛してと書いてください〜