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

IT全般

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

トム

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

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

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

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

Linuxを使い始めたばかりの頃、このような不安や不便さを感じた経験はありませんか?

画面真っ黒なコンソールに向かい、どこに何があるのか分からない迷路に放り込まれたような感覚。それはまさに、地図を持たずに知らない土地を歩くようなものです。

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

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

その場しのぎの対応は、将来的にシステム障害の原因調査を困難にするだけでなく、重要なデータを消失させたり、セキュリティ上の致命的な穴を作ったりする原因になります。これはエンジニアとして避けるべき事態です。

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

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

この記事を読めば、Linuxディレクトリの迷子が解消されます。

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

さあ、LinuxというOSが持つ美しい秩序の世界へ、一緒に足を踏み入れてみましょう。

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 に相当します。

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

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

ここからは、実際に頻繁に目にするディレクトリたちの役割を紹介します。

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

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

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

ls(ファイル一覧表示)、cp(コピー)、mv(移動)、cat(ファイル内容表示)など、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サーバーへのアクセス記録や、メールの送受信履歴、システムのエラー記録などがここにたまっていきます。

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

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

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

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

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

ユーザー情報の定義ファイル、ネットワーク設定、Webサーバーの設定など、システムの挙動を決める「指令書」が並んでいる場所です。ここをバックアップしておけば、システムの設定を復元できるほど重要な心臓部です。

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

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

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

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

この中であれば、ユーザーは自由にファイルを作成したり、プログラムを保存したりできます。基本的には、他のユーザーはこの中を勝手に見たり書き込んだりできません(設定によりますが)。プライバシーが守られた空間です。

/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)」の略です。

ここは実際にディスク上に存在するファイルではなく、カーネル(OSの中核)が持っているメモリ内の情報を、ファイルっぽく見せている「仮想ファイルシステム」です。

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

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

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

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

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

デバイスの電源管理や細かいパラメータ設定を行う際に使われますが、初心者が直接ここをいじる機会は少ないかもしれません。OSがハードウェアをどう認識しているかが体系的に格納されています。

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

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

昔からの慣習では、管理者が手動で一時的にマウントする場合は /mnt を使い、最近のデスクトップ環境を持つLinuxが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/アプリ名、あるいは /srv(サービス用データ)などを使う場合もあります。

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

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

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

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

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

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

この構造を知ることは、単なる暗記ではありません。

エンジニアとしてのスキルを底上げする効果があります。

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

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

そんな時、構造を知っていれば「/var/log の権限がおかしいのでは?」「/etc の設定ファイルを書き間違えたか?」「/tmp に巨大なゴミファイルがあるのでは?」と、当たりをつけることができます。

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

アプリの配置で迷わない

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

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

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

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

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

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

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

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

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

例えば、

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

このように役割が明確に分かれています。

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

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

ぜひご自身の環境でも ls / コマンドを叩いて、実際のディレクトリたちを確認してみてください。きっと今までとは違った景色が見えるはずです。

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

トム

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

-IT全般