Linuxファイルシステム ツリー（階層）構造
はじめに

第2章 はじめに

このビデオでは、この章で扱う内容の概要を説明しています。


学習目標
この章の終わりまでに、次のことができるようになります。

Linuxが1つの大きなファイルシステム ツリー（階層）構造を必要とする理由と、その実行方法に関して考慮すべき事柄について説明できます。
Filesystem Hierarchy Standardが果たす役割を説明できます。
起動時にルート（/）ディレクトリで利用可能になっているべきものと、システム起動後にのみ利用可能になるものを列挙できます。
主なサブディレクトリ ツリーをそれぞれ検索し、その目的を説明でき、その内容を調べることができます。


Linuxファイルシステム ツリー（階層）構造

1つの大きなファイルシステム
Linuxは、すべてのUNIXベースのオペレーティング システムと同様に、1つの大きなファイルシステム ツリー（階層）で構成されています。実際には、ルート ディレクトリ「/」がツリー（階層）の最上位にある、逆ツリーの形で図示されることが一般的です。

この 1つの大きな論理ファイルシステム内には、複数の異なるファイルシステムが複数のポイントでマウントされ、サブディレクトリとして表示される場合があります。これらの個別のファイルシステムは、通常は異なるパーティションにあり、ネットワーク上のデバイスを含む任意の数のデバイスに存在します。

どのように結合されているかに関わらず、すべてが1つの大きなファイルシステムのように見えます。アプリケーションは、実際にどの物理デバイス ファイルが存在するかについてまったく気にしません。

昔は、さまざまなUNIX系のオペレーティング システムは、この1つの大きなツリー（階層）をさまざまな方法で編成しました。さまざまなLinuxディストリビューションの間でも、多くの違いがありました。このため、アプリケーションの作成と、複数の種類のシステムでのシステム管理タスクの実行の両方が困難になり、イライラすることが多くありました。

結果として、Linuxエコシステムは、そのような苦労を最小限に抑えるための標準化手順の確立に努めてきました。


データの分類
1つの大きなディレクトリ ツリーでファイルとデータをどのように整理するかにおいては、どの種類の情報を読み書きする必要があるかという分類が重要になります。 特に、2種類の違いがあります。

各ボックスをクリックして展開し、2種類のデータの違いについて学習します。

データの分類

共有可能 vs. 非共有
共有可能なデータとは、異なるホスト間で共有できるデータです。共有できないデータとは、特定のホストに固有なデータです。たとえば、ユーザーのホーム ディレクトリは共有可能ですが、デバイス ロック ファイルは共有できません。

可変 vs. 静的
静的データには、バイナリ、ライブラリ、ドキュメント、そしてシステム管理者のみが変更できるデータが含まれます。可変データは、システム管理者以外でも変更できるデータです。

これらの論理的な違いは、いろいろなディレクトリ、パーティション、ファイルシステムに存在する、さまざまな種類の情報で表わされます。



FHS Linux標準ディレクトリ ツリー
Filesystem Hierarchy Standard（FHS）は、当初Free Standards Groupが管理していましたが、現在はThe Linux Foundationが管理しています。FHSは主なディレクトリとその内容を定義しています。Filesystem Hierarchy Standardのドキュメントはオンラインで取得できます。

FHSは標準レイアウトを定義することにより、ファイルの場所を予測し易くしています。ほとんどのLinuxディストリビューションはFHSを尊重しますが、正確には従っていません。最後の公式バージョンはとても古く、いくつかの新しい開発を考慮していないためです。

ディストリビューションは実験を好み、最終的には実験の一部を受け入れています。

Linuxディストリビュータは、ファイルシステムのレイアウトが一貫していて正しく進化していることを確認するために、多くの時間を費やしています。以下は通常、 / の下にある主なディレクトリのリストです。

表：主なディレクトリ

ディレクトリ名	FHSにあるか否か？	目的
/　Yes  		ファイルシステムの階層全体の最上位ディレクトリ。
/bin　Yes  	シングル ユーザー モードで使用できる必要がある必須の実行可能プログラム。
/boot　Yes  	カーネル、initrd、initramfsイメージなどのシステムのブートに必要なファイル、ブート構成ファイルおよびブートローダー プログラム。
/dev　Yes  	ハードウェアおよびソフトウェア デバイスと対話するために使用されるデバイス ノード。
/etc　Yes  	システム全体の構成ファイル。
/home　Yes  	個人の設定、ファイルなどを含むユーザーのホーム ディレクトリ。
/lib　Yes	/binと/sbinの実行可能バイナリに必要なライブラリ。
/lib64　No   	32ビット プログラムと64ビット プログラムの両方を実行できるシステムの場合の、/binと/sbinの実行可能バイナリに必要な64ビット ライブラリ。
/media   Yes   	CD、DVD、USBスティックなどのリムーバブル メディアのマウント ポイント。
/mnt   Yes   	一時的にマウントされたファイルシステム。
/opt   Yes   	オプションのアプリケーション ソフトウェア パッケージ。
/proc   Yes   	システムおよびその上で実行されているプロセスに関する情報を提供する仮想擬似ファイルシステム。システム パラメータの変更に使用できます。
/sys   No   	システムおよびそこで実行されているプロセスに関する情報を提供する仮想擬似ファイルシステム。システム パラメータの変更に使用できます。デバイス ツリーに似ており、統合デバイス モデルの一部です。
/root   Yes   	root ユーザーのホーム ディレクトリ。
/sbin   Yes   	必須のシステム バイナリ。
/srv   Yes   	システムが提供するサイト固有のデータ。めったに使用されません。
/tmp   Yes   	一時ファイル。多くのディストリビューションでは、再起動すると失われます。メモリ内のRAMディスクである可能性があります。
/usr   Yes   	マルチ ユーザー アプリケーション、ユーティリティ、およびデータ。読み取り専用。
/var   Yes   	システム操作中に変化する可変データ。

