Linux の基礎知識

【Linuxの基礎知識】ディレクトリ構造とファイルシステムについて!

通常、個人用途でWindowsやmacOSなどを使用している場合には、「ディレクトリ構造」について意識することは、ほとんどないかもしれません。しかし、業務で使用するPCであり、かつLinuxであるという場合、Windowsとはディレクトリ構造について認識を変える必要があります。この記事では、ディレクトリ構造とファイルシステムについてご説明します。

ディレクトリ構造の違いを理解する

WindowsPCに慣れた方であれば、まずPCを立ち上げて何らかのファイルを操作したいとき、Cドライブがあって、場合によっては内蔵のDドライブがあり、外付けしているHDDのEドライブがあり…と、そのようなイメージで使用していることでしょう。

Linuxの場合は、Windowsとはかなり事情が異なり、すべてのディレクトリとファイルがルートディレクトリ配下に置かれることになります。UNIX系OSは、「FHS(Filesystem Hierarchy Standard)」というファイルシステムの階層標準が定められているのです。

Linuxファイルシステムの階層標準

「FHS」は、Linux(などのUNIX系OS)の標準的なディレクトリ構成を定めた標準仕様です。

ディレクトリ名 用途
/ ルートディレクトリ
/bin

基本コマンド(cat,cp,ls等)

/boot 起動に必要なファイル(カーネル、初期RAM)
/dev デバイスファイル(usb,cdrom,disk等)
/etc 設定ファイル
/home ユーザのホームディレクトリ
/lib 32bit 版のライブラリー(基本コマンドの実行に必要なライブラリ群)
lib64 64bit 版のライブラリー(64bit版はこっち)
/lost+found 破損ファイルの断片が格納される
/media リムーバブルメディア用マウントポイント(cdrom等のマウントポイント)
/mnt ハードディスク等の一時的なマウントポイント
/opt アプリケーションソフトウェアパッケージのインストール先
/proc カーネルやプロセス情報
/root root用ホームディレクトリ
/run 実行時の可変データ群。再起動時に消去される
/sbin システム管理用コマンドなど(ip, shutdown, reboot など)
/srv HTTP、FTP 用データが置かれている。
/sys デバイスやドライバーの設定ファイルなど
/tmp 一時的なファイル(再起動時に消去される)
/usr ユーザーが使用する各種プログラムなど
/var 変更されるデータ(内容が常に変化するファイル群が格納)

シェルスクリプトを記述する際に、一番初めに記述するシェバンをご存じでしょうか?「#!/bin/sh」👈 (こんなやつ)
これは、Linuxの「/bin」ディレクトリへ格納されている基本コマンド「/bin/sh(Linuxの場合はbashへシンボリックリンク)」を指定しているのです。

ディレクトリの構造

Linuxのディレクトリ構造は「ツリー構造」と呼ばれます。まず「ルートディレクトリ」と呼ばれる頂点にあたるディレクトリがあり、その下に「home」や「media」「boot」といったディレクトリが並びます。

WindowsでいうところのCDROMやUSBメモリは、Linuxでは「media」ディレクトリの配下に配置されます。また、「home」ディレクトリ以下がWindowsで言うところの「CドライブのUsersフォルダ」の中に該当します。

Linuxのディレクトリ構造

実際に何が違うのかと言うと、「ツリー構造」の場合には、ディレクトリ階層を上へ上へ行けば、どこから登っていってもかならず「rootディレクトリ」にたどり着きます。

一方で、Windowsが持つパーティション構造は、そのパーティションのトップのディレクトリ(Cドライブ等)までしか到達しません。どれだけ「上」へ行こうとしても、DドライブはDドライブ直下までしか行けないのです。この違いは、主にファイル操作をコマンドで行う際に重要な違いとなってきます。

ちょっと紛らわしいですが、ディレクトリの最上層を「root(木の根っこ)」ディレクトリと呼びます。これと似た呼び方で「root(スーパーユーザー:最上位の権限保有者)」が存在します。「root(スーパーユーザー)」は、もともと、UNIX系OSでログイン時のホームディレクトリがシステムのルートディレクトリ(/)であることからこのように呼ばれるようになっています。紛らわしい・・

「ファイルシステム」とは?

Linuxで使うデータやプログラムは、基本的にハードデイスクやCDROMなどの記憶媒体に保存されています。記憶媒体上のデータやプログラムは、ファイルと呼ばれる単位で管理されます。この管理のしくみをファイルシステムといいます。

