UNIX、Linux、シェル——これらの用語は普段から耳にするものの、それぞれの違いや関係性を正確に説明できる人は意外と少ないのではないでしょうか。
この記事では、UNIXとLinuxの違い、シェルとは何か、そしてそれぞれのOSで使われるシェルの種類と特徴について、わかりやすく解説します。
IT業界で働く方や、これからLinuxを学ぼうとしている方にとって、基礎知識として押さえておきたい内容です。
UNIXとLinuxの違い

UNIXとは
UNIXは、1969年にアメリカのAT&T社ベル研究所で開発されたオペレーティングシステム(OS)です。
現存するOSの中でも最も古い部類に入り、その後登場する多くのOSの基盤となりました。
UNIXの開発は1960年代後半にKen Thompson、Dennis Ritchieらによって始まり、1979年にVersion 7がリリースされました。
当初はアセンブリ言語で書かれていましたが、後にC言語で書き直されたことで、さまざまなハードウェアに移植可能になりました。
現在「UNIX」という名称は、The Open Group(TOG)によって厳格に管理されています。
正式にUNIXと名乗るためには、Single UNIX Specificationという共通仕様を満たし、認証を受ける必要があります。
そのため、UNIXは特定の条件を満たしたOSの総称とも言えます。
主なUNIX系OSには、Solaris、AIX、HP-UXなどがあります。
また、macOSもUNIX認証を取得しており、正式なUNIXの一種です。
Linuxとは
Linuxは、1991年にフィンランドのヘルシンキ大学の学生だったLinus Torvalds(リーナス・トーバルズ)によって開発されました。
当時、教育用UNIXとして使われていたMINIXをより良いものにしようとしたことが開発のきっかけです。
Linuxは厳密にはUNIXから派生したわけではありません。
UNIXのソースコードを参考にしながらも、ゼロベースから開発されたため、ソースコードは完全に別物です。
しかし、UNIXの標準規格であるPOSIX(Portable Operating System Interface)を満たしているため、UNIX互換OSまたはUNIX系OSと呼ばれています。
正確には、Linuxはカーネル(OSの中核部分)の名称です。
Linuxカーネルにさまざまなソフトウェアを組み合わせてフル機能のOSとして動作するものを「Linuxディストリビューション」と呼びます。
代表的なディストリビューションには、Ubuntu、Red Hat Enterprise Linux、Debian、CentOSなどがあります。
UNIXとLinuxの主な違い
UNIXとLinuxの違いを、いくつかの観点から比較してみましょう。
1. 開発の経緯と目的
UNIXは、もともと小型コンピューターでの利用を想定し、学術研究や開発を目的として作られました。
一方、Linuxはビジネスでの利用を想定して開発されました。
現在では派生OSの登場により両者の違いは分かりにくくなっていますが、開発当初の想定環境が異なります。
2. ライセンスと利用条件
UNIXを扱うにはライセンスが必要です。
UNIXはSolarisの一部バージョンが無償化されたことで無料で利用できると誤解されることがありますが、OSの開発や販売にはライセンス許諾が求められます。
対して、Linuxは多くのディストリビューションが無料で利用可能です。
LinuxはGNU General Public License(GPL)というライセンス体系に基づき、誰でも自由に入手・改変・再配布ができます。
ただし、一部有償のディストリビューションも存在します。
3. オープンソースかクローズドソースか
Linuxはオープンソースソフトウェアとして広く公開されており、世界中の開発者が改良を重ねています。
そのため、Linuxの開発者は世界中のエンジニアであると言えます。
UNIXは商用化されており、企業が製品として開発・販売しています。
ソースコードは公開されていません。
4. ファイルシステム
UNIXとLinuxでは、使用されるファイルシステムが異なります。
UNIXでは、FFFS(Fast File System)やZFS(Zettabyte File System)などが使われることが多いです。
Linuxでは、ext4(fourth extended file system)が標準的に使われています。
ファイルシステムの違いにより、格納できるファイル数やファイル名の長さなどに違いが出ます。
5. 使用されるシェル
UNIXとLinuxでは、標準で使用されるシェルの種類が異なります(詳しくは後述)。
UNIXでは、Bourne Shell(sh)、Korn Shell(ksh)、C Shell(csh)、tcshなどが伝統的に使われてきました。
Linuxでは、Bourne Again Shell(bash)が標準として広く使われています。
UNIXとLinuxの共通点
UNIXとLinuxには、多くの共通点もあります。
1. 高い安定性とセキュリティ
両者はサーバーOSとして使われることが多いため、高いセキュリティ能力を備えています。
また、WindowsやMacと比べて利用者が少ないことから、コンピュータウイルス自体が少なく、比較的安全に利用できます。
特にLinuxはオープンソースのため、脆弱性が発見されると即座に対策がとられ、比較的早くパッチが提供される傾向があります。
2. CUI(コマンドラインインターフェース)の使用
両者とも、黒いコマンド画面を使ってCUI操作を行うことが一般的です。
ただし、近年ではGUI環境も提供されています。
3. マルチタスク・マルチユーザー対応
一つのコンピュータで複数のプログラムを同時に実行できるマルチタスクと、複数のユーザーが同時にログインして利用できるマルチユーザーに対応しています。
UNIXが開発された当時、この機能は画期的なものでした。
4. 基本コマンドの互換性
LinuxはUNIXとの互換性を重視して開発されたため、基本的なコマンドの多くは共通しています。
例えば、ls、cd、mkdir、catといったコマンドは、UNIXでもLinuxでも同じように使えます。
シェルとは何か

