[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

12. 特殊ファイルの形式

この章は,特殊な形式のファイルを作成する方法(そして,特殊なファイル形 式の一つのディレクトリを削除するrmdir方法)を記述します.

Unixのようなオペレーティングシステムでは,他のものより特殊なファイル形 式は著しく少ないのですが,すべてのものを通常のファイル (normal files)と差異の無いバイトストリームとして扱うことが可能だとい うわけではありません.例えば,ファイルを作成したり削除したりするとき, システムはこの情報を記録する必要があり,それはディレクトリ (directory) — 特殊な形式のファイル — で行います.興味があれば,ディ レクトリを通常のファイルとして読み込むことも可能ですが,システムにその 作業をさせるために,ファイルのバイト上で,特定の順序になるよう,強制て きな構造にする必要があります.このためそれは“特殊な”形式のファイルと なります.

ディレクトリ以外では,特殊なファイル形式は,名前付きパイプ(FIFO),シン ボリックリンク,ソケット,そして特殊ファイル(special files)と呼 ばれるものを含みます.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

12.1 link: linkシステムコールでハードリンクを作成する

linkは単一のハードリンクを一度に作成します.それは,システム が提供するlink関数への最小のインターフェースです.See (libc)Hard Links section ‘Hard Links’ in The GNU C Library Reference Manual. 概要です.

 
link filename linkname

filenameは既存のファイルにする必要があり,linkname既存のディ レクトリに存在しないものを指定する必要があります.linkはリン クを作成するために,単純にlink (filename, linkname) を呼び出します.

終了ステータスのゼロは成功を示し,ゼロ以外の値は失敗を示します.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

12.2 ln: ファイル間にリンクを作成

lnは,ファイル間のリンクを作成します.デフォルトで,それはハー ドリンクを作成します.‘-s’を用いると,シンボリック(または ソフト(soft))リンクを作成します.概要です.

 
ln [option]… target [linkname]
ln [option]… targetdirectory

ハードリンク(hard link)は,既存のファイルの別名です.リンクとオ リジナルは区別できません.技術的には,それらは同じinodeを共有し,inode はファイルに関する必要な情報をすべて含んでいます — 実際,inodeがファ イルであると言っても間違いではありません.既存のすべての実装で は,ディレクトリにハードリンクを作成できず,ハードリンクはファイルシス テム間をまたぐことができません.(しかしながら,これらの制限は POSIXとマッチしません.)

一方,シンボリックリンク(Symbolic links) (短く言うと symlinks)は,リンクファイルが実際には名前の異なるファイルを参照 する特殊なファイル形式です(すべてのカーネルがサポートしているわけでは ありません.System V release 3(とそれより古いもの)はsymlinkがありませ ん).ほとんどの処理(開く,読み込む,書き出す等)は,シンボリックリンク を通じて行われ,カーネルは自動的にリンクをdereferencesし,リンク 先を処理します.しかし,リンク先ではなくリンクファイル自身に作用する (例えば削除)処理もあります.See (library)Symbolic Links section ‘Symbolic Links’ in The GNU C Library Reference Manual.

プログラムは以下のオプションも受け入れます.共通のオプションも参照 してください.

-b
--backup[=method]

See section バックアップオプション. 上書きされたり削除されたりするそれぞれのファイルのバックアップを作成し ます.

-d
-F
--directory

スーパーユーザによるディレクトリのハードリンク作成の試みができるように します.しかし,スーパーユーザでもシステムの制限のため,失敗する可能性 があることに注意して下さい.

-f
--force

既存のリンク先ファイルを削除します.

-i
--interactive

既存リンク先ファイルを削除するかどうか,プロンプトを表示します.

-n
--no-dereference

明示的な,ディレクトリへのシンボリックリンクとなるリンク先が与えられた とき,リンク先を通常のファイルとして扱います.

リンク先が(シンボリックリンクではない)実際のディレクトリのとき,不明瞭 なことはありません.しかし,指定されたリンク先がディレクトリへのシンボ リックリンクの時,ユーザの要求の扱い方は,二通りあります.ln は,リンク先を通常のディレクトリとして扱い,それに対するリンクを作成す ることができます.一方,リンク先を非ディレクトリ — シンボリックリン ク — として見ることもできます.その場合,lnは,新しいリン クを作成する前に,そのシンボリックリンクを削除またはバックアップする必 要があります.デフォルトでは,ディレクトリへのシンボリックリンクである リンク先を,ディレクトリと同様に扱います.

-s
--symbolic

ハードリンクの代わりにシンボリックリンクを作成します.このオプションは, シンボリックリンクをサポートしていないシステムでは,単にエラーメッセー ジを生成します.

-S suffix
--suffix=suffix

-b’で作成されるそれぞれのバックアップファイル名に, suffixを追加します.See section バックアップオプション.

--target-directory=directory

移動(コピー)先のdirectoryを指定します.See section ターゲットディレクトリ.

-v
--verbose

リンクする前にそれぞれのファイル名を出力します.

-V method
--version-control=method

-b’で作成するバックアップの形式を変更します.method引数 は,‘none’ (または‘off’),‘numbered’ (または‘t’), ‘existing’ (または‘nil’),または‘never’ (または ‘simple’)が利用可能です.See section バックアップオプション.

以下は例です.

 
ln -s /some/name  # creates link ./name pointing to /some/name
ln -s /some/name myname  # creates link ./myname pointing to /some/name
ln -s a b ..      # creates links ../a and ../b pointing to ./a and ./b

終了ステータスのゼロは成功を示し,ゼロ以外の値は失敗を示します.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

12.3 mkdir: ディレクトリの作成

mkdirは指定された名前でディレクトリを作成します.概要です.

 
mkdir [option]… name

nameが既存のファイルでディレクトリではない場合,mkdir は標準エラー出力に警告メッセージを出力し,残っているnameを処理し た後,1のステータスで終了します.nameが既存のディレクトリで, ‘-p’オプションが与えられていないときも同じです.nameが既存 のディレクトリで,‘-p’オプションが与えられている場合, mkdirはそれを無視します.すなわち,mkdirは警告の出 力も,エラーの発生も,(‘-m’オプションが与えられていても)ディレク トリのモードの変更もせず,残りのnameの処理を続けます.

プログラムは以下のオプションも受け入れます.共通のオプションも参照 してください.

-m mode
--mode=mode

作成されるディレクトリのモードをmodeで設定し,それは chmodで設定する抽象的なもので,(読み書きと実行を全員に許可す る)‘a=rwx’から目的のポイントのためにumaskのビットセットを引いたも のを使用します.See section ファイルの許可.

-p
--parents

それぞれの引数に対し,足りない親ディレクトリを作成します.親ディレクト リのモードは‘u+wx’で編集されたumaskに設定します.既存のディレクト リに対する引数は無視します.

-v
--verbose

作成されるそれぞれのディレクトリに対しメッセージを出力します.これは ‘--parents’とともに用いると最も便利です.

終了ステータスのゼロは成功を示し,ゼロ以外の値は失敗を示します.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

12.4 mkfifo: FIFO(名前付きパイプ)の作成

mkfifoはFIFO(名前付きパイプ(named pipes)とも呼ばれる) を指定された名前で作成します.概要です.

 
mkfifo [option] name

FIFOは,個別のプロセス間の通信を可能にする特殊なファイル形式です. 一つのプロセスは書き込みで,もう一つは読み込みでFIFOを開き,データは, シェルやその他の通常の名前無しパイプのように流れます.

プログラムは以下のオプションも受け入れます.共通のオプションも参照 してください.

-m mode
--mode=mode

作成されるFIFOのモードをmodeに設定し,それはchmodで設 定する抽象的なもので,(読み込みと書き出しを全員に許可する)‘a=rw’ から目的のポイントのためにumaskのビットセットを引いたものを使用します. See section ファイルの許可.

終了ステータスのゼロは成功を示し,ゼロ以外の値は失敗を示します.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

12.5 mknod: ブロックやキャラクタ特殊ファイルの作成

mknodは,FIFO,キャラクタ特殊ファイルや,ブロック特殊ファイ ルを指定された名前で作成します.概要です.

 
mknod [option]… name type [major minor]

上記の“特殊ファイル形式”と異なり,特殊ファイル(special file)と いう用語は,Unix上で技術的な意味があります.それはデータを生成または受 信するものです.これは通常,ハードウェアの物理的な部分に対応します. (これらのファイルは,通常,システム設定時に作成されます.) mknodコマンドは,この形式のファイルを作成するものです.その ようなデバイスは,一度に一文字または一度に一“ブロック”(多くの文字)読 み込むことが可能で,そのため,ブロック特殊(block special)ファイ ルとキャラクタ特殊(character special)ファイルがあると我々は述べ ています.

nameの後の引数は作成するファイルの形式を指定します.

p

FIFOに対応します.

b

ブロック特殊ファイルに対応します.

c

キャラクタ特殊ファイルに対応します.

ブロックやキャラクタ特殊ファイルを作成しているとき,メジャーとマイナー デバイス番号をファイル形式の後に与える必要があります.メジャーまたはマ イナーのデバイス番号が‘0x’や‘0X’で始まる場合,それは16進数と して解釈されます.それ以外で‘0’で始まる場合は八進数,それ以外では 十進数です.

プログラムは以下のオプションも受け入れます.共通のオプションも参照 してください.

-m mode
--mode=mode

作成されるファイルのモードをmodeに設定し,それはchmod で設定する抽象的なもので,‘a=rw’から目的のポイントのためにumaskの ビットセットを引いたものを使用します.See section ファイルの許可.

終了ステータスのゼロは成功を示し,ゼロ以外の値は失敗を示します.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

12.6 readlink: シンボリックリンクの対象を出力

readlinkは,サポートされている二つのモードの一つで動作します.

readlinkモード

readlinkは,与えられたシンボリックリンクの値を出力します. readlinkがシンボリックリンクのパス名以外の引数で呼び出される 場合,出力を生成せず,ゼロ以外の終了コードで終了します.

canonicalizeモード

readlinkは,‘.’,‘..’ も,繰返されるパス分離子(‘/’)もシンボ リックリンクも含めず,与えられた絶対的なファイル名を出力します.構成要 素が足りない,または利用不可能なパスでは,出力を生成せずゼロ以外の終了 コードで終了します.

 
readlink [option] file

デフォルトで,readlinkはreadlinkモードで処理します.

プログラムは以下のオプションを受け入れます.共通のオプションも参照 して下さい.

-f
--canonicalize

canonicalizeモードで実行します.

-n
--no-newline

後置される改行を出力しません.

-s
-q
--silent
--quiet

ほとんどのエラーメッセージを抑制します.

-v
--verbose

エラーメッセージを報告します.

readlinkは,OpenBSD 2.1で最初に書かれました.

終了ステータスのゼロは成功を示し,ゼロ以外の値は失敗を示します.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

12.7 rmdir: 空のディレクトリの削除

rmdirは空のディレクトリを削除します.概要です.

 
rmdir [option]… directory

directory引数が既存の空のディレクトリを参照していない場合,エラー となります.

プログラムは以下のオプションも受け入れます.共通のオプションも参照 してください.

--ignore-fail-on-non-empty

ディレクトリが空でないため,それぞれ単独であるディレクトリ削除の失敗を 無視します.

-p
--parents

directoryを削除し,それぞれのdirectoryの構成要素の削除を試 みます.そのため,例えば,‘rmdir -p a/b/c’は‘rmdir a/b/c a/b a’に似ています.同様に,これらのディレクトリが空でないと判明した場合は 失敗します.そのような失敗で,診断を引き起こし,rmdirを失敗 で終了させないため,‘--ignore-fail-on-non-empty’オプションを使 用してください.

-v
--verbose

削除に成功したそれぞれの診断を提唱します.directoryは削除されま す.

空でないディレクトリの(再帰的な)削除方法は,See section rm: ファイルやディレクトリの削除.

終了ステータスのゼロは成功を示し,ゼロ以外の値は失敗を示します.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

12.8 unlink: unlinkシステムコールでファイルを削除

unlinkは,単一の指定されたファイル名を削除します.それは,シ ステムが提供するunlink関数の最小のインターフェースです. See (libc)Deleting Files section ‘Deleting Files’ in The GNU C Library Reference Manual. 概要です.

 
unlink filename

システムには,unlinkを削除するディレクトリ名として使用可能なも のもあります.その他に,特権ユーザだけがそうすることが可能なものもあり ます.GNUシステムでは,unlinkでディレクトリ名を削除することはあ りません.

デフォルトで,unlinkは‘--help’と‘--version’オ プションを尊重します.それによって,‘--help’や ‘--version’と命名されたファイルの削除がちょっと難しくなるので, 環境変数POSIXLY_CORRECTが設定されているときは,unlink はそのようなコマンドライン引数をオプションではなくオペランドとして扱い ます.

終了ステータスのゼロは成功を示し,ゼロ以外の値は失敗を示します.


[ << ] [ >> ]           [冒頭] [目次] [見出し] [ ? ]

この文書は新堂 安孝によって2009年9月22日texi2html 1.82を用いて生成されました。