Linux の 101 試験対策: システム・ファイルの検索と配置

ファイルシステム階層標準でのファイルの配置場所

Linux システムでのファイルシステム階層標準 (Filesystem Hierarchy Standard: FHS) に従った正しいファイルの配置場所について学び、重要なファイルとコマンドを検索する方法を覚えてください。このチュートリアルの内容は、Linux のシステム管理者として認定するための LPI 101 試験に備えて勉強するために利用することも、単にファイルの編成および管理について調べるために利用することもできます。

Ian Shields, Linux Author, Freelance

Ian ShieldsIan Shields は、Linux のフリー・ライターです。ノースカロライナ州 Research Triangle Park にある IBM を退職した彼が、オーストラリアのキャンベラにある IBM にシステム・エンジニアとして入社したのが 1973年であり、それ以降、カナダのモントリオールやノースカロナイナ州 Research Triangle Park でシステム・エンジニアリングとソフトウェア開発の両方に携わってきました。1990年代後半からは、Linux を使用して Linux 上で開発を行うとともに、Linux に関する執筆も行ってきました。彼は、オーストラリア国立大学で純粋数学および哲学の学士号を取得し、ノースカロライナ州立大学でコンピューター・サイエンスの修士号と博士号を取得しています。普段はオリエンテーリングを楽しんでおり、旅行に行くのも好きです。


developerWorks 貢献著者レベル

2016年 5月 26日 (初版 2010年 6月 09日)

概要

より詳しく学び、さらなる開発を行い、より多くの人とつながる

新たに登場した developerWorks Premium メンバーシップ・プログラムでは、メンバーになると、強力な開発ツールのほか、Safari Books Online を通じて提供される最もホットな 500 タイトルの技術書 (Java 開発者向けのものが大量にあります) を含む各種のリソースをすべて自由に利用できるようになります。さらに、主要な開発者向けイベントの登録料の大幅な割引や、最新の O'Reilly カンファレンスの全容を閲覧できる再生動画など、その他にもさまざまな特典が提供されます。今すぐサインアップしてください

このチュートリアルでは、ファイルシステム階層標準 (Filesystem Hierarchy Standard: FHS) について学びます。このチュートリアルで説明する内容は以下のとおりです。

  • FHS に従ったファイルの配置場所について
  • Linux システムでファイルとコマンドを検索する方法
  • FHS に定義されている各種の重要なファイルおよびディレクトリーを検索する方法と、これらのファイルおよびディレクトリーの用途

このチュートリアルは、LPIC-1: Linux Server Professional Certification 101 試験における主題 104 の項目 104.7 に備える上で役に立ちます。この項目は、重要度が 2 とされています。


組織で多数の Linux ディストリビューションを使用する

200 を優に超える Linux ディストリビューションといくつかの UNIX バリアントでは、それらすべてに共通する事項が数多くあるため、システム内にファイルを配置する標準的な方法を決めておくことが望まれます。このようにすれば、新しいユーザーがより快適に新しいシステムを使えるようになるとともに、使い慣れたユーザーがシステムを管理するのにも役立ち、パッケージ配布の作業も楽になります。ファイルシステム階層標準 (Filesystem Hierarchy Standard: FHS) は、Linux や UNIX ライクなシステムでのディレクトリーの一般的な配置を指定する文書です。2015年 6月 3日にはバージョン 3.0 が発表されて、2004年 1月 29日に発表された以前のバージョン 2.3 が置き換えられました。

この連載について

この連載は Linux システム管理タスクの学習に役立つだけでなく、Linux Professional Institute の LPIC-1: Linux Server Professional Certification 試験に備えるための教材にもなります。

連載の各チュートリアルに関する説明とリンクについては、developerWorks の「Linux の 101 試験対策: LPIC-1 のロードマップ」を参照してください。現在進行中のこのロードマップは、2015年 4月 15日に更新された LPIC-1 試験の項目のバージョン 4.0 を反映しています。完成したチュートリアルは、その都度ロードマップに追加されていきます。

前提条件

