本ページはプロモーションが含まれています

IT全般

Linuxディレクトリ構造を完全解説!13の役割と意味を整理

トム

・都内自社開発企業勤務/Javaバックエンドエンジニア
/Java歴10年以上 ・首都圏在住30代
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎 詳細なプロフィール

「エラーログが見つからない」

「設定ファイルをどこに置けばいいのか迷う」

「コマンドが見つかりませんと言われて焦る」

Linuxを使い始めたばかりの頃、ファイルの場所がわからない不安や不便さを感じた経験はありませんか?

画面真っ黒なコンソールに向かい、どこに何があるかわからない。地図を持たずに知らない土地を歩くような感覚です。

実は、Linuxのディレクトリ構造を理解していないまま運用を続けるのは、とても危険です。

「とりあえず動けばいい」と適当な場所にファイルを置いたり、権限の設定をおろそかにしたりしていませんか?

その場しのぎの対応はシステム障害の調査を難しくします。重要なデータを消してしまったり、セキュリティに穴を開けたりする原因にもなります。

私はエンジニアとして10年以上、数百台規模のサーバー構築や運用監視に携わってきました。

新人時代は rm -rf / コマンドの都市伝説に怯えていました。しかしディレクトリの「住所」と「役割」を覚えてからは、トラブル対応の速度が一気に上がりました。サーバーの中で何が起きているのか、手に取るようにわかるようになったのです。

この記事を読めば、Linuxディレクトリの全体像がつかめます。

各ディレクトリが持つ本来の役割を知り、適切な場所にファイルを配置できるようになります。それは単なる知識ではなく、サーバー管理者としての「自信」と「安心」につながります。

この記事でわかること

  • ルートディレクトリ「/」を起点としたLinuxの全体構造
  • /bin、/etc、/var、/homeなど13の主要ディレクトリの役割
  • 初心者が混乱しやすい /bin vs /usr/bin、/var vs /tmp の違い
  • 設定ファイル・ログ・Webアプリの配置ルール

Linuxのディレクトリ構造とは?全体像をサクッと理解する

Linuxのファイルシステムは、ひとつの根から広がる巨大な樹木のような構造をしています。

すべてが頂点のディレクトリから始まり、枝分かれしていくシンプルなルールで成り立っています。まずはこの全体像をつかむのが近道です。

ルートディレクトリ「/」が持つ意味

すべての始まりであり、最上位に位置するのがルートディレクトリ「/」です。

Linuxにおけるすべてのファイルやディレクトリは、必ずこの「/」の下に存在します。WindowsのようにCドライブやDドライブといったドライブごとの入り口は存在しません。

ハードディスクが複数あろうと、ネットワーク越しに保存領域があろうと、すべてはこの「/」以下のどこかに接続されます。外部の保存領域を接続する仕組みを「マウント」と呼びます。

つまり、Linuxの世界では「/」こそが絶対的な原点なのです。ルートディレクトリ「/」を起点にして、システムに必要なファイルやユーザーのデータがきれいに整理整頓されて配置されています。

FHS(Filesystem Hierarchy Standard)とは何か

Linuxには「どのディレクトリに何を置くか」という標準的な決まりがあります。

それが「FHS(ファイルシステム・ヒエラルキー・スタンダード)」です。この規格があるおかげで、CentOS7を使ってもUbuntu20.04を使っても、基本的なディレクトリ構成はほとんど変わりません。

開発者が勝手気ままにファイルを配置してしまうと、管理者は混乱してしまいます。

「設定ファイルはここ」「ログはあそこ」と決まっているから、初めて触るサーバーでも迷いません。FHSはLinux界の「建築基準法」のようなルールです。

Windowsのフォルダ構造とどう違う?

Windowsユーザーが最も戸惑うのが、ドライブレター(C:やD:)がない点でしょう。

Windowsでは、物理的なディスクごとにドライブが分かれています。しかしLinuxでは、物理的なディスクの違いを意識させない「単一のツリー構造」を採用しています。

Windowsの C:\Windows\ は、Linuxで言えば /bin/lib などに分散しています。

Windowsの C:\Users\ は、Linuxの /home に相当します。

構造は違いますが、「システムが使う場所」と「ユーザーが使う場所」が分かれているという点では共通しています。この違いを頭の片隅に置いておくと、理解がスムーズに進みます。

主要ディレクトリの役割をイメージで理解する

Linuxでよく使う13のディレクトリを、役割ごとに紹介します。

それぞれのディレクトリを「部屋」や「部署」に見立ててイメージすると覚えやすいです。

/bin:基本コマンドが入る場所

/bin は「バイナリ(Binary)」の略で、すべてのユーザーが使う基本的なコマンドが入っています。