ざっくりと言ってしまえば、ファイルシステムとはファイルを取り扱う(操作だけでなくその所在を定義したり読み出したりする)際の枠組み(規格)」といえます。

主なファイルシステムの種類

ファイルシステムは、データの格納や引き出しに大きな役割を果たしています。

パソコン画面に表示されている「ファイル」や「ディレクトリ」も、ファイルシステムの機能によって、そう見せているのです。現実は「0」「1」の羅列で管理されています。

フォーマット 説明
ext2 Linux標準のファイルシステム
ext3 ext2の機能強化版
ext4 ext3の機能強化版であり、現在のlinuxファイルシステムのスタンダード
reiserfs HansReiser氏による新しいファイルシステム
vfat Windows95/98~で利用 されているファイルシステム
ntfs WindowsNT/2000/XP~で利用 されているファイルシステム
xfs SGI社のIRⅨで利用 されているファイルシステム RHEL7からLinuxの主流に・・
nfs ネットワークファイルシステム
smbfs smbmountによるマウントを行うファイルシステム
usbfs USB接続されているファイルシステム
swap スワップパーティションCD- ROM用のファイルシステム
iso9660 CD-ROM用のファイルシステム
msdos MS DOSで利用されているファイルシステム

ファイルシステムの互換性

ファイルシステムの異なるディスク(ext4やntfs等)がある場合、そもそもそのディスクやファイルへのアクセスができなかったり、制限されたりといったことが発生する場合があります。

厳密に言えば「fat」や「ntfs」、「ext3」と「ext4」など、一部互換性のあるファイルフォーマットも存在しますが、基本的にプラットフォーム(OS)の異なるファイルシステム同士の互換性は無いと思っておいた方が良いでしょう。

「ntfs(Windows)」と「ext4(Linux)」では、ファイルの互換性はない

代表的なファイルシステムの互換性

  • ntfs(Windows)
    ntfsの規格では、ドライブの最大容量は256TB、停電などによってディスクやシステムへの電源供給が急遽絶たれたという場合であっても、ファイルシステムに不整合を生じさせないという特徴を持っています。ディスクへの暗号化機能を有しており、セキュリティ面も配慮されています。ただし、ntfs規格でフォーマットされたディスクは、Windowsでしか書き込むことができないという制限があります。

  • ext4(Linux)
    Linuxではntfsではなく、現在は「ext4」と呼ばれるファイルシステムの規格が使用されています。ntfsと比較して大きく優れる、あるいは大きく劣る点はありません。ただし、もともとWindowsで使用されていた、またはWindows環境での使用を想定していたHDD・ストレージをLinuxで使用する予定の場合には、ntfsでフォーマットされている可能性が高いため、Linux環境で使用する際には用途に合わせた規格へフォーマットが必要です。

「ext2とext3」、「ext3とext4」については、前方互換性を持ちます。すなわち、マウントする際は古いファイルシステムに合わせてマウントを行う必要があります。

まとめ

OSが異なれば、ファイルやその構造も異なることを念頭に入れておきましょう。

  • Windowsはパーティション、Linuxはツリー
  • Linuxのツリー構造はコマンドでの操作時に力を発揮する
  • ファイルシステムの違いも頭に入れておく

この記事では、PCを操作する大きな目的のひとつであるといえる「ディレクトリ」と「ファイルシステム」について触れました。GUI環境で使用する限り、LinuxもWindowsもあまり差が見えないかもしれませんが、CUIでの操作時にその違いは顕著になります。

Linuxを扱うエンジニアとなる際には、こうした予備知識を習得しておくことが望ましいといえます。

よく読まれている記事

1

Shellとは? Shellとは、人間の理解できる言葉を機会へ伝えるプログラムです。 Linux環境でコマンドプロンプト画面を開いているとき、常にShellは起動している状態です。 「Shell」とは ...

2

Linuxは主にサーバー用として利用されるOSです。大規模な基幹システムの開発者、ロボットや家電開発等の組み込み系エンジニア、ネットワーク機器やデータベースに携わるインフラエンジニアは触れることが多い ...

3

プログラミング言語を習得しようと思った時、必ずと言っていいほど候補として挙げられるのが「Java」というプログラミング言語です。 「Java」は、現在日本で最も使われている言語であり、非常に人気のある ...

4

この記事は、Linuxについて勉強している初心者の方向けに「Shellスクリプト」について解説します。最後まで読んで頂けましたら、Shellスクリプトはどのような役割を担っているのか?を理解出来るよう ...

-Linux の基礎知識