ディレクトリ構成

このエントリーをはてなブックマークに追加

今まではCでディレクトリの操作を行う方法を見てきましたが、ここでは少し方向性を変えてディレクトリ構成について説明していきます
Unixでは細かな違いがありますが、/etcや/usrなどのディレクトリが存在しており使い方もある程度決まっています。
Linuxではディストリビューションやバージョンによっても多少の違いがありますが、大体は同じでしょう。
これらはどのようにして決まったのか? どういう意味があるのか? 等不思議に思っている方も多いと思います。
実際私が見てきた範囲ですと若手の方が特にこの辺りに疑問を持つようです

現在のディレクトリ

UNIXとC言語はAT&Tによって、1960年代に開発されました。
その後、カリフォルニア大学バークレー校によるBSDの開発やAT&TによるSystemVの2大実装へとつながります。
当然様々な亜種が生まれ消えていきます。この流れとは別で個人によって開発されたLinuxが現れます。
これらは細かい部分での思想の違い等があります。これらはCレベルでのAPIの違いから設定ファルの書き方等様々な所に影響してきました
当然ディレクトリの構成にも違いが発生します。ただこういった状況でも統一はある程度なされていきます。最後にはPOSIX等の規格が出てきます。
その中でもディレクトリ構成の共通化を目指したのがFHS(Filesystem Hierarchy Standard)です。

こういった経緯があり規格やそこに至るまでにある程度淘汰されて統一されてきましたので、ある程度標準で決まった構成がありますので、まずは現在の構成から見ていきます


ではディレクトリを見て行きましょう。基本的にはFHSを採用している近年のLinuxが対象となりますが、他Unixでもある程度同じはずです。

名前説明
/bin基本的な必須のコマンドが入っています。binはbinaryの省略
/bootOSが起動に必要なファイル群が入っています。主にbootloderが使用します
/devデバイスファイルです。Unix系でもOSによっては存在しない場合もあります
/etc設定ファイル群。etceteraの略。これはUNIXの初期に雑多なファイル群用のディレクトリだった経緯から
/homeユーザのホームディレクトリ群。昔は/usrがその位置だったが使われ方が変わりだしたので新たに設置された
/libライブラリ群。/bin、/sbin等が使う基本ライブラリが置かれる場所。
/mediaCD-R等のリムーバル媒体のマウントポイント。昔は/mntにすべてマウントされいた
/mntマウント群。昔はすべてこの直下にマウントされたが、最近はファイルシステムの一時マウント場所
/opt追加のアプリケーションのインストール先。古くは/usr以下に入れていたので整理するために作られた(が、あまり使われていない気がします...)
/procカーネルやプロセスの状態や設定をプロセスファイルというテキスト形式で示す。他Unixによっては存在しない
/root管理者(つまりroot)のホームディレクトリ。/homeとは分けれれている
/sbinシステム管理者が使用するシステム管理系のコマンド群。super userのbinaryの意。
/srvシステムによって提供された固有データ。
/tmp一時ファイル置き場。temporaryから。システム起動時にデータの永続性が保証されていない。/var/tmpはデータが削除されない
/usrUser Services and Routines の略だが、かつては/homeの代わりにユーザ用のホームディレクトリやユーザ用プログラム等が雑多に置かれてあった。
今はユーザが共有するファイル群が置かれている
/usr/bin一般ユーザ向けコマンド群。/binよりは重要度が落ちる。
/usr/include標準的なinclude用ファイル群。つまり*.hの置き場所
/usr/sbin一般的な管理者向けコマンド群。/sbinよりも優先度が落ちる。
/usr/lib/usr/bin、/usr/sbinに必要なライブラリの置き場所。
/usr/shareアーキテクチャに依存しないsharedなデータ。man、fonts等のファイル群が存在する
/usr/srcソースコード群。ここでアプリケーション毎にソースコードを展開し、コンパイル、インストールを行う作業用ディレクトリ。
kernelのコードもあればここに存在する
/usr/local/usr/よりもさらに優先度が落ちる。ディレクトリ構成は、/usr/loca/bin,/usr/local/sbinのように/usr以下と類似している
/var可変なファイル群。variableから。/tmpに似ているが、log、mail、lock、cache等常にデータが変化し、削除されては困るデータの置き場所
/var/cacheキャッシュファイル。削除されても動作に問題はないが、データが失われたりシステムの動作が一時的に重くなるなどの影響はあり得る
/var/logログファイル。ユーザのログインのログやkernelのログ等様々なログが存在する。
/var/tmp/tmpとは異なり再起動時にデータが消えては問題になるファイルの置き場所となる。


これ以外にも標準では無いディレクトリもある。
名前説明
/lost+found再起動時にファイルシステムに問題が発生した場合に整合性の取れないファイルを置く場所。
採用しているファイルシステムが必要であればファイルシステムの直下に置かれる。よって、/以下のディレクトリにも存在する場合がある
/cdromCD-ROmをmountした場合のマウント場所。主にdebian系で採用されている。
/floppy最近は見ないが、フロッピーディスクをmountした場合のマウント場所。主にdebian系で採用されている
/exportSolaris系に見られるNFS用ディレクトリ。
/kernelSolaris系に見られるkernel用ディレクトリ。
/netSolaris系に見られるmount用ディレクトリ。

そもそもOSのインストール時から真面目に管理を行うとHDD(最近だとSSDが多いでしょうか?)のパーティション分けを行います。
昔はディスクが少なかったので、今よりも複雑でした。例えば大学などでは/bin、/sbinはローカルにインストールしますが、/usr、/home等はNFSで複数のマシンで共有します。
これにより、ユーザ用のデータは学校のどの端末でも同じように触れることが出来ました。
逆に、/bin等の一部をローカルに直接するのは、例えばネットワーク障害などで、そのPC単独で動作させるときに最低限の動作を行わせるためです。
/bin/、/sbinとディレクトリを分けているのも権限だけではなく、HDDの故障等も考慮に入れているからです。


まとめ

ディレクトリの一覧と意味等を見てきました。
歴史があるので知らないと/var、/etc等名前に違和感を感じるかもしれませんが、少しは理解の手助けになったでしょうか?

まんがでわかるLinux シス管系女子(日経BP Next ICT選書)まんがでわかるLinux シス管系女子(日経BP Next ICT選書)
Piro(結城洋志),日経Linux

日経BP社
売り上げランキング : 17573

Amazonで詳しく見る by AZlink

プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化
WINGSプロジェクト阿佐志保,山田祥寛

翔泳社
売り上げランキング : 1147

Amazonで詳しく見る by AZlink