ls(ファイル一覧表示)、cp(コピー)、mv(移動)、cat(ファイル内容表示)など、Linuxを操作するうえでなくてはならない道具箱です。

/binは、システムが最小限の構成で起動したとき(シングルユーザーモードなど)でも使えるようになっています。

いわば、サバイバルキットのような場所です。どんな状況でも/binにあるコマンドだけは使える、という安心感があります。もし/binを空にしてしまうと、何も操作できなくなってしまうほど重要な場所です。Linuxの生命線です。

/sbin:管理者用のコマンドが入る場所

/sbin は「システムバイナリ(System Binary)」の略です。

ここには、システム管理者(root)だけが使うような、システム管理用のコマンドが入っています。

例えば、reboot(再起動)、fdisk(ディスクパーティション操作)、iptables(ファイアウォール設定)などを収めています。

一般ユーザーが誤って使うとシステムを壊しかねない危険な道具がしまってある、「関係者以外立入禁止」の道具箱といったイメージです。普段の作業で一般ユーザーがここにあるコマンドを直接叩く機会は少ないでしょう。

/usr:アプリ・ライブラリの巨大収納庫

/usr は「ユーザ(User)」の略……と思われがちですが、実際は「Unix System Resources」の略だという説が有力です。(諸説あり)

ここには、OSの基本機能以外のアプリケーションやライブラリが大量に含まれています。Windowsで言うところの C:\Program Files に近いです。

パッケージマネージャー(yumやaptなど)を使ってインストールしたソフトウェアの多くは、このディレクトリ以下のどこかに配置されます。

非常にサイズが大きくなる傾向があり、システムの中でも最も賑やかな場所と言えます。必要なツール類はたいていこの中にそろっています。

/var:ログやキャッシュなど"変化するデータ"

/var は「バリアブル(Variable)」の略で、「変化するもの」という意味です。

内容が頻繁に書き換わるファイルや、サイズが増え続けるファイルを置きます。

よく知られているのがログファイルです。

Webサーバーへのアクセス記録や、メールの送受信履歴、システムのエラー記録などがここにたまっていきます。

/varがいっぱいになってしまうと、新しいログが書けなくなり、最悪の場合はサービスが停止してしまいます。サーバー運用において、最も監視が必要な「生きているディレクトリ」です。

/etc:設定ファイルの置き場

/etc は「エトセトラ(Etcetera)」に由来すると言われますが、「設定ファイル(Config)」の場所としてとても大切です。

システム全体に関わる設定ファイルは、ほぼすべてここに集約されています。

Windowsではレジストリというブラックボックスに設定が隠されていますが、Linuxではすべてテキストファイルとしてここに存在します。

ユーザー情報、ネットワーク設定、Webサーバーの設定など「指令書」が並ぶ場所です。/etcをバックアップしておけばシステムの設定を復元できます。それほど重要な心臓部です。

/home:ユーザーごとの作業スペース

/home は、一般ユーザーのための個人的な領域です。

ユーザーを作成すると、通常は /home/ユーザー名 というディレクトリが作られます。ここが各ユーザーの「家」になります。

Windowsの「マイドキュメント」や「デスクトップ」を含むユーザーフォルダと同じです。

/home内であれば、ユーザーは自由にファイルを作ったりプログラムを保存したりできます。他のユーザーは勝手に中を見たり書き込んだりできません。プライバシーが守られた空間です。

/root:管理者(root専用)のホーム

/root は、システム管理者である「rootユーザー」専用のホームディレクトリです。

一般ユーザーのホームは /home の下に作られますが、rootだけは特別扱いされ、ルートディレクトリ直下の /root を本拠地にします。

これは、もし /home があるディスクに障害が起きてマウントできなくなっても、管理者がログインして復旧作業を行えるようにするためです。

一般ユーザーは通常、このディレクトリの中を見る権限さえありません。まさに王様の部屋です。

/tmp:一時ファイルの置き場

/tmp は「テンポラリ(Temporary)」の略で、一時的なファイルを置く場所です。

誰でも自由に書き込める掲示板のようなスペースですが、ここにあるファイルは永続しません。

多くのLinuxディストリビューションでは、再起動するとこの中身はすべてきれいに削除されます。

作業途中のデータを一時的に置くには便利です。ただし消えたら困るデータは絶対に置いてはいけません。「明日また使おう」と保存して帰宅しても、翌朝サーバーが再起動されていたらデータは消えています。あくまで一時的な作業場として使いましょう。

/opt:追加アプリのための場所

/opt は「オプション(Optional)」の略で、OS標準のパッケージ管理外でインストールするような、大規模なアドオンソフトウェアが置かれます。