この連載のチュートリアルを最大限に活用するには、Linux の基礎知識と、チュートリアルに記載されたコマンドを演習できる実際の Linux システムが必要です。特に記載のない場合、このチュートリアルの例で使用しているのは、Fedora (カーネル 4.1.3) です。

プログラムのバージョンによって出力のフォーマットに違いが出てくる場合もあるため、コマンドの実行結果は必ずしもここに記載するリストや図とまったく同じであるとは限りません。特に、記載する出力のほとんどは、お使いのシステムにインストールされているパッケージによって大きく左右されます。出力がかなり違っているとしても、重要な共通点は認識できるはずです。


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

ファイルシステム階層標準 (FHS、Filesystem Hierarchy Standard) は、Linux や UNIX ライクなシステムでの共通ディレクトリー構造を規定する文書です。Linux ディストリビューションの違いに関係なく、同じ標準的な場所にファイルを配置することによって、ディストリビューションに依存しないソフトウェア開発を容易にする FHS は、Linux Standard Base (「参考文献」を参照) でも採用されています。FHS により、ユーザーもソフトウェアも、インストールされたファイルとディレクトリーの位置を予測できるようになっています。FHS 準拠のファイルシステムでは、大抵の UNIX ファイルシステムに備わっている基本的なセキュリティー機能を、オペレーティング・システムがサポートしていることを前提とします。

互いに独立した 2 つの FHS カテゴリー

FHS の中核となっているのは、互いに独立した以下の 2 つのファイル特性です。

共有可能であるか、共有不可能であるか
共有可能なファイルは、そのファイルが配置されているシステムとは別のシステム上でも使用することができます。一方、共有不可能なファイルは、そのファイルを使用するシステム上に配置しなければなりません。
静的であるか、可変であるか
静的ファイルとは、システム管理者の介入 (例えば、パッケージのインストールやアップグレードなど) によってのみ変更されるファイルのことです。静的ファイルにはマニュアル、ライブラリー、バイナリーが含まれます。一方、可変ファイルとは静的ファイル以外のすべてのファイル (ログ、スプール・ファイル、データベース、ユーザー・データなど) を指しており、これらのファイルはユーザーやシステム・プロセスによって変更されることがあります。

以上の区別により、異なる一連の特性を持ったファイルを、それぞれ別のファイルシステムに保管することができます。表 1 に、FHS 文書から抜粋した FHS 準拠のファイル配置例を示します。

表 1. FHS の例
共有可能共有不可能
静的/usr
/opt
/etc
/boot
可変/var/mail
/var/spool/news
/var/run
/var/lock

Linux システムに何百、何千ものファイルが含まれていることは珍しくありません。私が最近インストールした 64-bit の Fedora 22 システムには、/usr 階層だけをとっても 170,000 を超えるファイルが保管されています。

[root@atticf22 ~]# find /usr -type f | wc -l
174182

他に私が使っているシステムのほとんどでも、ファイルの数は 100,000 を超えているか、場合によっては 200,000 に達しています。次のいくつかのセクションでは、この膨大なデータのなかからファイル、特にプログラムを探し出すために利用できるツールについて説明します。


実行ファイルに対する PATH

複数の Linux システムを使ったことがあれば、もうご存知だと思いますが、root ユーザーとしてログインすると、一般ユーザーとしてログインしているときには実行できないコマンドを実行できるようになります。一方で、一般ユーザーには実行できるけれども、root ユーザーとしては実行できないコマンドもあります。コマンドラインでプログラムを実行すると、要求されたプログラムを見つけるために bash シェル (または別のシェル) がディレクトリーのリストをひと通り検索します。ディレクトリーのリストは、PATH 環境変数の中で指定されています。古いシステムでは、root ユーザーのパスに /sbin が含まれている一方で root 以外のユーザーのパスには /sbin が含まれていないのが一般的でした。リスト 1 に、3 つの異なるディストリビューションの一般ユーザーのパスの例と root ユーザーのパスの例を示します。

