POSIXで定義されている7 つの標準的なUnix ファイル タイプは、通常、ディレクトリ、シンボリック リンク、FIFO 特殊、ブロック特殊、文字特殊、およびソケットです。[ 1 ]これらのタイプは、 UnixまたはUnix ライクなオペレーティングシステム(OS)のファイルシステムで使用されます。異なる OS 固有の実装では、POSIX で要求されるよりも多くのタイプが許可されています ( Solarisのドアなど)。ファイルのタイプは、ファイルシステムのパーミッションフィールドの最初の文字にタイプを表示するコマンドで識別できます。ls -l
通常のファイルの場合、Unix は内部ファイル構造 (ファイル形式と呼ばれることもあります) を強制したり提供したりしません。[ 2 ]したがって、その構造と解釈は、それらを使用するソフトウェアに完全に依存します。[ 3 ]ただし、通常はコマンドを使用して、それらに含まれるデータの種類fileを判断できます。[ 4 ]
ファイルの種類は、ファイルの種類とアクセス権限で構成されるファイルモードによって指定されます。stat()システムコールは、statファイルモードを という名前のフィールドに含める構造体でファイルに関する情報を返しますst_mode。ファイルの種類とアクセス権限は通常、8 進整数リテラルに展開されるマクロとして定義され、構造st_mode体の はstat通常、符号なし整数変数として定義されます。この変数のサイズは通常 32 ビットですが、C 言語の標準では実装固有のサイズにすることも可能です。しかし、Unix ライクなシステムでは、通常、フィールドの 16 ビット (8 進数で 6 桁) のみがst_mode、異なるファイル タイプとアクセス権限を表す 8 進整数リテラルに使用され、最上位 4 ビット (8 進数で 2 桁) がファイル タイプに使用され、残りの 12 ビットがアクセス権限に使用されます。アクセス権限は、上位 3 ビット (8 進数で 1 桁) が setuid、setgid、および sticky 属性に使用され、これらは一般的に特殊権限と呼ばれ、それに続く 9 ビット (8 進数で 3 桁) が通常の権限に使用されます。POSIX では、ファイルのモードの最下位 12 ビットがアクセス権限として指定され、ファイル タイプ ビットは実装の詳細として残されています。[ 1 ]
8進数で記述すると、モード値はUnixファイルタイプを最初の2桁で別々に示します。たとえば、8進数100644のモードは、Unixファイルタイプのビットフィールドが8進数10であるため、通常のファイルであることを示します。この形式は、git 、 tar 、 arなどのコンテキストで使用されます。[ 5 ]
プログラムは、標準Cヘッダーで提供されるマクロを使用してモード値をテストし、Unix ファイル タイプを判定できます。たとえば、プログラムはモード値をS_IFMT(最初の 4 ビットの規則では 8 進数 170000) でマスクして Unix ファイル タイプを取得し、その値をテストしてS_IFDIRファイルがディレクトリかどうかを判定できます。あるいは、プログラムはS_ISDIRマクロを使用することもできます。S_IFMTは POSIX のコア概念ではなく、X/Open System Interfaces (XSI) の拡張機能です。POSIXのみに準拠するシステムでは、他の方法を使用する場合があります。[ 1 ]
lsPOSIXでは、Unixファイルタイプをエントリの最初の文字として表すコマンドのロングフォーマットを規定しています。 [ 6 ]
GNU coreutils のバージョンでは、モード文字列をフォーマットするためにgnulib関数[ 7 ]lsを呼び出します。FreeBSD はよりシンプルなアプローチを採用していますが、許可されるファイルタイプの数は少なくなっています。[ 8 ]filemode()
このコマンドは、各ファイルの出力の最初の列としてファイルモード文字列ls -lを報告します。この文字列は、Unix ファイルタイプインジケータで始まります。次の出力は、コマンドからのルートディレクトリに対するもので、ディレクトリであることを示すためにで始まります。最初の列の残りの部分()は、パーミッションを示します。ls -l /drwxr-xr-x
d rwxr-xr-x 26 ルート ルート 4096 9 月 22 日 09:29 /
コマンドの出力には、stat /完全なUnixファイルタイプ名が含まれます。
ファイル: "/" サイズ: 4096 ブロック数: 8 IOブロック数: 4096 ディレクトリ デバイス: 802h/2050d iノード: 128 リンク: 26 アクセス権限: (0755/ d rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) ...
シンボリックリンクファイルの出力は、先頭文字l(小文字の「L」)で始まり、このls -l出力例のように参照されるファイルパスを識別します。[ 6 ]
l rwxrwxrwx ... termcap -> /usr/share/misc/termcap l rwxrwxrwx ... S03xinetd -> ../init.d/xinetd
名前付きパイプは、コマンドを使用して作成できる特別なファイルです。名前付きパイプは、この出力例のように識別されます。[ 6 ]mkfifonamepls -l
p rw-rw---- ... マイパイプ
ソケットファイルパスは、 Unixドメインソケットの一種で、名前付きパイプとは異なり、全二重通信を可能にするプロセス間通信用の特別なファイルです。ソケットは、この出力例のようにマークされます。[ 6 ]sls -l
s rwxrwxrwx /tmp/.X11-unix/X0
ブロックファイルと文字ファイルはハードウェアデバイスを表します。デバイスファイルは、デバイスへのアクセスを制御したり、接続されたデバイス上でファイルのような操作を許可したりするために使用できます。文字デバイス(シリアルアクセス)は でマークされc、ブロックデバイス(ランダムアクセス)は でマークされます。bこのls -l出力例を参照してください。[ 6 ]
c rw-rw-rw- ... /dev/null b rw-rw---- ... /dev/sda
MP3やJPEGなどの多くの音声ファイルや画像ファイル形式は既に十分に圧縮されている。
ファイルは単なるバイト列に過ぎない。
filels