例えば、Oracle DatabaseやGoogle Chromeのようなサードパーティ製のアプリケーションが、ここにディレクトリごとインストールされるケースが多いです。

/usr と役割が似ていますが、/opt は「ひとつのディレクトリにそのアプリの全ファイルがまとまっている」ことが多いのが特徴です。アンインストールもそのディレクトリごと削除すれば済むような設計になっています。

/dev:デバイスを"ファイルとして扱う"場所

/dev は「デバイス(Device)」の略です。

ここにはハードウェア機器を表す特殊なファイルが置かれます。

Linuxの面白いところは「すべてをファイルとして扱う」という哲学です。ハードディスク、マウス、キーボード、画面出力などのデバイスも、すべてファイルのように読み書きできる対象としてここに存在します。

/dev/sda は1つ目のハードディスク(またはSSD)を表します。/dev/null は書き込んだデータをすべて消すブラックホールのようなデバイスです。物理的な機械とソフトウェアをつなぐ接点がここです。

/proc:プロセス情報を擬似ファイルで見せる仕組み

/proc は「プロセス(Process)」の略です。

/procにはディスク上のファイルは存在しません。カーネル(OSの中核)がメモリ内の情報をファイルのように見せる「仮想ファイルシステム」です。

現在動いているプログラムの情報や、CPUの種類、メモリの使用状況などがわかります。

例えば cat /proc/cpuinfo とコマンドを打てば、CPUの詳細なスペックが表示されます。システムの状態をリアルタイムにのぞき見るための窓のような場所です。

/sys:カーネルやハードウェアの状態を管理

/sys/proc と似ており、カーネルやハードウェアの情報を管理する仮想ファイルシステムです。

/proc がプロセス情報中心なのに対し、/sys はよりハードウェアやドライバの構造に特化して整理されています。

デバイスの電源管理や細かいパラメータ設定を行う際に使われますが、初心者が直接/sysを編集する機会はほぼありません。OSがハードウェアをどう認識しているかが体系的に整理されています。

/mnt と /media:外部ストレージのマウント場所

/mnt (マウント)と /media (メディア)は、USBメモリや外付けHDD、CD-ROMなどを接続(マウント)するための場所です。

管理者が手動でマウントするときは /mnt を使います。デスクトップ環境がUSBメモリを自動でマウントするときは /media が使われます。

外部から持ち込んだデータをシステムにつなげるための「玄関」です。

初心者が混乱しやすいディレクトリの違い

名前が似ているディレクトリの違いを整理します。これで迷いがなくなります。

/bin と /usr/bin の違い

昔のUNIXシステムでは、ディスク容量が非常に小さかったため、起動に必要な最小限のコマンドを /bin に、それ以外を容量の大きい別ディスクの /usr/bin に分けていました。

しかし、現在はディスク容量が十分に大きいため、この区別はあまり重要ではなくなっています。

最近のLinux(例えばCentOS7以降やArch Linuxなど)では、/bin/usr/bin へのシンボリックリンク(ショートカット)になっていることが多いです。実体は同じ場所です。

「どちらもコマンドがある場所」と覚えておけば、実用上は問題ありません。

/sbin と /usr/sbin の違い

これも /bin と同様の関係です。

/sbin は起動時に必須の管理コマンド、/usr/sbin は起動後やネットワーク接続後に使う管理コマンド、という歴史的な区分けがありました。

現在はこれらも統合される傾向にありますが、基本的には「管理者用のコマンドがある場所」という理解で十分です。一般ユーザーのパス(PATH)には通っていないことが多いので、使うときはフルパスで指定するか sudo を使う必要があります。

/var と /tmp の使い分け

どちらもファイルを作成できますが、決定的な違いは「永続性」です。

/tmp は再起動で消えることが前提の一時ファイル置き場。

/var は再起動してもデータが残る場所です(/var/tmp という、消えない一時置き場もあります)。

ログやデータベースのデータファイルなど、消えては困るが書き換わるものは必ず /var 以下に置きます。スクリプトの一時的な作業ファイルなどは /tmp で構いません。寿命の長さで使い分けましょう。

/home と /root の役割差

どちらもユーザーのホームディレクトリですが、対象が違います。

/root は特権階級であるrootユーザーだけの聖域です。

/home はその他大勢の一般市民(ユーザー)の居住区です。

セキュリティの面から、rootユーザーで常時ログインするのは避けてください。普段は一般ユーザーとして /home 内で作業し、必要な時だけ sudo コマンドで管理者権限を使うのが、安全なLinux利用の鉄則です。

アプリ開発者・サーバーエンジニア向けの実践知識

ここからは開発・運用で使う具体的な配置ルールです。

