背景
最近新卒研修のメンターをしているのだが、そこでTera Termという単語を久々に聞いた。そういえば自分も研修の時にEC2にSSH接続するためにインストールしたことを思い出した。
見た目はコマンドプロンプトやPower Shellなどと変わらないが、わざわざインストールする必要があったのか?そもそもコマンドプロンプトとPower Shellって1つじゃダメなの?git bashもインストールしたけど何?1つに統一してくれ!!と疑問が湧いてきたにで、ちょっとまとめようと思う。
シェルとターミナル
そもそも、このあたりの用語をきちんと理解しないまま生きてきたので、一度整理しておきたい。
教えて!GPT先生
簡単に言えば、ターミナルはユーザーとコンピュータ間のコミュニケーションを可能にするインターフェースであり、シェルはそのコミュニケーションを通じてオペレーティングシステムを操作するためのプログラムです。ユーザーはターミナルを通してシェルにコマンドを入力し、シェルはそのコマンドを解釈してオペレーティングシステムに伝え、実行します。
とあるように、ターミナルはインターフェース、シェルはプログラム(を実行しているところ)と覚えておけばよさそう。
でも、git bashとか、コマンドプロンプトとかって、開いたときに違う画面がでますよね?
あれ自体はターミナルで、シェルではないってことですかね?
あのターミナルに対してコマンドを打ち込み、その実行されるプログラミング自体をシェルって言ってるんですかね?
気になるので追加質問
とのこと。
シェルがターミナルの部分も持っている、といういうことですかね。
何ともわかりづらいですね。
OS
ところでOSって何なんですかね。オペレーティングシステムの略ってぐらいはわかるけど...
PCの本体的なイメージがありますが、一言でいうと何なのでしょうか。
一言でいうと「コンピュータの基本的な機能とリソースを管理するソフトウェア」とのこと。
PCの中身全体を管理しているアプリ、と思えばいいのかな?
あと、シェルとOSは一対一で対応しているものだと思っていましたが、どうやら違うみたいです。
Bash, コマンドプロンプト, PowerShellはShellである。では、Tera Termは?
Tera Termはこれらの中で少しが違う。
これは「端末エミュレータ」に属します。違いは以下です。
端末をまねしたやつって感じですね。
というかここで気づいたのが「端末=ターミナル」だということ。
インターフェースってなんやねん、と思っていましたが「ユーザからの入力を受け付ける(あと出力も表示する)ところ」って考えるとめちゃくちゃしっくりきますね。
いや、言葉の意味考えたらそらそうやろ、って感じなんですけどね。
とにかく腑に落ちました。
コマンドラインアプリケーション
gitとか、npmとか、どのシェルのターミナルを使っても実行できるCLIは、コマンドラインアプリケーションと呼ぶみたいです。
なぜどのシェルでも使えるかというと、命令を渡す相手がシェルによらずに、最初にしているgit, npmなどで指定されているからだと思われます。
シェル固有のコマンドをつかってコマンドを打っているときは、「os」という接頭辞を省いていると考えればすんなりいきました。osによってシェルが命令を渡す相手が変わるので、命令が伝わらないのではないか、という気がしました。
具体的には、(git pushみたいな感じで)windows dirは存在するけどwindows lsは存在しない、という条件でwindows lsって打っても当然命令は通らない。逆にmac lsは存在するけど、mac dirは存在しない状態で、mac lsでは通るけど、mac dirは通らない、みたいな。
まとめ
・ターミナルは、ユーザーとPCのインターフェース
・シェルはコマンドとOSの橋渡し役。ただ、シェルが独自のターミナルを持つことが多い
・Tera Termはターミナルエミュレータ
・CLI以外のコマンドは先頭にmacかgoogleみたいな(うまくよくわかっていないが)をつけずに売っているんだろうな、と感じでした。
3週目にして早くもネタが切れそうでしたが、頑張って記事にしました。
やはり、前提知識が少ない、把握しづらいプロジェクトの大変さを思い知りました。
間違い、指摘箇所だらけだと思います。どなた様でも、この記事の内容などについてアドバイスあればぜひぜひ教えてください。