シェルの基本的な役割
シェルとは、ユーザーとOS(オペレーティングシステム)の間で命令を伝える仲介役のプログラムです。
ユーザーが入力したコマンドを解釈し、OSの中核部分であるカーネルに伝え、その結果をユーザーに返します。
シェルという名前は、カーネル(核)を覆う「殻」のような存在であることに由来しています。
英語のshell(貝殻、殻)がその語源です。
シェルの機能
シェルには、コマンドを伝えるだけでなく、以下のような機能があります。
1. コマンド履歴機能
過去に入力したコマンドを記録し、簡単に再実行できます。
矢印キーで履歴を遡ることができるため、同じコマンドを何度も入力する手間が省けます。
2. コマンド補完機能
コマンドやファイル名を途中まで入力してTabキーを押すと、自動的に残りを補完してくれます。
これにより、タイプミスを減らし、作業効率を上げることができます。
3. 変数の使用
シェル内で変数を定義して使用できます。
環境変数を設定することで、システム全体の動作をカスタマイズできます。
4. スクリプトの実行
複数のコマンドをまとめて記述したシェルスクリプトを作成し、一度に実行できます。
これにより、定型作業の自動化が可能になります。
シェルとシェルスクリプトの違い
シェルとシェルスクリプトは混同されがちですが、異なるものです。
シェルは、コマンドをOSに渡すためのプログラムそのものです。
シェルスクリプトは、シェルによる命令がまとめられた指示書(テキストファイル)のことです。
シェルスクリプトに複数のコマンドを順番に記述しておけば、そのスクリプトを実行するコマンドを送るだけで、内部に書かれた処理を一気に実行できます。
シェルの種類と特徴
シェルにはさまざまな種類があり、大きく「Bourneシェル系(sh系)」と「Cシェル系(csh系)」の2つに分類できます。
Bourneシェル系(sh系)
sh(Bourne Shell)
Bourne Shellは、1979年にAT&Tベル研究所のStephen Bourne(スティーブン・ボーン)によって開発されました。
UNIX Version 7に標準搭載され、UNIXの標準シェルとなりました。
開発者の名前から「Bシェル」とも呼ばれ、他のシェルの原型となりました。
実行ファイルのパスは/bin/shです。
特徴:
- シェルとしての基本的な機能のみ
- コンパクトで動作が高速
- コマンド履歴機能がない
- コマンド補完機能がない
- 対話的な使用には不便
- スクリプト作成には適している
shは基本的な機能しか持たないため、後に機能を拡張したシェルが登場しました。
現在でも、多くのシステムスクリプトはsh互換の構文で書かれています。
bash(Bourne Again Shell)
Bourne Again Shellは、1989年にBrian Fox(ブライアン・フォックス)によってGNUプロジェクトのために開発されました。
名前の「Again」は、Bourne Shellの後継という意味と、「生まれ変わった(born again)」という意味を掛けています。
bashは、Bourne Shellとの後方互換性を保ちながら、C ShellやKorn Shellの便利な機能を取り入れています。
実行ファイルのパスは/bin/bashです。
特徴:
- Linux標準シェル
- Bourne Shellとの互換性が高い
- コマンド履歴機能
- コマンドライン編集機能
- Tab補完機能
- エイリアス機能
- ブレース展開、コマンド置換など便利な機能
- macOSでも使用可能(かつてはデフォルト)
bashは最も広く使われているシェルの一つであり、多くのLinuxディストリビューションで標準として採用されています。
対応しているOSが多く、スクリプトの互換性も高いため、初心者から上級者まで幅広く利用されています。
ksh(Korn Shell)
Korn Shellは、1980年代にAT&Tベル研究所のDavid Korn(デビッド・コーン)によって開発されました。
開発者の名前から「Kシェル」とも呼ばれます。
特徴:
- Bourne Shellの上位互換
- POSIX標準に準拠
- コマンド履歴機能
- コマンドライン編集機能(viモード、emacsモード)
- 配列のサポート
- 整数演算機能
- C言語に似た制御構造
- 高速な動作
kshは、IBM社製サーバーOS「AIX」の標準シェルとして世界的に普及しました。
企業向けUNIXシステムで広く使われています。
zsh(Z Shell)
Z Shellは、1990年にPaul Falstad(ポール・ファルスタッド)によって開発されました。
bashやksh、csh/tcshの優れた機能を統合したシェルです。
特徴:
- bashの上位互換
- 高いカスタマイズ性
- 強力なコマンド補完機能
- スペルチェック機能
- 複数のシェルのエミュレーション機能
- テーマやプラグインのサポート
- 配列や連想配列のサポート
- グロブ機能の拡張
zshは、macOSでデフォルトのユーザーシェルとして採用されたことで、一気にメジャーになりました。
ただし、macOSの/bin/shの実体は今もbashです。
「Oh My Zsh」という設定フレームワークが人気で、簡単にカスタマイズできます。
上級ユーザーや開発者に人気があり、効率的で快適なコマンドライン操作を実現します。
dash(Debian Almquist Shell)
dashは、Kenneth Almquist(ケネス・アルムクイスト)が開発したAlmquist Shell(ash)のDebian版です。
POSIX標準に準拠した軽量なシェルです。
特徴:
- POSIX標準準拠
- 非常に軽量
- 起動が高速
- bashより少ないメモリ使用量
- スクリプト実行に特化
dashは、DebianやUbuntuなどのLinuxディストリビューションで、スクリプト実行用のデフォルトシェル(/bin/sh)として使われています。
対話的な使用には向いていませんが、システムスクリプトの高速実行に適しています。
Cシェル系(csh系)
csh(C Shell)
C Shellは、1970年代後半にカリフォルニア大学バークレー校のBill Joy(ビル・ジョイ)によって開発されました。
BSD UNIXで使われていたシェルです。
特徴:
- C言語に似た構文
- 配列のサポート
- コマンド履歴機能
- エイリアス機能
- ジョブ制御機能
C言語の構文に似ているため、C言語を知っているプログラマーにとっては使いやすいシェルでした。
多くの革新的な機能を導入しましたが、スクリプト言語としては構文に問題があり、現在ではあまり推奨されていません。
tcsh(TENEX C Shell)
tcshは、1980年代初頭にC Shellを拡張して開発されました。
C Shellの改良版です。
特徴:
- C Shellとの互換性
- コマンドライン編集機能
- コマンド補完機能
- スペル訂正機能
- より充実したプログラミング機能
tcshは、FreeBSD(バージョン4以降)の標準シェルとして世界的に普及しました。
C Shellの欠点を改善し、対話的な使用に適したシェルです。
その他のシェル
fish(Friendly Interactive Shell)
fishは、2005年にAxel Liljencrantz(アクセル・リリエンクランツ)によって開発されました。
ユーザーフレンドリーさと対話的な使用に重点を置いたシェルです。
特徴:
- 初期設定不要で使いやすい
- コマンド入力時の自動提案機能
- リアルタイムのシンタックスハイライト
- Webベースの設定画面
- 文脈を考慮した補完機能
- POSIX非準拠(独自の構文)
fishは、POSIX標準に準拠していないため、従来のシェルスクリプトとの互換性はありません。
しかし、対話的な使用では非常に便利で、初心者にも使いやすいシェルです。
UNIXとLinuxで使われるシェルの違い
UNIXで使われるシェル
伝統的なUNIXシステムでは、以下のシェルが標準的に提供されてきました。
- sh(Bourne Shell):UNIX標準シェル
- csh(C Shell):BSD UNIX由来
- ksh(Korn Shell):商用UNIX向け
- tcsh:cshの拡張版
商用UNIXシステム(Solaris、AIX、HP-UXなど)では、shやkshが標準シェルとして使われることが多いです。
特にkshは、企業向けUNIXシステムで広く採用されています。
Linuxで使われるシェル
Linuxシステムでは、以下のシェルが主に使われています。
- bash(Bourne Again Shell):Linux標準シェル
- zsh(Z Shell):高機能シェル
- dash(Debian Almquist Shell):スクリプト実行用
- fish(Friendly Interactive Shell):対話的使用向け
bashは、ほとんどのLinuxディストリビューションで標準シェルとして採用されています。
多くのシステムでは、/bin/shがbashへのシンボリックリンクになっています。
ただし、DebianやUbuntuなどでは、スクリプト実行用の/bin/shとしてdashが使われています。
macOSで使われるシェル
macOSは、以下のような変遷をたどっています。
- macOS Catalina(10.15)以前:bashがデフォルト
- macOS Catalina(10.15)以降:zshがデフォルト
ただし、/bin/shの実体は引き続きbashです。
ユーザーは、Homebrewなどで最新のbashをインストールして使い続けることもできます。
シェルの選び方
どのシェルを使うかは、以下の要因によって決まります。
1. OS環境
使用しているOSのデフォルトシェルを使うのが最も簡単です。
Linuxならbash、macOSならzshが標準です。
2. スクリプトの互換性
他のシステムとの互換性を重視する場合、POSIX準拠のsh、bash、kshを選ぶのが無難です。
特にbashは、多くのシステムで利用可能です。
3. 機能性
高度な機能やカスタマイズ性を求めるなら、zshがおすすめです。
対話的な使いやすさを重視するなら、fishも選択肢になります。
4. 習得のしやすさ
初心者なら、標準的なbashから始めるのが良いでしょう。
bashは情報が豊富で、学習リソースも多く存在します。
5. パフォーマンス
軽量で高速なシェルが必要なら、dashが適しています。
ただし、対話的な使用には向いていません。
まとめ
UNIXとLinuxは、どちらも高い安定性とセキュリティを持つOSですが、開発の経緯やライセンス形態が異なります。
UNIXは商用の有償OS、Linuxはオープンソースの無償OSです。
シェルは、ユーザーとOSの間でコマンドを仲介するプログラムです。
主にBourneシェル系とCシェル系の2つに分類され、それぞれ多くの派生シェルが存在します。
UNIXではsh、ksh、csh、tcshが伝統的に使われ、Linuxではbashが標準です。
近年では、zshやfishなど、より高機能で使いやすいシェルも人気を集めています。
シェルの選択は、使用環境、目的、個人の好みによって異なります。
初心者はbashから始め、慣れてきたらzshやfishなど他のシェルも試してみると良いでしょう。
それぞれのシェルには独自の特徴があり、状況に応じて使い分けることで、より効率的なシステム管理や開発が可能になります。


コメント