「どこに何を置くか」の判断基準になります。

設定ファイルは /etc に置くのが鉄則?

自分で作成したアプリケーションの設定ファイルや、ミドルウェア(NginxやMySQLなど)の設定は、原則として /etc 以下に配置します。

例えば、Nginxの設定なら /etc/nginx/nginx.conf といった具合です。

ソースからコンパイルして /opt/usr/local にインストールした場合は、そのディレクトリ内に設定ファイルが含まれることもあります。パッケージ管理で入れたものは /etc を探せば確実です。設定変更を行う際は、必ずここのファイルを編集します。

ログは /var/log に集まる

アプリケーションが吐き出すログは、/var/log ディレクトリの下に出力させるのがマナーです。

ここには messages(システム全体のログ)、secure(認証ログ)、httpd(Apacheのログ)などが集まっています。

何かトラブルが起きたら、まずは ls -l /var/log で更新されたファイルを探し、tail -f /var/log/ファイル名 で中身を確認するのが調査の第一歩です。ここを見ずに悩むのは時間の無駄と言っても過言ではありません。

Webアプリ配置の典型パターン(/var/www など)

ApacheやNginxでWebサイトを公開する場合、ドキュメントルート(HTMLファイルなどを置く場所)として /var/www/html がよく使われます。

これはディストリビューションごとのデフォルト設定によるものです。

実際の現場では /home/ユーザー名/public_html/opt/アプリ名 を使う場合もあります。

重要なのは、チーム内で「どこにアプリをデプロイするか」というルールを統一することです。FHSの基本を知った上で、プロジェクトに合わせた運用ルールを決めましょう。

systemd やサービスのファイルはどこにある?

サーバー起動時にアプリを自動起動させるための設定ファイル(Unitファイル)は、/etc/systemd/system//usr/lib/systemd/system/ にあります。

systemctl start サービス名 と打った時に読み込まれるファイルです。

自作のアプリをサービス化したい場合は、/etc/systemd/system/.service ファイルを作成するのが一般的です。ここを理解すると、サーバー構築の自動化や安定運用が一気に楽になります。

Linuxディレクトリを理解するとできるようになること

ディレクトリ構造の知識は、3つの場面で役立ちます。

エンジニアとしてのスキルを底上げできます。

障害調査のスピードが上がる

「ログが出ない」「設定が反映されない」「ディスクがいっぱいだ」

そんな時、構造を知っていれば次のように当たりをつけることができます。

  • /var/log の権限がおかしいのでは?
  • /etc の設定ファイルを書き間違えたか?
  • /tmp に巨大なゴミファイルがあるのでは?

闇雲に検索するのではなく、論理的に原因を絞り込めるようになります。調査時間が短縮されることも珍しくありません。

アプリの配置で迷わない

自作ツールやスクリプトをどこに置くか迷わなくなります。

「自分しか使わないから /home/自分/bin に置こう」「全ユーザーに使わせたいから /usr/local/bin に置こう」といった判断が瞬時にできるようになります。

整理されたサーバーは美しく、誰が見てもメンテナンスしやすい状態を保てます。

セキュリティ対策で誤設定を防げる

重要なファイルがどこにあるかを知ることは、守るべき場所を知ることです。

Web公開用のディレクトリに誤って設定ファイルやバックアップデータを置いてしまい、外部から丸見えになってしまう事故は後を絶ちません。

ディレクトリの役割と公開範囲を理解していれば、こうした初歩的かつ致命的なミスを未然に防ぐことができます。

まとめ:Linuxのディレクトリ構造を知るとOSの"考え方"がわかる

まずは全体像を振り返りましょう。

Linuxのディレクトリ構造について解説しました。Linuxにおけるディレクトリは単なるファイルの入れ物ではなく、システムを効率的かつ安全に動かすための「秩序」そのものです。

例えば、

  • /bin/sbin は道具箱
  • /etc は指令室
  • /var は記録室
  • /home は居住区

それぞれ役割がはっきり分かれています。

最初は複雑に見えたアルファベットの羅列も、それぞれの意味を知れば、非常に合理的で美しく整理されていることがわかります。

ディレクトリ構造が頭に入っていれば、新しいツールを導入する際も、トラブルシューティングを行う際も、迷うことなく最短ルートで正解にたどり着けるはずです。

まずは ls / コマンドを叩いて、実際のディレクトリを確認してみてください。記事で学んだ役割と照らし合わせれば、サーバーの見え方が変わります。

  • この記事を書いた人
  • 最新記事

トム

・都内自社開発企業勤務/Javaバックエンドエンジニア
/Java歴10年以上 ・首都圏在住30代
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎 詳細なプロフィール

-IT全般