Linuxのシステムディレクトリの配置をまとめた、FHSというルールがある - 前編 -
こんにちは。
開発チームのワイルド担当、まんだいです。
Linuxを触り始めて最初の頃は、apacheのconfigがどこにあるか、体感的に覚えて、何となく分かっているような状態という事があります。
Linuxのシステムディレクトリの構成や、各ディレクトリの名前、配置にはちゃんとした理由があって、それを知れば、もっとすんなり分かる事があるんじゃないかと思ったので、FHSについてまとめた記事をお送りします。
FHSってなんだ?
FHSは「File Hierarchy Standard」の略で、Linuxのファイル構造の標準を定めたものです。
これを知ってLinuxのコンソールに入ると、なぜそのファイルがそこにあるのかや、見たいファイルの場所に当たりが付けられて、作業効率が上がるかも知れません。
このFHSは、大抵のLinuxディストリビューションで採用されているので、解釈に多少の差異はありますが、概ね同じような構成になっています。
なお、FHSにもバージョンがあって、現在3.0が策定されております。
こちらの公開日が2015年5月18日なので、時代の流れとともにこちらの内容も変化していくようです。
ルートディレクトリ以下の構成
最新のFHS3.0の原文はFHS Referenced Specificationsで確認できますが、いかんせん英語なので基本的な部分に絞って解説を入れます。
/bin
全ユーザー向けのコマンド格納先。
このディレクトリの中にサブディレクトリを作ることは禁止されています。
なお、lsやcat、ps、mkdirなど必須コマンド33種類 + オプションコマンド9種類が決められています。
どれも確かに必須といった基本的なコマンドですね。
リストは3.4. /bin : Essential user command binaries (for use by all users)にあります。
この中には、moreも含まれていて、lessは含まれていません。
なので、lessコマンドは必ずしもインストールされている訳ではないというのは驚きです(less派の意見)。
/boot
このディレクトリには、ブートローダーに関するファイルや、inetdに関するファイルが設置されています。
HDDのマスターブートレコードに置かれる事が多く、OS起動前に使われるものになるようです。
/dev
ここはデバイスファイルの置き場になります。
一番お世話になると思われる、nullや、ttyに関するファイルが置かれています。
このファイルを使って、各種デバイスにアクセスするという形になっています。
/etc
etcetera(その他)の意味のetcです。
ごく初期のUnixでは、どれに属するか明確に分けられないファイル群の置き場所だったようですが、現在は静的設定ファイルの設置場所で、実行可能なバイナリファイルは置いてはいけないことになっています。
/home
各ユーザーのホームディレクトリを格納するためのディレクトリです。
ホームディレクトリの使い方はユーザー次第なので、単に個人的なファイルの置き場になっている場合もあれば、apacheユーザーのホーム以下に、public_htmlなどを設置してインターネット公開用のファイルを置いてある事もあります。
なお、/home の設置はオプション扱いなので、なくてもシステム上問題ない状態でなければいけないようです。
/lib
共有ライブラリとカーネルモジュールの設置場所になります。
手元のCentOS7で /lib を見てみると、このディレクトリ自体が、/usr/lib へのシンボリックリンクになっていました。
このようにLinuxには、シンボリックリンクのお陰で、FHSのバージョンアップに追従しつつ、既存のシステムに影響を与えない事が可能です。
/lib<qual>
<qual>の部分には、システムのビット数が入ります。
/lib64 なら、64ビット環境固有の共有ライブラリなどを置きます。
ただ、/lib(/usr/lib)にあるものが、32ビット/64ビット共に使えたりする事も多いので、このディレクトリ自体がオプション扱いになっています。
実際運用中のLinuxサーバーを見てみても、/lib64 がスカスカだったり、空っぽだったりすることもあるので、使い方は難しいです。
VirtualBoxの共有フォルダがマウントできなくなった時の対処法 | 株式会社ビヨンドで紹介した事例もあるので、注意が必要です。
/media
リムーバブルメディアのマウントポイントを格納します。
ただ、リムーバブルメディアのマウントポイントは、幾つかパターンがあり、ルートディレクトリ直下に /cdrom としたり、/mnt 自体がマウントポイントになったり、/mnt/cdrom などの形になったりする事もあります。
FHSとしては、ルートディレクトリ直下にマウントポイントを作ると、マウントする毎にサブディレクトリが作られる事になるのでよろしくない、としています。
また、/mnt 以下をマウントポイントをするのが、最近一般的だったようですが、かなり古いシステムでは、/mnt 自体を一時的なマウントポイントとする事もあって、設定が衝突する可能性があるとの事で、/mediaを使った方がいいよという事です。
/mnt
過去には、マウントポイントしてごく一般的に使われていた /mnt ですが、FHS3.0ではシステム管理者がファイルシステムを一時的に使うためのもの、というかなり限定的かつ消極的な使い方に留めるような忠告を出しています。
/mntは、テンポラリ扱いなので、ここにマウントしたファイルシステムは、実行されるいかなるプログラムの動作にも影響を与えてないようにするすべきとの事。
/opt
/opt は追加ソフトウェアやパッケージのインストール先として用意されています。
/opt/[ソフトウェア・パッケージ名] としたり、LANANAに登録されたプロバイダ名のディレクトリを挟んで、ソフトウェア名のディレクトリを設置したりします。
自分でコンパイルしたソフトウェアをこちらにインストールする人もいます。
これ自体はFHS的に特に問題ないようですが、LANANAに登録された名前と衝突する可能性もあるので、一意になるようにネーミングには気をつけるべきです。
/root
こちらは、rootユーザーのホームディレクトリです。
この配下に、他のユーザーが実行する可能性のあるファイルを設置すると、権限が足らず実行できないので注意が必要です。
/root も必須ディレクトリではないようですが、ない場合は、 「/」がrootのホームディレクトリとされるようで、ややこしいので設置したほうがよいようです。
/run
このディレクトリには、ブートしてからのシステム情報が保存されています。
pidファイルやlockファイル、ソケットファイルなどが主に置かれています。
/sbin
sbinはSystem binariesの略で、システム管理者向けのユーティリティコマンドが収まっています。
ここにあるのは、ディストリビューション側で用意したコマンドで、システム管理者が管理のために追加するツールに関しては、/usr/sbin 以下に追加するべき、という感じのようです。
/srv
ここは、サーバー上で稼働しているサービスのデータファイルが見つけやすいように、統合的に管理できるようにするために設置されています。
ですが、/srv を使ってどのようにファイル構造を作っていくかは、特に決まっていないので、CentOS7では空っぽの状態です。
一つの方法としては、プロトコルベースでディレクトリを作成し、そのサブディレクトリにそのプロトコルを利用するサービス名のディレクトリを配置し、設定ファイルや管理用スクリプトなどを配置するようレイアウトするというものです。
/tmp
こちらはみんな大好き テンポラリディレクトリですね。
再起動した時、空になっているのが、/tmp、情報が残っているのが、/var/tmp になります。
長くなってしまったので後半に続きます。
以上です。