Linuxのroot以下のディレクトリ構造を完全に理解する

## はじめに
今回は、Linuxのルート以下のディレクトリ構造について詳しく解説していこうと思います。 現在、Linuxが苦手だったり、ちゃんと学習したい方向けの記事となっております。 雰囲気で触るのはやめて、本記事で完全に理解していきましょう！🐧

Linuxのディレクトリ構造は、一見すると複雑に見えるかもしれません。しかし、各ディレクトリが担う役割を一つひとつ理解していくことで、システムの基本が見えてきます。Linuxに慣れたユーザーでも、正確に説明できる方は意外と少ないものです。

ぜひ、この記事を通して、Linuxの基盤とも言えるディレクトリ構造を一緒に見ていきましょう！
### root以下のディレクトリの全体構造
ディレクトリの全体構造は以下の通りとなっています。
```terminal:terminal
/(root)
├── /bin         # OSが正常に動作するための実行ファイル
├── /boot        # システムの起動に必要なファイル
├── /dev         # ハードウェア機器を表すファイル
├── /etc         # 設定ファイル
│   ├── /network # ネットワーク設定
│   ├── /passwd  # ユーザー情報ファイル
│   └── ...      # その他の設定ファイル
├── /home        # 各ユーザーのホームディレクトリ
├── /lib         # OSに必要なライブラリファイル
├── /media       # 外部の記憶媒体のマウントポイント(自動)
│   ├── /usb     # USBデバイスのマウント
│   └── /cdrom   # CD/DVDデバイスのマウント
├── /mnt         # 外部の記憶媒体のマウントポイント(手動)
├── /opt         # 追加のアプリケーションがインストール
├── /proc        # プロセスやOS情報
├── /root        # システム管理者(rootユーザー)のホームディレクトリ
├── /sbin        # rootユーザーのみ実行できるプログラム
├── /srv         # サーバデータ
├── /sys         # OSの現在の状況に関する情報
├── /tmp         # 一時ファイルの保存場所
├── /usr         # 全ユーザーが共通して利用するプログラムのデータ
│   ├── /bin     # 一般ユーザー用のコマンド
│   ├── /lib     # 一般ユーザー用のライブラリ
│   └── /share   # ドキュメントや共通ファイル
└── /var         # システム運用中に生成、後から削除されるデータ
    ├── /log     # ログファイル
    ├── /mail    # メールスプール
    └── /spool   # 一時データ保管
```

それでは一つずつ詳しくみていきましょう。
### / (root)
ルートディレクトリといい、全てのディレクトリの一番上のディレクトリです。
Linuxのすべてのディレクトリたちのスタート地点といえます。すなわち、すべてのディレクトリを絶対経路で表記する際にこのディレクトリから始める必要があります。

### /bin (Binary)
Binary Folderの略で、OSが最低限正常に動作するために全てのユーザーが共通で使う実行ファイルというものがこの中に入っています。
基本的なコマンド(ls, cd, cat, mkdir,chmod、chown、cp、rm、echo、kill、ln, etc....)が保存されたディレクトリで、ルートユーザー、一般ユーザーがアクセス可能です。

### /boot
システム起動に必要なカーネルイメージや設定ファイルがあります。
自分でこの中をいじることはあまりないと思いますが、誤って編集や削除をすると、システムが正常に起動できなくなる可能性があるので注意しましょう。
 例えば、
