Linuxのディストリビューション

OSのLinuxには、Windowsと異なり複数のディストリビューションが存在します。 利用者が用途に応じてサーバー(又はPC)にディストリビューションを選択して、インストールします。 Linuxディストリビューションのタイムライン Wikipediaを見ると その数が恐ろしく多いのが理解できます。

「Linuxディストリビューションのタイムライン」を見てわかるように2017年時点での主流の ディストリビューションは、「debian」「stackware」「RedHat」「Android」「その他」に分類されます。

Linuxの準備

Linuxは、各種サーバ(Webサーバ、Webアプリケーションサーバ、データベースサーバ、その他サーバ)に利用されるだけでなく、 WindowsOSのように個人用としてもインストールされて利用されます。
Linuxを学習するには、LinuxをパソコンにインストールしてCUIから各種コマンドを操作する事と、 デフォルトのディレクトリ階層を理解する事で身に付きます。

会社や学校で貴方が自由に操作して良い学習用のサーバ(PCでも良い)を提供されていれば、それを利用します。
貴方がメインのPCを2台所有しており、1台は潰しても(最悪壊れても)良いというPCがあれば、そのPCにLinuxをインストールします。
貴方がWindowsOSのPCを1台しか所有していない場合には、中古のPCを格安で買ってLinuxをインストールすると良いでしょう。
2017年4月時点、PCのスペックにこだわらなければノートPCで1万数千~3万円で購入できます。

LinuxのUbuntuなどは、スペックが良くないPCでもサクサク動きます。 そのため、Linuxを初めて学習する方には、最適なディストリビューションだと思っています。

Linuxを大学の情報工学や会社の研修で基礎的な内容を理解している場合には、 CentOS,Debian系を推奨します。CentOSはRedHadEnterprise系でとの互換性を目指したフリーのディストリビューションです。
大企業では、RedHadのサポート契約を結びRedHadEnterpriseを各種サーバとして導入している企業は多いです。

本頁では、LinuxのいずれかのディストリビューションがインストールされたPC又はサーバが準備されており、 貴方がそのPCを自由に操作して良い前提で説明します。

FHS3.0

Linuxを理解するには、インストール直後のディレクトリ階層の概要を理解するのが良いでしょう。
Linuxのディレクトリ階層は、Filesystem Hierarchy Standard(FHS,ファイルシステム標準階層)にLinux系、Unix系OSの主たる ディレクトリとその内容について定めたものです。

そのため、Linuxのディストリビューションが異なっていてもLinuxのディストリビューションそれぞれには、 どのFHSのバージョンに基づき、ディレクトリ階層を構成したかLinuxのドキュメントに定義しています。
その結果、数多くのディストリビューションがあっても主たるディレクトリ階層が同じ階層と用途になっているのは、 FHSを定めた恩恵だと言えます。

FHSには、複数のバージョンが存在します。最新のFHSのバージョンは、「3.0」になります。 先にFHS3.0に定められたディレクトリ、ファイルの内容について理解し、 次に具体的事例としてubuntu16.04のディレクトリ階層と比較します。

4つの分類

ubuntu16.04のディレクトリ階層を以下に示します。

FHSのファイルシステムでは、大きく2軸の観点でディレクトリ階層を構成しています。

  1. 共有可否
    1. 共有可能(shareable)
      1つのホストに保存して他のホストで使用できるファイルです。
    2. 共有できない(unshareable) 「共有できない」ファイルとは、共有可能ではありません。
  2. 静的及び動的
    1. 静的(static)
      バイナリ、ライブラリ、ドキュメントファイル、システム管理者の介入。
      OSにインストールコマンドなどインストールしたら削除や、ディレクトリ階層を変更する事のないファイルやディレクトリ
    2. 可変(Valiable)
      メールの保存、ログファイル、一次ディレクトリなどアプリケーションによって、追加、削除されるファイルやディレクトリ

上記2つの軸の観点と合計よ4つの分類を例に示すと以下になります。

  共有可能 共有できない
静的 /usr
/opt
/etc
/boot
可変 /var/mail
/var/spool/news
/var/run
/var/lock

ルートディレクトリ階層

ルートファイルシステムの内容は、システムのブート、リストア、リカバリ、および/または修復用に適している必要があります。

システムをブートするには、他のファイルシステムをマウントするのに十分なソフトウェアとデータがルートパーティション上に存在していなければなりません。 これには、ユーティリティ、構成、ブートローダ情報、およびその他の重要な起動データが含まれます。

/ usr、/ opt、および/ varは、他のパーティションまたはファイルシステム上に配置できるように設計されています。

OSを起動するためのディレクトリ群と利用者が利用するデータ(ファイル、ディレクトリ)は
パーティションを切って、分離することを推奨しています。

システムの復旧および/または修復を可能にするために、経験豊かなメンテナから必要なユーティリティ 損傷したシステムを診断して再構築することは、ルートファイルシステム上に存在しなければなりません。

システムを復元するには、システムのバックアップから復元する 必要があるユーティリティ(フロッピー、テープなど)は、ルートファイルシステム上に存在する必要があります。

FHS3.0に定義されたルートディレクトリ(/)配下に必要なディレクトリと役割は以下になります。 ubuntu16.04と対比してみました。

ディレクトリ ubuntu 役割
/bin 利用者向け必須のコマンドを管理
/boot OSの起動に必要なファイル管理
/dev デバイスファイル(cdrom,disk,cpu,netなど)管理
/etc PC(サーバ含む)設定ファイル各種管理
/home FHS3.0ではオプションでは付帯的なディレクトリの位置づけ
アカウント別のホームディレクトリ
/lib 重要な共有ライブラリとカーネルモジュールを管理
/media CD-ROMなどのリムーバブルメディアのマウントポイント
/mnt 一時的にファイルシステムをマウントするためのマウントポイント
/opt アドオン(付属又は追加した)アプリケーションソフトウェアパッケージ
/proc カーネルやプロセスに関する情報をテキストで表示する仮想ファイルシステム
FHS3.0では、OS固有のディレクトリして位置づけられている。
/root ルートアカウント(管理者アカウント)のホームディレクトリ
FHS3.0では特別なオプションディレクトリとして定義
/run 実行中のプロセスに関連するデータを管理
/sbin システム管理用コマンドを管理
/snap snaps機能用のディレクトリ。ubuntu16.04からリリースされる。
FHS3.0には勿論定義されていない。
/srv このシステムによって提供されるサービスのデータ
/sys デバイス、ドライバ、およびいくつかのカーネル機能に関する情報が表示される場所です。
その根底にある構造は、現在使用されている特定のLinuxカーネルによって決まります。
FHS3.0では特別なオプションディレクトリとして定義
/tmp 一次ファイルの保存先ディレクトリ
/usr プログラムやカーネルソース
/var 可変データを格納するディレクトリ
log(ログファイル管理)、mail(メール管理)、www(Webリソース管理)などを保存します。
このようにLinuxはFHSによってディレクトリ階層と目的が決まっています。
ミドルウェアのインストールや作業を行う際には一覧を確認して適切なディレクトリ階層に保存します。

参考文献