Infra

Linuxディレクトリ構造ガイド: 各ディレクトリの役割とルール

システムの理解に不可欠なLinuxのディレクトリ構造を、各ディレクトリの役割や重要性と合わせてまとめる。Linuxシステムの全体像を把握する。

Linuxのファイル

Linuxはファイルシステムという仕組みを使用して、 データをファイルとディレクトリの階層構造とし形成し、データの組織化とアクセスの管理を行う。

また、ユーザーが取り扱う一般的なファイルと異なり、 ファイルシステムの機能に依存しない特殊ファイルが存在する。

ファイルの種類

一般的ファイル

Regular Files通常ファイル

テキストデータやバイナリデータコンピュータプログラム、画像、音声等があり、作成したデータを書き込むことで保存し、 後に読みだすことを目的に使う。

以下例示。

System Filesシステムファイル
オペレーティングシステムの動作に必要なファイルや設定ファイル。
User Filesユーザーファイル
ユーザーが作成したデータファイルやアプリケーションファイル。
Program Filesプログラムファイル
実行可能ファイルやスクリプト。
Configuration Files設定ファイル
アプリケーションやシステムの設定を保持するファイル。
Log Filesログファイル
システムやアプリケーションのイベントやエラーメッセージを記録するファイル。
Directoriesディレクトリ

ディレクトリが他のディレクトリに包含され、 他のディレクトリやファイルを包含することで、 ファイルシステム内の階層構造を形成する。

以下例示。

/ ルートディレクトリ
システム全体を含むトップレベルのディレクトリ。
. Current Directory カレントディレクトリ
ユーザーが現在作業しているディレクトリ。
/home/userユーザーホームディレクトリ
各ユーザーの個別のディレクトリ。
/usr, /etc, /var, /libシステムディレクトリ
システム関連のファイルや設定が格納されるディレクトリ。
/tmp 一時ディレクトリ
一時ファイルが格納されるディレクトリ。

特殊ファイル

Device Filesデバイスファイル

ハードウェアデバイスにアクセス、操作するための特殊ファイル。
一般的に /dev 内に格納される。

以下の2つの種類に大分される。

Block Device Fileブロックデバイスファイル
データをブロック単位で読み書きするためのデバイスファイル。
ハードディスク、CD/DVDドライブ、プリンター等
Character Device Fileキャラクタデバイスファイル
データをキャラクタ単位で読み書きするためのデバイスファイル。入出力デバイス。
キーボード、マウス、シリアルポート等
Special Files特殊ファイル

システムやプロセス間の通信、デバイスへのアクセス、または特殊な処理のために使用される。

以下代表的なファイル。

Symbolic Linksシンボリックリンク
他のファイルやディレクトリへのポインタの役割を果たす特殊ファイル。
ファイルシステム内の任意の場所を参照するために使用される。
ショートカットやエイリアスのようなもので、ファイルシステム内で柔軟なリンクを作成し、 ファイルとディレクトリの整理、管理、アクセスを向上させるのに役立つ。
Socket Fileソケット
ネットワーク上で異なるコンピュータやプロセス間のIPCプロセス間通信を実現するための特殊ファイル。
TCPやUDPなどのプロトコルを介してデータを送受信する。
LANカード、Wifiアダプタのようなネットワークインターフェース等
Named Pipesパイプ
同一コンピュータ内ローカルでのIPCプロセス間通信を実現するための特殊ファイル。
データのストリームをプロセス間で転送するために使用され、 書き込んだデータをその順に読み込むことができるFIFOFirst-In-First-Out
通常、| パイプ演算子を使用してコマンドラインシェル内でパイプラインを構築する。

ファイルの特徴

権限と所有者

各ファイルは権限と所有者を持つ。

permissionパーミッション、 権限
ディレクトリやファイルなどを操作する際の権限のことをpermissionという。
以下の3つの種類がある。
read
読み取り権限。
write
書き込み権限。
execute
実行権限。
Ownership所有権
ファイルやディレクトリに対するアクセス権を決定する上で重要な役割を果たす。
Owner所有者
ファイルやディレクトリを所有するユーザー。 所有者は、ファイルやディレクトリに対して特定のアクセス権を持つ。
通常、ファイルを作成したユーザーがその所有者となる。
Groupグループ
ファイルやディレクトリが所属するグループ。
複数のユーザーをグループにまとめることで、 同じグループに所属するユーザー間で共有のアクセス権を持つことができる。
Othersその他のユーザー
所有者やグループに属さない他のすべてのユーザーが含まれる。
その他のユーザーに対する権限を制御することで、 システム管理者はファイルやディレクトリへのアクセスを適切に管理し、 セキュリティを確保することができます。

