Linux 入門

OSって一体何者(P13,14)

オペレーティングシステム(英語: Operating System、OS、オーエス)とは、コンピュータのオペレーション(操作・運用・運転)のために、ソフトウェアの中でも基本的、中核的位置づけのシステムソフトウェアである。
https://ja.wikipedia.org/wiki/オペレーティングシステム

要するに、ハードウェアとソフトウェアの仲立ちをしてくれるものがOSです。

「アプリケーションが動作するための基本環境」

を提供しています。

普段コンピュータを操作する時に意識しない、後ろ側で動いているたくさんの基本的な機能をOSは提供してくれています。

具体的には例えば、
 ・メモリのどの場所にデータを保存すればいいか
 ・CPUのリソースをどの程度それぞれのアプリケーションに割り振ればいいか
 ・ハードウェアからの処理の依頼をどんな順番で行うか

など、

また、大きく分けて役割は、

  • アプリケーションからの要求に応えること
  • ハードウェアからの応答をアプリケーションに伝えること

の2つに大別することができます。

OSのはじまり

もともと1960年代あたりのコンピュータにはOSという考え方は存在しなかった。当時はアプリケーションごとにコンピュータを用意するような感覚(専用機)だった。

計算用なら計算用のコンピュータ、事務処理用なら事務処理用のコンピュータとして提供されていた。
(目玉焼き用のフライパン、ホットケーキ用のフライパン、チャーハン用のフライパンという風に料理ごとにフライパンをカスタマイズして販売している)

これはコンピュータの商売をしている企業にとって、大量生産ができずに、ひとつひとつのコンピュータの値段が高くなることにつながる。

そこで、商用のコンピュータを売っていたある企業が、効率的にするために作成したのが「OS」だ。開発企業がIBMである。

ここからOSは急速に進化を遂げていくことになる。
 
 

UNIXの誕生

米国ベル研究所でMulticsというOSが作られた。

目指したところは、多機能のOSであり、現在のコンピュータにつながるような素晴らしい発想で作り始められている。

しかし、当時のコンピュータのハードスペックでは残念ながら、OS本体が大きくて複雑になりすぎて、ろくに動かなかったのためそのプロジェクトは失敗に終わる。

Multicsの開発に関わっていたベル研究所のケン・トンプソンがこの失敗を糧として新しいOSを作成した。それが「UNICS」である。

このUNICSというソフトウェアは後に急速な広がりを見せていく。

UNIXの配布

ベル研究所は米国の電話会社であるAT&T社に属していた。

そのAT&T社は当時、アメリカ独占禁止法によりコンピュータ産業への進出は禁止されていたため、UNIXを作りながらも、UNIXを販売することができなかった。

そのためUNIXは実費程度の少額で色々なところに配られるようになり、特に大学や研究所で急速に普及した。

ソースコードも公開されていたため、ここから様々な派生版のUNIXが誕生することになる。

ライセンスとシェアの争い

派生版のUNIXが誕生しすぎたため、まとまりがなくなっていく。

また、これが大きなビジネスになる可能性にもAT&T社は気づきAT&Tと契約を結んだ組織のみが、自社のOSをUNIXと宣言できるようになった。

その後は、このライセンス縛りの影響が強く出てくる。

1985年から1995年までの10年間は、色々な会社がシェアを取りにUNIXマシンを製造していた。

ライセンス問題は色々なところでこじれにこじれる。

また、企業間の争いも激しかった。お互いの足を全力で引っ張り合う状態だった。

そしてそんな争いをしていたため、すべてを横からかっさらわれてしまう形でMicrosoft社のWindowsがすべてのUNIX系OSを出し抜き、標準OSの座を一気に手にいれてしまった。

Linuxの誕生

Linuxは1991年にフィンランドのヘルシンキ大学にいる普通の大学生だったリーナス・トーバルズが開発したOS。

AT&TのUNIXは著作権の問題もあり、色々と面倒だというのがあって独自のものを作成した。

それがLinuxだ。

LinuxはUNIXを参考にゼロから作り直しているので、コマンドなど色々な点は似ているが、ソースはまったく別物になっている。

Linuxの成長

Linuxはオープンソースライセンスがついた状態で公開され、1991年にLinux version 0.02をリリースし、ここからLinuxの快進撃が始まる。

UNIX系OSはライセンスで縛られていたため、自由な公開や改良がしにくかったが、Linuxはオープンソースなので自由に改変もできるし、それを使った商売もできるようになった。

わずか2年の間に実用に耐えられるだけのLinux ver1.0がリリースされる。有志たちの手による驚異的なスピード感だった。

1995年以降

