Linuxの仮想ディレクトリ構造を徹底解説!「/」から「/var」まで各ディレクトリの役割
Linuxを始めたばかりのユーザーは、学ぶべき情報の山に直面します。「ターミナルって何?」「ソフトウェアのアップデートはどうやって実行するの?」「どのディストリビューションを選べばいいの?」といった疑問はよくあるものです。しかし実は、経験を積んだLinuxユーザーでも悩まされがちな質問があります。それが「Linuxの仮想ディレクトリシステムにあるそれぞれのディレクトリには何が入っているのか?」というものです。本記事では、「/」から「/boot」まで、Linuxの仮想ディレクトリシステムについて詳しく解説します。
Linuxの仮想ディレクトリシステムとは?
仮想ディレクトリシステム(Virtual Directory System)とは、OS上でファイルやディレクトリを整理する仕組みのことです。「仮想」と呼ばれる理由は、物理的な実体を持たないためです。Windowsでは「C:」ドライブや「D:」ドライブのように、ドライブごとに分かれていますが、Linuxではすべての物理ディスクが仮想ディレクトリシステム内のファイルとして扱われます。ここから「すべてはファイルである(everything is a file)」という有名な言葉が生まれました。OSが動作しているシステムディスクでさえも、1つのファイルとして扱われるのです。
仮想ディレクトリシステムを理解する
ルートディレクトリ:/
まずは起点となる場所から見ていきましょう。「/」(ルート)ディレクトリは、システム内のすべてを包含する最上位のディレクトリです。cd /コマンドを実行すると、システムの最も外側まで視点を引き上げることができます。「/」ディレクトリに移動してlsコマンドを実行してみてください。意味がわかるはずです。「Documents」や「Downloads」、「Pictures」ではなく、「bin」「dev」「home」といった名前が並んでいることに気づくでしょう。ディストリビューションによって多少の違いはありますが、ほぼ必ず存在するコアディレクトリがいくつかあります。以降のすべてのディレクトリは先頭に「/」が付きます。それがすべての階層の根っこ(ルート)だからです。
バイナリディレクトリ:/bin
「/bin」ディレクトリには、システム上のバイナリプログラム(実行ファイル)が格納されています。中を見ると、すでに使ったことのあるcdやlsといった一般的なコマンドが確認できます。which cdやwhich lsコマンドでも場所を調べられます。最近の多くのディストリビューションでは、「/bin」は「/usr/bin」へのシンボリックリンクになっています。「/usr」については後述しますが、簡単に言えば、かつてはシステム管理者向けのバイナリを「/bin」に、一般ユーザー向けのバイナリを「/usr/bin」に分けて管理していた名残です。
ブートディレクトリ:/boot
「/boot」ディレクトリには、システム起動に必要な最低限の情報がすべて格納されています。インストール済みのカーネル、それらの設定ファイル、Grub(ブートローダー)の情報などが含まれます。非常に重要なディレクトリであり、システム本体とは別のEFIシステムパーティションとして扱われます。そのため、パーティションを手動で作成する際には、少なくとも「/」と「/boot」を別々に用意する必要があるのです。
デバイスディレクトリ:/dev
「/dev」ディレクトリには、システム上のすべてのデバイスファイルが格納されています。これはCPUやストレージなどのハードウェアコンポーネントに加え、「null」や「random」のような重要な仮想デバイスも含みます。中を見ると、「cpu」「sda」「tty」「stderr」「stdin」「stdout」といった項目が見つかるでしょう。これらは日常的にやり取りすることになる重要なデバイスファイルです。
設定ファイルディレクトリ:/etc
いわゆる「その他諸々」を収める場所です。「/etc」(読み方は「エトセトシー」に近い発音)には、システム上のさまざまなソフトウェアの設定ファイルが大量に置かれています。SSH、PipeWire、systemd、Firefoxなども、ここに設定ファイルを持っています。仮想ディレクトリシステムにおける「引き出しの中のごちゃ混ぜ箱」のような存在で、非常に重要でありながら、目的のファイルを探すのが少し大変な場所でもあります。
ホームディレクトリ:/home
「/home」ディレクトリには、ユーザーの個人ファイルがすべて保存されます。ユーザーアカウントを作成すると、通常は専用の「/home」配下のディレクトリが割り当てられ、自分のホームディレクトリ内のファイルだけを編集する権限が与えられます。一部のユーザーには管理者権限も付与されますが、sudoで得られるのはあくまでrootユーザーの権限を一時的に借りることです。whoamiとsudo whoamiを続けて実行すると、その違いがよくわかります。おそらくユーザーが最も馴染みのあるディレクトリでしょう。
ライブラリディレクトリ:/lib、/lib32、/lib64
「/lib」系のディレクトリには、「/bin」や「/sbin」(後述)にあるプログラムが使用するライブラリが格納されています。ファームウェアのほか、カーネルやカーネルモジュールの各部をインストールするためのライブラリもここに置かれます。姉妹ディレクトリである「/lib32」と「/lib64」には、それぞれ32ビット版と64ビット版のOS向けのライブラリが含まれており、内容は基本の「/lib」とほぼ同一です。
メディア・マウントディレクトリ:/media と /mnt
この2つはよく似た役割を果たすため、まとめて紹介します。「/media」ディレクトリは、CD、DVD、その他のリムーバブルメディアの内容がマウントされる場所です。USBメモリを挿すと、多くのシステムでは「/media」以下に自動的に表示されます。
一方、「/mnt」ディレクトリは、より長期的なマウントに使われます。たとえばシステムにSSDを追加する場合、その永続的なマウントポイントを「/mnt」に設定することがあります。また、自宅にNASがある場合も、その共有フォルダを「/mnt」にマウントするのが一般的です。
オプションソフトウェアディレクトリ:/opt
「/opt」ディレクトリには、ユーザーが利用する追加のソフトウェアパッケージが格納されます。意外と小さなディレクトリで、筆者の環境ではBrave、Google Chrome、Sublime Textのファイルしか入っていません。サードパーティ製ソフトウェアのリポジトリを追加すると、その実体は「/opt」に配置されることが多いです。
プロセス情報ディレクトリ:/proc
「/proc」ディレクトリには、ハードウェア情報と実行中プロセスの情報が格納されます。システムがハードウェア構成を認識すると、その情報がここに反映されます。たとえばcat /proc/cpuinfoコマンドを実行すれば、CPUに関する驚くほど詳細な情報を知ることができます。
rootユーザーのホーム:/root
これはrootユーザー専用の「/home」ディレクトリのようなものです。rootユーザーとして作業を頻繁に行うなら、ここにファイルが蓄積されていくのがわかるでしょう。
ランタイムデータディレクトリ:/run
「/run」ディレクトリは「/proc」とやや似ていますが、「/proc」がハードウェアを扱うのに対し、「/run」はソフトウェア側の情報に焦点を当てています。両方とも「揮発性ランタイムデータ(volatile runtime data)」と呼ばれるものを保存しており、システムを再起動するたびにほぼクリアされます。ただし、OSがシステムやその利用状況を把握していく過程で役立つデータを一時的に保持しています。
システムバイナリディレクトリ:/sbin
「/sbin」ディレクトリには、rootユーザーのみが実行すべきバイナリプログラムが格納されています。たとえばシステムの電源を切るpoweroffのようなプログラムは、一般ユーザーからは触れないよう「/sbin」に置かれているべきものです。
サービスデータディレクトリ:/srv
このディレクトリには、Web公開サービスに関連するサイト固有のデータが保存されます。FTPやHTTPなどのサービスは、固有の情報をここに持つことがあります。該当するサービスを運用していなければ空のままです。
システム情報ディレクトリ:/sys
「/sys」ディレクトリには、システム上の主要デバイスに関する情報が格納されています。筆者の環境では「/sys/dev」「/sys/firmware」「/sys/kernel」などが見えます。「/dev」ディレクトリにある膨大なデバイスの中から、特に重要なハードウェアデバイスだけを抜き出したようなイメージです。
一時ファイルディレクトリ:/tmp
「/tmp」ディレクトリは、システム上のさまざまなプログラムが生成する一時的な情報を保存するために使われます。再起動しなくても数日程度で情報は消去されるため、他のストレージ領域を圧迫しないための一時的な退避場所という位置づけです。一般ユーザーが「/tmp」で直接作業することはほとんどありません。
ユーザープログラムディレクトリ:/usr
「/usr」ディレクトリは、近年ますます重要度を増しています。現在では「/bin」「/lib」「/sbin」などのディレクトリは、「/usr」内の対応するディレクトリへのシンボリックリンクになっています。筆者の環境でllコマンドを実行すると、その様子を確認できます。
これらはソフトリンクなので解除することも可能ですが、実際にはシステムは「/bin」や「/sbin」ではなく「/usr/bin」や「/usr/sbin」を読み込むようになっています。これはディレクトリ階層をシンプルにし、プログラムの場所を見つけやすくするための変更です。LinuxとUnix間の移行を容易にしたり、バイナリの固定位置問題を解消したりする、快適性向上のための工夫と言えます。
可変データディレクトリ:/var
「/var」ディレクトリは「/tmp」に似ていますが、データをもう少し長期間保持します。ログファイルやKVM仮想マシンのディスクイメージなどもここに保存されます。
このように、Linuxの仮想ディレクトリシステムは、システムが使用するファイルを整理し、管理や運用をシンプルにするために設計されています。もちろん、この構成は自由に変更できます(それこそがLinuxの魅力です)。しかし、ほとんどのデスクトップユーザーにとっては、標準の構成をそのまま活かすのが賢明でしょう。あわせて、2024年現在おすすめのLinuxファイルシステム(ext4、Btrfs、XFSなど)を調べてみるのも良いかもしれません。
-
Linux初心者必見!最初に覚えたい基本コマンド6選
Linuxへ移行するのは、少しハードルが高く感じられるかもしれません。新しいOS?見慣れないデスクトップ環境?これまでのコンピュータ操作の常識がすべて変わってしまう?確かに最初は不安になることもありますが、実際に使ってみれば生産性が向上し、大きなやりがいにつながるはずです。まずは、新しいことを学ぶことから始めましょう。 ターミナルとは何か? Linuxの基礎を学び始める前に、まず「ターミナル」について理解しておく必要があります。ターミナルとは、WindowsでいうところのコマンドプロンプトやPowerShellに相当するものです。LinuxはもともとコマンドラインベースのOSとして開発されま
-
VRとARの違いを徹底解説!仮想現実と拡張現実の基礎知識
VRとAR、その違いを正しく理解していますか?ブロックチェーンやバーチャルリアリティ(VR)といった革新的なテクノロジーは、すでに世界中に浸透しています。多くの有名企業が自社の製品やアプリケーションにこれらの技術を取り入れており、一般の人々も日常的にそれらを体験する時代となりました。しかし、自分が使っている技術の概念や仕組みを正しく理解している人は、果たしてどれほどいるでしょうか。テクノロジーの分野で最も混乱しやすいのが、「拡張現実(AR)」と「仮想現実(VR)」の違いです。多くの人はこの2つの用語を同じ意味で使っています。本記事では、両者の違いをわかりやすく解説します。仮想現実(VR)とは?