ファイル操作

ファイルに対して新規作成、削除、コピー等の操作を行うことができる。

ファイルの操作方法
Linuxシステムでファイルを操作するため、 コマンドラインツールやファイルマネージャーアプリケーションを利用する。
CUICommand Line Interface
テキストベースのインターフェースを使用してユーザーとシステムの間の対話を行う方法。 スクリプトや自動化、リモート操作等の柔軟で強力な方法。
Bash Shell, Zsh, etc
GUIGraphical User Interface
グラフィカルな要素を使用してユーザーとシステムの間の対話を行う方法。 直感的でビジュアルに解りやすい方法。
GNOME, KDE, XFCE, Cinnamon, etc
ファイル操作種類
代表的な操作例。
Create
touch, mkdir
新しいファイル、新しいディレクトリを作成。
Delete
rm, rmdir
指定したファイル、空のディレクトリを永久に削除。
Copy
cp
ファイルをコピー。
Move and Rename
mv
ファイルを別のディレクトリに移動したり、名前を変更。

Linuxにおいて、ファイルは非常に重要で中心的な概念であり、システムの設定、 データ、プログラム、ドキュメントなど、ほぼすべてがファイルとして表現される。

LinuxのDirectory

Linuxは複数のディレクトリが存在し、それぞれの役割をもって構成されている。

Directoryの構造

Directory Tree

DirectoryのPath

Pathパスとはファイルやディレクトリの配置された位置を示す文字列。

ファイルやディレクトリにアクセスする際にその場所を指定する方法。

Pathのタイプ

Linuxのパスは、通常、次の2つのタイプがある。

Absolute Path絶対パス
ファイルやディレクトリの位置をルートディレクトリ/から完全に指定する方法。
example.txt ファイルを指定する場合、
/home/user-01/example.txtと記述する。
Relative Path相対パス
現在のカレントディレクトリ.を基準にして、ファイルやディレクトリの位置を指定する方法。
カレントディレクトリがuser-01の場合、
./example.txtと記述し example.txt ファイルを指定する。

Pathの階層構造から見たディレクトリ表現

階層構造から見た場合、ディレクトリは以下の通り分類できる。

Root Directoryルートディレクトリ
/と表される。
Linuxファイルシステムの最上位に位置するディレクトリ。
絶対パスの基準。
ディレクトリ名の間にある/は区切り文字デリミタでルートを意味する先頭のそれとは異なる。
Current Directoryカレントディレクトリ
.と表される。
ユーザーが現在作業しているディレクトリ。
相対パスの基準。
./ は省略可能で、 ./SUB-DIRECTORYSUB-DIRECTORYと省略して指定ができる。
Parent Directory親ディレクトリ
../と表される。
ある特定のディレクトリの直接的な上位に位置するディレクトリを指す。
./../../は親ディレクトリの親ディレクトリを指す。
Sub Directoryサブディレクトリ
ある特定のディレクトリの中に配置された別のディレクトリを指す。
階層的なディレクトリ構造内でディレクトリを組織化するために使用される。

Directory の一覧表

Directories Table
Directories Description
/bin
binary
ビン、バイナリ、2進数
バイナリファイル実行ファイルが格納される場所。

全ユーザー向けのLinuxを操作する基本的なコマンド。


サブディレクトリ
    /bin
  • /cat

    ファイルの中身を表示。

  • /cp

    ファイルをコピー。

  • /rm

    ファイルを削除。

  • /ls

    ディレクトリの中身を表示。

/boot
bootstrap
ブートストラップ、
システムのブートローダやカーネルイメージが格納される場所。

Linuxの起動に必要なファイル。

/dev
devices
デバイス
ハードウェアデバイスディスクドライブ、USBデバイス、キーボード、マウス等へのアクセスを提供するデバイスファイルが格納される場所。

システムがハードウェアデバイスを認識した際、自動的にデバイスファイルを生成し、 ユーザーまたはシステムソフトウェアがこれらのデバイスにアクセスできるようになる。


サブディレクトリ
    /dev
  • /cpu
  • /mem

    メモリ。

  • /nvme0

    ストレージ。

/etc
et cetera
その他
システム全体の設定ファイルを保存する場所。

