知っておきたいLinuxファイルシステム輪郭

#前口上
かなり表面的にさらっと流しています。

昔話になりますが、私が**初めて**Linux系に触れたのは実は遅めで、高校生の時に**Ubuntu**がリリースされた頃だったと思います。WindowsよりもかこいいOS出たのか、みたいな気持ちでGUI系から始めました。当時は、Macが今ほど日常生活に組み込まれておらず自身もメインでは、C言語用ということもあり**Windows2000**を使い続けていました。確かWindows以外使っている俺すげーみたいな感覚だった記憶があります。どうでもいい話ですが

今回は、作業していて何をするためのフォルダだっけ？と思うことがたまにあり、めんどくさいのでいっそのこと全部まとめておきました。

ファイルをどこに保存するか迷った時はこちらの記事を参考にして頂けたらと思います。
間違っている解釈あるかもしれませんが、その際は教えていただけるとありがたいです。

#輪郭
```.sh
.
├── bin
├── boot
├── dev
│   ├── null
│   ├── zero
│   └── tty
├── etc
│   ├── opt
│   ├── X11
│   ├── sgml
│   └── xml
├── lib
├── media
│   ├── floppy
│   ├── cdrom
│   ├── cdrecorder
│   └── zip
├── mnt
├── opt
│   ├── <package>
│   └── <provider>
├── sbin
├── srv
├── tmp
├── usr
│   ├── bin
│   |   └── mh(option)
│   ├── include
│   |   └── bsd(option)
│   ├── lib
│   ├── local
│   |   ├── bin
│   |   ├── etc
│   |   ├── games
│   |   ├── include
│   |   ├── lib
│   |   ├── man
│   |   ├── sbin
│   |   ├── share
│   |   └── src
│   ├── sbin
│   ├── share
│   |   ├── man
│   |   |   ├── man1(option)
│   |   |   ├── man2(option)
│   |   |   ├── man3(option)
│   |   |   ├── man4(option)
│   |   |   ├── man5(option)
│   |   |   ├── man6(option)
│   |   |   ├── man7(option)
│   |   |   └── man8(option)
│   |   ├── misc
│   |   ├── dict(option)
│   |   |   └── words(option)
│   |   ├── doc(option)
│   |   ├── games(option)
│   |   ├── info(option)
│   |   ├── locale(option)
│   |   ├── nls(option)
│   |   ├── sgml(option)
│   |   ├── terminfo(option)
│   |   ├── tmac(option)
│   |   ├── xml(option)
│   |   └── zoneinfo(option)
│   ├── X11R6(option)
│   ├── games(option)
│   └── src(option)
├── var
│   ├── cache
│   ├── lib
│   ├── local
│   ├── lock
│   ├── log
│   ├── opt
│   ├── run
│   ├── spool
│   ├── tmp
│   ├── account(option)
│   ├── crash(option)
│   ├── games(option)
│   ├── mail(option)
│   └── yp(option)
├── home(option)
├── lib(option)
└── root(option)

# option→ユーザの任意で設定する
```

# Filesystem

||共有して使う|それ以外|
|:--:|:--:|:--:|
|不変|/usr, /opt|/etc, /boot|
|可変|/var/mail, /var/spool/news|/var/run, /var/lock|

古いUNIXのファイルシステムだと```/usr```と```/etc```どちらにも可変かつ不変なものが含まれていた。
現在の大抵のLinuxだと不変なものは```/usr```に残り続け、可変なものは全て```/var```に移動された。
```/etc```に関しても同様に、ただ長い期間に渡って```/var```に転送された。

以下にファイルシステムの構造を羅列する。
**必須**のものは、文字通りなくてはならないディレクトリであって、**オプション**は任意のディレクトリとなる。今まで必須と思っていたが、オプションだったということもあるかもしれない。
自分のLinux環境と照らし合わせながら確認してみると面白い結果が出るかもしれない。

# Root Filesystem
## 必須
|ディレクトリ|説明|
|:--:|:--:|
|bin|必須コマンドバイナリ|
|boot|ブートローダ用の不変ファイル
|dev|デバイスファイル|
|etc|hostsファイルなど
|lib|共有で使う必須ライブラリやカーネルモジュール
|media|補助記憶装置のマウントポイント
|mnt|一時的なファイルシステム用のマウントポイント
|opt|追加されたアプリケーションソフトのパッケージ
|sbin|必須システムバイナリ
|srv|提供されたサービスのデータ
|tmp|一時ファイル
|usr|二次階層
|var|可変データ
## オプション
|ディレクトリ|説明|
|:--:|:--:|
|home|ユーザのホーム
|lib<qual>|代替用の必須共有ライブラリ
|root|ルートユーザ用のホーム

# ```/bin``` 直下
必須のコマンドバイナリを格納します。この箱にディレクトリを作っているのはあまり見かけないです。

UNIXの設計上小文字を使うという話がありましたが、当然大文字のコマンドはないです。基本コマンドとは言え、日常的に使っている人が多いので解説はいらないでしょう。
##必須

```.sh
cat, chgrp, chmod, chown, cp, 
date, dd, df, dmesg, 
echo, false, hostname, kill, 
ln, login, ls, 
mkdir, mknod, more, mount, mv,
ps, pwd, rm, rmdir,
sed, sh, stty, su, sync, 
true, umount, uname
```
##オプション

```.sh
csh, ed, tar, cpio, 
gzip, gunzip, zcat, netstat, ping
```
#```/etc``` 直下
hostsファイルなどを含みます。

