Linuxディレクトリ構造ガイド: 各ディレクトリの役割とルール
システムの理解に不可欠なLinuxのディレクトリ構造を、各ディレクトリの役割や重要性と合わせてまとめる。Linuxシステムの全体像を把握する。モクジLinuxのファイルファイルの種類ファイルの特徴LinuxのDirectoryDirectoryの構造DirectoryのPathDirectoryの一覧表LinuxのファイルLinuxはファイルシステムという仕組みを使用して、データをファイルとディレクトリの階層構造とし形成し、データの組織化とアクセスの管理を行う。また、ユーザーが取り扱う一般的なファイルと異なり、ファイルシステムの機能に依存しない特殊ファイルが存在する。ファイルの種類一般的ファイルRegularFiles通常ファイルテキストデータやバイナリデータコンピュータプログラム、画像、音声等があり、作成したデータを書き込むことで保存し、後に読みだすことを目的に使う。以下例示。SystemFilesシステムファイルオペレーティングシステムの動作に必要なファイルや設定ファイル。UserFilesユーザーファイルユーザーが作成したデータファイルやアプリケーションファイル。ProgramFilesプログラムファイル実行可能ファイルやスクリプト。ConfigurationFiles設定ファイルアプリケーションやシステムの設定を保持するファイル。LogFilesログファイルシステムやアプリケーションのイベントやエラーメッセージを記録するファイル。Directoriesディレクトリディレクトリが他のディレクトリに包含され、他のディレクトリやファイルを包含することで、ファイルシステム内の階層構造を形成する。以下例示。/ルートディレクトリシステム全体を含むトップレベルのディレクトリ。.CurrentDirectoryカレントディレクトリユーザーが現在作業しているディレクトリ。/home/userユーザーホームディレクトリ各ユーザーの個別のディレクトリ。/usr,/etc,/var,/libシステムディレクトリシステム関連のファイルや設定が格納されるディレクトリ。/tmp一時ディレクトリ一時ファイルが格納されるディレクトリ。特殊ファイルDeviceFilesデバイスファイルハードウェアデバイスにアクセス、操作するための特殊ファイル。一般的に/dev内に格納される。以下の2つの種類に大分される。BlockDeviceFileブロックデバイスファイルデータをブロック単位で読み書きするためのデバイスファイル。ハードディスク、CD/DVDドライブ、プリンター等CharacterDeviceFileキャラクタデバイスファイルデータをキャラクタ単位で読み書きするためのデバイスファイル。入出力デバイス。キーボード、マウス、シリアルポート等SpecialFiles特殊ファイルシステムやプロセス間の通信、デバイスへのアクセス、または特殊な処理のために使用される。以下代表的なファイル。SymbolicLinksシンボリックリンク他のファイルやディレクトリへのポインタの役割を果たす特殊ファイル。ファイルシステム内の任意の場所を参照するために使用される。ショートカットやエイリアスのようなもので、ファイルシステム内で柔軟なリンクを作成し、ファイルとディレクトリの整理、管理、アクセスを向上させるのに役立つ。SocketFileソケットネットワーク上で異なるコンピュータやプロセス間のIPCプロセス間通信を実現するための特殊ファイル。TCPやUDPなどのプロトコルを介してデータを送受信する。LANカード、Wifiアダプタのようなネットワークインターフェース等NamedPipesパイプ同一コンピュータ内ローカルでのIPCプロセス間通信を実現するための特殊ファイル。データのストリームをプロセス間で転送するために使用され、書き込んだデータをその順に読み込むことができるFIFOFirst-In-First-Out。通常、|パイプ演算子を使用してコマンドラインシェル内でパイプラインを構築する。ファイルの特徴権限と所有者各ファイルは権限と所有者を持つ。permissionパーミッション、権限ディレクトリやファイルなどを操作する際の権限のことをpermissionという。以下の3つの種類がある。read読み取り権限。write書き込み権限。execute実行権限。Ownership所有権ファイルやディレクトリに対するアクセス権を決定する上で重要な役割を果たす。Owner所有者ファイルやディレクトリを所有するユーザー。所有者は、ファイルやディレクトリに対して特定のアクセス権を持つ。通常、ファイルを作成したユーザーがその所有者となる。Groupグループファイルやディレクトリが所属するグループ。複数のユーザーをグループにまとめることで、同じグループに所属するユーザー間で共有のアクセス権を持つことができる。Othersその他のユーザー所有者やグループに属さない他のすべてのユーザーが含まれる。その他のユーザーに対する権限を制御することで、システム管理者はファイルやディレクトリへのアクセスを適切に管理し、セキュリティを確保することができます。ファイル操作ファイルに対して新規作成、削除、コピー等の操作を行うことができる。ファイルの操作方法Linuxシステムでファイルを操作するため、コマンドラインツールやファイルマネージャーアプリケーションを利用する。CUICommandLineInterfaceテキストベースのインターフェースを使用してユーザーとシステムの間の対話を行う方法。スクリプトや自動化、リモート操作等の柔軟で強力な方法。BashShell,Zsh,etcGUIGraphicalUserInterfaceグラフィカルな要素を使用してユーザーとシステムの間の対話を行う方法。直感的でビジュアルに解りやすい方法。GNOME,KDE,XFCE,Cinnamon,etcファイル操作種類代表的な操作例。Createtouch,mkdir新しいファイル、新しいディレクトリを作成。Deleterm,rmdir指定したファイル、空のディレクトリを永久に削除。Copycpファイルをコピー。MoveandRenamemvファイルを別のディレクトリに移動したり、名前を変更。Linuxにおいて、ファイルは非常に重要で中心的な概念であり、システムの設定、データ、プログラム、ドキュメントなど、ほぼすべてがファイルとして表現される。LinuxのDirectoryLinuxは複数のディレクトリが存在し、それぞれの役割をもって構成されている。Directoryの構造DirectoryTree//bin/dev/etc/home /sbin/mnt/sys/tmp/usr/bin/lib/local:/var/run/lib:DirectoryのPathPathパスとはファイルやディレクトリの配置された位置を示す文字列。ファイルやディレクトリにアクセスする際にその場所を指定する方法。PathのタイプLinuxのパスは、通常、次の2つのタイプがある。AbsolutePath絶対パスファイルやディレクトリの位置をルートディレクトリ/から完全に指定する方法。example.txtファイルを指定する場合、/home/user-01/example.txtと記述する。RelativePath相対パス現在のカレントディレクトリ.を基準にして、ファイルやディレクトリの位置を指定する方法。カレントディレクトリがuser-01の場合、./example.txtと記述しexample.txtファイルを指定する。Pathの階層構造から見たディレクトリ表現階層構造から見た場合、ディレクトリは以下の通り分類できる。RootDirectoryルートディレクトリ/と表される。Linuxファイルシステムの最上位に位置するディレクトリ。絶対パスの基準。ディレクトリ名の間にある/は区切り文字デリミタでルートを意味する先頭のそれとは異なる。CurrentDirectoryカレントディレクトリ.と表される。ユーザーが現在作業しているディレクトリ。相対パスの基準。./は省略可能で、./SUB-DIRECTORYはSUB-DIRECTORYと省略して指定ができる。ParentDirectory親ディレクトリ../と表される。ある特定のディレクトリの直接的な上位に位置するディレクトリを指す。./../../は親ディレクトリの親ディレクトリを指す。SubDirectoryサブディレクトリある特定のディレクトリの中に配置された別のディレクトリを指す。階層的なディレクトリ構造内でディレクトリを組織化するために使用される。Directoryの一覧表DirectoriesTableDirectoriesDescription/binbinaryビン、バイナリ、2進数バイナリファイル実行ファイルが格納される場所。全ユーザー向けのLinuxを操作する基本的なコマンド。サブディレクトリ/bin/catファイルの中身を表示。/cpファイルをコピー。/rmファイルを削除。/lsディレクトリの中身を表示。/bootbootstrapブートストラップ、システムのブートローダやカーネルイメージが格納される場所。Linuxの起動に必要なファイル。/devdevicesデバイスハードウェアデバイスディスクドライブ、USBデバイス、キーボード、マウス等へのアクセスを提供するデバイスファイルが格納される場所。システムがハードウェアデバイスを認識した際、自動的にデバイスファイルを生成し、ユーザーまたはシステムソフトウェアがこれらのデバイスにアクセスできるようになる。サブディレクトリ/dev/cpu/memメモリ。/nvme0ストレージ。/etcetceteraその他システム全体の設定ファイルを保存する場所。ユーザーアカウント、ネットワーク設定、システム構成、サービス設定等ユーザーおよびシステム設定の変更に使用される重要なシステムファイルを含む。サーバー等のミドルウェアをインストールした場合の設定ファイルもこのディレクトリに保存される。my.cnfMySQLの設定ファイル。php.iniPHPの設定ファイル。nginx/*Nginxの設定ディレクトリ。サブディレクトリ/etc/passwdユーザーアカウントに関する基本的な情報を格納しているテキストファイル。/hostsIPアドレスとホスト名をDNSサーバー参照なしでも名前の解決ができるファイル。/optoptの設定ファイル。profileシェルの初期設定ファイル。networkホスト名、ネットワークインターフェース、DNSサーバー、ネットワークサービスの設定ファイル。/X11XWindowSystem、version11用の設定ファイル。/sgmlSGMLの設定ファイル。/xmlXMLの設定ファイル。/homeホームユーザーホームディレクトリ。各ユーザーの個別のユーザーディレクトリが作成され、ユーザーごとに異なるデータや設定が保存される。ユーザーが自分のファイル、ドキュメント、設定ファイルを保存し、個別のユーザーアカウントのルートディレクトリとして機能し、ログインしたときに最初にアクセスするディレクトリとなる。/home/USER-01/liblivelaryライブラリ共有ライブラリが格納されている場所。共有ライブラリは、プログラムが実行時に必要とするコードやリソースを提供するファイルで、複数のプログラムが同じライブラリを共有できるように設計されている。/binや/sbinディレクトリにあるコマンドを実行するのに必要なライブラリも格納されている。/mediaメディアリムーバブルメディアUSBドライブ、CD-RO等外部の取り外し可能メディアデバイスが自動的にマウントされるマウントポイント。外部デバイスを接続したとき、デバイス名やラベルに基づいてサブディレクトリが生成され、一時的にコンピュータにアクセスできるようにし、ユーザーはそのデータにアクセスできるようになる。/mntmountマウント外部データやリモートファイルシステム等をユーザーのファイルシステムに結合するための場所。ユーザーがリムーバブルメディアやネットワークリポジトリを利用する場合、一時的なマウントポイントとして使用し、それらにアクセスできるようにしている。rootユーザーが主に使用する。NVMe等で接続されたSSDやHDDなどのマウントに利用。一般的なマウントの手順CommandProcedue01/mnt直下に新しいディレクトリの作成md/mntmkdirNEW_DIRECTORY_NAME02外部リソースをマウントsudomount/dev/sdX1/mnt/NEW_DIRECTORY_NAME以上により、マウントされたリソースの内容にアクセスできる。/optoptionalオプショナル、選択的システム管理者やユーザーがパッケージ管理システムを使用し、独自にインストールした、アプリケーションやソフトウェアパッケージが保存される場所。システムから独立して管理されるので、ソフトウェアのバージョン管理、アプリケーション間の競合を回避等整理するために役立つ。/opt/google/chromeGoogleChromeブラウザをインストールした場合のイメージ。/procprocessinformationプロセス実行中プロセスに関する詳細情報が仮想ファイルとして生成されるマウントポイント。ディレクトリ内の各ファイルやディレクトリは、PIDプロセスIDを基にして命名されており、プロセスごとに情報が仮想ファイルとして生成される。実際にはディスク上に存在しない仮想ファイルのため、直接編集できない読取り専用のファイルを提供し、システム管理、診断やデバッグの目的で使用する。CPU情報を参照する場合view/proc/cpuinfoメモリ情報を参照する場合view/proc/meminfo//rootルートLinuxファイルシステムの最上位ディレクトリ。すべてのファイルとディレクトリの親ディレクトリ。ルートユーザーのホームディレクトリ。/runruntime一時ファイルやプロセス情報などの一時的なランタイムデータを整理し、管理するための場所。主な管理対象データPIDプロセスIDシステムの起動時に実行されるプロセスや実行中のプロセスを識別するためのデータ。ロックファイル同時に複数のプロセスが同じファイルやリソースにアクセスしないように制御するためのデータ。ソケットファイルIPCプロセス間通信を行うために使用され、特定のプログラム間でデータのやり取りを可能にするデータ。一時ファイルデーモンやサービスが、実行時に作成する一時データでシャットダウン時にクリーンアップされるデータ。/sbinSuperuserBinaries、SystemBinariesエスビン、スーパーユーザーバイナリ、システムバイナリバイナリファイル実行ファイルが格納される場所。一般的なユーザーが利用する/binのコマンドとは異なり、/sbin内のコマンドは主にシステムの起動、停止、修復、診断等の管理コマンドを提供している。ルートユーザースーパーユーザーのみが実行するコマンドを格納し、一般のユーザーにはアクセス権がない。サブディレクトリ/sbin/shutdownシステムのシャットダウンコマンドが格納。/rebootシステムの再起動用コマンドが格納。/fsckファイルシステムのチェックと修復を行うコマンドが格納。/srvServiceサービスシステムで提供されるサービスに関連するデータやコンテンツを保存する場所。ウェブサーバー、FTPサーバー、リモートファイル共有等のサービスが提供するデータやウェブサイトのコンテンツなどを格納するのに便利。このディレクトリは、Linuxのファイルシステムの標準には含まれていないが、多くのLinuxディストリビューションで採用されており、サーバー環境で一貫性のあるデータ配置を提供するために役立つ。/syssystemfilesystemシステムファイルシステムカーネルとハードウェアに関する情報を提供するための仮想ファイルシステム。ユーザーやシステム管理者は、sysfsを通じてデバイス情報の確認、カーネルパラメータの設定ができき、Linuxシステムの診断やデバッグ、デバイスの管理、エネルギー管理、および他のシステムタスクに役立つ。/tmpTemporary一時的な一時ファイルが格納される場所。一時ファイルは、プログラムやプロセスが一時的なデータを保存し、必要がなくなったら削除するために利用される。システムが再起動するたびにこのデータはクリアされる。/usrUnixSystemResourcesユーエスアール、Unixシステムリソース複数のマシンに跨って共有可能なシステムリソースやアプリケーションが格納される場所。ユーザー個別の設定ファイルは含まれない。Titleユーザーインターフェース、アプリケーション、ライブラリ、マニュアルページ、システムリソース等、システムの実行に必要な多くのファイルやディレクトリが格納。ユーザーやシステム管理者が追加のソフトウェアやリソースをインストール、保存するための場所。ユーザーやアプリケーションがアクセスするさまざまなリソースを提供する役割を果たす。サブディレクトリ/usr/bin一般的なユーザーコマンドのバイナリ実行ファイルが格納。/includeプログラム開発に使用されるヘッダーファイルCやC++プログラムのコンパイルに使用されるが格納。/lib共有ライブラリファイルが格納。/localユーザーがインストールしたアプリケーションやソフトウェアまた固有のローカルデータが保存される。/sbinシステム管理者向けのユーティリティプログラムのバイナリ実行ファイルが格納。/share共有データファイル、ドキュメント、アイコン、ロケール設定等システム全体で共有されるデータが格納。/srcソースコードカーネルのソースコードとそのヘッダファイル。/varvariable変数システムが実行中に変更されるデータログ、一時ファイル等が保存される場所。システムが動作し続けるために必要なデータ、プロセスID、キャッシュ等が保存される。サブディレクトリ/var/cacheキャッシュデータが保存される場所。アプリケーションやシステムのパフォーマンス向上に寄与。/lib変更可能なデータファイル、データベース、ライブラリファイル等が保存される場所。/var/lib/mysql,/var/lib/docker/volumes//lock使用中リソースを保持するファイル。/logシステムログファイルが保存される場所。システムの動作や問題のトラブルシューティングに使用。/mailメールボックスが保存される場所。新しいメールが届くとここに保存される。/runブート以降の走行中システムに関する情報。/spoolスプールディレクトリメールサーバーやプリンターサーバーのキューに入るデータ、ジョブデータや一時的ファイルを保持する場所。/tmp一時ファイルが保存される場所。プリンタジョブがキューに保持される場所。