ファイル‐システム【file system】
ファイルシステム
ハードディスクなどの外部記憶媒体のデータを管理するための仕組み。データを「ファイル」と呼ばれる単位で管理し、多くの場合、ツリー型のディレクトリ構造を持つ。また、Linuxのように、カーネルで管理するメモリや各種デバイス類もファイルのようにアクセスできるようになっているシステムもあり、疑似ファイルシステムと呼ばれる。
ファイルシステムの種類によって、ファイルサイズや1つの媒体で管理できるファイルの個数、ジャーナリングシステムの有無などが異なる。オープンソースで開発が進められてきたファイルシステムとしてはLinux標準で使われているext2およびext3、また、ジャーナリングシステムをサポートしているRaiserFSなどが有名。また、IBM社のJFSやSilicon Graphics社(現SGI社)XFSもLinux用に移植され、オープンソースとなった。
関連見出し
ポーティング
Filesystem Hierarchy Standard
関連URL
Filesystem Hierarchy Standard(http://www.pathname.com/fhs/)
Linux Kernel HOW-TO―ファイルシステム(日本語訳)(http://www.linux.or.jp/JF/JFdocs/The-Linux-Kernel-10.html)
NAMESYS(http://www.namesys.com/)
JFS for Linux(http://jfs.sourceforge.net/)
XFS(http://oss.sgi.com/projects/xfs/download.html)
ファイルシステム
ファイルシステムとは、OSが提供するリソース管理機能の一つで、補助記憶装置に対する低レベルのアクセスをラップし、よりアプリケーションに近いアクセスインターフェースを提供する仕組みのことである。
ファイルシステムは、アプリケーションから見て、データをより容易に扱えるようなインターフェースを提供する。ファイルシステムを用いることによって、デバイスレベルでは1と0の並びでしかないデジタルデータの並びを、ファイルとディレクトリのような論理的な構造としてアプリケーション側に見せることができる。また、このような論理的な構造に対して、統一的なアクセス方法を提供する。例えば、階層的なディレクトリの中で、特定位置を示す方法、データをファイルという固まりとして扱う方法、ファイルをオープン(open)、リード(read)、ライト(write)、クローズ(close)といった標準的な手順で扱う方法を物理的な装置とは独立したレベルで提供するものである。
記憶装置は、それぞれ固有の仕組みを持ち、デバイスドライバのレベルでは、個々の装置固有の制御をしなければならない。一方、アプリケーションから見ると、それぞれの記憶装置がどんなものであるかを気にせずに、単に論理的なデータを透過的に保存したり、読み込んだりしたい。ここでファイルシステムを用いれば、どのような記憶装置に対しても、全く同じ作法でやり取りすることができるようになる。こういう意味で、ファイルシステムは、データの入出力手段を抽象化しているといえる。ファイルシステムが存在することで、アプリケーションの側は、個々の装置の物理的な特性を気にせずに、より汎用的な構造で、仕組みを実現することができるようになる。
Windows系OSでは、FAT、FAT32、NTFSといったファイルシステムが用いられてきた。Macintosh系OSでは、HFSが、Linux系OSでは、ext2、ext3などが用いられてきた。これらは、いずれも、記憶装置としては、磁気ディスク装置(HDD)を想定しており、セクタとよばれる物理レベルのデータの固まりを、如何に効率よく、かつ、使いやすくするかという工夫をしている。なお、CD-ROMやDVD-ROMなどの光ディスク系のメディアでは、ISO 9660などの規格で規定されたCD-ROMファイルシステムが利用されている。磁気ディスクが、書き込みが可能なメディアであるのに対して、光ディスクは、書き込みが不能で、読み出しのみができるため、ディレクトリ構造の表現は、書き換わることが無い前提で、高速に利用できる仕組みになっている。また、OS内のデータの基本単位をデータベースと考えるデータベースファイルシステムや、ネットワーク上でファイルの共有などができる分散ファイルシステムなどもある。
ファイルシステム関数
導入
要件
この拡張モジュールを構築するには外部ライブラリを必要としませんが、 Linux 上で LFS (ラージファイル) をサポートする PHP を希望する場合は、 最新の glibc を入手し、次のコンパイラフラグ -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 を付けて PHP をコンパイルする必要があります。インストール手順
PHP コアに含まれるため、 追加のインストール無しで使用できます。実行時設定
php.ini の設定により動作が変化します。表 90. ファイルシステムおよびストリーム設定オプション
名前 | デフォルト | 変更の可否 | 変更履歴 |
---|---|---|---|
allow_url_fopen | "1" | PHP_INI_SYSTEM | PHP_INI_ALL は PHP <= 4.3.4 で利用可能です。 PHP 4.0.4 から利用可能です。 |
allow_url_include | "0" | PHP_INI_SYSTEM | PHP 5.2.0 から利用可能です。 |
user_agent | NULL | PHP_INI_ALL | PHP 4.3.0 から利用可能です。 |
default_socket_timeout | "60" | PHP_INI_ALL | PHP 4.3.0 から利用可能です。 |
from | "" | PHP_INI_ALL | |
auto_detect_line_endings | "0" | PHP_INI_ALL | PHP 4.3.0 から利用可能です。 |
以下に設定ディレクティブに関する 簡単な説明を示します。
- allow_url_fopen boolean
- このオプションにより、URL対応のfopenラッパーが使用可能となり、 ファイルのようにURLオブジェクトをアクセスできるようになります。 デフォルトのラッパーが、ftpまたはhttpプロトコルを用いて リモートファイルに アクセスするために提供されています。zlibのようないくつかの拡張モジュールが ラッパーを追加することがあります。
注意: この設定はセキュリティ上の理由で php.ini 中でのみ設定可能です。
注意: このオプションは、バージョン4.0.3のリリース直後に追加されました。 4.0.3を含む以前のバージョンでは、この機能は、設定スイッチ --disable-url-fopen-wrapperを使用することに より、コンパイル時にのみ無効にすることができます。警告 PHP 4.3より前のWindows版では、以下の関数は、リモートファイルの アクセスをサポートしません。: include(), include_once(), require(), require_once(), イメージ 拡張モジュールの imagecreatefromXXX - allow_url_include boolean
- このオプションを指定すると include()、include_once()、 require()、require_once() で URL 対応の fopen ラッパーが使用できるようになります。
注意: この設定を使用するには、allow_url_fopen が on でないといけません。 - user_agent string
- 送信する PHP 用のユーザエージェントを定義します。
- default_socket_timeout integer
- ソケットベースのストリームのデフォルトの有効時間(単位は秒)を定義します。
注意: この設定は、PHP 4.3で追加されました。 - from string
- 匿名ftp用パスワード(自分のemailアドレス)を定義します。
- auto_detect_line_endings boolean
- onにした場合、PHPは fgets() および file() により読み込まれたデータを評価し、UNIX、MS-DOS、Machintoshの行末 表記を使用しているかどうかを調べます。
これにより、PHPがMacintoshシステムと相互運用できるようになりますが、 デフォルトはOffとなっています。これは、最初の行の行末表記を検出 する際にごく僅かな性能劣化があるためと、UNIXシステムのもとで復改 文字を項目セパレータとして使用している人が従来のバージョンと互換 性がない動作であると感じる可能性があるためです。
注意: この設定オプションは、PHP 4.3で追加されました。
リソース型
定義済み定数
以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。- GLOB_BRACE (integer)
- GLOB_ONLYDIR (integer)
- GLOB_MARK (integer)
- GLOB_NOSORT (integer)
- GLOB_NOCHECK (integer)
- GLOB_NOESCAPE (integer)
- PATHINFO_DIRNAME (integer)
- PATHINFO_BASENAME (integer)
- PATHINFO_EXTENSION (integer)
- PATHINFO_FILENAME (integer)
- PHP 5.2.0 以降。
- FILE_USE_INCLUDE_PATH (integer)
- FILE_APPEND (integer)
- FILE_IGNORE_NEW_LINES (integer)
- FILE_SKIP_EMPTY_LINES (integer)
参考
関連する関数については、ディレクトリ およびプログラム実行の節を 参照してください。リモートファイルとして使用することができる種々のURLラッパーの一覧 と説明については、付録 M. サポートされるプロトコル/ラッパーも参照してください。
目次
- basename — パス中のファイル名の部分を返す
- chgrp — ファイルのグループを変更する
- chmod — ファイルのモードを変更する
- chown — ファイルの所有者を変更する
- clearstatcache — ファイルのステータスのキャッシュをクリアする
- copy — ファイルをコピーする
- delete — unlink() か unset() を参照してください
- dirname — パス中のディレクトリ名の部分を返す
- disk_free_space — ディレクトリの利用可能なスペースを返す
- disk_total_space — ディレクトリの全体サイズを返す
- diskfreespace — disk_free_space() のエイリアス
- fclose — オープンされたファイルポインタをクローズする
- feof — ファイルポインタがファイル終端に達しているかどうか調べる
- fflush — 出力をファイルにフラッシュする
- fgetc — ファイルポインタから1文字取り出す
- fgetcsv — ファイルポインタから行を取得し、CSVフィールドを処理する
- fgets — ファイルポインタから 1 行取得する
- fgetss — ファイルポインタから1行取り出し、HTMLタグを取り除く
- file_exists — ファイルまたはディレクトリが存在するかどうか調べる
- file_get_contents — ファイルの内容を全て文字列に読み込む
- file_put_contents — 文字列をファイルに書き込む
- file — ファイル全体を読み込んで配列に格納する
- fileatime — ファイルの最終アクセス時刻を取得する
- filectime — ファイルのinode変更時刻を取得する
- filegroup — ファイルのグループを取得する
- fileinode — ファイルのinodeを取得する
- filemtime — ファイルの更新時刻を取得する
- fileowner — ファイルの所有者を取得する
- fileperms — ファイルの許可属性を取得する
- filesize — ファイルのサイズを取得する
- filetype — ファイルタイプを取得する
- flock — 汎用のファイルロックを行う
- fnmatch — ファイル名がパターンにマッチするか調べる
- fopen — ファイルまたはURLをオープンする
- fpassthru — ファイルポインタ上に残っているすべてのデータを出力する
- fputcsv — 行を CSV 形式にフォーマットし、ファイルポインタに書き込む
- fputs — fwrite() のエイリアス
- fread — バイナリ・モードでファイルを読み込む
- fscanf — フォーマットに基づきファイルからの入力を処理する
- fseek — ファイルポインタを移動する
- fstat — オープンしたファイルポインタからファイルに関する情報を得ます
- ftell — ファイルポインタから読み書きの位置を取得する
- ftruncate — ファイルを指定した長さに丸める
- fwrite — バイナリ・モードによるファイル書き込み
- glob — パターンにマッチするパス名を探す
- is_dir — ファイルがディレクトリかどうかを調べる
- is_executable — ファイルが実行可能かどうかを調べる
- is_file — 通常ファイルかどうかを調べる
- is_link — ファイルがシンボリックリンクかどうかを調べる
- is_readable — ファイルが読み込み可能かどうかを知る
- is_uploaded_file — HTTP POSTによりアップロードされたファイルかどうかを調べる
- is_writable — ファイルが書き込み可能かどうかを調べる
- is_writeable — is_writable() のエイリアス
- lchgrp — シンボリックリンクのグループ所有権を変更する
- lchown — シンボリックリンクの所有者を変更する
- link — ハードリンクを作成する
- linkinfo — リンクに関する情報を取得する
- lstat — ファイルまたはシンボリックリンクに関する情報を与えます
- mkdir — ディレクトリを作る
- move_uploaded_file — 新しい位置にアップロードされたファイルを移動する
- parse_ini_file — 設定ファイルをパースする
- pathinfo — ファイルパスに関する情報を返す
- pclose — プロセスのファイルポインタをクローズする
- popen — プロセスへのファイルポインタをオープンする
- readfile — ファイルを出力する
- readlink — シンボリックリンク先を返す
- realpath — 絶対パス名を返す
- rename — ファイルをリネームする
- rewind — ファイルポインタの位置を先頭に戻す
- rmdir — ディレクトリを削除する
- set_file_buffer — stream_set_write_buffer() のエイリアス
- stat — ファイルに関する情報を取得する
- symlink — シンボリックリンクを作成する
- tempnam — ユニークなファイル名を生成する
- tmpfile — テンポラリファイルを作成する
- touch — ファイルの最終アクセス時刻および最終更新日をセットする
- umask — 現在のumaskを変更する
- unlink — ファイルを削除する
ファイルシステム
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/01/10 14:36 UTC 版)
ファイルシステム(英: file system、filesystem)は、コンピュータのリソースを操作するための、オペレーティングシステム (OS) が持つ機能の一つ。ファイルとは、主に補助記憶装置に格納されたデータを指すが、デバイスやプロセス、カーネル内の情報といったものもファイルとして提供するファイルシステムもある。
注釈
- ^ IBMは1990年にAIX 3.1 リリース時に JFS を導入。これは現在 JFS1 と呼ばれている。新たなJFS (JFS2などと呼ばれる) はLinux移植版がベースで、1999年にOS/2 Warp Server for e-Business で最初に出荷された。
- ^ マイクロソフトはWindows 95 OSR2で最初に FAT32 を導入し、Windows 98で本格的に採用した。
- ^ ディスク上のディレクトリ構造自体に制限がある。特にInstallable File Systemのドライバはファイル名とディレクトリ名に制限がある。また、OSがファイルシステムの種類に寄らず全体に制限を加えていることもある。MS-DOS, Microsoft Windows, OS/2は全ファイルシステムについて \ / : ? * " > < | NUL といった文字をファイル名やディレクトリ名に使えない。UNIXおよびLinuxは全ファイルシステムについて / NUL という文字をファイル名やディレクトリ名に使えない。
- ^ a b c ブロックサイズやクラスタサイズが可変なファイルシステムについては、ブロックサイズの最大と最小のときのボリュームサイズの範囲を示す。例えば、FATではディスク上のクラスタサイズが512 B – 128 KBである。しかし、Installable File Systemの一部のドライバやOSによっては32 KBより大きいクラスタサイズをサポートしていない。
- ^ a b c d e f g h i j k l m n o p これらのファイルシステムでは、
.
と..
というディレクトリエントリ名は特別な意味を持つ。そのような名前のディレクトリエントリは禁じられておらず、むしろ普通のディレクトリエントリ名として存在している。しかし、これらはある意味で固定のエントリで固定の値を持ち、ディレクトリ生成時に自動的に生成される。これらのエントリがないディレクトリは壊れていると見なされる。 - ^ a b c d e f g h i j k l m n o p q r ディスク上の構造としては制限はないが、一部のInstallable File SystemのドライバやOSによっては制限している場合がある。MS-DOSはFAT12やFAT16に関して260バイト以上のパス名をサポートしていない。Windows NTはNTFSに関して32767文字 (UTF-16) 以上のパス名をサポートしていない。POSIXの規定では「NULL終端で1024バイトを保証すること」とされているが、上限についての記述はない。
- ^ a b c d e f FAT12、FAT16、FAT32の実装が、長いファイル名 (LFN) をサポートしているかどうかに依存する。OS/2, MS-DOS, Windows 95, Windows 98 のDOSモードやLinuxの msdosドライバではLFNをサポートしていないので、ファイル名は8.3形式に制限される (制限を越えるとベース名も拡張子も空白で埋められる)。また、NUL (ディレクトリ終端マーカー) を含むこともできず、文字5 (削除済みファイルマーカーとして使われる文字229の代用) も含むことができない。短い名前では小文字も含まれない。
- ^ FAT32のパーティションをこのサイズで作成して使用することは可能だが、ソフトウェアによっては 32 GiB以上のFAT32用パーティションを作成できない。有名なのは、Windows XPのインストールプログラムである (これはNTFSの利用を促すための意図的な制限であると思われる)。これを回避するには Windows Meの緊急用ブートディスクのFDISKを使う必要がある。
- ^ Mac OSはHFS+のボリューム上のファイル名を扱う関数群を2種類用意している。ひとつは完全なUnicodeの名前を返し、もうひとつは従来互換を保つために31バイトまでの名前を返すものである。
- ^ HFS+は任意のUnicode文字を許すためにエスケープシーケンスをサポートしている。古いソフトウェアからはそのエスケープシーケンスがそのまま見える。
- ^ HFS+のボリュームサイズはほぼ無制限であるが、Mac OSには以下のような制限がある。Mac OS 8, 9:2 TiB。Mac OS X 10、10.1:2 TiB。Mac OS X 10.2:8 TiB。Mac OS X 10.3、10.4:16 TiB。ファイルサイズの最大はこれより若干小さい (Mac OS 8では2 GB)。フォルダ内の最大ファイル数 (フォルダ数) は以下の通り。 Mac OS 8, 9:2^15 (32767)。macOS:2^31。しかし、通常最大ボリュームサイズをブロックサイズで割った値で制限される。
- ^ a b これはディスク上の構造による制限である。Windows NT用NTFSドライバはボリュームサイズを256 TiB、ファイルサイズを16 TiB に制限している。
- ^ ReiserFSの理論上の最大ファイルサイズは1 EiBだが、[1]によれば、「ページキャッシュの制限により、32ビット int のアーキテクチャでは 8 TiB に制限される」
- ^ この制限は新しい版では大きくなるかもしれない。
- ^ a b Linux 2.4 では XFS の最大ファイルサイズは 64 TiB だが、Linux 2.4 自体が最大 2 TiB までしかサポートしていない。IRIXにはこの制限はない。
- ^ a b 一部のInstallable File SystemドライバやOSによってはFAT12やFAT16で拡張ファイル属性をサポートしていない。OS/2とWindows NTはFAT12/FAT16向けに拡張ファイル属性をサポートしている ("EA DATA. SF"擬似ファイルを使ってそのためにアロケートされたクラスタを予約している)。他のOSのファイルシステムドライバではサポートしていない。
- ^ f-nodeにはユーザー識別子用フィールドがあるが、OS/2 Warp Server 以外では使われていない。
- ^ NTFSのアクセス制御リストは単純なPOSIX式ファイルパーミッションで表せることは表現できるが、Services for UNIX や Cygwin を使わないとPOSIXのインターフェイスがサポートされない。
- ^ a b c d アクセス制御リストとMACラベルは拡張属性として実装される。
- ^ FreeBSD 4.XなどのOSでは拡張属性をparallel backing fileを使って実装している。
- ^ a b c d e f g h 一部のInstallable File SystemドライバやOSによっては、これらのファイルシステムについて拡張属性、ACL、セキュリティラベルをサポートしていない。2.6.x以前のLinuxはこれらをサポートしていないか、パッチが必要である。
- ^ NTFS 5.0 以降では、junctions を生成でき、(個々のファイルではなく) ディレクトリ全体をローカルに管理するドライブのいずれかのディレクトリツリーにマップすることができる。これは reparse points と呼ばれる機能で実現されており、ファイル名解析部分を柔軟に拡張可能となっている。
- ^ NTFS自体は大文字/小文字を区別するが、Windowsサブシステムは互換性を維持するため大文字/小文字の差異しかないファイル名を生成できないようになっている。新しいファイルを書き込みのためにオープンしたとき、大文字/小文字の差異を無視したときに同じ名前となるファイルが既に存在すると、その既存のファイルの内容が消されて書き込みに使われてしまう。Services for UNIXを使うと、完全な大文字/小文字の区別が行われる。
- ^ メタデータのみのジャーナリングは、Max OS X v10.2.2 の HFS+ドライバから導入された。デフォルト値でジャーナリングが有効となったのはMac OS X v10.3以降である。
- ^ 一般に大文字/小文字を区別していると思われがちであるが、HFS+は基本的には区別していない。単に大文字/小文字の違いを保護しているだけである。Mac OS X v10.3のコマンド newfs_hfs -s で大文字/小文字を区別するファイルシステムを作成できる。HFSXという別のファイルシステムは、HFS+を改良したもので、こちらは大文字/小文字を区別する。Technical Note TN1150: HFS Plus Volume FormatではHFS+とHFSXについて技術的詳細を論じている。
- ^ Mac OS X v10.4とMac OS X v10.3はファイル変更ログを提供している (ファイルシステムソフトウェアの機能であり、ボリューム形式自体がサポートしているわけではない)。fsloggerを参照されたい。
- ^ NetBSDの"Soft dependencies" (softdep) およびFreeBSDの"soft updates"はジャーナリングせずにメタデータの一貫性を常に保つ機能がある。
- ^ Linux 2.6.12 以降。
- ^ デフォルトでは無効になっている。
- ^ デフォルトでは無効になっている。
- ^ ログ構造化ファイルシステムであり,メタデータだけでなく全てのファイルデータの更新がインクリメンタルに記録される。
- ^ ReiserFSの完全なブロック・ジャーナリングは Linux 2.6.8 で追加された。
- ^ 一部のInstall File SystemドライバやOSによってはJFSでの大文字/小文字区別をサポートしていない。OS/2はサポートしておらず、Linux はマウント時のオプションで指定できる。
- ^ "aliases"と呼ばれている。
- ^ a b UDFはログ構造ファイルシステムであり、ファイルシステム全体がジャーナルであるかのように振舞う。
- ^ VxFSはオプションとして「ストレージ・チェックポイント」と呼ばれる機能を提供している。これは高機能のファイルシステム・スナップショット機能である。
- ^ a b ZFSはトランザクション・ファイルシステムであり、コピー・オン・ライト方式であるため、ジャーナルを使わなくてもディスク上の状態は常に正常である。しかし、同期書き込みを指定されたときなどの性能向上のため、ログを実装している。
- ^ ここで言う可変ブロックサイズとは、ファイル毎にブロックサイズを変更できるシステムである。エクステントと似ているが実装方針が微妙に異なる。UFS2の現状の実装はリードオンリーのみである。
- ^ a b c DOS 6 の DoubleSpace や Windows 95およびWindows 98の DriveSpace は FAT におけるデータ圧縮機能だが、マイクロソフトが既にサポートしていない。
- ^ a b c 8:1以外の「ブロック:フラグメント」のサイズ比もサポートしているが、8:1が最も一般的で多くの実装で推奨されている。
- ^ 1997年から利用可能なe2comprというパッチのセットでext2でのブロック単位のデータ圧縮が可能となる。しかし、これがLinuxカーネルのメインラインにマージされたことはない。
- ^ a b フラグメントは計画されていたが、ext2とext3に実装されたことはない。
- ^ Reiser4はデータ圧縮を実装しているが、そのためのVFS APIが提供されていない。
- ^ "extents"モードで実現。
- ^ UDFの実装に依存する。
- ^ ZFSの論理ブロックベースの圧縮を有効にすると、ファイルの最後尾ブロックに対してTail-Packingのように働く。
- ^ コピーオンライトであるため、ZFSは全ての書き込みについて遅延アロケーションを行う。
出典
「ファイルシステム」の例文・使い方・用例・文例
固有名詞の分類
- ファイル システムのページへのリンク