##必須
|ディレクトリ|説明|
|:--:|:--:|
|opt|/opt用の設定ファイル
|X11|X Windows system用の設定ファイル
|sgml|SGML用の設定ファイル
|xml|XML用の設定ファイル
conf, configファイルなどが入っていますが、設定ファイルなので説明は割愛します。

#```/media``` 直下
補助記憶装置のマウントポイント。
##オプション
|ディレクトリ|説明|
|:--:|:--:|
|floppy|フロッピードライブ
|cdrom|CD-ROMドライブ
|cdrecorder|CD書き込み
|zip|Zipドライブ

#```/opt``` 直下
追加されたアプリケーションソフトのパッケージを置く。
##必須
|ディレクトリ|説明|
|:--:|:--:|
|\<package\>|不変パッケージのオブジェクト
|\<provider\>|[LANANA]が提供するプロバイダー名

#```/sbin``` 直下
システム復元、回復、修復用の不可欠なバイナリが格納されている。
##必須
```.sh
shutdown
```
##オプション
```.sh
fastboot, fasthalt, fdisk, fsck, fsck.*, 
qetty, halt, ifconfig, init, 
mkfs, mkfs.*, mkswap, 
reboot, route, swapon, swapoff, update
```
#```/usr``` 直下
複数のマシンで共有して使い、読み取り専用となる。
##必須
|ディレクトリ|説明|
|:--:|:--:|
|bin|大部分のユーザコマンド
|include|Cプログラムによるヘッダファイル
|lib|ライブラリ
|local|ローカル二次階層
|sbin|非重要なシステムバイナリ
|share|アーキテクチャ非依存データ
##オプション
|ディレクトリ|説明|
|:--:|:--:|
|X11R6|X Window Systemのバージョン11 リリース6
|games|ゲームや教育用のバイナリ
|lib<qual>|大体フォーマットライブラリ
|src|ソースコード

#```/usr/bin``` 直下
大部分のユーザコマンド
##オプション
|ディレクトリ|説明|
|:--:|:--:|
|mh|UNIX環境で動く想定のmailインタフェース
```.sh
perl, python, tclsh, wish, expect
```
#```/usr/include``` 直下
Cプログラムによるヘッダファイル
##オプション
|ディレクトリ|説明|
|:--:|:--:|
|bsd|OS BSDの互換ファイルを入れる箱

#```/usr/local``` 直下
インストールソフトはこちらに入るのが基本
##必須
|ディレクトリ|説明|
|:--:|:--:|
|bin|ローカルバイナリ
|etc|ローカルバイナリ用ホスト固有のシステム設定
|games|ローカル用ゲームバイナリ
|include|Cヘッダファイル
|lib|ローカル用ライブラリ
|man|ローカル用オンラインマニュアル
|sbin|ローカル用システムバイナリ
|share|ローカル用アーキテクチャ非依存データ
|src|ローカル用ソースコード

#```/usr/share``` 直下
アーキテクチャ非依存データ
##必須
|ディレクトリ|説明|
|:--:|:--:|
|man|オンラインマニュアル
|misc|その他のアーキテクチャ非依存データ
##オプション
|ディレクトリ|説明|
|:--:|:--:|
|dict|単語リスト
|doc|その他のドキュメント
|games|/usr/games用の不変データファイル
|info|GNU情報システムのプライマリディレクトリ
|locale|ロケール情報
|nls|ネイティブ言語サポート用のメッセージカタログ
|sgml|SGMLデータ
|terminfo|ターミナル用の制御文字用のDB
|tmac|文書整形コマンド
|xml|XMLデータ
|zoneinfo|タイムゾーン情報と設定

#```/usr/share/dict``` 直下
##オプション
よくパスワードの攻撃はこっから使われてるとか言われてますよね。

|ディレクトリ|説明|
|:--:|:--:|
|words|英語の単語リスト

#```/usr/share/man``` 直下
オンラインマニュアル
##オプション
|ディレクトリ|説明|
|:--:|:--:|
|man1|ユーザプログラム
|man2|システム呼び出し
|man3|ライブラリ呼び出し
|man4|特殊ファイル
|man5|ファイルフォーマット
|man6|ゲーム
|man7|その他
|man8|システム管理者

# ```/var``` 直下
可変データ
##必須
|ディレクトリ|説明|
|:--:|:--:|
|cache|アプリケーションキャッシュデータ
|lib|可変状態情報
|local|/usr/local用の可変データ
|lock|ロックファイル
|log|ログ・ファイルとそのディレクトリ
|opt|/opt用の可変データ
|run|実行中プロセスの関連データ
|spool|アプリケーションの構成データ
|tmp|システムの再起動の間保持される一時ファイル
##オプション
|ディレクトリ|説明|
|:--:|:--:|
|account|プロセスアカウンティングログ
|crash|システムクラッシュダンプ
|games|可変ゲームデータ
|mail|ユーザのメールボックスファイル
|yp|ネットワーク情報サービスのDBファイル

#別館
##```/bin```
setserialを追加する
##```/dev```
|ディレクトリ|説明|
|:--:|:--:|
|/dev/null|スペシャルファイルで、ここに吐出されたものを全て捨てる。よくバッチファイルなどで要らないエラーログをここに吐いてると思う。
|/dev/zero|dev/nullと同じ様なものだが、違うのがパーティションの全データを破壊する時にこいつinputにして突っ込んだり
|/dev/tty|制御端末

#後口上
最後の方適当にまとめてしまいました。一旦まとめただけで、説明を省いてしまったのでわかりづらいかもしれません。

---

> この記事は、以下を読み引用しています。
> [FHS2.3]




[FHS2.3]:http://www.pathname.com/fhs/pub/fhs-2.3.html
[LANANA]:http://www.lanana.org/