\r\n\r\n
コマンドラインは50年前のものですが、まだ時代遅れではありません。グラフィカルなデスクトップやタッチスクリーン端末の時代になっても、テキストベースの端末は多くの仕事をこなすのに最適な方法です。
実際、Microsoft が強力な Windows Terminal アプリケーションを新たに作成したことで、コマンドラインはこれまで以上に尊重されるようになっています。windows 10 の PowerShell 環境は非常に強力ですが、Microsoft はそれでも意図的に、本質的に完全な Linux コマンドライン環境のサポートを windows 10 に追加しています。
ある時、コンピュータと対話しようと思えば、タイピングができるようになりました。それだけです。それ以外には何もなかった。しかし、ミシン目入りのカードやミシン目入りの紙テープを使っていた時代からすると、タイピングは画期的なことだったのです。ロール紙を使ったテレタイプライターから、ブラウン管画面を持つ端末への移行も、人間とコンピュータの対話における大きな変化であった。
このステップは、インタラクティブシェルが本領を発揮するための道筋をつけるものです。パソコンにコマンドを送ると、すぐに画面に応答が表示されるようになりました。もう、テレタイプから印刷された紙がカチッと出てくるのを待つ間、カチカチと音を立てる必要はありません。
でも、それは昔のことで、今は今の時代です。コンピュータは全く別物です。グラフィカルデスクトップ環境がインストールされていないコンピュータを使用したり、低帯域幅の接続でSSHを使用してリモートコンピュータを使用したり、ヘッドレスシステムや組み込みシステムを制御したりといった明らかなロックインの状況以外に、なぜグラフィカルデスクトップ上でコマンドラインを使用するのでしょうか。
コマンドライン、ターミナルウィンドウ、シェルという用語は、ほとんど同じ意味で使われています。それは間違った専門用語です。どれもこれも、まったく違うものです。関連性はありますが、同じものではありません。
ターミナルウィンドウは、グラフィカルなデスクトップ環境において、テレテキスト端末のシミュレーションを実行するウィンドウです。
シェルとは、ターミナルウィンドウで実行されるプログラムのことです。入力された内容に応じて、自分で命令を解釈して実行したり、オペレーティングシステムを構成する他のユーティリティに渡したり、入力された内容に一致するスクリプトやプログラムを探したりします。
関連:BashやZshなどLinuxのシェルの違いとは?
コマンドラインとは、文字を入力する場所のことです。シェルが特定のコマンドを入力するのを待つ間に表示するプロンプトのことです。また、「コマンドライン」という言葉は、実際に入力する内容を指す言葉としても使われています。例えば、あるプログラムを実行する際に困ったことを他のコンピュータユーザーに相談する場合、「どのようなコマンドラインを使用しましたか?"どのシェルを使っているか "ではなく、"どのようなコマンドを入力しているか "を知りたいのです。
つまり、これらが組み合わさってCLI(Command Line Interface)を構成しています。
CLIは慣れないと後手後手に回り、分かりにくい印象があります。確かに、この時代遅れでグロテスクなコンピュータの使い方は、現代のオペレーティングシステムにはふさわしくありませんね。何十年も前に、ウィンドウ、アイコン、マウス、そしてグラフィカル・ユーザー・インターフェース(GUI)を備えたグラフィカル・デスクトップ環境が登場したとき、私たちはそのすべてを手放したのではないだろうか?
そう、GUIは何十年も前からあるのです。1985年に最初のバージョンがリリースされ、1990年にリリースされたWindows 3.0によって、PCデスクトップの標準となった。
UnixやLinux向けの「X Window System」は、1984年に登場した。これによって、グラフィカルデスクトップ環境がUnixとその多くの派生製品、クローン、新製品にもたらされました。
しかし、Unixの登場によって、これらの出来事は10年以上も前倒しされることになった。他に選択肢がなかったため、すべてコマンドラインから行う必要があったのです。人間とコンピュータの対話、すべての設定、コンピュータのすべての使用は、質素なキーボードで行えるようにしなければならなかった。
ですから、実はCLIは何でもできますし、CLIでできることをGUIではまだ全部できないんです。CLIでできる部分についても、通常はCLIの方が高速で、柔軟性があり、スクリプト可能で、拡張性があります。
規格があるのです。
POSIXは、基本的にWindows以外のUnix系OSの規格です。WindowsでもLinux用のWindows Subsystem(WSL)があり、POSIX互換(またはそれに近い)のOSでターミナルウィンドウを開けば、シェルの中に入っていることがわかります。シェルやディストリビューションが独自の拡張機能や強化機能を提供していても、POSIXの中核機能を提供していれば、そのまま利用することができます。その後、スクリプトが実行されます。
コマンドラインは最小公倍数です。使い方を覚えれば、Linuxディストリビューションやグラフィカルデスクトップ環境に関係なく、必要なすべての作業を行うことができます。デスクトップにはそれぞれやり方があります。Linuxのディストリビューションによって、様々なユーティリティやプログラムがバンドルされています。
しかし、ターミナルで窓を開ければ、そこは我が家のようにくつろげる空間です。
Linuxの各コマンドは、特定のことをうまく行うように設計されています。基本的な設計思想は、既存のユーティリティにパイプやリンクで接続できる別のユーティリティを追加することで機能を追加し、目的の結果を得るというものです。
これはとても便利なので、マイクロソフトはわざわざウィンドウズ10にLinuxの完全なコマンドラインのサポートを追加したのです!
例えば、他のコマンドでは、テキストをアルファベット順に並べるために sort コマンドを使用します。他のすべてのLinuxコマンドにソート機能を組み込む必要はない。一般に、GUIアプリケーションでは、このような協調的な相互運用はできません。
次の例を見てください。これは、lsコマンドを使用して、カレントディレクトリのファイルを一覧表示します。結果はsortコマンドにパイプされ、5列目のデータ(つまりファイルサイズ)でソートされます。ソートされたリストはheadコマンドに送られ、デフォルトでは入力の最初の10行がリストアップされます。
ls -l | sort -nk5,5 | headカレントディレクトリにある最小のファイルの整頓されたリストを得ることができる。
headの代わりにtailを使ったコマンドに変更することで、カレントディレクトリにある10個の大きなファイルのリストを得ることができます。
ls -l | sort -nk5,5 | tailこれで予想通り、上位10文書のリストが出来上がりました。
コマンドの出力をリダイレクトしてファイルに取り込むことができます。通常の出力(stdin)とエラーメッセージ(stderr)は別々に取り込むことができます。
関連:Linuxのstdin, stdout, stderrとは何ですか?
コマンドには環境変数を含めることができます。次のコマンドは、ホームディレクトリの内容をリストアップします。
ls $HOMEこれは、ディレクトリツリー内のどこでも有効です。
それでも、これだけの入力が煩わしいと思うのであれば、タブ補完などのテクニックを使えば、入力の手間を減らすことができます。
人間は間違いを犯しやすいものです。
スクリプトを実行するたびに同じように実行される一連の命令を標準化することができます。これにより、システムのメンテナンスに一貫性を持たせることができます。安全性チェックをスクリプトに組み込むことで、スクリプトを継続すべきかどうかを判断することができます。そのため、ユーザー自身が判断するのに十分な知識を持つ必要がありません。
Linuxや他のUnix系システムでcronを使ってタスクを自動化できるため、長く複雑な繰り返し作業を簡略化したり、少なくとも一度問題を解決して、将来的に自動化することが可能です。
PowerShellスクリプトは、Windowsで同様の機能を提供し、タスクスケジューラーから実行をスケジュールすることができます。1つのコマンドですべてを自動的に変更できるのに、なぜセットアップのたびに50種類ものオプションをクリックする必要があるのでしょうか?
スーパーユーザーとして、Linuxや他のOSをフルに活用するためには、CLIやGUIを使う必要があるんだ。
アプリケーションを使う上で、GUIは他に類を見ません。コマンドラインをこよなく愛する人たちでさえ、オフィス用ソフトや開発環境、グラフィカルな操作プログラムを使うために、ときどきターミナルウィンドウから離れることを余儀なくされます。
コマンドライン中毒者はGUIを嫌っているわけではなく、適切なタスクにCLIを使うことの利点を気に入っているのです。管理者にとっては、CLIは楽勝でしょう。CLIを使用して、ファイル、ディレクトリ、ファイルおよびディレクトリのグループ、または完全にグローバルな変更を行うことができます。対象オブジェクトの数が増えると、GUIでこれを行おうとすると、通常、キーボードやマウスの操作が長くなり、繰り返しになる。
コマンドラインは最高レベルの忠実度を提供します。すべてのコマンドに対して、すべてのオプションを使用することができます。Linuxのコマンドには多くのオプションがあります。例として、lsofコマンドを考えてみましょう。そのマニュアルページを見てから、GUIにどのように巻き込むかを考えてください。
効果的なGUIでは、ユーザーに提示するオプションが多すぎる。圧倒的な存在感、魅力のなさ、使い勝手の悪さでしょう。これはGUIの目的とは正反対です。
その馬を避けてはいけない。大抵はより速く、より機敏な馬だ。スパーを勝ち取れば、決して後悔はしないはずだ。