Chapter 04

ターミナルとかシェルってなに?

ほげさん
ほげさん
2021.08.14に更新

OS とは

アプリケーションが動作するための基本環境を提供するソフトウェアのことです。

カーネルやデーモンやデバイスドライバなどで構成されており、OS のおかげでハードウェアと連携できています。

ちなみに、macOS は Apple が作った Darwin というフリーでオープンな OS をベースとしています。
Darwin は CUI で Unix の機能を使うことができ、Darwin に Finder などの GUI コンポーネントを加えたものが macOS という OS と呼ばれています。

CUI の部分が Darwin として公開されていて、GUI を被せたものが macOS としてブランディングされているということですね。

Intel Mac
$ uname -s
Darwin
ARM Mac
$ uname -s
Darwin

カーネルとは

OS の中核を構成するソフトウェアのことです。

メモリや入出力などへのアクセスを抽象化した方法で提供することで、ハードウェアの違いによらず同じようにプログラムから利用できるようにしてくれています。

プログラムから OS に命令を送るときは、実際はシステムコールという仕組みを利用してカーネルとやりとりをしています。

シェルとは

ユーザが OS ( カーネル ) とやりとりをするときに用いるソフトウェアのことです。

例えば python の print などの処理はシステムコールによりカーネルとやりとりをしますが、ユーザはシェルを用いてそれを行います。

カーネルを守っているので貝殻と言います。

e.g. bash, zsh, tcsh

ターミナル ( ターミナルエミュレータ ) とは

ユーザがコンピュータへコマンド入力などをするときに用いるハードウェアのことです。

昔は物理的なターミナルを用いていましたが、今はソフトウェアによって実装されたターミナルエミュレータを利用するのが一般的です。

なのでターミナルと言うものは厳密にはターミナルエミュレータのことを指しています。

ターミナルエミュレータはシェルを操作するための入出力を提供するソフトウェアということになります。

この本では以後ターミナルはターミナルエミュレータを指しているものとします。

e.g. iTerm.app, ターミナル.app

まとめ

  • OS はハードウェアと連携するソフトウェア
  • カーネルは OS の中核ソフトウェアで、ハードウェアへのアクセスを抽象化してくれている
  • シェルはユーザがカーネルとやりとりするソフトウェア
  • ターミナルはシェルを操作するソフトウェア

参考にした記事

https://recruit.cct-inc.co.jp/tecblog/os/shell/
https://qiita.com/tatsuya4150/items/f830c9b2ae33275aef42
https://qiita.com/uguis410/items/17ec1e447e9716bfdca7
https://qiita.com/zawawahoge/items/2ec3b638422c7c8cac8f