shellについて再確認する

shellと言われて思い浮かぶのはターミナルやコマンドプロント、bashやzshだった。 だがその認識がいかに大雑把なものであるか思い知ったのでここにメモする。

shellの定義

シェル (shell) はオペレーティングシステム (OS) のユーザーのためにインタフェースを提供するソフトウェアであり、カーネルのサービスへのアクセスを提供する。 wikipediaより

カーネル、つまりはOSの内部にアクセスするためのソフトウェアがshellだ。 大きく分けてCUIベースのものと、GUIベースのものの2つがあり、CUIベースのものがいわゆるbashやzshである。

ではGUIベースのものは何かというと、Finderやエクスプローラーなどである。 そう、Finderやエクスプローラーってシェルの一種だったんですね。 OSの内部にアクセスして、フォルダやファイルなどのデータを管理する立派なシェルです。

CUIベースのshellについて

CUIベースのシェルは、linuxやmacならbashが、windowsならWindows PowerShell(windows 7以降)がデフォルトで設定されている。

ちなみにターミナルやコマンドプロンプトはあくまでshellを利用するためのアプリケーションで、shellとは呼ばないらしい 汗

linuxやmacといったunix系列のshellとwindowsのshellは互換性がない。 linuxとmacは同じunixをベースにしているため、同じshellが使えるが、windowsはOS自体の仕組みが全然違うのでその操作方法もぜんぜん違うということらしい。

unixシェルとwindowsシェルの違い

最大の違いはシェルを変えることができるか否かだろう。

unix系OSはunixシェルならば、Bourne-Again shell (bash)やZ Shell (zsh)、TENEX C shell (tcsh)といった様々なシェルを扱うことができ、デフォルトのシェルを変更することもできるが、windowsではそうもいかないようだ。

最新のwindows10ではunixシェルを扱えるようになったようだが、ubuntuのイメージをダウンロードして展開し、その上でプログラムを走らせているということで、windows本体がunixシェルに対応したというわけではない様子。

ちなみに、最新のwindowsシェルであるWindows PowerShellはunix系OSでも使用可能らしい。
その他の違いとして、内部コマンドの豊富さがあげられるだろう。 内部コマンドとはその名の通りシェルプログラムファイルの内部に設定されているコマンドで、その逆が外部コマンド。

unixシェルはwindowsのシェルに比べて内部コマンドがかなり少ない。例えばディレクトリの中身を確認するlsコマンドは/bin/lsで設定されている外部コマンドだ。 これは、おそらくunixOSの方針によるものだろう。 unixの前身であるmulticsというOSは、様々な機能を盛り込んだために当時のコンピューターのスペックには重すぎた。それを反面教師にして、multiではなくuni、よりシンプルで軽量なOSとして開発された。 そのため、unixシェルも必要最低限のものだけ内部コマンドとして設定し、他は外部コマンドとして設定したのだろう。






気になって少し調べた程度のものなので抜けている部分も多いかもしれませんm(_ _)m