初学者のための正しいシェルとカーネルの概念 ~ 大学も技術者認定機関も間違いだらけ を読む

懐かしーーーこんな図あったな。忘れてた。
キーボードやディスプレイはコンピュータに搭載されている USB ポートやディスプレイ端子などにケーブルで接続されています。ユーザーからの入力はケーブルの中を通ってコンピュータにたどりつき、一番最初にデータを受け取るソフトウェアはカーネル(の中にあるハードウェアを制御しているドライバ)です。また一番最後に出力を行うソフトウェアもディスプレイに出力するためのカーネルです。入力を書くのであればキーボードから始まり、出力を書くのであればディスプレイでなければなりません。それらはハードウェアでありユーザーへのデータの本当の出入り口はシェルではなくカーネルなのです。

実際は
- ユーザがキーボードで入力する
- デバイスドライバが受け取る
- カーネルに渡す
- カーネルがシェルに渡す
- シェルがコマンドを起動する
- コマンドの結果をカーネルを通じてディスプレイに出力する
- カーネルがディスプレイに出力する(デバイスドライバを経由して)
- ユーザが見る

これは右が正しいと Linux を触ってると思う。
OSにプリインストールされてるやつは OS の一部だろうという認識
核の周りにあるからシェルと呼ばれているだけで、核を守っているからシェルと呼ばれているわけではないのです。シェルはユーザーの不正な操作や間違った操作からカーネルを守るような機能を備えてはいません。
**そもそもシェルにそのような機能を持たせたとしてもアプリケーションはシェルを経由しないので意味がないのです。**アプリケーションはシェルとカーネルの間にあります。
適当な言語で作ったアプリも、シェルなんて普通呼ばないし
仮によんだとしても os コマンドっていう

そうなんだ。
fork / exec とか読んでるから他のも呼んでるのかと思ってた。
まあ呼ぶようなのを書いたことがないので、調べたこともないんだが・・・
シェル色々書いてたけど、結局システムの中でうまく使うっていうより、
自分の作業を便利するために学ぶっていうのが結局重要なんだろな
シェルスクリプトに適している用途はシェル上で手作業で行う内容を手軽に自動化することです。

あー。この図わかりやすい。確かにこんな感じ。

