CentOS ディレクトリ構成リマインダ

# TL;DR;
他サイトを参考にして記述している部分が**多分**にあるため他サイト参照を推奨。
自分用のメモとして。

# Linuxディレクトリ構成

[参考サイト](https://oxynotes.com/?p=5987)、というかほぼここのまとめ。
(手で入力しながら覚えるみたいな手法)

# ディレクトリの構成図

以下は`CentOS`のディレクトリ構成となる。

> おそらく他のディストリビューションもそんなに大きな差異は無いと思う。。。

```
/
┗ /bin
   /boot
   /dev
   /etc
   /home
   /lib
   /lost+found
   /media
   /misc
   /mnt
   /opt
   /proc
   /root
   /sbin
   /selinux
   /srv
   /sys
   /tmp
   /usr
     ┗ /user/bin
        /user/etc
        /usr/games
        /usr/include
        /usr/lib
        /usr/libexec
        /usr/local
        /usr/sbin
        /usr/share
        /usr/src
        /usr/tmp
    /var
     ┗ /var/account
        /var/chache
        /var/crash
        /var/db
        /var/empty
        /var/games
        /var/lib
        /var/local
        /var/lock
        /var/log
        /var/mail
        /var/named
        /var/nis
        /var/opt
        /var/preserve
        /var/pwcheck
        /var/run
        /var/spool
        /var/tmp
        /var/www
        /var/yp
```

基本的には上記のような構成となる。  
以降にて、各ディレクトリの用途などについて記載していく。

# 各ディレクトリ概要

## **/** : ルートディレクトリ

すべての始まり。すべてを包括する根っことなるディレクトリ。

***
## **/bin** : コマンド管理

基本コマンドである`cd`だとか`ls`だとか、様々なコマンドは`/bin`内に配置されている対応するコマンドファイルから呼び出され、実行されている。  
CUIにおいて`/bin`は心臓のようなもの。

> ここにはLinuxの基本コマンドを管理するのが普通で、ソフトのインストールなどに付随するコマンドファイルは別の場所に配置する。

***
## **/boot** : 起動に必要なファイル

ブートに必要なファイル。ブートログやカーネルイメージ(Linuxカーネルを圧縮したファイル)などが保存されている。  

> 専門的な知識を有している人でなければここをいじることはそんなにないと思う。

***
## **/dev** : デバイスファイル配置

デバイス(ハードウェア)をファイルとして扱うUNIX/Linux独自の設計思想からきている。

***
## **/etc** : 設定ファイル

ほぼすべての設定ファイルがここに配置される。  
カーネルのみならず、追加でインストールしたソフトウェアの設定ファイルもこの配下に配置されるため、かなり膨大なファイル数になることが多い。  

> 追加インストールした場合は`/etc/sample`のようにアプリケーション名のディレクトリをetc配下に作成して、その中に配置することが多い。

***
## **/home** : 一般ユーザのホームディレクトリ

通常ユーザーを追加するごとにユーザー名のディレクトリが追加される。  
windowsでいう`C:\Users\ユーザー名`のディレクトリが多分同じような役割。

***
## **/lib** : binの実行に必要なファイル

`/bin`や`/sbin`のコマンドを実行するために必要となるファイルが配置される。  
基本的にユーザーが変更を加えることはない。

> 64bit用の共用ファイルは別途`/lib64`というディレクトリが存在するため注意。

***
## **/lost+found** : 復元用ファイル

システムのバックアップないし復元用のファイルが格納される。  
意図しない再起動やシャットダウン時に使用される。  
こちらも通常ユーザーが変更を加えることはない。

***
## **/media** : リムーバブルメディアのマウントポイント

CDやDVDなんかを挿入した時に`/media`配下にディスクのマウントが生成される。

***
## **/misc** : リムーバブルメディアのマウントポイント

`/media`以外のその他さまざまなデータ用のマウントポイント。  
自動でメディアをマウントするデーモンautofsで利用する。

***
## **/mnt** : 一時的なマウントポイント

`/media`と違い、一時的なファイルシステムのマウントに使用する。

***
## **/opt** : パッケージ管理システムのインストール先

rpmなどのパッケージ管理システムでパッケージをインストールした際、このディレクトリにインストールされる。  

***
## **/proc** : プロセスID付きディレクトリ

プロセスIDのついたディレクトリが配置される。  
プロセス独自の情報を格納することから`プロセスディレクトリ`と呼ばれる。  
各種プロセスのステータス確認などに利用される。

`psコマンド`など

***
## **/root** : rootユーザーのディレクトリ

`/home`がセキュリティ上の危険に晒されてもこいつは大丈夫。という保健用のディレクトリ。

***
## **/sbin** : システム管理者用コマンド

再起動やファイルシステムの操作など、システム管理者にのみ許容された重要なコマンドが配置される。  

> `/bin`同様、/sbin配下に新規でコマンドを追加、変更することは推奨されない。

***
## **/selinux** : セキュリティ向上に利用？

rootへ権限が集中することを防ぎ、権限を分散させることでセキュリティの向上を図るためのもの、らしい。  
**rootが乗っ取られたら全部好き放題やられちゃうから権限を分散させようね～**みたいなことだと思われる。

***
## **/srv** : FTP/www専用のユーザディレクトリ

FTP、wwwなどで利用するユーザー用のスペース。  
管理者が1人の場合は利用しない。

***
## **/sys** : ドライバ関連のプロセス管理

動作しているプロセスやドライバをすべて`/proc`で管理すると膨大になるため、/sysにドライバ関連のプロセスをまとめて負荷分散をしている。  
※完全に分離しているわけではないので注意も必要

***
## **/tmp** : 一時ファイルの保存場所

テンポラリデータ(一時データ)の保管場所。  
メモリ上の一時ファイルを保存する。  
ダウンロードフォルダとして利用することもあるが、  
/tmp内のデータは**再起動時に消去**されてしまうので注意が必要。  

> 消去されるのは再起動時だけではなく、`cron`でも定期的に消去されるため突然消えたらcronが仕事をしたと考える。

***
## **/usr** : 共通利用するプログラム・ライブラリのデータ

各ユーザーが共通して利用するプログラム・ライブラリのデータ。  
ソースからコンパイルされたソフトなどは/usr配下にインストールされる。

`/etc`に保存されている設定ファイルのシンボルリンク(ファイルなどへのショトカのようなもの)も/usr配下に貼られることが多い。

***
## **/usr/bin** : 一般ユーザが利用するコマンド

別名ユーザーコマンドの保存場所。  
プログラムのインストールなどによって追加する場合はこのディレクトリが適している。  
`openssl`や`php`、`git`コマンドなど。。。

***
## **/usr/etc** : 一般ユーザが利用する設定ファイル

あんまり利用されない。基本的に/etcにてライブラリの設定ファイルは一元管理することが多い。

***
## **/usr/games** : ゲーム用ディレクトリ

なぜか必須のディレクトリ。

***
## **/usr/include** : C言語用ヘッダーファイル保存場所

C利用のアプリケーション開発をしない場合ほぼ使わなそう。

***
## **/usr/lib** : 一般ユーザのライブラリ保存場所

`/usr/bin`の実行に必要なライブラリの保管場所。

> /libと同じように64bit用に`/usr/lib64`が用意されている。

***
## **/usr/libexec** : 補助コマンド

コマンドから内部的に呼ばれる補助コマンドの保存場所  
`git-core`とか、`openssh`とか

***
## **/usr/local** : 管理者用ローカルファイル

管理者のみが利用するライブラリなどの追加に利用する。  
`/lib`や`/bin`といった必須ディレクトリが用意されている。

> 管理者のみが使用可能なコマンドをここに用意できる。

***
## **/usr/sbin** : 管理者用コマンド

usr版のsbin

***
## **/usr/share**

アーキテクチャ(OSやソフト)に依存しないデータを配置。  
マニュアルとかデータベースとか、そういったのが保存される。

## **/usr/src** : ソースコード保存場所

概要の通り。

***
## **/usr/tmp** : 一般ユーザの一時保存場所

ユーザーごとのテンポラリファイル保存場所。  
通常はシンボルリンクが`/tmp`ディレクトリに配置される。

***
## **/var** : 可変的システムデータ保管場所

`ログ`や`キャッシュ`などの可変的システムデータ(動的ファイル)を保管しておく場所。  
/tmpと違い、再起動などしても消去されずに残り続ける。

***
## **/var/account** : アカウントに関する動的ファイル

ユーザーごとのアクションなども履歴として保管する。  
例えば、`/var/account/pacct`にはユーザーごとのコマンド入力の履歴が残っていたりする。

> コマンドの履歴であれば`history`コマンドでも確認可能。

***
## **/var/chache** : キャッシュ一時保管場所

キャッシュの一時保管をしてくれる場所。  
ソフトで指定した一定の容量を超えると古いものから順に削除される。

***
## **/var/crash** : クラッシュ時のダンプ

システムがクラッシュした際に原因を追究するために利用される。

***
## **/var/db** : データベース情報

各ソフトで利用するデータベースの情報。  
記述子についての情報を集める`nscd`などで利用。

> **nscd**(Name Service Cache Daemon)
> DNSやNISなどのネームサービスのデータベースを保持し、`passwd`、`group`、`hosts`などのファイルの情報をキャッシュする。

***
## **/var/empty** : SSHで利用されるディレクトリ

パーミッションの変更をするとログインできなくなるため注意

***
## **/var/games** : ゲーム用の動的ファイル保存場所

セーブデータとか。

***
## **/var/lib** : アプリの実行時に生成されるステータス情報

概要のうち、動的に生成されるものがここに保存される。

***
## **/var/local** : /usr/localのログファイル保存場所

概要の通り。

***
## **/var/lock** : 排他制御

特定のファイルなどに対して、他のユーザが使用中か、変更点を保存しているかなどの情報を保持する。

***
## **/var/log** : あらゆるログが保存される場所

**システム管理者御用達**。  
システム、メール、アクセスログ。。。その他諸々あらゆるログがここに集約される。  
稼働中のサービスが何らかの理由でバグった。エラーを吐き出した。なんて状況ではこいつと死闘を繰り広げることを**強いられる**。

***
## **/var/mail** : メール関連の動的ファイル

`/var/spool/mail`へのシンボルリンク

***
## **/var/named** : BIND DNSサーバ用ディレクトリ

名前解決に関連するファイルが保存される。

***
## **/var/nis** : NIS+などで利用する動的ファイル

NIS+は`ネットワークネームサービス`の一種。  

> ネームサービスとは、ネットワークを通じてやりとりする必要のある情報を1つの場所に格納するためのもの。  
> 情報の例として、`マシン名とそのIPアドレス`や`ユーザー名`、`パスワード`、`アクセス権`といったような情報を持つ。

***
## **/var/opt** : /opt用の動的ファイル保存場所

概要の通り

***
## **/var/preserve** : エディタクラッシュ時にイイコトするやつ

エディタが何らかの理由でクラッシュしたときにメールでクラッシュ前のデータを送信してくれる偉いやつ。

***
## **/var/pwcheck** : ユーザ認証

ユーザ認証のSASLライブラリでpwcheckを使う際に利用する。

> 通常は`saslauthd`を利用するためあまり使わないらしい。

***
## **/var/run** : プロセス情報

特定プロセスのプロセス番号を含んだファイルを保持する。  
※再起動時にクリアされる

> 基本的に`.pid`形式のファイルで保持する

***
## **/var/spool** : 実行ファイル/データの一時保存

処理に時間のかかるものにプロセスをとられ続けるとリソースがもったいないので処理したデータを一時保存するための場所。  
印刷データ、メールの送信データなど。

***
## **/var/tmp** : システム関連の一時ファイル

`/tmp`はメモリ上のデータの一時保存で、こいつは再起動時のデータなども扱うため、再起動してもデータを保持する。  
cronによって一定期間で削除される。

***
## **/var/www** : apacheのデータ保存場所

インターネット関連のディレクトリはここに収めるようにする。

> 昔は`/home/httpd`ディレクトリにあったものらしい

***
## **/var/yp** : NISの動的ファイル保存場所

概要の通り