リスト 1. PATH の例
[ian@attic4-cent ~]$ # CentOS 6
[ian@attic4-cent ~]$ echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/ian/bin
[ian@attic4-cent ~]$ su -
Password: 
[root@attic4-cent ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[ian@atticf22 ~]$ # echo Fedora 22
[ian@atticf22 ~]$ echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/ian/.local/bin:/home/ian/bin
[ian@atticf22 ~]$ su -
Password: 
[root@atticf22 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@atticf22 ~]# ls -l /sbin
lrwxrwxrwx. 1 root root 8 Aug 16  2014 /sbin -> usr/sbin

ian@attic-mint17 ~ $ # Linux Mint 17.2
ian@attic-mint17 ~ $ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
ian@attic-mint17 ~ $ sudo -s
attic-mint17 ~ # echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
attic-mint17 ~ # fortune
Command 'fortune' is available in '/usr/games/fortune'
The command could not be located because '/usr/games' is not included in the PATH environment variable.
fortune: command not found

このリストからわかるように、PATH 環境変数はコロンで区切られたディレクトリー名のリストに過ぎません。CentOS の場合の一般ユーザーのパスと root ユーザーのパスの並びの違い、そして Linux Mint の一般ユーザーのパスに追加されている 2 つの games ディレクトリーに注意してください。fortune ゲーム・コマンドは、実際には /usr/games/fortune にあるため、完全修飾パス名が指定されない限り、Mint の root ユーザーは、ゲームをプレイせずに、作業に張り付かなければならなくなります。/sbin ディレクトリーが一般ユーザーのパスに含まれていないシステムでは、tune2fs などのプログラムは root ユーザーしか見つけることができないのが一般的でした。

通常、ユーザーのパスは .bash_profile または .bashrc などの初期化ファイルの中で設定されます。この初期化ファイルで新しいパスを指定することで、現行の bash プロセスに対してパスを変更することができます。新しいパスの値を以降の他のプロセスでも使用できるようにする場合には、忘れずに PATH 環境変数をエクスポートしてください。例えば、test-hello ディレクトリーで Hello World アプリケーションを開発しているとします。このディレクトリーをパスに追加することにより、完全修飾パスを毎回指定しなくても hello 実行ファイルを実行できるようにする方法をリスト 2 に示します。

リスト 2. PATH の変更方法
[ian@atticf22 ~]$ hello
bash: hello: command not found...
[ian@atticf22 ~]$ test-hello/hello
Hello World! 
[ian@atticf22 ~]$ export PATH=~/test-hello:$PATH
[ian@atticf22 ~]$ hello
Hello World!

which、type、whereis コマンド

前のセクションでは、hello コマンドを実行しようとしたときに、このコマンドが見つからない場合がある理由を説明しました。その一方、コマンド名を入力した場合に実行されるコマンドを見つけるのに役立つコマンドもいくつかあります。

which コマンド

コマンドを入力したときに、パスを検索して (そのコマンドが 1 つ以上見つかった場合に) どのコマンドが実行されるかを調べるために、which コマンドを使用することができます。リスト 3 に、パスを更新する前と後で hello コマンドを検索する例を示します。

リスト 3. which の使用方法
[ian@atticf22 ~]$ echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/ian/.local/bin:/home/ian/bin
[ian@atticf22 ~]$ which hello
/usr/bin/which: no hello in (/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:
/home/ian/.local/bin:/home/ian/bin)
[ian@atticf22 ~]$ export PATH=~/test-hello:$PATH
[ian@atticf22 ~]$ echo $PATH
/home/ian/test-hello:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:
/home/ian/.local/bin:/home/ian/bin
[ian@atticf22 ~]$ which hello
~/test-hello/hello

which コマンドが表示するのは、ユーザーのパスで検出されたコマンドの最初のオカレンスだけです。複数のオカレンスがあるかどうかを調べるには、リスト 4 に示すように、-a オプションを追加します。

リスト 4. 複数のオカレンスを検出する場合の which の使用方法
[ian@atticf22 ~]$ which awk
/usr/bin/awk
[ian@atticf22 ~]$ which -a awk
/usr/bin/awk
/bin/awk

ここでは、2 つの場所で awk コマンドが見つかっています。1 つは usr/bin (システム上のコマンドのメイン・ディレクトリー) で、もう 1 つは /bin (このディレクトリー内のコマンドは、システム管理者とユーザーの両方が使用できます。他のファイルシステムが 1 つもマウントされていない場合、このディレクトリーは必須です) です。

この連載の別のチュートリアル「Linux の 101 試験対策: ハード・リンクとシンボリック・リンクの作成および変更」で、これらの 3 つのファイルが結局はすべて 1 つの gawk コマンドを表していることを調べる方法を説明しています (リスト 5 を参照)。

リスト 5. すべて gawk にリンクされている awk コマンド
[ian@atticf22 ~]$ ls -l $(which -a awk)
lrwxrwxrwx. 1 root root 4 Jan  2  2015 /bin/awk -> gawk
lrwxrwxrwx. 1 root root 4 Jan  2  2015 /usr/bin/awk -> gawk
[ian@atticf22 ~]$ ls -ld /bin /usr/bin
lrwxrwxrwx. 1 root root     7 Aug 16  2014 /bin -> usr/bin
dr-xr-xr-x. 2 root root 69632 Aug 10 10:40 /usr/bin

皆さんは驚かれるかもしれませんが、Fedora 22 システムでは、/bin は実際には /usr/bin へのシンボリック・リンクです。

type コマンド

シェルの組み込みコマンドなど、which コマンドでは検出できないコマンドもあります。type コマンドは、指定されたコマンド・ストリングが実行に際してどのように評価されるかを調べるための組み込みコマンドです。リスト 6 では whichtype を使用して、type コマンドはパスに置かれているような実行可能コマンドではなく、シェルの組み込みコマンドであることを明らかにしています。

リスト 6. type の使用方法
[ian@atticf22 ~]$ which type
/usr/bin/which: no type in (/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:
/home/ian/.local/bin:/home/ian/bin)
[ian@atticf22 ~]$ type type
type is a shell builtin

whereis コマンド

プログラムが置かれている場所だけでなく、さらに詳しい情報が必要な場合には、whereis コマンドを使用することができます。例えば、このコマンドを使用して man ページや他の情報を検索することができます (リスト 7 を参照)。

リスト 7. whereis による man ページの検索方法
[ian@atticf22 ~]$ whereis awk
awk: /usr/bin/awk /usr/libexec/awk /usr/share/awk /usr/share/man/man1p/awk.1p.gz 
/usr/share/man/man1/awk.1.gz

whereis は、/bin 内にある awk のコピーを検出しなかったことに注意してください。whereis が使用するディレクトリーは固定されているため、このコマンドで必ず検索対象を検出できるとは限りません。whereis コマンドはソース・ファイルの検索、代替検索パスの指定、および異常なエントリーの検索にも対応します。whereis の振る舞いを変更する方法、またはこのコマンドが使用する固定パスを変更する方法については、man ページを調べてください。


find コマンド

連載の以前のチュートリアル「Linux の 101 試験対策: ファイルとディレクトリーの管理」では、名前 (ワイルドカードを含む)、パス、サイズ、またはタイムスタンプを基準にファイルを検索する方法を学びました。また、別のチュートリアル「Linux の 101 試験対策: ハード・リンクとシンボリック・リンクの作成および変更」では、特定のファイルまたは i ノードへのリンクを検索する方法を学びました。

find コマンドはいわば、Linux システムのファイル検索ツールを集めたスイス・アーミー・ナイフです。以前のチュートリアルで説明した機能の他、このコマンドのユーザーまたはグループ名を基準にファイルを検索する機能、そしてアクセス権を基準にファイルを検索する機能も役に立つと思います。

例えば、あるユーザーが /tmp 階層に保管しているファイルを調べたいとします。リスト 8 に、root ユーザーがユーザー ian の /tmp に含まれるすべてのファイルを検索する方法を示します。

リスト 8. ユーザーおよびグループを基準としたファイルの検索
 [root@atticf22 ~]# find /tmp -user ian
/tmp/jna-104022
...
/tmp/hsperfdata_ian
/tmp/hsperfdata_ian/2390
/tmp/tracker-extract-files.1000
/tmp/.esd-1000
/tmp/.esd-1000/socket
/tmp/.X11-unix/X0
/tmp/.ICE-unix/1668

-group テストを使って、グループを基準にファイルを検索することもできます。さらに、-nouser-nogroup オプションを使用することで、システムのどのユーザーにも属していないファイルや、どのグループにも属していないファイルを検索することも可能です。他のテストと同様、「!」を使用すればテストの否定を実行することができます。通常、私は自分のユーザー番号を、多くのシステムでデフォルトとして使われている 1000 に設定しています。また、システムが自動的に ian というグループを作成しない場合には、グループ番号を同じく 1000 に設定した ian というグループを自分で作成しています。他のシステムでは今でも番号が 500 から始まっていたり、新規ユーザーをデフォルトで「users」グループに配置したりする場合もあります。Red Hat 6.2 システムを基に記録された古い研究資料では、未だにユーザー番号が 500 となっています。リスト 9 に現在のユーザー・グループが所有してないディレクトリーを見つける方法を示します。research/rh62/involution は、ユーザー番号 500 およびグループ番号 4 が所有していますが、私が現在使用しているシステムには、このユーザーとグループはどちらも存在しません。数値によるユーザー ID またはグループ ID を基準にファイルやディレクトリーを検索するには、-uid テストまたは -gid テストを使用してください。

リスト 9. ian が所有していないディレクトリーの検索
[ian@atticf22 ~]$ find -L research -maxdepth 2 -type d ! -group ian
research/rh62/involution
research/rh62/programs
research/lost+found
find: ‘research/lost+found’: Permission denied
[ian@atticf22 ~]$ ls -ld research/rh62/involution
drwxr-xr-x. 2 500 adm 4096 Nov 10  1999 research/rh62/involution

アクセス権を基準にファイルを検索するには、-perm テストと併せて、chmod コマンドや umask コマンドで使用するような記号式を使用します。完全一致のアクセス権を検索することもできますが、それよりもアクセス権の式の先頭にハイフンを付けて、指定のアクセス権を持つファイル (その他のアクセス権は任意) を検索したいことを示唆した方が有効な場合がよくあります。リスト 10 では、ユーザー、グループ、および全員が実行可能なファイルを検索する方法、そして他のユーザーは読み取ることのできないファイルを検索する 2 つの方法を説明します。

リスト 10. アクセス権を基準としたファイルの検索
[ian@atticf22 ~]$ find . -maxdepth 1 -type f -perm -uga=x
./hello
[ian@atticf22 ~]$ find . -maxdepth 1 ! -perm  -o=r
.
./.ssh
./.ICEauthority
./.bash_history
./.config
...
./.kde
./.cache
[ian@atticf22 ~]$ find . -maxdepth 1 ! -perm  -0004
.
./.ssh
./.ICEauthority
./.bash_history
./.config
...
./.kde
./.cache

これまで、find コマンドで実行できる主な検索のタイプをいくつか説明してきましたが、出力をさらに絞り込むには、複数の式を組み合わせ、その組み合わせに正規表現を追加するという方法があります。この万能のコマンドについて詳しく学ぶには、man ページを参照してください。あるいは情報システムがインストールされている場合には、info find を実行すると、さらに詳しい情報を調べることができます。

リスト 11 に、find を使用して検索する最後の例を示します。最初の例では、cd を実行して /usr/include にカレント・ディレクトリーを変更し、表示される内容が長くなりすぎないようにしてから、パス名に大/小文字に関わらず packet という単語が含まれるすべてのファイルを検索しています。2 番目の例では、出力をさらに絞り込んで、ディレクトリーではなく、サイズが 1500 バイト以上のファイルだけを検索対象としています。お使いのシステムでの実際の出力は、どのパッケージがインストールされているかによって異なります。

リスト 11. find の最後の例
[ian@atticf22 ~]$ cd /usr/include
[ian@atticf22 include]$ find . -iregex ".*packet.*"
./net/if_packet.h
./linux/packet_diag.h
./linux/if_packet.h
./netpacket
./netpacket/packet.h
[ian@atticf22 include]$ find . -iregex ".*packet.*" ! -type d -size +1500c
./linux/packet_diag.h
./linux/if_packet.h
./netpacket/packet.h

注意する点として、正規表現は、find によって返される完全パスにマッチしなければなりません。正規表現とワイルドカードの違いを思い出してください。


locate および updatedb コマンド

find コマンドを実行するたびに、このコマンドは指定されたすべてのディレクトリーを検索します。検索時間を短縮するには、locate という別のコマンドを使用することができます。このコマンドは毎回ファイルシステムを検索するのではなく、パス情報が保管されたデータベースを検索します。

locate コマンド

locate コマンドは、一致するファイルをデータベースで検索します。このデータベースは通常、cron ジョブによって毎日更新されます。

locate コマンドが検索対象とするのはファイル名だけではありません。このコマンドは、パス名の構成部分も突き合わせます。ファイル名は単一引用符で囲み、より正確に突き合わせるために 1 つ以上のグロビング文字を含めてください。リスト 12 に、bin/ls というストリングが含まれるパスを検出する方法を示します。このリストには、グロビング文字を使って出力を絞り込む 2 つの例も示されています。

リスト 12. locate を使用したパスの検索と出力の絞り込み
[ian@attic4-cent ~]$ # CentOS 6
[ian@attic4-cent ~]$ locate /bin/ls
/bin/ls
/bin/lsblk
/bin/lscgroup
/bin/lssubsys
/usr/bin/lsattr
/usr/bin/lsb_release
/usr/bin/lscpu
/usr/bin/lsdiff
/usr/bin/lshal
/usr/bin/lslogins
/usr/bin/lsusb
/usr/bin/lsusb.py
[ian@attic4-cent ~]$ locate '\/bin/ls'
/bin/ls
[ian@attic4-cent ~]$ locate '/bin/ls*'
/bin/ls
/bin/lsblk
/bin/lscgroup
/bin/lssubsys

updatedb コマンド

locate コマンドがデフォルトで使用するデータベースは、/var ファイルシステム内の (例えば、/var/lib/located などの) 場所に保管されています。この場所は、セキュリティーの強化や速度向上のために slocate パッケージや mlocate パッケージを使用しているシステムでは異なる可能性があります。locate データベースの統計を検索するには、locate -S を使用することができます (リスト 13 を参照)。

リスト 13. locatedb の統計
[ian@attic4-cent ~]$ # CentOS 6
[ian@attic4-cent ~]$ locate -S
Database /var/lib/mlocate/mlocate.db:
	77,143 directories
	776,460 files
	56,872,710 bytes in file names
	21,074,461 bytes used to store database

このデータベースを作成、または更新するために使用するコマンドは、updatedb です。このコマンドは通常、cron ジョブとして毎日実行されます。updatedb の構成ファイルは、/etc/updatedb.conf (場合によっては /etc/sysconfig/locate) です。データベースが毎日更新されるようにするには、root ユーザーが /etc/updatedb.conf を編集して、DAILY_UPDATE=yes を設定する必要があります。データベースを即時作成するには、root ユーザーとして updatedb コマンドを実行します。

locate を使用する際には、セキュリティーや、updatedb データベースの日次ビルドに関するネットワーク上のファイル I/O についても考慮しなければなりません。詳細については、man ページおよび updatedb 構成ファイルを調べてください。


ルート・ファイルシステムの FHS ディレクトリー

FHS が目標としているのは、ルート・ファイルシステムをできる限り小さく維持することです。けれども、ルート・ファイルシステムには、経験を積んだ管理者がこれらの作業を行うために必要とするユーティリティーを含め、システムのブート、リストア、リカバリー、あるいは修理に必要なすべてのファイルが保管されていなければなりません。システムをブートするには、他のファイルシステムのマウントを許可するのに十分なファイルがルート・ファイルシステムに置かれている必要があることに注意してください。

表 2 に、FHS がルート (/) ファイルシステム内に規定しているディレクトリーと、それぞれのディレクトリーの用途を示します。この表に示されているディレクトリー、またはそのディレクトリーへのシンボリック・リンクのいずれかは、必ず存在していなければなりません。ただし、「オプション」と記されているディレクトリーについては、対応するサブシステムが存在する場合に限り、必要となります。

表 2. FHS で規定されたルート・ファイルシステム
プロセスの実行に関係するデータ
ディレクトリー用途
bin必須コマンドのバイナリー
bootブート・ローダーの静的ファイル
dev デバイス・ファイル
etc ホスト固有のシステム構成
lib 必須の共有ライブラリーおよびカーネル・モジュール
media 取り外し可能なメディアのマウント・ポイント
mnt ファイルシステムを一時的にマウントするためのマウント・ポイント
optアドオン・アプリケーションのソフトウェア・パッケージ
run
sbin必須のシステム・バイナリー
srv このシステムが提供するサービスのためのデータ
tmp 一時ファイル
usr2 次階層
var可変データ
homeユーザーのホーム・ディレクトリー (オプション)
lib<qual> 代替フォーマットに必須の共有ライブラリー (オプション)
rootroot ユーザーのホーム・ディレクトリー (オプション)

/usr および /var 階層

/usr と /var の 2 つの階層は、FHS が専用のセクションを設けるほどに複雑です。/usr ファイルシステムは、ファイルシステムのなかで 2 番目に主要なセクションで、ここには共有可能な読み取り専用のデータが含まれます。/usr は複数のシステム間で共有することができますが、現在の慣例では共有されることはほとんどありません。

/var ファイルシステムには、スプール・ディレクトリーとスプール・ファイル、管理データとロギング・データ、短期データと一時データをはじめとする可変データ・ファイルが保管されます。/var にはシステム間で共有できない部分がありますが、その他の部分 (/var/mail、/var/cache/man、/var/cache/fonts、/var/spool/news など) は共有することができます。

注: FHS のバージョン 3.0 では、/var/run 階層は、別の /run 階層へと移されました。/run ディレクトリーには、システムがブートされて以降のシステムを記述するシステム情報が含まれています。このディレクトリー配下のファイルは、ブート時に削除するか切り取っておかなければなりません。プログラムでは後方互換性のため、引き続き /var/run を使用しても構いませんが、/run を使用するように移行するのが望ましいです。

この標準を完全に理解するには、FHS 文書を読んでください (「参考文献」を参照)。

これで、Linux におけるファイルの配置についての概説は終わりです。

参考文献

学ぶために

  • developerWorks Premium のメンバーになると、強力なツールや Safari Books Online から集めて管理する技術ライブラリーをすべて自由に利用できるほか、カンファレンスの割引を受けることや、カンファレンスの記録を閲覧することができ、さらには SoftLayer や Bluemix を利用できるクレジットが提供されるなど、さまざまな特典があります。
  • 2015年 4月時点での LPI のバージョン 4.0 の試験項目に基づく LPIC-1 認定に備えて勉強するのに役立つ developerWorks のチュートリアルを見つけるには、developerWorks の LPIC-1 ロードマップを利用してください。
  • Linux Professional Institute の Web サイトで、LPIC の詳細な試験項目、課題のリスト、例題を調べてください。特に以下のページを参照してください。 必ず Linux Professional Institute の Web サイトで最新の項目を参照してください。
  • FHS (Filesystem Hierarchy Standard) バージョン 3 のホームにアクセスするか、FHS バージョン 2.3 の使用を参照してください。
  • LSB (Linux Standard Base) について学んでください。LSB は、標準バイナリー・オペレーティング環境の開発を目的とする FSG (Free Standards Group) プロジェクトです。2007年に Free Standards Group と OSDL が合併して Linux Foundation が設立されました。
  • The Linux Documentation Project には、HOWTO 文書をはじめ、各種の有益な文書が豊富に揃っています。
  • さまざまな IBM 製品や IT 業界のトピックに焦点を絞った developerWorks テクニカル・イベントで最新の技術情報を入手してください。
  • Twitter で developerWorks をフォローしてください。

議論するために

  • developerWorks コミュニティーに参加してください。ここでは他の developerWorks ユーザーとのつながりを持てる他、開発者が主導するブログ、フォーラム、グループ、Wiki を調べることができます。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=1030814
ArticleTitle=Linux の 101 試験対策: システム・ファイルの検索と配置
publish-date=05262016