ユーザーアカウント、ネットワーク設定、システム構成、サービス設定等 ユーザーおよびシステム設定の変更に使用される重要なシステムファイルを含む。

サーバー等のミドルウェアをインストールした場合の設定ファイルも このディレクトリに保存される。
my.cnfMySQLの設定ファイル。php.iniPHPの設定ファイル。nginx/*Nginxの設定ディレクトリ。


サブディレクトリ
    /etc
  • /passwd

    ユーザーアカウントに関する基本的な情報を格納しているテキストファイル。

  • /hosts

    IPアドレスとホスト名をDNSサーバー参照なしでも名前の解決ができるファイル。

  • /opt

    optの設定ファイル。

  • profile

    シェルの初期設定ファイル。

  • network

    ホスト名、ネットワークインターフェース、DNSサーバー、ネットワークサービスの設定ファイル。

  • /X11

    X Window System、 version11用の設定ファイル。

  • /sgml

    SGMLの設定ファイル。

  • /xml

    XML の設定ファイル。

/home
ホーム
ユーザーホームディレクトリ。

各ユーザーの個別のユーザーディレクトリが作成され、 ユーザーごとに異なるデータや設定が保存される。

ユーザーが自分のファイル、ドキュメント、設定ファイルを保存し、 個別のユーザーアカウントのルートディレクトリとして機能し、 ログインしたときに最初にアクセスするディレクトリとなる。/home/USER-01

/lib
livelary
ライブラリ
共有ライブラリが格納されている場所。

共有ライブラリは、プログラムが実行時に 必要とするコードやリソースを提供するファイルで、 複数のプログラムが同じライブラリを共有できるように設計されている。

/bin や /sbin ディレクトリにあるコマンドを実行するのに必要なライブラリも格納されている。

/media
メディア
リムーバブルメディアUSBドライブ、CD-RO等外部の取り外し可能メディアデバイスが自動的にマウントされるマウントポイント。

外部デバイスを接続したとき、デバイス名やラベルに基づいて サブディレクトリが生成され、 一時的にコンピュータにアクセスできるようにし、 ユーザーはそのデータにアクセスできるようになる。

/mnt
mount
マウント
外部データやリモートファイルシステム等をユーザーのファイルシステムに結合するための場所。

ユーザーがリムーバブルメディアやネットワークリポジトリを利用する場合、 一時的なマウントポイントとして使用し、それらにアクセスできるようにしている。
rootユーザーが主に使用する。

NVMe 等で接続された SSD や HDD などのマウントに利用。


一般的なマウントの手順
Command Procedue
01 /mnt直下に新しいディレクトリの作成
md /mnt
mkdir NEW_DIRECTORY_NAME
02 外部リソースをマウント
sudo mount /dev/sdX1 /mnt/NEW_DIRECTORY_NAME

以上により、マウントされたリソースの内容にアクセスできる。

/opt
optional
オプショナル、選択的
システム管理者やユーザーがパッケージ管理システムを使用し、独自にインストールした、 アプリケーションやソフトウェアパッケージが保存される場所。

システムから独立して管理されるので、 ソフトウェアのバージョン管理、アプリケーション間の競合を回避等 整理するために役立つ。



/opt/google/chrome
Google Chromeブラウザをインストールした場合のイメージ。

/proc
process information
プロセス
実行中プロセスに関する詳細情報が仮想ファイルとして生成されるマウントポイント。

ディレクトリ内の各ファイルやディレクトリは、PIDプロセスIDを基にして命名されており、 プロセスごとに情報が仮想ファイルとして生成される。

実際にはディスク上に存在しない仮想ファイルのため、直接編集できない読取り専用の ファイルを提供し、システム管理、診断やデバッグの目的で使用する。


CPU情報を参照する場合
view /proc/cpuinfo
メモリ情報を参照する場合
view /proc/meminfo
// root
ルート
Linuxファイルシステムの最上位ディレクトリ。

すべてのファイルとディレクトリの親ディレクトリ。
ルートユーザーのホームディレクトリ。

/run
runtime
一時ファイルやプロセス情報などの一時的な ランタイムデータを整理し、管理するための場所。
主な管理対象データ
PIDプロセスID
システムの起動時に実行されるプロセスや 実行中のプロセスを識別するためのデータ。
ロックファイル
同時に複数のプロセスが同じファイルやリソースに アクセスしないように制御するためのデータ。
ソケットファイル
IPCプロセス間通信を行うために使用され、特定のプログラム間で データのやり取りを可能にするデータ。
一時ファイル
デーモンやサービスが、実行時に作成する一時データで シャットダウン時にクリーンアップされるデータ。
/sbin
Superuser Binaries、System Binaries
エスビン、スーパーユーザーバイナリ、システムバイナリ
バイナリファイル実行ファイルが格納される場所。

一般的なユーザーが利用する/binのコマンドとは異なり、 /sbin 内のコマンドは主にシステムの起動、停止、修復、診断等の 管理コマンドを提供している。

ルートユーザースーパーユーザーのみが実行するコマンドを格納し、一般のユーザーにはアクセス権がない。


サブディレクトリ
    /sbin
  • /shutdown

    システムのシャットダウンコマンドが格納。

  • /reboot

    システムの再起動用コマンドが格納。

  • /fsck

    ファイルシステムのチェックと修復を行うコマンドが格納。

/srv
Service
サービス
システムで提供されるサービスに関連するデータやコンテンツを保存する場所。

ウェブサーバー、FTPサーバー、リモートファイル共有等のサービスが提供する データやウェブサイトのコンテンツなどを格納するのに便利。

このディレクトリは、Linuxのファイルシステムの標準には含まれていないが、 多くのLinuxディストリビューションで採用されており、 サーバー環境で一貫性のあるデータ配置を提供するために役立つ。

/sys
system file system
システムファイルシステム
カーネルとハードウェアに関する情報を提供するための仮想ファイルシステム。

ユーザーやシステム管理者は、sysfsを通じて デバイス情報の確認、カーネルパラメータの設定ができき、 Linuxシステムの診断やデバッグ、デバイスの管理、エネルギー管理、 および他のシステムタスクに役立つ。

/tmp
Temporary
一時的な
一時ファイルが格納される場所。

一時ファイルは、プログラムやプロセスが一時的なデータを保存し、 必要がなくなったら削除するために利用される。 システムが再起動するたびにこのデータはクリアされる。

/usr
Unix System Resources
ユーエスアール、Unixシステムリソース
複数のマシンに跨って共有可能なシステムリソースやアプリケーションが格納される場所。

ユーザー個別の設定ファイルは含まれない。


Title
  • ユーザーインターフェース、アプリケーション、 ライブラリ、マニュアルページ、システムリソース等、 システムの実行に必要な多くのファイルやディレクトリが格納。
  • ユーザーやシステム管理者が追加のソフトウェアやリソースを インストール、保存するための場所。
  • ユーザーやアプリケーションがアクセスするさまざまな リソースを提供する役割を果たす。

サブディレクトリ
    /usr
  • /bin

    一般的なユーザーコマンドのバイナリ実行ファイルが格納。

  • /include

    プログラム開発に使用されるヘッダーファイルCやC++プログラムのコンパイルに使用されるが格納。

  • /lib

    共有ライブラリファイルが格納。

  • /local

    ユーザーがインストールしたアプリケーションやソフトウェア また固有のローカルデータが保存される。

  • /sbin

    システム管理者向けのユーティリティプログラムのバイナリ実行ファイルが格納。

  • /share

    共有データファイル、ドキュメント、アイコン、ロケール設定等 システム全体で共有されるデータが格納。

  • /src

    ソースコードカーネルのソースコードとそのヘッダファイル

/var
variable
変数
システムが実行中に変更されるデータログ、一時ファイル等が保存される場所。

システムが動作し続けるために必要なデータ、プロセスID、 キャッシュ等が保存される。


サブディレクトリ
    /var
  • /cache

    キャッシュデータが保存される場所。
    アプリケーションやシステムのパフォーマンス向上に寄与。

  • /lib

    変更可能なデータファイル、データベース、 ライブラリファイル等が保存される場所。

    /var/lib/mysql , /var/lib/docker/volumes/

  • /lock

    使用中リソースを保持するファイル。

  • /log

    システムログファイルが保存される場所。
    システムの動作や問題のトラブルシューティングに使用。

  • /mail

    メールボックスが保存される場所。
    新しいメールが届くとここに保存される。

  • /run

    ブート以降の走行中システムに関する情報。

  • /spoolスプールディレクトリ

    メールサーバーやプリンターサーバーのキューに入る データ、ジョブデータや一時的ファイルを保持する場所。

  • /tmp

    一時ファイルが保存される場所。
    プリンタジョブがキューに保持される場所。