- **vmlinuz**： Linuxカーネルの圧縮ファイル
- **initrd.img**： 初期RAMディスク、起動時のドライバや設定を保持
- **grub/**： ブートローダー（GRUB）の設定ファイル

### /dev(Device)
デバイスの略で、ハードウェア機器（キーボード、マウス、ディスプレイなど）を表すファイルがこの中に置かれています。
Linuxでは、ハードウェア機器をファイルまたはディレクトリの形で`/dev`ディレクトリの中に存在します。標準入出力により読み書きもでき、ディレクトリどこでもアクセス可能です。

### /etc(Et Cetera)
Linux設定のための各種ファイルを持っているディレクトリで、システム全体で使用する設定（ネットワーク設定、ユーザー情報、デーモンの設定など）のようなデータが保存されるディレクトリになっています。
例えば、
- **passwd**： ユーザー情報ファイル
- **network**： ネットワーク設定

### /home
ユーザーのホームディクトリです。Linuxでログインした際のユーザーの最初に始まる場所になります。
useraddコマンドで新しいユーザを生成すると、ほとんどのユーザのIDと同じ名前のディレクトリが自動的に生成されます。

### /lib(Library)
カーネルモジュールファイル[^1]やOSに使われるライブラリファイルをまとめたものです。
ライブラリを簡単に説明すると、OSの中で必要な処理をひとまとめにしたものです。

### /media ・ /mnt(Mount)
外部メディアや一時的なマウント[^2]ポイントが置かれるディレクトリです。
マウント箇所は2箇所あり、「/media」、「/mnt」でこの二つはしっかりと区別をしましょう。
`/media` は、OSが自動でマウントする場合は、こちらを使います。
`/mnt` は、ユーザーが手動でマウントする場合は、こちらを使います。
例えば、
CD-ROM、USBなどの取り外しが可能な装置(移動式メディア)がOSに自動的にマウンティングされるとすれば、主に/mediaディレクトリ内にマウンティングポイントが生成されます。

### /opt(Option)
ユーザーが追加で選択可能なアプリケーションがインストールされる場所になります。
ディストリビューションのパッケージ管理システムに含まれないアプリケーションを手動でインストールする場合に使われます。
例えば、
第三者のサードパーティアプリ(Chromeなど)をインストールする場所が`/opt`になります。

### /proc(Process File)
OS関連の情報がまとまっている場所であり、システム運用において非常に重要となってきます。
 各プロセス名によって数多くのディレクトリが存在し、現在実行されているプロセスに対する情報とデータが含まれています。 ディスク上に実際存在するのではなくメモリ上に存在するため、仮想ファイルシステムと呼ばれます。
例えば、
- **/proc/cpuinfo**： CPUの情報
- **/proc/meminfo**： メモリの情報
- **/proc/[PID]**： 各プロセスの情報

### /root
システム最高管理者であるrootアカウントのホームディレクトリです。
rootユーザー専用のファイルや設定が含まれており、システム管理者の作業ディレクトリです。
`/`ディレクトリとは別なので注意しましょう。

### /sbin(System Binary)
rootユーザーのみが実行可能なシステム管理コマンドが格納されているディレクトリです。
通常は管理者（rootユーザー）のみが利用するコマンドが多く含まれます。
例えば、
- **fdisk**： ディスクのパーティション[^3]を作成・編集
- **reboot**： システムの再起動

### /sys(System)
Linuxカーネルに関する情報があるディレクトリです。
現在のカーネルデータの構造属性など、現在のシステム全般についての内容を提供してくれます。 毎回再起動するたびに新しく作成します。
 `/proc`と同様に、カーネルが提供する情報や設定項目が含まれ、システム全体に関する動的な情報が取得できます。

### /tmp(Temporary)
一時ファイルの保存場所として使用されます。
システムやアプリケーションが一時的に必要とするファイルがここに作成され、一定期間後に自動的に削除されるよう設計されています。


 
### /usr
全ユーザーが共通して利用するプログラムやライブラリのデータが入っているディレクトリになります。
全体構造を見ていただくとわかるとおり、`/usr`の中にはさらに`/bin`, `/lib`といったサブディレクトリが含まれています。これらには、個別のユーザーアカウントに依存しないアプリやツールの実行ファイルやライブラリ、共通のデータ（bin, sbin, share, local, lib, srcなど）が格納されています。

### /var(Variable)
システムの運用中に自動で生成されて、後から削除するようなデータが入っているディレクトリです。
例えば、
- **/var/log**：システムやアプリケーションのログファイルが格納されます
- **/var/tmp**：一時ファイルの保存場所で、/tmpと異なりシステム再起動後もファイルが削除されないことが多いです




## さいごに
今回は、Linuxのルートディレクトリ以下の構造を詳しく解説しました。Linuxのディレクトリ構造を理解することで、システム内でどのデータがどこに保存され、どのように運用されているのかが明確になります。各
ディレクトリの役割を把握することは、Linuxの基礎を深く理解する上で非常に重要です。本記事が皆さんの基礎固めに役立てば幸いです。



[^1]:*カーネルモジュール*：カーネルの機能を拡張するためのバイナリファイル
[^2]:*マウント*：ルートディレクトリ下に置くこと。外部媒体(USB、ハードディスクなど)をLinuxで使うときにマウントが必要
[^3]:*パーティション*：1 つの物理的なディスクを論理的に分割して、OS からは複数台のディスクのように見せる仕組み