1995年以降になると、IBMやHP、インテルなどのプログラマーも参加し、Linuxは市民権を獲得していく。2000年代になると、Microsoft社への反発もあり欧州で政府機関に取り入れられていく。

2010年代からはサーバーで圧倒的なシェアを獲得するようになる。実際、2011年から2014年にかけて、企業でのLinuxの導入率は65%から79%に増加した。

反面、Windowsの導入率は45%から36%に減少している。今後も、クラウドの分野を見れば、この傾向が強くなっていくと思われる。

また、スマートフォンのAndroidも、元はLinux

 

タワー、ラック、ブレードの違い(P20)

タワーサーバー


最も基本的なタイプ。 価格とサイズは平均的なデスクトップと同程度。

タワーサーバは、以下のような中小規模用途に最適。

  • スペースの制約が懸念され、データルームを設けずに処理を一元化する必要がある
  • ネットワークリソースの監視と管理を簡単にする必要がある
  • 一元管理により、侵入と攻撃を受けにくくする必要がある

企業が購入する1 台目のサーバとしては、タワー型が最も一般的。サーバに搭載するハードドライブとプロセッサーの数は、選択できる。
 

ラックサーバー


このシステムでは、ラック内にサーバを積み重ねます。
CD ラックに CD を積み重ねるのとよく似た方法です。この方法は設置スペースを節約できますが、以下のような企業に適しています。

  • データセンターの統合により、スペース効率を最大化する必要がある
  • さまざまなアプリケーションとワークロードに対応するために各種サーバを柔軟に組み合わせる必要がある
  • サーバ内に専用の大規模ストレージを搭載する必要がある

ラックサーバは、サーバに関する知識がある企業や、より多くのサーバを必要としている中規模企業に適しています。

 

ブレードサーバー


このシステムは、3 種類の中で最もコンパクトなサーバ。
ブレードサーバという名称は、そのきわめて薄型の形状に由来するもので、1 つのエンクロージャ内に複数のブレードサーバを縦に積み重ねて収納できます。

電源など、一部のハードウェアコンポーネントは、サーバ間で共有します。

非常にコンパクトなサイズであるため、少ないスペースで多くのサーバを収納できます。

  • 処理能力の向上
  • スペースの削減
  • 電力の削減
  • 管理にかかる時間と費用の削減

ブレードサーバは、大規模な処理能力を必要とする企業、またはデータセンターの構築を計画している企業に適しています。
 
 
 

Linuxとは?

Linuxは、リーナス・トーバルズが開発したUNIXライクな「OS」のことです。

大きな特徴はオープンソースであることで、無料で改変可能なプログラムである。

Linuxは世界中の有志たちがボランティア的に作り上げ、無料で使え、中身も完全に公開されている状態で世に放たれている異色のOS。

開発からわずか15年ほどで、様々な分野で一気に広がりを見せ、分野によっては主力OSがLinuxになっているところも増えてきた。

Linuxの特徴は?(P25,26)

  • とにかく無料で使える
  • 中身が弄れる
  • サーバーを自由に建てられる
  • Androidみたいな新しいOSが作れる
  • 家電や車、ゲーム、高性能コンピューター

 
 
「Linux」は、厳密には二つの意味で分けられます。

  • 狭義のLinux:Linuxカーネルのこと
  • 広義のLinux:Linuxディストリビューションのこと

カーネルとは(P27)

Linuxカーネルが提供する代表的な機能を一部紹介します。

  • ファイル管理
  • プロセス管理
  • ユーザー管理
  • メモリ管理
  • プロセススケジューラ

等。 (他にもたくさんあります)
 
 
そしてカーネルはアプリケーションからの要求に対して、
システムコールを介することで処理しています。

システムコール(P22)

「非特権モードで動作しているプログラム」「特権モードで動作しているカーネル」に処理を依頼することです。


 
 
カーネルはコンピュータ上の全てのリソースにアクセスできる特別な存在です。

もし一般のプログラムが、カーネルと同じように好き勝手にコンピュータ上の全てのリソースをいじることができたら、一体どうなるでしょうか?

プログラムごとにメモリなどのPC上のリソースを自由にいじられると、重大なエラーが発生するだけでなく、最悪PCが停止する可能性があり、非常にリスキーです。

そこでLinuxカーネルではプログラムの実行環境を、

 ・全てのリソースを扱うことができる、「カーネルモード」
 ・一部のリソースしか扱うことができない、「ユーザーモード」

の二つの世界に分けています。

ユーザーモードでは原則、他のプログラムに対して影響を与えるような動作をすることができません(他のプログラムに対して影響を与える心配がないので、安心してプログラムを動かすことができます)。