ルート ディレクトリの下にディストリビューション固有のディレクトリが追加されている場合があります。これらには、その他のデータに使用できる/miscや、tftpを使用した起動に使用される/tftpbootが含まれる場合があります。ディレクトリにファイルがある場合、それらはディスクレス ワークステーションの起動に関連しています。他のディレクトリを持つことはFHSには違反しません。ただし、標準で規定されているディレクトリ以外にコンポーネントを配置することには違反します。


ルート（/）ディレクトリ
先ほど述べたように、ファイルシステム全体を1つの大きなツリー（階層）と見なすことができますが、複数のパーティションとファイルシステムが結合されている場合があります。

ルート ディレクトリ自体が含まれるパーティションとファイルシステムはかなり特別です。多くの場合、後でマウントされる /home、/var、/optなどのディレクトリを持つ他のコンポーネントとともに、特別な専用パーティションにあります。

ルート パーティションには、システムの起動後に他のすべてのファイルシステムをマウントするために必要な、すべての重要なファイルが含まれている必要があります。したがって、ユーティリティ、構成ファイル、ブートローダー情報、およびその他の重要なスタートアップ データが含まれている必要があります。それは次のことを適切に行うためです。

システムを起動します。
テープやその他のリムーバブル メディア、NASなどの外部メディアのシステム バックアップからシステムを復元します。
システムの回復か修復、またはその両方を行います。経験豊富なメンテナは、損傷したシステムを診断および再構築するツールを持っている必要があります。
FHSでは、アプリケーションまたはパッケージがルート ディレクトリの新しいサブディレクトリを作成することを禁止しています。


/bin
/binディレクトリは非常に重要です、その理由は以下のとおりです。

/binディレクトリには、システム管理者と非特権ユーザーの両方が必要とする実行可能プログラムとスクリプトが含まれています。これらは、他のファイルシステムがまだマウントされていない場合、たとえばシングル ユーザーまたはリカバリ モードで起動する場合に必要です。
また、スクリプトによって間接的に使用される、実行可能ファイルが含まれる場合もあります。
サブディレクトリを含めることはできません。
/bin/に存在する必要があるプログラムには、次のものがあります。

cat,chgrp,chmod,chown,cp,date,dd,df,dmesg,echo,false,hostname,kill,ln,login,ls,mkdir,mknod,more,mount,mv,ps,pwd,rm,rmdir, sed,sh,stty,su,sync,true,umount および uname

