UNIX 入門 1

OS 基礎演習∼No.5
UNIX 入門 1
1.UNIX の歴史
1960 年代初期 のコンピュータ は、同時に単一のジョブしか実行できなかった (シングルタスク)。このと
きの動作は、プログラマがパンチカードを使ってプログラムを入力し、投入されたプログラムが実行され、
結果がラインプリンタに出力されるというような方式である(バッチ処理)
。これらは汎用大型計算機(メイ
ンフレーム)を使って行われた。さまざまなメインフレームが開発されたが、これらのコンピュータは複雑
で一部の専門技術者しか使えない存在だった。この時代、OS はハードウェアと一体で開発されるものである
という考え方が一般的で、それぞれのハードウェアごとに異なる OS が作られていた。
このような時代に UNIX は登場した。UNIX は、メインフレームよりも単純で効率的な OS をめざして 開発
された。UNIX の創始者 は、AT&T ベル研究所 の Ken Thompson と Dennis Ritchie である。彼らは、自分たち
の開発したプログラムをより快適に動作させるために、DEC(Digital Equipment Corporation)社の PDP-7 とい
う小型コンピュータ上で動作する新しい OS を開発に着手した。これが UNIX である。
通常、OS はアセンブリ言語と呼ばれるコンピュータアーキテクチャを直接反映している基本命令セットを
使って開発されることが 多い。しかし、アセンブリ言語で書かれたプログラムはマシン(ハードウェア )に
依存するので 、そのコンピュータ以外では動作しない。UNIX も当初はアセンブリ 言語で開発されたが、
Thompson と Ritchie はこれを 高級言語で書き直すことにした 。プログラミング言語としては「C」が選択され
た。1973 年、両氏は UNIX の C 言語による書き直しを完了した。高級言語を使うことで、UNIX は機種依存
性が比較的低く、移植性の高い OS になっている。
UNIX の普及には、大学や研究機関が重要な役割を果たしてきた。1975 年、ベル研究所は UNIX を格安で
教育機関に提供した。大学等の研究・教育機関では、独自に改良した UNIX も開発されるようになった。1980
年代中頃になると、UNIX を商用化 しようという動きも出てきた。時を同じくして普及し始めたワークステ
ーションの OS として UNIX が採用されたこともあいまって、UNIX は企業やその他の一般ユーザにも普及し
た。また、UNIX は標準で TCP/IP を使ったネットワーク機能を有していたことから、インターネットとも親
和性が高かった。こうしたことを背景とし、現在では、パソコンから超並列コンピュータまでさまざまな種
類のハードウェア上で動作する OS として 多くの分野で幅広く利用されている。
2.UNIX と系統
UNIX OS には、次に挙げる2つの大きな系統がある。
●System V(システム ファイブ)系
●BSD(ビー エス ディー)系
両者は、基本的 なコマンドには共通なものもあるが、システムの内部構成やファイルの配置、機能、コマ
ンドのオプションなどが異なる。
2−1.UNIX System V
1983 年、AT&T は標準 UNIX System Vをリリース した。これは、AT&T 内部で使われたものをベース とし
た OS である。UNIX の開発が進むにつれ、新しい機能の追加や機能改善がなされ、ツールやユーティリティ
の種類も増えた。中でも、1988 年に発表されたものは、System V リリース 4(SVR4)と呼ばれ、次に述べ
る BSD UNIX や他の UNIX の機能を集約したものになっている。
1
OS 基礎演習∼No.5
2−2.BSD UNIX
カリフォルニア大学バークレー校のコンピュータシステム研究グループが新しい機能を付け加え、改造し
た UNIX OS。この系統の UNIX システム は、BSD(Berkley Software Development)と呼ばれ、他の大学や研
究機関に広く配布されている。
2−3.UNIX の標準化
UNIX は、ワークステーション、パソコンをはじめ、ミニコン、メインフレーム、スーパーコンピュータ
などさまざまなコンピュータ上で利用できる。数多くの UNIX が市場に出回り、多様なアプリケーションが
登場してくると、UNIX を標準化しようという動きも出てきた。AT&T の SVR4 もその一つである。AT&T が
提案した UNIX 標準化は、System Vインターフェース定義(SVID)として知られている。UNIX OS やその
関連製品を提供している会社が集まって、POSIX
(Portable Operating System Interface for Computer Environment)
と呼ばれる規格も開発されている。
2−4.PC-UNX と Linux、FreeBSD
パソコンで動作する UNIX を総称して PC-UNIX とも呼ぶ。最近よく使われる PC-UNIX 用の OS が Linux
(リナックス)である。Linuxの創始者 は、フィンランドのヘルシンキ大学でコンピュータ学科を専攻してい
た学生、Linus Torvalds である 。Linuxこれは、Intel 社の 80x86 系 CPU ベースのパーソナルコンピュータ(つ
まり IBM PC/AT 互換機)で動くように設計された UNIX である。Linuxがリリースされて以来、多くの人が
その開発・拡張に参加してきた。Linux は POSIX をモデル にしているが、独自に強化されたさまざまな機能
もある 。Linuxには無償のものと有償のものがあり、さらに 、パッケージの違いによって Red Hat 系、Slackware
系、Debian 系の 3 系統に大別される。国内では、それらを日本語化した、Red Hat Linux日本語版 、Turbo Linux
日本語版、Vine Linex(以上、Red Hat 系)
、Plamo Linux(Slackware 系)、Debian GNU/Linux日本語版(Debian
系)などが競い合っている1 。
一方、パソコン上で動作する BSD 系の OS では、FreeBSD や BSD OS が知られている。特に、FreeBSD は
無償で配布されていることや、BSD 系の OS に慣れた開発者が改造を加えやすいことなどから、パソコンを
使ったネットワーク・サーバなどを構築する際に、Linuxと共に広く使われている OS である 。
2−5.その他の UNIX
UNIX 製品の販売会社が出荷している UNIX 系の OS にもいろいろな種類がある。
Sun Microsystems 社が開発した SunOS(後に Solaris と命名)は、System V リリース 2 と 4.3BSD をベース
にした OS である。Solaris 2.0 からは SVR4 がベースになった。本学の各種サーバシステムで動作しているの
は、Solaris 8(Sun OS 5.8)である。学生が telnet(後に学習)できるマシンもこの OS である。
その他、IBM 社が開発した AIX、Hewlett-Packard 社の HP-UX、Novell 社の UnixWare(現在は、SCO 社か
ら販売)などがある。
3.UNIX オペレーティングシステム の構造
先に学習した通り2 、コンピュータシステム は、ハードウェア、システムソフトウェア、アプリケーション
1
最近登場した Lindows OS は、Linux をベースとして Microsoft Windows に近いユーザインターフェース(Window)環境
を与えた OS である。
2
OS 基礎演習 No.1「コンピュータの基礎」参照。
2
OS 基礎演習∼No.5
ソフトウェアからなる。OS は、コンピュータの動きを制御・管理するシステムソフトウェア である。他の
OS と同様、UNIX もカーネル、ファイルシステム、その他のシステムユーティリティの集合体である。図 1
は UNIX OS の階層構造を図示したものである。
カーネルは、ハードウェアに依存した機能を管理する層である。カーネルは、
「メモリ管理」
、
「プロセス管
理」
「デバイスドライバを経由して周辺機器やネットワークの制御」などを行う。サービス層は、コマンド層
やアプリケーションプログラムから要求されたサ
コマンド層(
シェル)
ービスを受付け、カーネル層向けの細かい命令に翻
訳して渡す。入出力制御、ファイル/ディスクへのア
ユーザ
サービス層
(システムコール)
ユーザ
クセス(ファイルシステム)、ウィンドウ の管理、
カーネル
通信ネットワーク へのアクセスなどの仕事を行う。
アプリケーションプログラムがこの層をアクセス
するときに用いられるのが「システムコール」であ
る。コマンド層は、UNIX のユーザインターフェー
スで「シェル(shell)」と呼ばれるものである。
ハードウェア
図 1 UNIX システムの階層構造の概念
4.UNIX の特徴
UNIX は、他の OS と共通する点もあるが、次のような独特な特徴を持った OS である といえる。
①移植性
先に述べたとおり、UNIX は C 言語を使って書き直された。高級言語を使っているので、ハードウェアに
依存した部分を書き直し、それを翻訳3 して実行モジュールを作成すれば、他のハードウェア上でも動作させ
ることができる。このように、複数のハードウェアに搭載することが容易であることを 「移植性(ポータビ
リティ)が高い」という。UNIX は移植性の高いプログラムである。
②マルチユーザ機能
UNIX では、1台のコンピュータ を、複数のユーザが同時に利用(リソースを共有)することが可能であ
る。このような機能をマルチユーザ機能という。
③マルチタスク機能
UNIX では、ある仕事(タスク)をバックグラウンドで実行してお き、その間に他のタスクを実行するこ
とができる。また、バックグラウンドタスクとフォアグラウンドタスクを切り替えることも可能である 。こ
のように、複数のタスクを同時に実行できる機能をマルチタスク機能という。
④階層ファイルシステム
UNIX では、ユーザがデータやプログラムを分類・管理しやすいように階層構造を持ったファイルシステ
ムが採用されている。Windows のフォルダでも「フォルダの中にさらにフォルダを作る」ことが可能である
が、UNIX ではこの フォルダに相当する部分を「ディレクトリ」と呼ぶ。ファイルシステム と階層構造につ
いては、別途、ディレクトリとファイルのところで学習する。
⑤デバイスに依存しない入出力操作
UNIX はすべての デバイス(端末、ディスク、プリンタなど)をファイルとみなすので、入出力操作はデ
バイス に依存しない。例えば、コマンドの出力先をファイルに向ける(リダイレクトする)ことができる。
これを実行すると、シェルの画面に出る情報をファイルに保存することも可能である。リダイレクションは、
3
この作業を compile(コンパイル)という。
3
OS 基礎演習∼No.5
入力データに関しても可能で、端末から入力するかわりにファイル(ディスク)から読み込むこともできる。
リダイレクトについては、別途、学習する。
5.シェル
前回までの授業で、Windows での CUI による操作の実例として「コマンドプロンプト」を実習した。
UNIX にも、最近の Linuxシステムのように GUI インターフェース を備えたものもあるが、UNIX での CUI
インターフェース がシェルである。シェルは、ユーザからの入力を受け取り、それを解釈して、その内容に
応じて適切な動作を実行するユーザインターフェースアプリケーション(一般にはコマンドインタプリタと
呼ばれる)である。
このユーザインターフェースは、もともとプログラム開発に携わるユーザ向けに設計されたものである。
このため、初心者 にとっては、簡素すぎる、覚えにくいと感じることもあるだろう。基本的 には「便りのな
いのはよい便り4 」といった動きをするインターフェースなので、Windows のようにファイル複写中に「コピ
ー中」であることを示すようなメッセージは出ない。たとえば、
「rm *」という コマンドは黙って何の警告も
なくすべてのファイルを消してしまうので注意が必要5 である 。
シェルスクリプト
シェルの基本機能は、ユーザからのキーボード入力を解釈して実行することであるが、シェルに対する指
示をファイルに記述しておき(これを「シェルスクリプト」という)、それをシェルに読み込ませて(実行し
て)連続的に実行することもできる。
シェルにはいくつかの種類がある。代表的なシェルには、次のようなものがある。
・Bourne シェル(sh)
Bourne シェルは最も基本的なシェルで、ほとんど全ての UNIX に添付されている。
「B シェル」と呼ばれる
こともある。「sh」というコマンド名で呼ばれるシェルである。
・C シェル
C シェルは BSD 系 UNIX で提供されたシェルだが、現在では BSD 系以外の UNIX でも採用されている。C
シェル には、コマンドの履歴を記憶し、過去に実行したコマンドを再度実行しようとした場合に、対話的な
操作で再実行する「ヒストリ(履歴)」機能や、コマンドに別名を付ける「エイリアス(別名)」機能、
「ジョ
ブ制御」などの機能などが 加えられている。また、スクリプトを記述する際、C 言語風の構文を使用するこ
とができる。コマンドは「csh」である。
・Korn シェル(ksh)
B シェルにヒストリ機能やコマンドライン編集機能を使いしたものである。Korn シェルは商用のシェル・
ソフトであるが、フリーの「pdksh」もある。コマンドは「ksh」である。
・Bourne Again シェル(bash)
Linuxに標準シェルとして採用されたことで、よく使われるようになったシェル である。ksh とよく似てい
て、コマンドライン編集機能が充実している。コマンドは「bash」。
・TENEX C シェル(tcsh)
C シェルを元にして、コマンドラインでの編集機能と、文字などの補完機能を拡張したシェルである 。コ
マンドは「tcsh」である。FreeBSD の標準シェルとなっている。
4
エラーがあったときのみ(簡素な)メッセージが出る。ただし、メッセージが出なくてもシステムとして異常がないだ
けで、目的の操作が完了しているとは限らない。
5
このため「rm –i」というオプションを付けて「消してよいか」の確認メッセージを出せる。
4
OS 基礎演習∼No.5
これらのシェルは、大きく sh 系(sh,ksh,bash)と csh 系(csh,tcsh)とに分類することができる。この2つ
の系統は、基本機能には変わりはないものの、使い方、とりわけスクリプトを記述する上で構文にかなりの
違いがあるので、互換性はほとんどない。つまり、sh 系で記述されたスクリプトは csh 系のシェルでは使え
ないことになる。ただし、ほとんどの UNIX では sh 系と csh 系の両方のシェルが添付されているので、ユー
ザの好みにより使い分けることができる。
■初期設定のコマンド・プロンプト
シェルの種類によって、コマンド・プロンプトの初期値には違いがある。以下にまとめた。
sh, bash ・・・
csh
・・・
一般ユーザ「$」、root ユーザ「#」
一般ユーザ「%」
、root ユーザ「#」
これらは、初期値なので、環境設定ファイル(.profile や.cshrc など)を変更すれば変えることも可能。例
えば、csh プロンプトの先頭にホスト名をつけて「kaede%」のようにも表示できる。
5.ログイン(login)とログアウト(logout)
UNIX を使いはじめる(これを「セッションの開始」と呼
ぶ)には、
「ログイン6 」が必要である。UNIX はマルチユー
ザ型の OS なので、複数のユーザが同じシステムを使用して
いる場合がある。従って、使おうとするユーザが登録された
ユーザであり、これからシステムを使い始めるのだというこ
とを、UNIX に知らせてやる必要がある。これを「ログイン」
手続きという。
ログインは、本学の Linuxシステムのように GUI として表
示される場合もあるし、telnet を使った場合(右図参照)の
ように[login:]の後に文字を入れて行う場合もある。
■ログイン名とパスワード
ここでユーザを判別するためのアカウントが「ログイン名」である。本学のシステムでは、Windows のロ
グオン名と同じ User-ID が設定されている。
ユーザ認証を行うための文字列が「パスワード」である。本学のシステムでは、PC 系システム(Windows
と Linux)とサーバ系システム(Solaris や www サーバ、電子メール)のパスワードは、連動していない。パ
スワードは、両者で区別されるので注意が必要である。
ユーザ名とパスワードの確認がすむと、プロンプト($、kaede%など)が表示される。
セッションを終了することを「ログアウト7 」手続きという。ログアウト するには、プロンプトに、logout
コマンドを入力する。この他、プロンプトから「exit」とタイプ してもよい。
6.コマンド
UNIX システムには、たくさんのユーティリティプログラムがあり 、それらは「コマンド」と呼ばれてい
る。ユーティリティは標準 UNIX システムの一部で、以下のように分類される。本講義では、これらの使い
6
7
Windows では「ログオン」という。
「ログオフ」ともいう。
5
OS 基礎演習∼No.5
方の一部について学習する。
■コマンド行の基本書式
どの OS でもそれを操作するためのコマンドを備えている。例えば、date コマンドはシステムに日付と時
刻を表示させる。こうした命令を入力する行のことを「コマンド行」という。UNIX では、
[Return(Enter)]
をコマンド行の終わりと解釈し、入力されたコマンドの実行を行う。
コマンド行は、次の3つのフィールドから構成されている。各フィールドは「半角1文字以上のスペース」
で区切られる。多くのコマンドでは、角カッコ([
])で囲まれているフィールドは省略可能である
コマンド行の一般的な形式は、次に示すとおり。
$ コマンド
•
[-オプション] [引数]
コマンド名
UNIX に対する命令。UNIX では、大文字・小文字は区別されるので注意する。
•
オプション
コマンドに対する選択肢。コマンド行では、オプションの直前にハイフン(-)を付けるのが普通。ほと
んどのオプションは1つの小文字で表され、1つのコマンド行にいくつ書いてもよい。
•
引数
コマンドで操作する対象を指定するもの。例えば、ファイルの中身を見たい場合には、ファイル名やデ
ィレクトリ名をここに指定する。
7.実習
実習ノートに従って、次の練習をしてみなさい。
•
Linuxシステムへのログイン・ログアウト
•
新しいシェルの起動
•
日付と時刻の表示:date コマンド
•
ユーザに関する情報の表示:who コマンド
•
カレンダーの表示:cal コマンド
•
シェルの画面をクリアする:clear コマンド
•
マニュアルページの表示:man コマンド
(参考)Linux(bash)でのコマンド名、ファイル名の補完機能
Linux の標準シェルである bash には「キーボードの入力ミスによるロス」を補うために、文字列の補完機
能がある。文字を打った後に[Tab キー]を押せば、文字が補完できる場合には補完が行われる8 。これは 、
ディレクトリが深くなったような 場合にも使えるので便利な機能である 。例えば、「whoami」というログイ
ン・ユーザ名を知るコマンドがあるが、
$ whoa
と入力したところで[Tab]キーを押すと、
$ whoami
と残りのスペルが自動的に表示される。
8
後に続く文字列が一意に決まらず複数あるような場合は補完できない。補完可能なところまでは入力してやる必要があ
る。
6