シェル、カーネルって何?シェル・カーネルの概念とシェルの種類

プログラミング

エンジニアが業務をする上ではLinuxとは切っても切り離せない関係です。
今回はそのLinuxで処理を行う際に必要不可欠なシェルやカーネルについて書いてみたいと思います。

シェル、カーネルとは?

シェルとは英語では「ナッツや卵、動物等の何かを包む外側の部分」、つまり「殻」を意味します。
よく貝の貝殻をシェルと言います。最近はあまり見なくなりましたがお馴染み貝殻のマークのガソリン会社「シェル石油」。その殻ですね。

それに対し、カーネルは英語では、「コーンや小麦などの穀物や種」「ナッツやフルーツなどの内側の柔らかい部分のこと」を意味します。

Linuxの世界では、外側のシェル、内側のカーネルの構造の概念を取り入れ、処理の管理をしています。
カーネルはOSの大事な核となる部分であり、誤って編集されないよう外からのアクセスを制限しています。
そのため、ユーザーがPCに対して指示(コピーや計算等)をするためには、そのカーネルとやり取りのできる仲介者(インタープリタ)が必要となります。シェルはこの仲介者の役割を果たします。つまり、ユーザーははシェルを通じてOSの核の部分であるカーネルに指示を出します。この関係性を覚えていてください。

ターミナルについて

プログラミングの勉強をしているとシェルと同じように「ターミナルでコマンドを打つ」という言葉を聞いたことがあるかと思いますが、ターミナルは人間が理解しやすいようにシェルとやり取りするためのコマンドを表示するソフトウェアです。ターミナルでコマンドを打ち、シェルを使ってカーネルに指示を出しています。ターミナルはつまりは実際に人間と接するインターフェイスですね。

余談ですが、ターミナルには英語で「終点に位置するもの」を意味します。
広義のターミナルはキーボードやスクリーンなど人間とコンピュータがコミュニケーションを取るための機材の意味で、初期のコンピューターではよくMacでいう「ターミナル」のような画面がそのスクリーンに表示されており、そこからとった名前のようです。
英語ではこういったものを「termianl emulators」(ターミナルを模倣したもの) と呼んでおりそこから略されてMacの「terminal」という名前になっているようです。

シェルの種類

シェルはカーネルに指示をする仲介者と説明しましたが、シェルにも種類があります。そのうちのメジャーなものをいくつか説明したいと思います。

bash(バッシュ)

主要なLinux(CentOSやUbuntu)などでターミナルを開くとデフォルトでbashと呼ばれるシェルを使うようになっており、一番使われているシェルですね。

Linuxの初心者用の勉強用の本ではこのシェルを使うことが前提になっていることが多いので、最初はこのシェルで勉強をして慣れてきたら他のシェルに移ってみてもいいかもしれません。僕もそのうち切り替えるつもりです。

ちなみにbashは「Bourne-again shell」の略だそうで、最初のシェルであるBournさんが開発した「shell」と「born again」(生まれ変わった)を被せて「ボーンシェルを生まれ変わらせたシェル」という意味があるそうです。

zsh

zshはBorne shellにbashやksh、tcshなど他のシェルの良いところを追加したシェルのようです。

特にコマンドの補完機能についてbashよりも断然良いと評価を受けていますね。

zshの名前の由来は開発者であるPaul FalstadがPrinceton Universityで学生をしていた頃の先生であるZhong Shaoさんのlogin-idが「zsh」であり、shellの名前に良いのではないかと考えてつけたそうです。

今後、bashに慣れ次第、実体験を通してどういったところがzshのいいところなのか記載していきたいと思います。

fish

fishは今回説明してきた中で一番若いシェル(2005年にリリース)です。

fishは「friendly interactive shell」(簡単に互いにやり取りのできるshell)の略だそうで、その名の通りこちらも補完機能が優れているシェルのようです。
公式HPでは設定や追加の学習なしでの履歴等によるオートサジェスチョン機能、コードのハイライト機能、タブによる実行機能等がうたわれています。

こちらも個人的には気になっており、使ってみてこちらも今後追加していこうと思います。

他にもksh、tcsh等ありますが、あまり使ってる人も僕の周りにはいないので今回は省略したいと思います。(使ってる人いたらごめんなさい汗)

最後まで読んでいただきありがとうございました。