[ と testもここに置かれることがあります。オプションで、csh, ed, tar, cpio, gunzip, zcat, netstat, pingも含まれることがあります。

/binの場所に値するほど重要ではないとみなされるコマンド バイナリは、/usr/binに置きます。非rootユーザーだけが必要とするプログラムは、この/usr/binに置きます。

💡
最新の一部のディストリビューションでは、/binと/usr/bin（および/sbinと/usr/sbin）を区別せず、シンボリックリンクを使って1つのディレクトリで2つのディレクトリ ビューを持ちます。そのディストリビューションでは、ブート後にマウントされる別のパーティションに/usrを配置するのは、時代遅れとみなしています。

RHEL、CentOS、Fedoraなどの最近のディストリビューションでは、/binと/usr/binは実際には同じディレクトリです。

ls -F / binコマンドとその出力のスクリーンショット


/boot
システムの起動に必要なファイルは、/bootディレクトリとそのサブディレクトリに置く必要があります。

下のカードをクリックして裏返し、絶対に必要な2つのファイルについて学びます。

vmlinuz
圧縮されたLinuxカーネル。

initramfs
実際のルート ファイルシステムが使用可能になる前にマウントされる初期RAMファイルシステム。

これらのファイルには、カーネルのバージョンに依存する長い名前があり、正確な形式はLinuxディストリビューションによって異なります。さらに、initramfsの代わりにinitrdと呼ぶ場合があります。これは古い方法で初期RAMディスク(Initial RAM disk)を表したものですが、名前は残っています。

/bootは、カーネルがユーザー モード プログラムの実行を開始する前に使用されるデータを格納します。また、情報とデバッグに使用される2つのファイルも含まれています。

config
カーネルのコンパイルを構成するために使用されます。
System.map
デバッグに使用されるカーネル シンボル テーブルです。
保存されたマスター ブート セクタ、セクタ マップ ファイル、および手動で直接編集できないその他のデータが含まれる場合があります。/bootの正確な内容は、ディストリビューションと時代によって異なります。以下に、Fedoraシステムの一例を示します。

ls -l /boot コマンドとその出力のスクリーンショット

以前、これらの重要なファイルは、従来のUNIX方式に従って、/bootディレクトリではなく、/に直接配置されていました。今日、これは時代遅れであると考えられています。


/dev
このディレクトリには、システムに組み込まれた、またはシステムに接続されたデバイスを表す特別なデバイス ファイル（デバイス ノードとも呼ばれます）が含まれています。これらの特殊ファイルは、システムが正しく機能するために不可欠です。

このようなデバイス ファイルには、キャラクタ デバイス（バイトストリーム）とブロックI/Oデバイスがあります。Linuxのネットワーク デバイスにはデバイス ノードがなく、代わりにeth1やwlan0などの名前で参照されます。

最新のLinuxディストリビューションはすべてudevシステムを使用し、デバイスが見つかったときのみ必要に応じて/devにノードを作成します。マウントされていないファイルシステムの/devディレクトリを見ると、空であることがわかります。

古いシステム（または組み込みデバイス）では、インストール時に、またはそれ以外の時でも必要に応じて、 MAKEDEVかmknodによって作成されます。

図　デバイス ノード

ls -l /dev コマンドとその出力のスクリーンショット


/etc
このディレクトリには、マシン ローカルの構成ファイルといくつかの起動スクリプトが含まれています。実行可能なバイナリ プログラムはありません。このディレクトリにあるファイルとディレクトリは、次のとおりです。

csh.login, exports, fstab, ftpusers, gateways, gettydefs, group, host.conf, hosts.allow, hosts.deny, hosts,equiv, hosts.lpd, inetd.conf, inittab, issue, ld.so.conf, motd, mtab, mtools.conf, networks, passwd, printcap, profile, protocols, resolv.conf, rpc, securetty, services, shells, syslog.conf.

フロッピー ディスクで使用されるmtools.confなど、この中の一部のファイルは、現在重要ではなくなっています。FHSが定義していても、ソフトウェアが陳腐化したためもう見つからないものもあります。

ディストリビューションは、/etcに構成ファイルとディレクトリを追加することがよくあります。たとえば、Red Hatは、/etc/sysconfigを含むいくつかのディレクトリを追加しています。そのディレクトリには、いくつかのシステム構成ファイルとディレクトリが存在します。

各ボックスをクリックして展開し、他の重要なサブディレクトリについて学習します。

その他のサブディレクトリ

/etc/skel
スケルトン ファイルが置かれています。このファイルは新しく作成したホーム ディレクトリの追加に使用されます。

/etc/systemd
systemdを使用する時にシステム サービスの開始と停止をするための、構成スクリプトが置かれているかそれをポイントしています。

/etc/init.d
System Vの初期化を行う場合の、起動スクリプトとシャットダウン スクリプトが置かれています。


/home
Linuxシステムでは、通常、ユーザー ディレクトリは/home/coop,/home/studentなどのように/homeの下に置かれます。すべての個人設定、データ、および実行可能プログラムは、このディレクトリの階層に置かれます。/homeには、/home/students,/home/staff,/home/aliensなど、ユーザーのさまざまなグループや関連付けされたサブディレクトリが置かれる場合もあります。

他のUNIX系のオペレーティング システムでも/homeディレクトリ ツリーの概念は存在しますが、微妙に異なる場合があります。たとえば、Solarisでは、ユーザー ディレクトリは/export/homeに作成され、最終的には自動マウント機能によって/homeにマウントされます。これは、一般的にはホーム ディレクトリが企業ネットワーク上のどこか、おそらく NFSサーバー上にあり、使用時にホーム ディレクトリが自動的にマウントされるためです。

Linuxにも同じ自動マウント機能がありますが、多くのユーザーはそれらを意識していません。また、自己完結型システムでは、おそらく NFSマウントの概念は使われないでしょう。

特定のユーザーは、環境変数$HOMEをルート ディレクトリの代わりに使用することも、略記〜を使用することもできます。つまり、以下は同等です。

$ ls -l $HOME/public_html

$ ls -l ~/public_html

例外が1つあります。Linuxシステムのrootユーザーのホーム ディレクトリは、常に/rootの下にあります。古いUNIXシステムの中には/を代わりに使用するものがあり、混乱するかもしれません。

ls -la /home/student コマンドとその出力のスクリーンショット


/libと/lib64
これらのディレクトリには、/binと/sbin内のバイナリを実行するために必要なライブラリのみが置かれています。これらのライブラリは、システムを起動しルート ファイルシステム内でコマンドを実行するために、特に重要です。

カーネル モジュール（多くの場合、デバイスまたはファイルシステムのドライバ）は/lib/modules/<kernel-version-number>にあります。

PAM（Pluggable Authentication Modules）ファイルは/lib/securityに置かれます。

32ビットと64ビットの両方のバイナリをサポートするシステムでは、システムに両方の種類のライブラリを保持する必要があります。Red Hatベースのシステムでは、32ビット ライブラリ（/lib）と 64ビット ライブラリ（/lib64）のディレクトリがあります。

🚩
最近のディストリビューションの中には、/libと/usr/lib（および/lib64と/usr/lib64）を区別せずに、ディレクトリを1つだけ用意してシンボリックリンクを使うことで、あたかも2つのディレクトリが存在するかのように見せるものがあります。そのディストリビューションでは、ブート後にマウントされる別のパーティションに/usrを置くのは、時代遅れと考えています。


/media
このディレクトリは、ファイルシステムをリムーバブル メディアにマウントするために使用されていました。これらには、CD、DVD、USBドライブ、さらには旧石器時代のフロッピーが含まれます。

Linuxシステムは、そのようなメディアを挿入時に動的にマウントし、構成ファイルにあるudevルールで設定した名前でudevがディレクトリを作成して、そこにリムーバブル ファイルシステムをマウントします。アンマウントもしくは削除をすると、マウント ポイントとして使用されていたディレクトリが消えます。

メディアに複数のパーティションとファイルシステムがある場合、複数のエントリが表示されます。多くのLinuxディストリビューションでは、メディアがマウントされると、ファイル マネージャ（Nautilusなど）が表示されます。 

🚩
現在のLinuxディストリビューションでは、リムーバブル メディアは、/mediaではなく/run/media/[username]/...の下に表示されます。　/runについては後で説明します。


/mnt
このディレクトリは、システム管理者が必要に応じて一時的にファイルシステムをマウントできるようにするために提供されています。一般的な用途は、次のようなネットワーク ファイルシステムです。

NFS
Samba
CIFS
AFS.

歴史的に見て、/mntは現在のシステムの/media（または/run/media）にマウントされているファイル類にも使用されていました。

このディレクトリはインストール プログラムでは使用しないでください。現在使用していない別の一時ディレクトリの方が適切です。


/opt
このディレクトリは、他のソフトウェアと共有するディレクトリを使ってシステム全体に分散させるのではなく、ファイルのすべてまたはほとんどを1つの専有場所に保持したいソフトウェア パッケージ用に設計されています。たとえば、dolphy_appが/optに存在するパッケージの名前である場合、そのすべてのファイルは/opt/dolphy_appの下のディレクトリに存在する必要があります。バイナリの場合は/opt/dolphy_app/bin、manページの場合は/opt/dolphy_app/manなどです。

このようにファイルをまとめることで、ソフトウェアのインストールとアンインストールの両方を比較的簡単に行うことができます。すべてのファイルが、予測可能かつ構造化された1つの分離された場所にあるからです。また、システム管理者がパッケージ内の各ファイルの性質を簡単に判断できるようになります。

ただし、RPMやAPTなどのパッケージ システムを使用している場合は、このようなことを意識しなくても、ファイルの管理情報と配置が明確なので、簡単にインストールおよびアンインストールすることができます。このことは後で説明します。

Linuxでは、多くの場合、/optディレクトリは、プロプライエタリなソフトウェアを使用するアプリケーション プロバイダ、またはディストリビューションの違いによる複雑さを回避したいアプリケーション プロバイダによって使用されます。たとえば、RHELシステムでは、パッケージは/opt/skypeと/opt/googleにあり、後者にはchrome,earth,talkpluginのサブディレクトリがあります。

また、ローカル システム管理者が使用するためのディレクトリとして、/opt/bin、/opt/doc、/opt/include、/opt/info、/opt/lib、/opt/manが用意されています。パッケージは、これら予約されたディレクトリにリンクまたはコピーされたファイルを提供する場合がありますが、一方で、これらの特別なディレクトリにプログラムが存在しなくても機能する必要があります。



/proc
このディレクトリは、すべての情報がディスクではなくメモリにのみ存在する疑似ファイルシステム(pseudo-filesystem)のマウント ポイントです。/devと同様に、実行されていないシステムでは/procディレクトリは空です。

カーネルは、/procエントリを介していくつかの重要なデータ構造を提示します。さらに、システム上のアクティブな各プロセスには、プロセスの状態、使用しているリソース、およびその履歴に関する詳細情報を提供する独自のサブディレクトリがあります。

/proc下に存在するエントリは通常仮想ファイル(virtual file)と呼ばれ、興味深い性質を持っています。ほとんどがサイズが0バイトとして表示されますが、表示すると大量の情報を含んでいることがわかります。

さらに、仮想ファイルのほとんどの日時設定は現在の日時を反映しており、常に変化していることを示しています。実際、これらのファイルの情報は、表示するときにのみ取得され、常時もしくは定期的に更新されるわけではありません。

/proc/interrupts,/proc/meminfo,/proc/mounts,/proc/partitionsを含む重要な疑似ファイルは、システムのハードウェアの最新情報を提供します。

/proc/filesystemsや/proc/sys/ディレクトリなどは、システム構成情報とインターフェイスを提供します。

組織化する目的で、類似のトピックに関する情報を含むファイルは、仮想ディレクトリとサブディレクトリにグループ化されています。たとえば、/proc/scsi/にはすべての物理SCSIデバイスの情報が含まれます。同様に、プロセス ディレクトリには、システムで実行中の各プロセスに関する情報が含まれています。

このコースでは /proc のエントリを広範囲に見て行きます。カーネルの構成とシステムの監視に関する内容は、今後の章でさらに詳しく見ていきます。

Ubuntuにおける ls -F /proc コマンドと出力のスクリーンショット

以下のスクリーンショットでは、特定のプロセスに属する/procディレクトリの内容を確認できます。

ls -F /proc/3589 コマンドと出力のスクリーンショット

以下のスクリーンショットでは、重要なシステム情報を示す多くのファイルの1つである/proc/interruptsを確認できます。

cat /proc/interrupts コマンドと出力のスクリーンショット


/sys
このディレクトリは、すべての情報がディスクではなくメモリにのみ存在するsysfs疑似ファイルシステムのマウント ポイントです。/devや/procと同様に、/sysディレクトリは実行されていないシステムでは空です。デバイス、ドライバ、カーネル モジュール、システム構成構造などに関する情報が含まれています。

sysfsは、システムに関する情報を収集し、実行中にその動作を変更するために使用されます。その意味では/procに似ていますが、それよりも歴史は新しく、どのような種類のエントリを含めることができるかの厳しい基準に準拠しています。たとえば、/sys内のほとんどすべての疑似ファイルには、1行または値しか含まれていません。/procにあるような長いエントリはありません。

/procの場合と同様に、このコースでは/sysのエントリを見て行きます。カーネルの構成とシステム監視に関してはこの後の章で見て行きます。

ls -lF /sys コマンドとその出力のスクリーンショット


/root
このディレクトリ（「スラッシュルート」と発音）は、rootユーザーのホーム ディレクトリです。

このディレクトリを所有するrootアカウントは、スーパーユーザー権限が必要な作業の時にのみ使用してください。一般ユーザーが実行する作業には、別のアカウントを使用します。

ls -saF /root コマンドとその出力のスクリーンショット


/sbin
このディレクトリには、/binディレクトリ内のバイナリに加えて、起動、復元、回復、または修復、もしくはそのすべてに必須のバイナリが含まれています。ブート中にルート ファイルシステムが正常であると確認したら、必要に応じて、/usr、/home、およびその他の場所に他のファイルシステムをマウントします。

次のプログラムはこのディレクトリにあります（サブシステムがインストールされている場合）。

fdisk, fsck, getty, halt, ifconfig, init, mkfs, mkswap, reboot, route, swapon, swapoff, update.

💡
前述したように、最近の一部のディストリビューションでは、（/binと/usr/binと同じように）/sbinと/usr/sbinを分離するという戦略を放棄し、1つのディレクトリにシンボリックリンクを配置し、2つのディレクトリ ビューを持つものがあります。

ls /sbin コマンドとその出力のスクリーンショット


/srv
FHSは以下のように定義しています。

「/srvには、このシステムによって提供されるサイト固有のデータが含まれています。

これを指定する主な目的は、ユーザーが特定のサービスのデータ ファイルの場所を見つけることができるようにすることです。そして、読み取り専用データ、書き込み可能なデータ、およびスクリプト（cgiスクリプトなど）に対して単一のツリーを必要とするサービスを、合理的に配置できるようにすることです。

/srvのサブディレクトリに名前を付ける方法は、現時点ではこれがどのように行われるべきかのコンセンサスが得られていないため、特定されていません。/srvの下でデータを構造化する1つの方法として、プロトコル（ftp、rsync、www、cvsなど）があります。」

システム管理者（およびディストリビューション）は/srvを使用するものと無視するものとに分かれます。/srvとは対照的に、/varに何を置くのが最善かについては、しばしば混乱が生じます。


/tmp
このディレクトリは一時ファイルを保存するために使用され、任意のユーザーまたはアプリケーションがアクセスできます。ただし、/tmpにあるファイルを長期間使用することはできません。

一部のディストリビューションでは、パージ スクリプトが変更されない限り、10日以前のファイルを削除する自動cronジョブが実行されます。
一部のディストリビューションでは、リブートするたびに/tmpの内容が削除されます。これはUbuntuのポリシーです。
最近の一部のディストリビューションは仮想ファイルシステムを利用しており、/tmpディレクトリを、tmpfsファイルシステムを使用するRAMディスクのマウント ポイントとしてのみ使用します。これはFedoraシステムのデフォルト ポリシーです。システムが再起動すると、すべての情報が失われます。 /tmpはまさに一時的なものです！
最後に注意ですが、/tmpに大きなファイルを作成しないようにする必要があります。これらのファイルは実際にはディスクではなくメモリ内の領域を占有するので、メモリの枯渇によってシステムに損害を加えたりクラッシュしたりしやすくなります。ガイドラインでは、アプリケーションが/tmpに大きなファイルを置かないようにしていますが、このポリシーに違反し、/tmpに大きな一時ファイルを作成するアプリケーションはたくさんあります。（おそらく環境変数を指定することによって）それらを別の場所に配置することが可能であっても、多くのユーザーはその方法を認識しておらず、すべてのユーザーが/tmp にアクセスしています。

Feodraのsystemdを使用するシステムでは、次のコマンドを発行することによりこのポリシーをキャンセルできます。

$ sudo systemctl mask tmp.mount

その後、システムを再起動します。


/usr
/usrディレクトリは、　二次的な階層と考えることができます。システムの起動に必要ではないファイルのために使用します。実際、/usrはルート ディレクトリと同じパーティションに存在する必要はありません。ネットワーク越しに同じシステム アーキテクチャを使用するホスト間で共有できます。

ソフトウェア パッケージは、/usrの直下にサブディレクトリを作成しないようにしてください。互換性のために、他の場所へのシンボリックリンクが存在する場合があります。

通常、このディレクトリは読み取り専用データです。シングル ユーザー モードには必要のないバイナリが含まれています。/usr/localディレクトリが含まれ、ローカル バイナリなどが保存されます。manページは/usr/share/manに保存されます。

💡
最近の一部のディストリビューションは、（/sbinと/usr/sbinと同様に）/binと/usr/binを分離する戦略を放棄しており、シンボリックリンクを使って1つのディレクトリで 2つのディレクトリ ビューを持つものがあります。そのディストリビューションでは、ブート後にマウントされる別のパーティションに/usrを配置するのは、時代遅れとみなしています。

表：/usrの下のディレクトリ

ディレクトリ	目的
/usr/bin	必須でなはいコマンド バイナリ
/usr/etc	必須ではない構成ファイル（通常は空）
/usr/games	ゲーム データ
/usr/include	アプリケーションのコンパイルに使用されるヘッダー ファイル
/usr/lib	ライブラリ ファイル
/usr/lib64	 64ビット用のライブラリ ファイル
/usr/local	第三レベルの階層（マシン ローカル ファイル用）
/usr/sbin		必須ではないシステム バイナリ
/usr/share	読み取り専用のアーキテクチャ非依存のファイル
/usr/src 		Linux カーネルのソースコードとヘッダー
/usr/tmp 		第二の一時的なディレクトリ


/var
このディレクトリには、システム操作中に頻繁に変更される変数（または揮発性）データ ファイルが含まれます。このディレクトリには以下が含まれます。

ログ ファイル
スプール ディレクトリとファイル
管理データ ファイル
キャッシュ コンテンツなどの短期の一時的なファイル。

言うまでもなく、/varを読み取り専用ファイルシステムとしてマウントすることはできません。

セキュリティ上の理由から、/varを別のファイルシステムとしてマウントすることは良い考えだと思います。さらに、ディレクトリがいっぱいになっても、システムはロックされるべきではありません。

/var/logはほとんどのログ ファイルが置かれている場所であり、/var/spoolはメール、印刷、cronジョブなどのプロセス用のローカル ファイルがアクションを待っている間保存される場所です。

表：/varの下のサブディレクトリ

サブディレクトリ	目的
/var/ftp	 ftpサーバー ベースに使用
/var/lib	実行時にプログラムによって変更される恒久的なデータ
/var/lock		リソースへの同時アクセスを制御するために使用されるロック ファイル
/var/log		ログ ファイル
/var/mail		ユーザー メール ボックス
/var/run		ブート以降の実行中のシステムに関する情報
/var/spool	印刷キューなど、スプールされた、または処理を待機しているタスク
/var/tmp		システムを再起動しても保持される一時的なファイル。時々/tmpにリンクされます。
/var/www 	ウェブサイトの階層のルート

ls -lF /var コマンドとその出力のスクリーンショット


/run
/runにマウントされた新しいディレクトリ ツリーは、主要なLinuxディストリビューションで数年間使用されておりFHSに提案されていますが、まだ正式には受け入れられていません。ただし、利用する可能性が非常に高いため知っておくと便利です。

/run の目的は、一時的なファイル保存です。これらは、システムの起動の早い段階で書き込まれ、再起動時に保持する必要がないランタイム情報が含まれます。

通常、/runは空のマウント ポイントとして実装され、実行時にtmpfs RAMディスク（/dev/shmなど）がマウントされます。これはメモリにのみ存在する疑似ファイルシステムです。

/var/runや/var/lockなどは、/runの下のディレクトリへの単なるシンボリックリンクになります。ディストリビューションによっては、他のディレクトリも/runの下の場所を指しているだけの場合があります。

ls -rF /run コマンドとその出力のスクリーンショット


デモ：CentOSのストレージの主な使用対象
このビデオでは、CentOSでのストレージの主な使用対象を調べます。


演習

課題 2.1: Linux の標準的なディレクトリのサイズ 
🚩
以下のPDFドキュメントに埋め込まれた外部URLにアクセスする場合は、常に右クリックして新しいタブまたはウィンドウで開いてください。直接クリックしてURLを開こうとすると、コース ウィンドウ／タブが閉じます。

 【【これ以降は橋本さんの訳を参照】】
Use the du utility to calculate the overall size of each of your system’s top-level directories. Type the command:$ du --helpfor hints on how to obtain and display this result efficiently.
Solution 2.1
To obtain a full list of directories under / along with their size:$ sudo du --max-depth=1 -hx /4.3M    /home16K     /lost+found39M     /etc4.0K    /srv3.6M    /root178M    /opt138M    /boot6.1G    /usr1.1G    /var16K     /mnt4.0K    /media869M    /tmp8.4G    /Where we have used the options:•--maxdepth=1: Just go down one level from/and sum up everything recursively underneath in the tree.•-h: Give human-readable numbers (KB, MB, GB).•-xStay on one filesystem; don’t look at directories that are not on the/partition. In this case that means ignore:/dev /proc /run /sys because these are pseudo-filesystems which exist in memory only; they are just empty mount points when the system is not running. Because this was done on a RHEL system, the following mount points are also not followed:/bin /sbin /lib /lib64since they are just symbolically linked to their counterparts under/usr.


課題 2.2: /proc ファイルシステムを探索する
🚩
以下のPDFドキュメントに埋め込まれた外部URLにアクセスする場合は、常に右クリックして新しいタブまたはウィンドウで開いてください。直接クリックしてURLを開こうとすると、コース ウィンドウ／タブが閉じます。

Exercise 2.2: Touring the /proc Filesystem
Please Note
Exactly what you see in this exercise will depend on your kernel version,  so you may not match the output shown precisely.

1.  As root,cdinto/procand do a directory listing. This should display a number of files and directories:$ cd /proc$ ls -F1/      128/    1510/   20/     2411/   30895/  53/    6925/  802/  951/         kmsg10/     129/    1511/   2015/   2425/   31/     54/    7/     81/   952/         kpagecgroup1002/   13/     1512/   2022/   2436/   31449/  55/    70/    813/  957/         kpagecount1007/   130/    1513/   2023/   2444/   32/     56/    702/   814/  97/          kpageflags10540/  131/    1514/   20300/  2451/   33/     58/    709/   816/  9742/        loadavg10590/  13172/  152/    20354/  2457/   34/     585/   71/    817/  98/          locks10798/  132/    15552/  20380/  2489/   35/     59/    718/   82/   99/          meminfo10805/  133/    15663/  20388/  25/     36/     60/    719/   83/   9923/        misc10806/  134/    15737/  20392/  2503/   37/     61/    72/    834/  acpi/        modules10809/  135/    159/    20396/  2504/   374/    6193/  721/   835/  asound/      mounts@10810/  136/    15981/  2086/   2531/   379/    62/    723/   84/   buddyinfo    mtrr10813/  137/    16/     2090/   2546/   38/     63/    725/   841/  bus/         net@10894/  138/    162/    211/    2549/   380/    634/   727/   842/  cgroups      pagetypeinfo10925/  1384/   1632/   22/     2562/   40/     64/    73/    85/   cmdline      partitions10932/  1385/   1636/   2205/   25794/  41/     65/    7300/  857/  config.gz    sched_debug10934/  1387/   166/    2209/   26/     42/     662/   74/    86/   consoles     scsi/10935/  139/    1670/   2212/   2610/   43/     663/   757/   864/  cpuinfo      self@10941/  1390/   17/     2232/   26108/  44/     665/   758/   867/  crypto       slabinfo10983/  1393/   17271/  2238/   2619/   4435/   666/   76/    87/   devices      softirqs10998/  14/     17361/  2296/   2624/   45/     67/    761/   88/   diskstats    stat11/     140/    1793/   2298/   2627/   46/     670/   762/   881/  dma          swaps11047/  1410/   18/     23/     2644/   468/    671/   765/   886/  driver/      sys/1105/   1415/   1831/   23042/  2645/   47/     673/   766/   887/  execdomains  sysrq-trigger1121/   1429/   18880/  2344/   2679/   470/    674/   768/   888/  fb           sysvipc/1123/   1437/   18903/  2348/   27/     484/    678/   769/   889/  filesystems  thread-self@1135/   1445/   19/     2353/   2706/   49/     679/   77/    89/   fs/          timer_list11420/  146/    19392/  2354/   2762/   492/    68/    771/   9/    interrupts   timer_stats11499/  1463/   19488/  2365/   28/     493/    682/   78/    90/   iomem        tty/11515/  147/    1954/   23683/  2858/   5/      683/   79/    92/   ioports      uptime11530/  1476/   1963/   2370/   28730/  50/     686/   793/   921/  irq/         version1163/   148/    19727/  2372/   28734/  51/     687/   794/   928/  kallsyms     vmallocinfo1164/   1485/   19734/  2374/   29/     510/    69/    8/     930/  kcore        vmstat12/     149/    19984/  24/     2973/   514/    690/   80/    931/  keys         zoneinfo127/    15/     2/      2406/   3/      52/     691/   801/   944/  key-users
Notice many of the directory names are numbers; each corresponds to a running process and the name is the process ID. An important subdirectory we will discuss later is/proc/sys, under which many system parameters can be examined or modified.

2.  View the following files:
•/proc/cpuinfo:
•/proc/meminfo:
•/proc/mounts:
•/proc/swaps:
•/proc/version:
•/proc/partitions:
•/proc/interrupts:

The names give a pretty good idea about what information they reveal.
Note that this information is not being constantly updated; it is obtained only when one wants to look at it.

3.  Take a peek at any random process directory (if it is not a process you own some of the information might be limited unless you use sudo):
$ ls -F 4435
attr/       coredump_filter  gid_map     mountinfo   oom_score_adj  sessionid  syscall
autogroup   cpuset           io          mounts      pagemap        setgroups  task/
auxv        cwd@             limits      mountstats  personality    smaps      timerslack_ns
cgroup      environ          loginuid    net/        projid_map     stack      uid_map
clear_refs  exe@             map_files/  ns/         root@          stat       wchan
cmdline     fd/              maps        oom_adj     sched          statm
comm        fdinfo/          mem         oom_score   schedstat      status

Take a look at some of the fields in here such as:cmdline, cwd, environ, mem,and status


知識チェック

「第2章 - Linuxファイルシステム ツリー（階層）構造」を完遂しました。おめでとうございます。このクイズに答えて、これまでに学んだ概念の理解度をチェックしてください。

クイズ開始

問題 2.1
Filesystem Hierarchy Standard（FHS）によれば、全ユーザーに対するシステム全体の構成ファイルを置く場所として、どの最上位ディレクトリ（/の下にある/tmpなど。/tmp/otherではありません）を使うべきでしょうか？

A. /var
B. /etc
C. /opt
D. /proc

問題 2.2
Filesystem Hierarchy Standard（FHS）によれば、データを保存したり設定を保存する個々のユーザー ファイルは、どの最上位ディレクトリ（/の下にある/tmpなど。/tmp/otherではありません）に置く必要がありますか？

A. /home
B. /var
C. /proc
D. /tmp

問題 2.3
Filesystem Hierarchy Standard（FHS）によれば、システム サービス メッセージやウェブ サーバーのログなどのシステム ログ ファイルが含まれている最上位ディレクトリ（/の下にある/tmpなど。/tmp/otherではありません）はどれですか？

A. /home
B. /var
C. /proc
D. /sys

問題 2.4
Filesystem Hierarchy Standard（FHS）によれば、圧縮されたLinuxカーネル（vmlinuz）や初期RAMファイルシステム（initramfs）など、システム起動の初期段階でのみ使用されるファイルが含まれる最上位ディレクトリ（/の下にある/tmpなど。/tmp/otherではありません）はどれですか？
A. /bin
B. /lib
C. /tmp
D. /boot

問題 2.5
Filesystem Hierarchy Standard（FHS）によれば、Linuxカーネル モジュール（カーネルに対して動的にロードおよびアンロードされる拡張機能）が含まれる最上位ディレクトリ（/の下にある/tmpなど。/tmp/otherではありません）はどれですか？

A. /proc
B. /run
C. /lib
D. /boot

問題 2.6
ディスクに格納されたデータの代わりに、システム情報を抽象化した特別なエントリを含むディレクトリがいくつかあります。これらの疑似ファイルは、システムが適切に機能するために非常に重要です。次のどのディレクトリにこれらが含まれていますか？ 該当するものをすべて選択してください。

A. /ブート
B. /dev
C. /etc
D. /lib
E. /mnt
F. /opt
G. /proc
H. /sys
I. /srv