[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

2. 共通のオプション

特定のオプションは,以下のすべてのプログラムで利用可能です.それぞれの プログラムで同一の記述を書く代わりに以下で記述します.(実際,すべての GNUプログラムが,これらのオプションを受け入れる(あるいは受け入れ るべき)です.)

通常,オプションとオペランドは任意の順序で書くことが可能で,プログラムは すべてのオプションがあらゆるオペランドの前に書かれているかのように動作し ます.例えば,`sort -r passwd -t :'は`sort -r -t : passwd'のよ うに動作し,それは`:'が`-t'のオプション引数であるためです. しかし,POSIXLY_CORRECT環境変数が設定されている場合,特定のコマン ドで指定ない場合,オプションをオペランドの前に書く必要があります.

これらのプログラムには,`--help'と`--version'が単一のコ マンドライン引数のときだけ,それを認識するものもあります.

` --help'

すべての利用可能なオプションをリストアップした使用方法のメッセージを出 力し,正しく終了します.

` --version'

バージョンナンバーを出力して,正しく終了します.

` --'

オプションリストを区切ります.それ以降の引数は何であろうと,たとえ `-'で始まる場合でもオペランドとして扱われます.例えば,`sort -- -r'は`-r'という名前のファイルから読み込みます.

単一の`-'は,オプションのように見えても本当のオプションではありま せん.状況から明らかな場合は,それは標準入力や標準出力を意味し,オペラ ンドやオプション引数として使用可能です.例えば,`sort -o - -'は標 準出力に書き出し,標準入力から読み込み,そしてそれは単なる sortと等価です.他で指定されない限り,ファイル名が要求される あらゆる状況で`-'を書くことが可能です.


2.1 終了ステータス

ほとんどすべてのコマンドの呼び出しは,他のコマンドの動作を変更するため にしよう可能な,正規の終了ステータス(exit status)を生成します. コマンドの大半は,ゼロの終了ステータスは成功を示します.失敗はゼロ以外 の値で示されます--通常は`1'ですが,POSIXではゼロ以外で あることを要求しているだけなので,独特のプラットフォームでは違う可能性 があります.

しかし,以下で説明されているプログラムには,それ以外の終了ステータスの 値を生成するものや,`0'と`1'の値に別の意味を割り当てているも のもあります.例外は以下の通りです.chroot, env, expr, nice, nohup, printenv, sort, su, test, tty.


2.2 バックアップオプション

GNUプログラムには(少なくとも,cpinstallln,そしてmvには)オプションで,新しいバージョンの ファイルを書き出す前に,ファイルのバックアップを作成するものもあります. 以下のオプションは,これらのバックアップを細かく制御します.オプション は,特定のプログラムの説明でも簡単に記述します.

` -b'
` --backup[=method]'

バックアップを作成しないと上書きされたり削除されたりするそれぞれのファ イルのバックアップを作成します.このオプションを用いないと,オリジナル のバージョンは破棄されます.作成するバックアップの形式を決定するために, methodを使用してください.このオプションが使用されていて, methodが指定されていないとき,VERSION_CONTROL環境変数の値 が使用されます.そしてVERSION_CONTROLが設定されていない場合は, デフォルトのバックアップ形式は`existing'になります.

このオプションの短い形式`-b'は,引数を全く受け入れないことに注 意してください.`-b'の使用は,`--backup=existing'の使用 と等価です.

このオプションは,Emacs変数の`version-control'に対応します. methodに対する値は,Emacsで使用されるものと同じです.このオプショ ンも,より記述的な名前を受け入れます.有効なmethodは以下の通りで す(ユニークに識別できる省略も受け入れます).

` none'
` off'

バックアップを作成しません.

` numbered'
` t'

常に番号付のバックアップを作成します.

` existing'
` nil'

既に番号付のバックアップファイルがある場合,番号付のバックアップを作成 し,それ以外では単純にバックアップします.

` simple'
` never'

常に単純なバックアップを作成します.`never'と`none'を混同し ないように注意してください.

` -S suffix'
` --suffix=suffix'

`-b'で作成されるそれぞれのバックアップファイルにsuffixを 追加します.このオプションが指定されていない場合, SIMPLE_BACKUP_SUFFIX環境変数の値が使用されます.そして SIMPLE_BACKUP_SUFFIXが設定されていない場合,デフォルトで`~' となり,それはちょうどEmacsと同じです.

` --version-control=method'

このオプションは時代遅れで,将来のリリースで削除されるでしょう.それは, --backupで置き換えられました.


2.3 ブロックサイズ

GNUプログラム(少なくとも,dfdu,そして ls)には,ファイルサイズを"ブロック"で表示するものもありま す.ファイルサイズをより読みやすくするため,ブロックサイズを調整するこ とが可能です.表示で使用するブロックサイズは,あらゆるファイルシステム のブロックサイズから独立しています.分数のブロック数は最も近い整数に切 り上げられます.

デフォルトのブロックサイズは,以下の環境変数を順番に調べることで選択さ れます.最初に設定されていたものでブロックサイズを決定します.

DF_BLOCK_SIZE

これは,dfコマンドに対するデフォルトのブロックサイズを指定し ます.同様に,DU_BLOCK_SIZEduに対するデフォルト,そ してLS_BLOCK_SIZElsに対するデフォルトを指定します.

BLOCK_SIZE

上記のコマンド指定の環境変数が設定されていない場合,これは,三つのコマ ンド全てに対するデフォルトのブロックサイズを指定します.

POSIXLY_CORRECT

command_BLOCK_SIZEBLOCK_SIZE変数も設定されておらず, この変数が設定されている場合,ブロックサイズのデフォルトは512になりま す.

上記の環境変数がどれも設定されていない場合,ほとんどの状況でブロックサ イズは現在のデフォルトの1024バイトですが,この数は将来変更されるかもし れません.lsのファイルサイズに対して,ブロックサイズのデフォ ルトは1バイトです.

ブロックサイズの指定は,ブロックごとのバイト数の指定で正の整数にしたり, 人間が可読な書式を選択してhuman-readablesiにしたりする ことが可能です.整数には,十進数の倍数となる SI prefixesの上 位互換の接尾子を続けたり, IEC 60027-2 prefixes for binary multiplesが続けてもかまいません.

人間が可読な書式を用いると,出力サイズにはメガバイトに対する`M'の ような大きさを示す文字が続きます.BLOCK_SIZE=human-readableは 1024乗を使用します.`M'は1,048,576バイトを意味します. BLOCK_SIZE=siは似ていますが,それは1000乗を使用し`B'が後置 されます.`MB'は1,000,000を意味します.

`''が前置されているブロックサイズの指定で,千単位で区切られた大き さを表示するようになります.LC_NUMERICロカールは,千の分離子とグ ループ分けを指定します.例えば,アメリカ英語のロカールでは, `--block-size="'1kB"'で1234000バイトの大きさを`1,234'と表示 するようになるでしょう.デフォルトのCロカールでは,千単位の区切りが無 いので,`''には効果がありません.

整数のブロックサイズは,そのサイズの倍数を指定する接尾子を続けることが 可能です.そのままの大きさを示す文字や`iB'が続くものは,1024倍を 指定します.`B'が続く大きさを示す文字は,代わりに1000倍を指定しま す.例えば,`1M'と`1MiB'は`1048576'と等価で,`1MB' は`1000000'と等価です.

前置する整数が無い普通のサフィックスでは,`1'が前置されているかの ように動作しますが,大きさを示す文字が出力に後置されます.例えば, `--block-size="kB"'は3000を`3kB'と表示します.

以下の大きさを示す文字が定義されています.1Yのような大きなサイ ズは,その計算の限界のためコンピュータに拒絶されるかもしれません.

` kB'

キロバイト:10^3 = 1000

` k'
` K'
` KiB'

キビバイト:2^10 = 1024.`K'は特殊です.SIの接頭辞は `k' で,IEC 60027-2の接頭辞は`Ki'ですが,伝統的なものと POSIXでは,`k'を`KiB'の意味で使用します.

` MB'

メガバイト:10^6 = 1,000,000

` M'
` MiB'

メビバイト:2^20 = 1,048,576

` GB'

ギガバイト:10^9 = 1,000,000,000

` G'
` GiB'

ギビバイト:2^30 = 1,073,741,824

` TB'

テラバイト:10^12 = 1,000,000,000,000

` T'
` TiB'

テビバイト:2^40 = 1,099,511,627,776

` PB'

ペタバイト:10^15 = 1,000,000,000,000,000

` P'
` PiB'

ペビバイト:2^50 = 1,125,899,906,842,624

` EB'

エクサバイト:10^18 = 1,000,000,000,000,000,000

` E'
` EiB'

エクシビバイト:2^60 = 1,152,921,504,606,846,976

` ZB'

ゼータバイト:10^21 = 1,000,000,000,000,000,000,000

` Z'
` ZiB'

2^70 = 1,180,591,620,717,411,303,424.(`Zi'はIEC 60027-2へ のGNUの拡張です.)

` YB'

ヨッタバイト:10^24 = 1,000,000,000,000,000,000,000,000

` Y'
` YiB'

2^80 = 1,208,925,819,614,629,174,706,176.(`Yi'はIEC 60027-2へのGNUの拡張です.)

ブロックサイズのデフォルトは,`--block-size=size'オプショ ンを明示することで優先することが可能です.`-k'オプションは, `--block-size=1k'と等価で,それはPOSIXLY_CORRECT環境変数 が指定されていない場合のデフォルトです.`-h'や `--human-readable'オプションは, `--block-size=human-readable'と等価です.`--si'オプショ ンは,`--block-size=si'と等価です.


2.4 ターゲットディレクトリ

GNUプログラム(少なくともcpinstallln,そしてmv)には,このオプションでターゲットディ レクトリの指定を可能にするものもあります.

` --target-directory=directory'

対象となるdirectoryを指定します.

ほとんどのプログラムのインターフェースは,オプションと有限数の(おそら くゼロの)固定した位置の引数を処理した後,残りの引数リストは空である, または同じように処理される(通常ファイルとなる)項目のリストになっている ことが期待されています.xargsプログラムは,この慣習を用いて より良く動作するように設計されています.

様々な数の引数の最後に特例(すなわち,ターゲットディレクトリ)が あるため,mvの類のコマンドは普通のものとは言えません.例えば "全てのファイルをここから`../d/'に移動する"ような処理を実行する ために,mv * ../d/では引数の空間を使い果すかもしれませんし, ls | xargs ...では,それぞれの従属コマンドの呼び出しへの特別な 最後の引数を指定する方法がないため,明確ではなくなります.(それは,シェ ルコマンドで動作させることが可能ですが,人間の労働と能力が余分に必要と なります.)

--target-directoryオプションによって,cpinstallln,そしてmvプログラムで, xargsを用いて便利に使用することが可能になります.例えば,現 在のディレクトリから同じ階層のディレクトリ,ここではdに,ファイ ルを移動することが可能です.(しかし,これは`.'で始まる名前のファ イルを移動しません.)

 
ls |xargs mv --target-directory=../d

GNU findプログラムを使用している場合,以下のコマンドで 全てのファイルを移動することが可能です.

 
find . -mindepth 1 -maxdepth 1 \
  | xargs mv --target-directory=../d

しかし,現在のディレクトリにファイルがない場合や,改行文字を含む名前の ファイルがある場合,それは失敗するでしょう.以下の例は,これらの制限を 取り除きますが,GNU findGNU xargsの両 方を必要とします.

 
find . -mindepth 1 -maxdepth 1 -print0 \
  | xargs --null --no-run-if-empty \
      mv --target-directory=../d

2.5 末尾のスラッシュ

GNUプログラム(少なくともcpmv)には,それぞれ のsource引数を処理する前に末尾のスラッシュを取り除くことが可能な ものもあります.--strip-trailing-slashesオプションはこの動作 を可能にします.

source引数の末尾にスラッシュがあり,ディレクトリへのシンボリック リンクを指定しているとき,これは役に立ちます.シェルにはシンボリックリ ンクのようなものに対してファイル名の補完を実行しているとき,末尾のスラッ シュを自動的に追加することが可能なものもあるので,このシナリオは現実と なります.このオプションがない場合,例えば(システムの名前変更機能のた め)mvは,末尾のスラッシュをシンボリックリンク先を参照しない ように要求するよう解釈する必要があり,そして,そのためシンボリックリン クではなく,間接的に参照されるディレクトリの名前を変更するはず です.そのような動作がデフォルトということにびっくりするかもしれません が,それはPOSIXで要求されていて,その標準のそれ以外の部分と 一貫しています.


2.6 シンボリックリンクをたどる

以下のオプションは,`--recursive' (`-R')オプションも使用 されているときに,chownchgrpが(ディレクトリ)階層 をたどる方法を変更します. 以下のオプションの一つ以上が指定されている場合,最後のものだけ効果があ ります.これらのオプションは,ディレクトリ構造の処理を,シンボリックリ ンクとして処理するか,そのディレクトリがルートになっている階層構造のす べてのファイルを処理するかを指定します.

以下のオプションは,シンボリックリンクかその参照先のいずれを処理するか を制御する`--dereference'と`--no-dereference' (`-h')とは独立しています.

` -H'

`--recursive' (`-R')が指定されていて,コマンドライン引数 がディレクトリへのシンボリックリンクの場合,それをたどっていきます.

` -L'

再帰的にたどる状況で,ディレクトリへのシンボリックリンクを,見つかった ものはすべてたどります.

` -P'

シンボリックリンクをたどりません.これは`-H',`-L',また は`-P'のいずれも指定されていない場合のデフォルトです.


2.7 / の特別な扱い方

コマンドには,階層構造全体を破壊するような処理が可能なものもあります. 例えば,適切な特権を持つユーザが間違って`rm -rf / tmp/junk'や `cd /bin; rm -rf ../'を実行した場合,システム全体のすべてのファイ ルが削除される可能性があります.そのようなコマンドが正当であるというこ とは滅多に無いので(1)GNU rmは`--preserve-root'オプションを提供し,最終的に `/'とされるようなディレクトリの処理をrmにさせないように します.もう一つの新たなオプションである`--no-preserve-root'は, 前出の`--preserve-root'オプションの効果をなくします. `--preserve-root'の動作がrmのデフォルトになる可能性が あることに注意して下さい.

コマンドchgrpchmod,そしてchownも,階 層構造全体を破壊する処理が可能なので,これらのオプションをサポートして います.しかし,rmとは異なり,ファイルを実際にアンリンクする わけではないので,`/'で再帰的な処理をするときは,おそらくこれらの コマンドはさらに危険で,その理由は処理時間が短いため,ユーザが停止させ る前に多くのファイルに障害が発生するためです.


2.8 標準への準拠

状況によっては,GNUのユーティリティのデフォルトの動作は POSIXの標準と互換性がありません.これらの非互換性を抑制する ため,POSIXLY_CORRECT環境変数を定義してください.POSIX 準拠を調査していない限り,POSIXLY_CORRECTを定義する必要はありま せん.

新しいバージョンのPOSIXには,古いバージョンのものと互換性が 無いものもあります.例えば,古いバージョンのPOSIXでは,それ ぞれの入力ファイルの二番目とそれ以降のフィールドをもとにソートするコマ ンド`sort +1'を要求していますが,POSIX 1003.1-2001から は同じコマンドで`+1'という名前のファイルをソートすることを要求し ていて,フィールドをもとにしたソートを行なうため,コマンド`sort -k 2'を代わりに使用する必要があります.

GNUのユーティリティは通常,システム標準のPOSIXのバージョ ンに準拠しています.異なるPOSIXのバージョンに準拠させるため, 適用させる標準の年月を指定するyyyymmの形式の値に _POSIX2_VERSION環境変数を設定してください.現在, _POSIX2_VERSIONに対して二つの値がサポートされています. `199209'はPOSIX 1003.2-1992を意味し,`200112'は POSIX 1003.1-2001を意味します.例えば,古いバージョンの POSIXを仮定する古いソフトウェアを実行し,`sort +1', `head -1',または`tail +1'を使用している場合,環境変数で `_POSIX2_VERSION=199209'を設定することで,互換性の問題を回避する ことが可能です.


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Akihiro Sagawa on June, 8 2005 using texi2html 1.70.