カーネルに対しての窓口をシステムコールに絞ることで、プロセスに対する管理能力と安全性を高めています。

  • 全ての処理をカーネルが統括することができるので、プログラム同士で処理のバッティングが起こらない
  • 不用意にプログラムが他のプログラムの内容を書き換えない

などです。

ファイルシステム(P54)

Linuxのファイル・システムでは1本のツリー構造で全ファイルを扱う。

Windowsでは、ハード・ディスク(のパーティション)やUSB,DVDといった記録メディアごとに、独立したディレクトリ・ツリー(ファイル/ディレクトリの階層構造)を形成する。

そして、そのディレクトリ・ツリーの名前(ドライブ名)とディレクトリ・パスを使ってファイルを指定する。

しかし、UNIX系OSでは “/” と表記されるルート・ディレクトリを頂点とした1本の論理的なツリー構造(階層構造)で、ハード・ディスクやUSB、DVDなど複数種類の記録メディアやネットワーク上にある別のコンピュータのディスクでさえ、そのツリーの中に組み込み表現する。


 
 

ツリー構造のイメージ


 
 

Windowsのフォルダ構成(P58)

「マイコンピュータフォルダにあるCドライブやDドライブ。なぜAとBがないか知っていますか?」
 
 

 
 
[st-under-t color=”#000″] [st-under-t color=”#000″] [st-under-t color=”#000″] [st-under-t color=”#000″] 現在のWindowsPCの源流であるIBM PCは、Aドライブにシステムディスク、Bドライブにソフトやデータ用のディスクを挿入しての運用を前提としていた。

のちに登場したHDD(ハードディスクドライブ)には、増設ドライブとして「C」以降のドライブレターが割り当てられた。

HDDの普及後もソフトの互換性を保つためにドライブレターはそのまま固定され、フロッピーディスクがすたれたあともその仕様は残っている。

 
 

絶対パスと相対パス(P60)

そもそも「パス」とは?

パスとは目的のファイルがどこのフォルダに保存されているのかを示す、道順のようなもの。

絶対パスとは

ルートディレクトリと呼ばれる階層構造の頂点から目的地までの経路を表している。(ユーザが現在どのフォルダで作業中であっても、常に同じスタート地点から、常に同じ経路の表示になる)

相対パスとは

ユーザが現在作業しているフォルダから目的のフォルダまでの経路を表す。
(スタート地点が異なると、ファイルへの経路も異なる)

絶対パスの利点と相対パスの利点

絶対パスの利点は、どんなに複雑に階層を移動しながら作業していても、目的地を間違えにくい。

相対パスの利点は、ルートディレクトリ自身がそっくり引っ越しをした場合、フォルダ同士の相対的な位置取りが変わっていなければプログラムを修正しなくても大丈夫。

HTMLのパスをつかって説明すると

絶対パス:http://www.site1.com/contents/contents01.html
相対パス:./contents/contents01.html

旧サイト「http://www.site1.com/」の中身をそっくり新サイト「http://newsite.co.jp/」に引っ越すとする。

絶対パス:http://www.newsite.co.jp/contents/contents01.html
相対パス:./contents/contents01.html

これらのファイルを新サイト「http://newsite.co.jp/」に引っ越した場合、絶対パスで記述されている方は修正が必要になりますが、相対パスであれば修正が不要という利点があるのです。

絶対パスと相対パスの調べ方と表し方

例として、「日本」をルートとする次のようなフォルダ構造があるとします。

絶対パスは誰から見ても同じ

絶対パスでは、現在地がどこであっても目的地が同じであれば同じ1つのパスになります。
例えば現在地「霞が関」から「港町」を参照する場合、次のように表されます。
※Linuxではルートディレクトリは「/」になる。

/関東/神奈川県/横浜市/青葉区/港町.txt

相対パスで重要なのは「現在地(カレント)」

相対パスは、現在地から目的地までの相対的な経路を表します。

そのため「千代田区」から「港町」を参照する場合と、「札幌市」から「港町」を参照する場合では、表記が違う。

■「千代田区」から「港町」を参照する場合
../../神奈川県/横浜市/中区/港町.txt

■「札幌市」から「港町」を参照する場合
../../関東/神奈川県/横浜市/中区/港町.txt

ここで大事なのは、「階層を移動する」という考え方です。
パス表記においては、階層は次のように表されます。

./(ドットスラッシュ)」は現在の階層を示す
../(ドットドットスラッシュ)」は一つ上の階層を示す

同じ階層の別ファイルを参照する場合は、次のように表される。

■「霞が関」から「虎ノ門」を参照する場合
./虎ノ門.txt