diff --git a/ja_JP.eucJP/man/man1/bc.1 b/ja_JP.eucJP/man/man1/bc.1 index 8f5e57b57e..b7f3007a2a 100644 --- a/ja_JP.eucJP/man/man1/bc.1 +++ b/ja_JP.eucJP/man/man1/bc.1 @@ -1,800 +1,800 @@ .\" .\" bc.1 - the *roff document processor source for the bc manual .\" .\" This file is part of GNU bc. .\" Copyright (C) 1991-1994, 1997, 2000 Free Software Foundation, Inc. .\" .\" This program is free software; you can redistribute it and/or modify .\" it under the terms of the GNU General Public License as published by .\" the Free Software Foundation; either version 2 of the License , or .\" (at your option) any later version. .\" .\" This program is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public License .\" along with this program; see the file COPYING. If not, write to: .\" The Free Software Foundation, Inc. .\" 59 Temple Place, Suite 330 .\" Boston, MA 02111 USA .\" .\" You may contact the author by: .\" e-mail: philnelson@acm.org .\" us-mail: Philip A. Nelson .\" Computer Science Department, 9062 .\" Western Washington University .\" Bellingham, WA 98226-9062 .\" .\" %FreeBSD: src/contrib/bc/doc/bc.1,v 1.6 2001/07/12 07:35:06 ru Exp % .\" $FreeBSD$ .\" .TH bc 1 .\" "Command Manual" v1.06 "Sept 12, 2000" .SH 名称 bc - 任意精度の計算言語 .SH 書式 \fBbc\fR [ \fB-hlwsqv\fR ] [long-options] [ \fI file ...\fR ] .SH バージョン このマニュアルは GNU bc version 1.06 について記述してあります。 .SH 解説 \fBbc\fR は、任意の精度の数値を扱う事ができ、プログラミング言語 C の文法に よく似た形の入力を対話的に実行する言語です。 コマンドラインのオプションの指定により、標準数学ライブラリを使用することも できます。これを指定した場合は、どのファイルを処理するよりも前に 数学ライブラリが定義されます。 \fBbc\fR は動作を開始するとまず最初にコマンドラインで指定したファイルを 順に処理します。すべてのファイルを処理した後は、\fBbc\fR は 標準入力からの読み込みを行います。すべてのコードは、それが読み込ま れた時点で実行されていきます。(もし、ファイル中にプロセッサを止める コマンドが含まれていた場合は、標準入力からの読み込みは行われません。) .PP 本バージョンの \fBbc\fR は、伝統的な \fBbc\fR の実装および POSIX のドラフト規格よりも拡張されています。コマンドラインオプションにより、 これらの拡張に対して警告を表示したり拒絶したりすることが可能です。 本ドキュメントでは、このプロセッサが受理する言語について説明します。 拡張機能についてはその旨明記します。 .SS オプション .IP "-h, --help" 使用方法を表示し、終了します。 .IP "-i, --interactive" 対話モードを強制します。 .IP "-l, --mathlib" 標準数学ライブラリを定義します。 .IP "-w, --warn" POSIX \fBbc\fR に対する拡張機能が入力された場合は警告を出します。 .IP "-s, --standard" POSIX \fBbc\fR の言語仕様に厳密に従って処理します。 .IP "-q, --quiet" GNU bc 導入メッセージを表示しません。 .IP "-v, --version" バージョン番号と著作権を表示して終了します。 .SS 数 \fBbc\fR における最も基本的な要素は `数' です。数は、整数部と小数部があり、 任意の精度をとることができます。すべての数は、内部では 10 進数で表現されており、 計算も 10 進数で行われます。(本バージョンでは、除算と乗算で結果に切捨てが 起こります。) 数には length と scale という 2 つの属性があります。 length は 10 進での有効桁数で、scale は小数点以下の 10 進での有効桁数です。 例えば、 .nf .RS .000001 は、lengthが 6 で、scale も 6 です。 1935.000 は、lengthが 7 で、scale が 3 です。 .RE .fi .SS 変数 数は、単純変数と配列の 2 種類の変数に保存されます。単純変数と配列変数には共に 名前が付けられます。この名前は、最初の 1 文字目がアルファベットで、後は、 アルファベット、数字およびアンダスコアを任意の文字数組み合わせて 使うことができます。すべてのアルファベットは小文字でなければなりません。 (アルファベットと数字を使った名前の機能は拡張機能です。 POSIX \fBbc\fR では、変数に英小文字 1 文字しか許されません。) 配列変数の名前には必ずブラケット ([]) がつくので、変数の型は文脈において はっきりしています。 .PP 特殊な変数として \fBscale, ibase, obase, last\fR の 4 つの変数があります。 \fBscale\fR で計算時の小数点以下の有効桁数を指定します。 \fBscale\fR のデフォルトは 0 です。 \fBibase\fR と \fBobase\fR で入力および出力の変換基数を指定します。 デフォルトでは、入力、出力の基数は共に 10 です。 \fBlast\fR は、最後に \fBbc\fR が出力した数を保持しています (これは拡張機能です)。これらについては、後で適切なところで詳しく説明します。 これらの変数には、式で使われる代入と同様の代入を行うことが可能です。 .SS コメント \fBbc\fR は、\fB/*\fR から \fB*/\fR の間をコメントとして扱います。 コメントはどこから始まっていてもよく、1 文字の空白として扱われます。 (これにより、コメントはその前後の入力アイテムを切り離します。たとえば、 変数名の途中にコメントを置くことはできません。) コメントの中にはいくつ改行があってもかまいません。 .PP \fBbc\fR をスクリプトとしても使えるようにするため、1 行コメントが 拡張機能として追加されました。1 行コメントは \fB#\fR で始まり、 次の改行まで有効です。その改行文字自体はコメントの一部とはみなされず、 普通に処理されます。 .SS 式 `数' は、式および文によって操作されます。 この言語は対話的になるように設計されているため、 文および式は可能な限り即座に実行されます。 "main" プログラムといったものはなく、そのかわり、コードは それに出くわした時点で実行されます。 (後で述べる`関数'は、それに出くわした時点で定義されます。) .PP 式の最も単純なものは、ただの定数です。\fBbc\fR は、入力された 定数を、変数 \fBibase\fR で指定される現在の基数を元に、内部的には 10 進表現の 数に変換します。(関数の場合には例外があります。) \fBibase\fR には、2 から 16 までが使用できます。 この範囲を越える値を \fBibase\fR に代入しようとすると、 2 あるいは 16 を指定したことになります。 数の入力には、0-9 および A-F の文字が利用できます。(注意: これは大文字でなければなりません。小文字は変数名です。) 1 桁の数は \fBibase\fR の値に関係なくその値を持ちます (すなわち A=10)。 複数桁の数の場合、\fBbc\fR は ibase 以上の値をもつすべての入力桁を \fBibase\fR-1に変更します。これにより、数 \fBFFF\fR は常に、 その入力基数を使って 3 桁で表現可能な最大の値を表します。 .PP すべての演算式が、他の多くの高級言語に似たものとなっています。 数の型は 1 種類しかないため、型変換の規則はありません。 そのかわり、式の有効桁数に関する規則があります。 すべての式に有効桁数があり、これはその被演算数の有効桁数と 施される演算、それに多くの場合、 変数 \fBscale\fR から決定されます。\fBscale\fR には、0 から C の整数で表現できる最大の値までが指定可能です。 .PP 以下、bc で使用可能な演算子を説明します。なお、完全形の式を "expr"、 単純変数または配列変数を "var" と表記します。 単純変数は単に .RS \fIname\fR .RE と表し、配列変数は .RS \fIname\fR[\fIexpr\fR] .RE と表します。特に言及しない限り、結果の有効桁数は、注目している式の 最大有効桁数になります。 .IP "- expr" 結果はその式の符号を反転したものとなります。 .IP "++ var" 変数を 1 だけインクリメントし、その新しい値が式の結果となります。 .IP "-- var" 変数を 1 だけデクリメントし、その新しい値が式の結果となります。 .IP "var ++" 式の結果はその変数の値となり、それからその変数を 1 だけ インクリメントします。 .IP "var --" 式の結果はその変数の値となり、それからその変数を 1 だけ デクリメントします。 .IP "expr + expr" 式の結果は 2 つの式の和となります。 .IP "expr - expr" 式の結果は 2 つの式の差となります。 .IP "expr * expr" 式の結果は 2 つの式の積となります。 .IP "expr / expr" 式の結果は 2 つの式の商となります。 結果の scale は変数 \fBscale\fR の値となります。 .IP "expr % expr" 結果は、以下のようにして求められる剰余です。a%b を求めるために、まず a/b を \fBscale\fR の有効桁数で計算します。この結果を用いて、a-(a/b)*b を、 \fBscale\fR+scale(b) と scale(a) の大きい方の有効桁数で計算します。 もし \fBscale\fR に 0 がセットされ、両方の式が整数であれば、 整数の剰余が求められます。 .IP "expr ^ expr" 式の結果は、1 番目の式の値を 2 番目の回数だけ乗じたものになります。 2 番目の式は、整数でなければなりません。 (2 番目の式が整数でない場合は警告が表示され、 整数に切り詰めた値が使用されます。) 結果の scale は、べき指数が 負なら \fBscale\fR になります。べき指数が正なら、 "1 番目の式の scale とべき指数との積" および "\fBscale\fR と 1 番目の式の scale の大きい方" のうちの小さい方 (つまり、scale(a^b) = min(scale(a)*b, max( \fBscale,\fR scale(a)))) となります。 expr^0 は常に 1 を返します。 .IP "( expr )" 標準の優先度を使わずに、この式の評価を優先します。 .IP "var = expr" 式の値が変数に代入されます。 .IP "var = expr" "var" が一度しか評価されないこと以外は "var = var expr" と同じです。 "var" が配列の場合は動作が違うことがあり得ます。 .PP 関係演算は特殊な演算で、結果は常に 0 か 1 になります。関係が偽の時 0、 真の時 1 になります。関係演算は、演算式のどこでも使う事ができます。 (POSIX bcでは、関係演算は、if, while, for 文の中だけで、しかも 1 つの関係式しか使用できません。) 関係演算子は以下の通り。 .IP "expr1 < expr2" expr1 が expr2 より小さい場合 1 になります。 .IP "expr1 <= expr2" expr1 が expr2 より小さいか等しい場合 1 になります。 .IP "expr1 > expr2" expr1 が expr2 より大きい場合 1 になります。 .IP "expr1 >= expr2" expr1 が expr2 より大きいか等しい場合 1 になります。 .IP "expr1 == expr2" expr1 と expr2 が等しい場合 1 になります。 .IP "expr1 != expr2" expr1 と expr2 が等しくない場合 1 になります。 .PP 論理演算も使えます。(POSIX \fBbc\fR には論理演算はありません。) 論理演算も関係演算と同様、結果は 0 か 1 (各々偽および真) になります。 論理演算子は以下の通り。 .IP "!expr" expr が 0 なら 1 になります。 .IP "expr && expr" expr1 と expr2 が両方とも 0 でないなら、1 になります。 .IP "expr || expr" expr1 と expr2 のどちらか一方が 0 でないなら、1 になります。 .PP 各演算子の優先順位と結合規則は次の通りです。 (最初のものほど低く、後にいくほど高い優先順位で先に実行されます。) .nf .RS || (左から結合) && (左から結合) ! (結合せず) 関係演算 (左から結合) 代入演算 (右から結合) + - (左から結合) * / % (左から結合) ^ (右から結合) - (単項マイナス) (結合せず) ++ -- (結合せず) .RE .fi .PP この優先順位は、POSIX \fBbc\fR のプログラムがそのまま正しく動くように 配慮して決められています。このため、関係演算と論理演算を 代入文と共に用いた場合、通常とは異なる振る舞いをします。 次の例を考えてみましょう: .RS a = 3 < 5 .RE .PP C プログラマのほとんどは、 ``3 < 5'' の関係演算が実行された結果 (つまり 1) が変数 ``a'' に代入される、 と考えるでしょう。 ところが \fBbc\fR では、まず 3 が変数 ``a'' に代入され、 それから 3 と 5 の比較が行われるのです。 この間違いを避けるために、 関係演算や論理演算を代入演算と共に用いる場合は、 括弧を使うのが最良です。 .PP \fBbc\fR には特別な式がさらにいくつか備わっています。 それはユーザ定義関数と標準関数に関するもので、 すべて "\fIname\fB(\fIparameters\fB)\fR" という形をしています。 ユーザ定義関数については関数の章を参照して下さい。 標準関数は以下の通りです: .IP "length ( expression )" expression の有効桁数を返します。 .IP "read ( )" (拡張機能) 関数の出現位置に関係なく、標準入力から数を読み取ります。 データとプログラムの両方を標準入力から与えるような場合には、 問題を生じうることに注意して下さい。 最良の方法は、 ユーザからデータの入力の必要があるなら、プログラムはあらかじめ作っておき、 標準入力からプログラムを入力しないようにすることです。 read 関数の値は標準入力から読み込んだ数です。 その際、変換基数として変数 \fBibase\fR の現在の値が用いられます。 .IP "scale ( expression )" expression の小数点以下の有効桁数を返します。 .IP "sqrt ( expression )" expression の平方根を返します。 expression に負の値を指定した場合は、ランタイムエラーになります。 .SS 文 文は (ほとんどの算術言語がそうであるように)、処理を順番に実行していく単位です。 \fBbc\fR では文は「できるだけ早い段階で」実行されます。 改行が入力された時点で、実行可能な文が存在していれば、即座に実行します。 このため \fBbc\fR では改行が重要な役割を持っています。 実際、セミコロンと改行が文の区切りとして使用されます。 不適当な場所で改行を入力すると、文法エラーになります。 改行は文の区切りですが、バックスラッシュを用いて改行を隠すことができます。 \fBbc\fR にとって、"\e" (は改行) は改行ではなく空白に見えます。 文のリストは、セミコロンと改行で区切られた文の並びです。 以下、\fBbc\fR の文の種類とその動作について説明します。 (なお、以下の説明で ([]) で括った部分は省略可能な項です。) .IP "演算式" 演算式には次の 2 つの種類があります。 演算式が " ..." で始まっていれば、 それは代入文として扱われます。 そうでなければ、演算式は評価されて出力に表示されます。 結果が表示された後、改行が表示されます。 例えば、"a=1" は代入文であり、 "(a=1)" は代入文が埋め込まれた演算式です。 表示される数値はすべて、変数 \fBobase\fR で決まる基数で表示されます。 \fBobase\fR に指定できる値は 2 から BC_BASE_MAX までです。 (「制限」の章を参照。) 基数 2 から 16 まででは、通常の数表記法が用いられます。 基数が 16 より大きい場合、\fBbc\fR は、 各桁を 10 進表記する複数桁文字表記法で表示します。 複数桁文字表記法では、各桁は空白で区切られます。 各桁は "obase-1" を 10 進で表記するのに必要な桁数の数字から成ります。 数の精度は任意に選べるため、数によっては 1 行に表示できない場合もあります。 そのような長い数は、行末に "\e" を付けて次行に継続します。 1 行に表示できる文字数は 70 です。 \fBbc\fR の対話的性質により、ある数を表示すると、 表示した値が特殊変数 \fBlast\fR に代入されるという副作用が生じます。 ユーザはタイプし直すことなく最後に表示された値を再利用できます。 \fBlast\fR に値を代入することも可能で、 その場合、前回表示された値が代入値で上書きされます。 新しく代入した値は、次に数が表示されるか別の値が \fBlast\fR に代入される まで有効です。(bc の実装によっては、 数の一部になっていない単一のピリオド (.) を \fBlast\fR の短縮表記として 用いることができます。) .IP "string" 文字列 string が出力に表示されます。 文字列は二重引用符で始まり、次の二重引用符までのすべての文字を含みます。 改行を含め、すべての文字は文字通りに解釈されます。 文字列の後に改行は出力されません。 .IP "\fBprint\fR list" print 文 (これは拡張機能です) は、もうひとつの出力方法です。 "list" はコンマで区切った文字列および演算式のリストであり、 各文字列あるいは演算式がリストの順に表示されます。 最後に改行は出力されません。 演算式は評価され、その値が表示されるとともに、 変数 \fBlast\fR に代入されます。 print 文中の文字列は出力に表示されますが、特殊文字を含めることができます。 特殊文字はバックスラッシュ (\e) で始まります。 \fBbc\fR で使える特殊文字は、 "a" (ベル)、"b" (バックスペース)、 "f" (フォームフィード)、"n" (改行)、"r" (復帰)、"q" (二重引用符)、 "t" (タブ)、"\e" (バックスラッシュ) です。 これ以外は無視されます。 .IP "{ statement_list }" 複文です。複数の文を 1 つのグループにまとめて実行します。 .IP "\fBif\fR ( expression ) statement1 [\fBelse\fR statement2]" if 文は演算式 expression を評価し、その値に応じて 文 statement1 または文 statement2 を実行します。 expression の値が 0 でなければ statement1 が実行されます。 statement2 が存在し、expression の値が 0 ならば、statement2 が実行されます。 (else 節は拡張機能です。) .IP "\fBwhile\fR ( expression ) statement" while 文は expression が 0 でない間、繰り返し statement を実行します。 statement の実行前に毎回 expression を評価します。 expression の値が 0 になるか、break 文を実行すると、 ループが終了します。 .IP "\fBfor\fR ( [expression1] ; [expression2] ; [expression3] ) statement" for 文は statement の繰り返し実行を制御します。 expression1 はループ実行の前に評価されます。 expression2 は statement の実行前に毎回評価され、 その値が 0 でなければ statement が実行されます。 expression2 の値が 0 になると、ループは終了します。 各 statement 実行の後、再び expression2 が評価される前に expression3 が 評価されます。 expression1 あるいは expression3 が省略されていると、 そこでは何も評価されません。 expression2 が省略されている場合、expression2 が 1 であるのと 同様に扱われます。 (各 expression が省略可能なのは拡張機能です。 POSIX \fBbc\fR では、3 つの expression はどれも省略できません。) 以下は for 文と等価なコードです: .nf .RS expression1; while (expression2) { statement; expression3; } .RE .fi .IP "\fBbreak\fR" それを含む最も内側の while もしくは for 文による繰り返しを強制的に中断します。 .IP "\fBcontinue\fR" それを含む最も内側の for 文における次の繰り返しに進みます。 (continue 文は拡張機能です) .IP "\fBhalt\fR" 実行されると \fBbc\fR プロセッサを終了させます(拡張機能)。 例えば "if (0 == 1) halt" の場合は \fBbc\fR は終了しません。 halt 文が実行されないからです。 .IP "\fBreturn\fR" 関数から戻ります。関数の結果は 0 になります。(関数の章を参照) .IP "\fBreturn\fR ( expression )" 関数から戻ります。関数の結果は expression になります。(関数の章を参照) 拡張機能ですが、括弧は必須ではありません。 .SS 疑似文 これらは今までの文とは動作が異なります。 疑似文は実行文ではなく、「コンパイル」時点で処理されます。 .IP "\fBlimits\fR" \fBbc\fR のローカルバージョンにより制限される限界値を表示します。 (limits は拡張機能です) .IP "\fBquit\fR" \fBbc\fR を終了します。どんな場所にあっても、quit 文は 入力された時点で実行されます。例えば、 "if (0 == 1) quit" という記述であっても、\fBbc\fR は終了します。 .IP "\fBwarranty\fR" 保証に関する注意を長めに表示します。 (warranty は拡張機能です) .SS 関数 関数は、後で実行されるべき計算手順を定義する機能です。 .B bc の関数は常に値を計算し、それを呼びだし側に返します。 関数定義は、それが入力から読み込まれた時点で定義が行われるという点で 「ダイナミック(動的)」です。 一度定義された関数は、同じ名前で別の関数が定義されるまで使用可能で、 新しい関数が定義された場合は、前の関数が置き換えられます。 関数の定義は、以下のように行います: .nf .RS \fBdefine \fIname \fB( \fIparameters \fB) { \fInewline \fI auto_list statement_list \fB}\fR .RE .fi 関数呼び出しは、 "\fIname\fB(\fIparameters\fB)\fR" という形式の演算式です。 .PP パラメータ parameters は数あるいは配列 (拡張機能) です。 関数定義では、0 あるいは 1 個以上のパラメータ名を コンマで区切って並べることで定義します。 数は値渡し(call by value)でのみ渡され、配列は変数渡し(call by variable)で のみ渡されます。 配列はパラメータ定義中で "\fIname\fB[]\fR" のように表記して指定します。 関数呼び出しでは、数のパラメータに対して完全な演算式の実パラメータを 記述します。 配列を渡す表記は配列パラメータ定義と同様です。 名前付き配列は変数(variable)によって関数に渡されます。 関数定義はダイナミックゆえ、 パラメータの数と型は関数呼び出しの際にチェックされます。 パラメータの数あるいは型に何らかの不整合があると、 ランタイムエラーが発生します。 未定義関数を呼び出した場合もランタイムエラーとなります。 .PP \fIauto_list\fR は省略可能で、ローカル変数として使用する変数のリスト です。auto_list が存在するなら、その文法は "\fBauto \fIname\fR, ... ;" となります。(セミコロンは省略可能です。) 各 \fIname\fR がローカル変数の名前となります。 配列はパラメータと同様の表記で指定できます。 これらの変数は、関数の最初でその値がスタックにプッシュされたのち 値 0 に初期化され、関数の実行中に使用されます。 これらの変数は関数出口にてポップされ、 (関数呼び出し時の)元の値が復元されます。 パラメータは実際にはローカル変数であり、 関数呼び出しで与えられた値に初期化されます。 bc のローカル変数は伝統的な意味でのローカル変数と異なり、 関数 A が関数 B を呼び出しているような場合、関数 B の中に 関数 A のローカル変数と同じ名前のローカル変数がない限り、 関数 A のローカル変数名をそのまま使って、 関数 B から関数 A のローカル変数をアクセスできます。 ローカル変数とパラメータはスタックにプッシュされるため、 \fBbc\fR は再帰的な関数呼び出しをサポートしています。 .PP 関数本体は \fBbc\fR の文のリストです。 繰り返し述べますと、文はセミコロンか改行で区切られています。 return 文により関数は終了し、値を返します。 return 文には 2 つの形式があり、 ひとつめの形式 "\fBreturn\fR" は、呼び出し元に値 0 を返します。 もうひとつの形式 "\fBreturn ( \fIexpression \fB)\fR" は、 expression の値を計算し、それを呼び出し元に返します。 各関数の最後には "\fBreturn (0)\fR" があるものと解釈されます。 これにより、明示的に return 文を置かなくても、 関数は終了して値 0 を返します。 .PP 関数の中では、変数 \fBibase\fR の動作が変わります。関数の中で使われて いる定数は、関数の呼びだし時点の \fBibase\fR を元に変換が行われます。 このため、関数内部で \fBibase\fR を変更しても無視されます。ただし、標 準関数 \fBread\fR を呼び出した場合は例外で、これは常に現在の \fBibase\fR の値をもとに変換が行われます。 .PP 拡張機能ですが、定義の書式が若干緩やかになりました。 標準では、開くブレースが \fBdefine\fR キーワードと同じ行にあることと、 他の部分が引き続く行にあることが必須です。 本バージョンの \fBbc\fR では、関数の開くブレースの前後の改行数は任意です。 例えば、次の定義は合法です。 .nf .RS \f(CW define d (n) { return (2*n); } define d (n) { return (2*n); } \fR .RE .fi .SS 数学ライブラリ \fBbc\fR に \fB-l\fR オプションを付けて起動した場合は、数学ライブラリが 読み込まれ、デフォルトの scale が 20 に設定されます。 数学関数は、それを呼び出した時点の scale の値に従って計算を行います。 数学ライブラリによって使用可能になる関数は、次の通りです: .IP "s (\fIx\fR)" sin (x の単位はラジアン) .IP "c (\fIx\fR)" cos (x の単位はラジアン) .IP "a (\fIx\fR)" atan (返り値の単位はラジアン) .IP "l (\fIx\fR)" log (自然対数) .IP "e (\fIx\fR)" exp (指数関数) .IP "j (\fIn,x\fR)" 整数 n 次のベッセル関数 .SS 使用例 次の例は、/bin/sh でシェル変数 \fBpi\fR に ``パイ'' の値を代入します。 .RS \f(CW pi=$(echo "scale=10; 4*a(1)" | bc -l) \fR .RE .PP 次の例は、数学ライブラリで使われている ``e (x)'' の定義です。 この関数は POSIX \fBbc\fR で記述されています。 .nf .RS \f(CW scale = 20 /* Uses the fact that e^x = (e^(x/2))^2 When x is small enough, we use the series: e^x = 1 + x + x^2/2! + x^3/3! + ... */ define e(x) { auto a, d, e, f, i, m, v, z /* Check the sign of x. */ if (x<0) { m = 1 x = -x } /* Precondition x. */ z = scale; scale = 4 + z + .44*x; while (x > 1) { f += 1; x /= 2; } /* Initialize the variables. */ v = 1+x a = x d = 1 for (i=2; 1; i++) { e = (a *= x) / (d *= i) if (e == 0) { if (f>0) while (f--) v = v*v; scale = z if (m) return (1/v); return (v/1); } v += e } } \fR .RE .fi .PP 次の例は、\fBbc\fR の拡張機能を使って、``checkbook balances'' (小切手帳残高) を計算する簡単なプログラムです。 このプログラムをファイルにしておくと、 毎回タイプしなおさずに何度も使うことができます。 .nf .RS \f(CW scale=2 print "\enCheck book program!\en" print " Remember, deposits are negative transactions.\en" print " Exit by a 0 transaction.\en\en" print "Initial balance? "; bal = read() bal /= 1 print "\en" while (1) { "current balance = "; bal "transaction? "; trans = read() if (trans == 0) break; bal -= trans bal /= 1 } quit \fR .RE .fi .PP 次の例は、再帰呼び出しにより階乗を計算する関数です。 .nf .RS \f(CW define f (x) { if (x <= 1) return (1); return (f(x-1) * x); } \fR .RE .fi .SS readline と libedit のオプション GNU \fBbc\fR は (configure のオプションによって) GNU \fBreadline\fR 入力エディタライブラリまたは BSD \fBlibedit\fR ライブラリ を使うようにコンパイルできます。 これは、\fBbc\fR に入力する前に、行の編集を可能にします。 以前に入力した行のヒストリも利用可能になります。このオプションで コンパイルされた \fBbc\fR では、さらに 1 つの特殊な変数 \fBhistory\fR が追加され、ヒストリに保存される行の数を指定します。 \fBreadline\fR では、 その値が -1 (デフォルト値)なら、ヒストリ行は制限なく保存されます。 正の数を指定すると、ヒストリ行がその数に制限されます。 0 ならヒストリ機能が無効になります。 デフォルト値は 100 です。 詳しくは、ユーザマニュアルの GNU \fBreadline\fR と \fBhistory\fR ライブラリと BSD \fBlibedit\fR をご覧下さい。 \fBreadline\fR と \fBlibedit\fR の両方を同時に有効化できません。 .SS 相違点 このバージョンの .B bc は POSIX P1003.2/D11 ドラフトから実装されており、 そのドラフトや以前の実装に比べていくつかの相違点や拡張点があります。 伝統的に行われていたような .I dc(1) を用いた実装ではありません。 このバージョンは単一プロセスであり、 プログラムをバイトコードに変換したものを解析して実行します。 「ドキュメントに記載されていない」オプション (-c) があり、 プログラムを実行する代わりに、それをバイトコードに変換した結果を 標準出力に出力します。 これは主として、パーザのデバッグと数学ライブラリの準備に用いられました。 .PP 主な相違点は拡張機能によるものです。 機能を高めたり追加したりするために機能が拡張されたり、 新機能が追加されたりしています。 相違点と拡張点のリストを以下に示します。 .IP "LANG 環境変数" このバージョンは、 環境変数 LANG および LC_ で始まるすべての環境変数の処理に関して POSIX 標準に 準拠していません。 .IP 名前 伝統的な .B bc および POSIX .B bc は、関数、変数、配列の名前として単一の文字を使います。 このバージョンでは、 先頭が文字で始まり、文字と数字とアンダースコアで 構成される 2 文字以上の名前が使えるように拡張されています。 .IP 文字列 文字列には NUL 文字を含むことはできません。 POSIX では、文字列にはあらゆる文字を含めることができなければならない、 としています。 .IP last POSIX \fBbc\fR には変数 \fBlast\fR はありません。 \fBbc\fR の実装によっては、\fBlast\fR と同じ意味で ピリオド (.) を用いるものがあります。 .IP 比較 POSIX \fBbc\fR では、比較は if 文、while 文、for 文の第 2 式の中でのみ 用いることができます。 また、これらの文の中ではただ 1 つの関係演算しか使えません。 .IP "if 文, else 節" POSIX \fBbc\fR には else 節はありません。 .IP "for 文" POSIX \fBbc\fR では for 文の各演算式は省略できません。 .IP "&&, ||, !" POSIX \fBbc\fR には論理演算子はありません。 .IP "read 関数" POSIX \fBbc\fR には read 関数はありません。 .IP "print 文" POSIX \fBbc\fR には print 文はありません。 .IP "continue 文" POSIX \fBbc\fR には continue 文はありません。 .IP "return 文" POSIX \fBbc\fR では、return 文の周りに括弧が必要です。 .IP "配列パラメータ" POSIX \fBbc\fR では (現在のところ) 配列パラメータは完全には使えません。 POSIX の文法では、関数定義では配列を使えますが、実際に呼び出すときの パラメータに配列を指定することができません。(これはおそらく、文法上の 見落としでしょう。) 伝統的な \fBbc\fR の実装では、配列パラメータは値渡し のみでした。 .IP "function format" POSIX \fBbc\fR では、開くブレースが \fBdefine\fR キーワードと同じ行にあり、 \fBauto\fR 文が次の行にあることが必要です。 .IP "=+, =-, =*, =/, =%, =^" POSIX \fBbc\fR ではこれらの「旧式」の代入演算子を定義する必要はありません。 このバージョンではこれらの「旧式」代入演算子が使えるかも知れません。 limits 文を使って、インストールしたバージョンがこれらをサポートしているか どうか、確かめてみて下さい。 もしそのバージョンが「旧式」代入演算子をサポートしていれば、 文 "a =- 1" は \fBa\fR に値 -1 を代入する代わりに \fBa\fR を 1 減じます。 .IP "数字表記中の空白" 他の \fBbc\fR 実装では、数字表記の中に空白を含めることが許されます。 例えば、"x=1 3" は変数 x に値 13 を代入します。 このバージョンの \fBbc\fR では、先の文は文法エラーになります。 .IP "エラーと実行" このバージョンの bc は、 プログラムに文法上のエラーや他のエラーが見つかった場合に どういうコードが実行されるか、 という点で、他の実装と異なっています。 ある関数定義中で文法エラーが見つかると、 エラー回復機構は文の先頭を見つけて関数のパーズを続けようと努力します。 ひとたび関数の中で文法エラーが見つかると、 その関数は呼び出せなくなり、未定義状態となります。 対話的実行コードで文法エラーがあると、 現在の実行ブロックが無効になります。 実行ブロックとは、ひと続きの完全な文のあとの行末までのことです。 例えば、次のコード .nf .RS a = 1 b = 2 .RE .fi には 2 つの実行ブロックがあり、 .\" ↑ここで groff 時の字下げ量がおかしくなっているようだが、 .\" 元の英語マニュアルでもそうなっているようだ。(jpman 酒井) .nf .RS { a = 1 b = 2 } .RE .fi には 1 つの実行ブロックがあります。 ランタイムエラーが発生すると、現在の実行ブロックの実行が終了します。 ランタイムの警告が発生しても、現在の実行ブロックは終了しません。 .IP "割り込み" 対話セッションの間、SIGINT シグナル (通常、端末からの Control-C 入力で 発生します) によって現在の実行ブロックの実行が中断され、 どの関数が中断されたかを示す「ランタイム」エラーが表示されます。 ランタイムのデータ構造をすべてクリアした後メッセージが表示され、 \fBbc\fR は次の入力を受け付ける状態になったことを示します。 これまでに定義した関数はすべて定義されて残っており、 ローカルでない変数の値は割り込み発生時点の値のままになっています。 ローカル変数と関数パラメータはすべて、クリア処理によって消去されます。 非対話セッションでは、SIGINT シグナルで \fBbc\fR の実行全体が終了します。 .SS 限界 以下の項目が現在の .B bc プロセッサの限界値となっています。 このうちいくつかは、インストール時に変更できます。 実際の値を得るには limits 文を使って下さい。 .IP BC_BASE_MAX 現在のところ、出力の基数の最大値は 999 に設定されています。 入力側の基数の最大値は 16 です。 .IP BC_DIM_MAX 現在のところ 65535 として配布されていますが、 インストールしたバージョンでは異なっているかも知れません。 .IP BC_SCALE_MAX 小数点以下の桁数は INT_MAX 桁に制限されています。 また、小数点より上の桁数も INT_MAX 桁に制限されています。 .IP BC_STRING_MAX 文字列中の文字数は INT_MAX 文字に制限されています。 .IP 指数 累乗演算 (^) の指数の値は LONG_MAX に制限されています。 .IP 変数名 単純変数、配列、関数各々について、一意に識別される名前は 32767 個に 制限されています。 .SH 環境変数 \fBbc\fR は以下の環境変数を解釈します。 .IP "POSIXLY_CORRECT" \fB-s\fR オプションと同じです。 .IP "BC_ENV_ARGS" -これは \fBbc\fR に引数を渡す別の方法で、コマンドライン引き数と +これは \fBbc\fR に引数を渡す別の方法で、コマンドライン引数と 同じ書式です。この引数が最初に処理されるので、この環境変数で 指定されたファイルはコマンドライン引数で指定されたファイルよりも 先に処理されます。これにより、毎回 \fBbc\fR を呼び出すごとに 処理する「標準の」オプションやファイルを設定できます。この環境変数で 指定するファイルには、\fBbc\fR を走らせるたびに定義しておきたいような 関数の定義を書いておくとよいでしょう。 .IP "BC_LINE_LENGTH" 数字を出力するときの 1 行の文字数を整数で指定します。 数字が長過ぎると、バックスラッシュと改行を含めた出力となります。 .SH 診断 コマンドラインで指定したファイルがオープンできない場合、 \fBbc\fR はファイルが利用できない旨を表示して終了します。 また、コンパイル時あるいはランタイムの診断メッセージもありますが、 それらは自身で理解できるようになっているはずです。 .SH バグ エラーリカバリがまだうまくいっていません。 .PP バグ報告は、 .BR bug-bc@gnu.org に電子メールでお願いします。 単語 ``bc'' を ``Subject:'' フィールドのどこかに入れておいてください。 .SH 作者 .nf Philip A. Nelson philnelson@acm.org .fi .SH 謝辞 実装をテストする際に 広範囲に手助けしてくれた Steve Sommars (Steve.Sommars@att.com) に感謝します。 たくさんの素晴らしい意見をもらいました。 彼のおかげでとてもよいものになりました。 diff --git a/ja_JP.eucJP/man/man1/getopt.1 b/ja_JP.eucJP/man/man1/getopt.1 index e78ca3dedc..8dc8bb550c 100644 --- a/ja_JP.eucJP/man/man1/getopt.1 +++ b/ja_JP.eucJP/man/man1/getopt.1 @@ -1,135 +1,135 @@ .\" %FreeBSD: src/usr.bin/getopt/getopt.1,v 1.15 2002/04/19 23:43:02 charnier Exp % .\" .\" $FreeBSD$ .Dd April 3, 1999 .Dt GETOPT 1 .Os .Sh 名称 .Nm getopt .Nd コマンドラインオプションの解釈を行う .Sh 書式 .Nm args=\`getopt Ar optstring $*\` ; errcode=$?; set \-\- $args .Sh 解説 .Nm ユーティリティは、 シェルプロシジャによって簡単に解釈できるようにコマンドライン上の オプションを切り分けます。そして、正しいオプションであるかを確かめます。 .Ar optstring は、認識されるオプション文字の文字列です ( .Xr getopt 3 を参照)。 オプション文字のあとにコロン (``:'') がある場合、そのオプションは、 (空白文字で区切られているかもしれない) 引数を持つことになります。 特別なオプション .Ql \-\- は、オプションの終りを区別するために使われます。 .Nm ユーティリティは、オプションの最後に引数として .Ql \-\- を配置します。または、それが陽に使われた時はそれを終りと認識します。 シェル変数 (\fB$1 $2\fR ...) は、個々のオプションが .Ql \- に続くように再設定されます。そして、それ自身をシェル変数にします。 各オプション引数は、同様にそれ用のシェル変数に入れられます。 .Sh 使用例 以下のコードの断片は、 引数無しの .Fl a, .Fl b オプションと、 引数ありの .Fl o オプションを取ろうとしているコマンドのために、どのようにして 引数を処理するのかを示しています。 .Pp .Bd -literal -offset indent args=\`getopt abo: $*\` # \`getopt abo: "$@"\` を使ってはなりません。 -# 以下の set コマンドとは異ったように、引き数を解釈してしまうためです。 +# 以下の set コマンドとは異ったように、引数を解釈してしまうためです。 if [ $? != 0 ] then echo 'Usage: ...' exit 2 fi set \-\- $args # set コマンドを、バッククォートした getopt と共に、直接使用できません。 # getopt の終了コードが set のもので隠されてしまうからです。 # set の終了コードは 0 と定義されています。 for i do case "$i" in \-a|\-b) echo flag $i set; sflags="${i#-}$sflags"; shift;; \-o) echo oarg is "'"$2"'"; oarg="$2"; shift; shift;; \-\-) shift; break;; esac done echo single-char flags: "'"$sflags"'" echo oarg is "'"$oarg"'" .Ed .Pp このコードは、以下の (コマンド指定の) 例のどれでも同じように 受け入れます。 .\"(訳注)「コマンド指定の」は、訳者が勝手に挿入している。 .\" 2.2.1R 対象(1997/04/27) Takeshi MUTOH .Pp .Bd -literal -offset indent cmd \-aoarg file file cmd \-a \-o arg file file cmd \-oarg -a file file cmd \-a \-oarg \-\- file file .Pp .Ed .Sh 関連項目 .Xr sh 1 , .Xr getopt 3 .Sh 診断 .Nm ユーティリティは、 .Ar optstring 中に含まれていないオプション文字に出会った時に、 標準エラー出力にエラーメッセージを表示し、0 より大きな状態で終了します。 .Sh 歴史 Bell Labs のマニュアルを元に、 .An Henry Spencer が書きました。 振舞いは、Bell Labs 版と同じであると信じています。 使用例は .Fx バージョン 3.2 と 4.0 で変更しました。 .Sh バグ .Xr getopt 3 が持っているバグは、そのまま持っています。 .Pp 空白文字やシェルのメタキャラクタを含んだ引数は、一般に元のまま 残りません。 これは直すのは簡単に思われますが、そうではありません。 .Nm や本マニュアルの使用例を直そうとする人は、 .Fx 中のこのファイルの履歴を確認すべきです。 .Pp 不正なオプションに対するエラーメッセージは、 .Nm を実行するシェルプロシジャから返すのではなく、 .Nm から返されます。 これも直すのは困難です。 .Pp シェルオプションの値を分離すること無く、引数を指定するための .Nm set コマンドを使うためのとっても良い方法は、シェルのバージョンを 変えることです。 .Pp 引き数を部分的に正しく解釈するために、 各シェルスクリプトは (前記使用例のような) 複雑なコードを持つ必要があります。 より良い getopt 的ツールは、複雑な部分の大半をツールの中に移動し、 クライアントのシェルスクリプトを単純にするものでしょう。 diff --git a/ja_JP.eucJP/man/man1/gtar.1 b/ja_JP.eucJP/man/man1/gtar.1 index b32139aec6..dd06c3dc75 100644 --- a/ja_JP.eucJP/man/man1/gtar.1 +++ b/ja_JP.eucJP/man/man1/gtar.1 @@ -1,597 +1,597 @@ .\" Copyright (c) 1991, 1992, 1993 Free Software Foundation -*- nroff -*- .\" See /usr/src/gnu/COPYING for conditions of redistribution .\" .\" Written by John F. Woods .\" Updated by Robert Eckardt .\" .\" %FreeBSD: src/gnu/usr.bin/tar/tar.1,v 1.43 2002/12/12 17:25:52 ru Exp % .\" .\" $FreeBSD$ .Dd December 23, 2000 .Os .Dt TAR 1 .Sh 名称 .Nm tar .Nd "テープアーカイバ; ""tar"" アーカイブファイルの操作" .Sh 書式 .Nm .Op Oo Fl Oc Ns Ar bundled-options Ar Args .Op Ar gnu-style-flags .Op Ar filenames | Fl C Ar directory-name .Ar ... .Sh 解説 .Nm は、歴史的な理由により .Dq tape archiver を省略して名付けられました。 .Nm プログラムは、 .Ar tarfile と呼ばれる .Nm フォーマットのアーカイブファイルを作成し、アーカイブにファイルを追加したり、 またアーカイブからファイルを抽出したりします。 .Ar tarfile は通常磁気テープを指しますが、フロッピディスケットや 通常のファイルでも構いません。 .Pp 通常、 .Nm コマンドラインの最初の引数は、機能文字および機能変更文字からなる単語であり、 その前に ダッシュ (-) を付けても付けなくてもいいようになっています。 単語には、次の機能文字のうち丁度 1 つを含んでいる必要があります: .Cm A , .Cm c , .Cm d , .Cm r , .Cm t , .Cm u , .Cm x , これらはそれぞれ、 .Em 追加 (append) 、 .Em 作成 (create) 、 .Em 差分 (difference) 、 .Em 置換 (replace) 、 .Em リスト表示 (table of contents) 、 .Em 更新 (update) 、 .Em 抽出 (extract) を意味しています (下記に詳細があります)。 これらの他に、以下に詳細を述べる機能変更文字を、コマンド単語に 含めることができます。それらのいくつかは、コマンド単語内と同じ順で コマンドライン引数を要求します ( .Sx 使用例 の節を参照)。 機能文字と機能変更文字は、GNU 形式の引数で指定することもできます (2 つのダッシュを最初に付け、1 つのコマンド単語ごとに機能文字か 機能変更文字を 1 つだけ指定する)。 アーカイブへの追加、アーカイブからの抽出、そしてリスト表示のために コマンドライン指定するファイル名には、 シェルのパターンマッチ文字列を使用することができます。 .Sh 機能 以下の機能のいずれか 1 つだけを必ず指定する必要があります。 .Pp .Bl -tag -width "--concatenate" -compact .It Fl A .It Fl -catenate .It Fl "-concatenate" 指定された ( .Nm アーカイブ形式の) ファイルを tar アーカイブの末尾 に追加します (追加する前の古い end-of-archive ブロックは削除さ れます)。 これは、指定されたファイルがアーカイブの中の 1 ファイルとなるので はなく、指定したファイルの中に含まれているファイルを、最初に指定 したアーカイブに追加するという効果を持ちます。 .Em 注 : このオプションは .Ar tarfile を再書き込みする必要があるため、1/4 インチカートリッジテープでは動作しません。 .It Fl c .It Fl -create 新しいアーカイブを作成して (もしくは古い内容を切り捨てて)、指定 されたファイルをアーカイブに書き込みます。 .It Fl d .It Fl -diff .It Fl -compare アーカイブの中のファイルと、それに相当するファイルシステム内の ファイルとの違いを調査します。 .It Fl -delete 指定されたファイルをアーカイブから削除します (1/4 インチテープでは動作しません)。 .It Fl r .It Fl -append アーカイブの末尾にファイルを追加します (1/4 インチテープでは動作しません)。 .It Fl t .It Fl -list アーカイブ内容のリスト表示をします。もし引数として .Ar filename が指定されていれば、そのファイルだけがリスト表示されます。 そうでなければ、アーカイブに含まれるすべてのファイルリストが表示されます。 .It Fl u .It Fl -update 指定したファイルのうち、アーカイブ内のファイルよりもディスク上の ファイルの変更時刻が新しいものだけを追加します。1/4 インチテープ では動作しません。 .It Fl x .It Fl -extract .It Fl -get アーカイブからファイルを抽出します。可能ならば、所有者、 変更時刻、ファイル属性はリストアされます。もし .Ar file 引数が指定されていなければ、アーカイブ内の全ファイルが抽出されます。 もし .Ar filename 引数がテープ上のディレクトリ名にマッチしていれば、そのディレクトリと ディレクトリ内のファイルが抽出されます (ディレクトリ内の すべてのディレクトリについても同様に抽出されます)。 もしアーカイブ内に、相当する同じファイルが複数含まれていれば (上記の .Fl -append コマンドを参照)、最後に含まれているものが他のすべてのファイルを 上書きする形で抽出されます。 .El .Sh オプション .Nm の他のオプションは、組み合わせて使用することができます。 1 文字オプションは、コマンド単語の中で指定することができます。 引数を与えるべきオプションの場合、オプションに続けて引数を指定し ます。1 文字オプションであれば、これに続くコマンドライン引数を 使用します (以下の .Sx 使用例 を参照してください)。 .Pp .Bl -tag -width "--preserve-permissions" -compact .It Fl -help .Nm のすべてのコマンドオプションについて一覧と解説を表示します。 .It Fl -atime-preserve テープに書かれている、ファイルのアクセス時刻をリストアします。 (inode の変更時刻が変更されることに注意してください!) .It Fl b .It Fl -block-size Ar number 読み書きするブロックサイズを .Ar number * 512-byte ブロック に設定します。 .It Fl B .It Fl -read-full-blocks 短い読みだしブロックを、完全なブロックに再組み立てします ( .Bx 4.2 パイプの読み込み用)。 .It Fl C Ar directory .It Fl -directory Ar directory 残りの引数を処理する前に .Ar directory へ移動します。 .It Fl -checkpoint アーカイブを読み書きする間に読み書きしたバッファの数を表示します。 .It Fl f Xo .Oo Ar hostname : Oc Ns Ar file .Xc .It Fl -file Xo .Oo Ar hostname : Oc Ns Ar file .Xc 指定された .Ar file (デフォルトは .Pa /dev/sa0 ) を読み書きします。 もし .Ar hostname が指定されていれば、 .Nm は .Xr rmt 8 を使って、リモートマシン上の .Ar file を読み書きします。 .Dq Ar - はファイル名として使用されることもありますが、 これは標準入力から読み出したり、標準出力へ書き出したりするために使用されます。 .It Fl -force-local コロンがある時でさえ、アーカイブファイルはローカルのものとします。 .It Fl F Ar file .It Fl -info-script Ar file .It Fl -new-volume-script Ar file それぞれのアーカイブが終ると、スクリプトを実行します (暗黙の .Fl M 指定が行なわれます)。 .It Fl -fast-read ワイルドカードで指定されていないすべての抽出ターゲットが アーカイブ内に見つかったら、その時点で終了します。 .It Fl G .It Fl -incremental 古い GNU-format インクリメンタルバックアップファイルを作成/リスト/抽出します。 .It Fl g Ar file .It Fl -listed-incremental Ar file 新しい GNU-format インクリメンタルバックアップファイルを 作成/リスト/抽出します。 .It Fl h .It Fl -dereference シンボリックリンクをシンボリックのまま書き込みません。シンボリックリンクが 指しているデータを書き込みます。 .It Fl i .It Fl -ignore-zeros -アーカイブの中のゼロブロック (通常、End-Of-File を意味する) を無視します。 +アーカイブの中の 0 ブロック (通常、End-Of-File を意味する) を無視します。 .It Fl -ignore-failed-read ファイルが読めなくても、非 0 のステータスで exit しません。 .It Fl j .It Fl y .It Fl -bzip .It Fl -bzip2 .It Fl -bunzip2 アーカイブを .Xr bzip2 1 でフィルタリングします。 .It Fl k .It Fl -keep-old-files ディスク上に既にあるファイルを保持します。つまり、アーカイブから 抽出するファイルは、ディスク上のファイルへ上書きしません。 .It Fl K Ar file .It Fl -starting-file Ar file アーカイブの中の .Ar file から (抽出、リストなどを) 始めます。 .It Fl l .It Fl -one-file-system あるファイルシステム内にあるファイルだけでアーカイブを作成します (他ファイルシステムへのマウントポイントを跨ぎません)。 .It Fl L Ar number .It Fl -tape-length Ar number .Ar number * 1024 バイト書き込んだ後でテープの交換を要求します。 .It Fl m .It Fl -modification-time ファイルの変更時刻を抽出しません。 .It Fl M .It Fl -multi-volume マルチボリュームアーカイブを作成/リスト/抽出します。 .It Fl n .It Fl -norecurse 作成時に再帰的にサブディレクトリを走査しません。 .It Fl -volno-file Ar file ボリューム番号付きのファイル名です。 .It Fl N Ar date .It Fl -after-date Ar date .It Fl -newer Ar date 作成時間が .Ar date より新しいファイルだけを抽出します。 .It Fl -newer-mtime Ar date 変更時間が .Ar date より新しいファイルだけを抽出します。 .It Fl o .It Fl -old-archive .It Fl -portability POSIX フォーマットではなく、V7 フォーマットのアーカイブを作成します。 .It Fl O .It Fl -to-stdout ファイルを標準出力に抽出します。 .It Fl p .It Fl -same-permissions .It Fl -preserve-permissions 保護情報を完全に抽出します。 .It Fl -preserve .Fl p s の指定と同じ効果を持ちます。 .It Fl P .It Fl -absolute-paths ファイル名から先頭の .Ql / をとりません。 .It Fl R .It Fl -record-number メッセージ中にアーカイブ内のレコード番号を埋め込み表示します。 .It Fl -remove-files アーカイブに追加したファイルを、追加後に削除します。 .It Fl s .It Fl -same-order .It Fl -preserve-order アーカイブ内から抽出するファイルを、指定された順のままにします。 .It Fl -show-omitted-dirs アーカイブ作成中に除外されたディレクトリを表示します。 .It Fl S .It Fl -sparse .Dq 疎な ファイルを効率的に扱うようにします。 .It Fl T Ar file .It Fl I Ar file .It Fl -files-from Ar file .Ar file から抽出もしくは作成するファイル名を得ます (1 行 1 ファイル名)。 .It Fl -null null で終わっている名前を考慮し、 .Fl T の振舞を変更します。 これは .Fl C 指定を無効にします。 .It Fl -totals .Fl -create によって書かれた総バイト数を表示します。 .It Fl U .It Fl -unlink .It Fl -unlink-first ファイルを作成する前に、いったん削除します。 .It Fl v .It Fl -verbose .Fl -create でアーカイブに書くファイルや .Fl -extract でアーカイブから 取り出すファイル名をリスト表示します。 ファイルの保護情報をファイル名とともに表示させるには、 .Fl -list を使います。 .It Fl V Ar volume-name .It Fl -label Ar volume-name 指定された .Ar volume-name を持ったアーカイブを作成します。 .It Fl -version .Nm プログラムのバージョン番号を表示します。 .It Fl w .It Fl -interactive .It Fl -confirmation すべての動作に対して、確認を求めるようになります。 .It Fl W .It Fl -verify アーカイブを書き込んだ後、ベリファイを試みます。 .It Fl -exclude Ar pattern .Ar pattern にマッチするファイルを除外します (抽出しません。追加しません。リスト表示しません)。 .It Fl X Ar file .It Fl -exclude-from Ar file .Ar file に一覧されているファイルを除外します。 .It Fl Z .It Fl -compress .It Fl -uncompress アーカイブを .Xr compress 1 でフィルタリングします。 .It Fl z .It Fl -gzip .It Fl -gunzip アーカイブを .Xr gzip 1 でフィルタリングします。 .It Fl -use-compress-program Ar program アーカイブを .Ar program でフィルタリングします (これは、 .Fl d が指定されたときは .Dq decompress を意味しなければなりません)。 .It Fl -block-compress テープもしくはフロッピのために、圧縮プログラムの出力をブロック 化します (そうしないと、ブロック長がおかしくなり、デバイスドライバは そのブロックを拒絶するでしょう)。 .It Fl Xo .Op Cm 0 Ns - Ns Cm 7 Ns .Op Cm lmh .Xc テープドライブと密度を指定します。 .El .Sh 環境 環境変数 .Ev TAR_OPTIONS に .Nm のデフォルトオプションを保持させることが可能です。 これらのオプションは最初に解釈されますので、 明示的なコマンドラインパラメータで上書き可能です。 .Sh 使用例 .Pa bert と .Pa ernie というファイルを含む、 ブロックサイズが 20 ブロックのアーカイブを、 テープドライブ .Pa /dev/sa0 に作るには、 .Dl "tar cfb /dev/sa0 20 bert ernie" もしくは .Dl "tar --create --file /dev/sa0 --block-size 20 bert ernie" と入力します。 .Fl f および .Fl b フラグは両方とも引数を必要としていることに注意してください。 この引数は、コマンド単語に書かれているのと同じ順序でコマンドラインから 取得されます。 .Pp .Pa /dev/sa0 はデフォルトのデバイスであり、20 はデフォルトのブロック サイズですので、上記の例は次のように単純化できます。 .Dl "tar c bert ernie" \&"backup.tar" というアーカイブから、すべての C ソース及びヘッダを 抽出するには、次のようにタイプします。 .Pp .Dl tar xf backup.tar '*.[ch]' .Pp シェルがカレントディレクトリ内のファイル名に展開しないよう、パターンを クォートしなければならないことに注意してください (当然、 シェルはアーカイブ内のファイル一覧にアクセスすることはできません)。 .Pp ファイルを階層構造ごとコピーするには、このようにコマンドを使用してください: .Bd -literal tar cf - -C srcdir . | tar xpf - -C destdir .Ed .Pp ディスケットに、 .Xr gzip 1 を使った圧縮アーカイブを作成するには、次の ようなコマンドラインを使うといいでしょう。 .Dl "tar --block-compress -z -c -v -f /dev/fd1a -b 36 tar/" .Pp まとめ指定フラグと .Fl - スタイルのフラグを混在させることができない ことに注意してください。次のようにタイプしなければならないわけで はなく、上記のような書き方で 1 文字フラグを使うことができます。 .Dl "tar --block-compress --gzip --verbose --file /dev/fd1a --block-size 20 tar/" .Pp 上のようにして作成したディスクの内容は、次のようにすればリスト 表示できます。 .Pp .Dl "tar tvfbz /dev/fd1a 36" .Pp 2 つの .Nm アーカイブを 1 つのアーカイブにまとめるには、 .Dl "tar Af archive1.tar archive2.tar" を使います。こうすると、 .Pa archive2.tar に含まれているファイルが .Pa archive1.tar の末尾に追加されます (単純に .Dl "cat archive2.tar >> archive1.tar" とタイプしてもうまくいかないことに注意してください。なぜなら、 .Nm アーカイブの末尾には end-of-file ブロックがあるからです)。 .Pp .Pa srcdir ディレクトリから 1997 年 2 月 9 日 13:00 以降に変更をされた 全てのファイルをアーカイブするためには、以下の形式を使って下さい。 .Dl "tar -c -f backup.tar --newer-mtime 'Feb 9 13:15 1997' srcdir/" .Pp 他の時間指定形式としては、 .Sq "02/09/97 13:15" , .Sq "1997-02-09 13:15" , .Sq "13:15 9 Feb 1997" , .Sq "'9 Feb 1997 13:15" , .Sq "Feb. 9, 1997 1:15pm" , .Sq "09-Feb" , .Sq "3 weeks ago" , .Sq "May first Sunday" があります。 正しいタイムゾーンを指定するためには、 .Sq "13:15 CEST" や .Sq "13:15+200" を使用して下さい。 .Sh 環境変数 .Nm プログラムは、以下の環境変数を参照します。 .Bl -tag -width "POSIXLY_CORRECT" .It Ev POSIXLY_CORRECT 通常、 .Nm はファイル指定の中に混ざったフラグを処理します。 この環境変数を設定すると、 .Nm は最初のフラグ以外の引数を見つける とそれ以降の引数に対してフラグ処理を行なわないという、POSIX 仕様 に合わせた動作を行なうようになります。 .It Ev SHELL インタラクティブモードにおいて、サブシェルの起動が要求されたとき、 .Ev SHELL 変数が設定されていればそれが、設定されていなければ .Pa /bin/sh が使用されます。 .It Ev TAPE .Nm のデフォルトのテープドライブを変更します (これは、さらに .Fl f フラグによって変更することができます)。 .It TAR_RSH TAR_RSH 環境変数は、デフォルトシェルに優先して、 .Nm tar のデータ転送に使用されます。 .El .Sh 関連ファイル .Bl -tag -width "/dev/sa0" .It Pa /dev/sa0 デフォルトのテープドライブ .El .Sh 互換性 .Fl y は FreeBSD だけの機能です。 GNU .Nm メンテナは、 .Fl j を GNU .Nm 1.13.18 以降における公式な .Xr bzip2 1 圧縮オプションとして採用しました。 .Fl I オプションは、Solaris の .Nm との互換性のためにあります。 .Sh 関連項目 .Xr bzip2 1 , .Xr compress 1 , .Xr gzip 1 , .Xr pax 1 , .Xr rmt 8 .Sh 歴史 .Nm フォーマットは立派な歴史を持っていて、Sixth Edition UNIX に 原点があります。 この .Nm の実装は GNU 実装であり、 .An John Gilmore によって書かれた パブリックドメイン .Nm が元になっています。 .Sh 作者 .An -nosplit 次の人を含む、大変多くの人々。[ソースの中の .Pa ChangeLog ファイルに記述されている人々] .An John Gilmore (オリジナルのパブリックドメイン版の作者), .An Jay Fenlason (最初の GNU 作者), .An Joy Kendall , .An Jim Kingdon , .An David J. MacKenzie , .An Michael I Bushnell , .An Noah Friedman そして バグフィックスや追加を貢献してくれた無数の人々。 .Pp このマニュアルページは .Nx 1.0 release から、 .Fx グループが 取り込んだものです。 .Sh バグ 特徴的な .Fl C オプションの動作は、伝統的な .Nm プログラムのそれとは異なるので、 あまり頼りにはできません。 .Pp .Fl A コマンドで任意の数の .Nm アーカイブを結合できればいいのですが、それはできません。 これをやろうとしても、2 つ目以降のアーカイブの end-of-archive ブロックが削除されずに残ってしまいます。 .Pp .Nm ファイルフォーマットは準固定幅フィールドフォーマットであり、 デバイス番号用のフィールドは 16 ビット用 (メジャー 8 ビットでマイナ 8 ビット) にデザインされており、我々の 32 ビット番号 (メジャー 8 ビットでマイナ 16+8 ビット) を吸収できません。 diff --git a/ja_JP.eucJP/man/man1/less.1 b/ja_JP.eucJP/man/man1/less.1 index e5fce0f915..8e0803d757 100644 --- a/ja_JP.eucJP/man/man1/less.1 +++ b/ja_JP.eucJP/man/man1/less.1 @@ -1,1558 +1,1558 @@ .\" $FreeBSD$ .TH LESS 1 "Version 371: 26 Dec 2001" .\" .\" 以下は参考にした Linux JM のクレジット .\" Japanese Version Copyright (c) 1999 Yuichi SATO .\" all rights reserved. .\" Translated Fri Sep 17 03:26:44 JST 1999 .\" by Yuichi SATO .\"WORD: caret キャレット .\"WORD: curly bracket 中括弧 .\"WORD: parentheses 小括弧 .\"WORD: square bracket 大括弧 .\"WORD: pound sign シャープ符号 .\"WORD: window ウィンドウ .\"WORD: screen 画面 .\"WORD: literalize 機能打ち消し .\"WORD: examine (ファイルを)読み込む .\"WORD: quote 括る (XXX) .\"WORD: more than one 複数 .\"WORD: standout 強調 .\"WORD: text 文字 .\"WORD: printable characters 印刷可能文字 .\"WORD: angle bracket 山括弧 .SH 名称 less \- more の反対 .SH 書式 .B "less -?" .br .B "less --help" .br .B "less -V" .br .B "less --version" .br .B "less [-[+]aBcCdeEfFgGiIJmMnNqQrRsSuUVwWX]" .br .B " [-b \fIbufs\fP] [-h \fIlines\fP] [-j \fIline\fP] [-k \fIkeyfile\fP]" .br .B " [-{oO} \fIlogfile\fP] [-p \fIpattern\fP] [-P \fIprompt\fP] [-t \fItag\fP]" .br .B " [-T \fItagsfile\fP] [-x \fItab\fP,...] [-y \fIlines\fP] [-[z] \fIlines\fP]" .br .B " [+[+]\fIcmd\fP] [--] [\fIfilename\fP]..." .br (長いオプション名による代替オプション文法に関してはオプション節を参照してく ださい。) .SH 解説 .I less は .I more (1) と似たプログラムですが、 ファイル内での前方移動と同様に後方移動も可能となっています。 また .I less は起動時に入力ファイル全体を読み込む必要がないため、 入力ファイルが大きい場合には .I vi (1) のようなテキストエディタより速く起動します。 .I less は termcap(いくつかのシステムでは terminfo) を使用するため、 多様な端末上で動作可能です。 機能は限られてはいますが、ハードコピー端末においてでさえも動作します。 (ハードコピー端末では、画面の一番上に表示されるべき行には 頭にキャレットが付きます。) .PP コマンドは .I more と .I vi の両方に基づいています。 コマンドに対し、10 進数値を前に付けることが可能です。 この数値は、以下の説明においては N で表します。 コマンドによってはこの数字を使用するものがあり、 この用法は以下に示します。 .SH コマンド 以降の説明で ^X は control-X を意味します。 ESC は ESCAPE キーです。例えば ESC-v は "ESCAPE" を押した後に "v" を 押すという意味です。 .IP "h or H" ヘルプ: これらのコマンドの概要を表示します。 もし他のコマンド全てを忘れたとしても、このコマンドだけは忘れないでください。 .IP "SPACE or ^V or f or ^F" 前方に N 行、デフォルトでは 1 ウィンドウスクロールします (後述する -z オプションを参照してください)。 N が画面サイズより大きい場合には、 最後の表示可能な部分のみが表示されます。 警告: いくつかのシステムでは、 ^V は特殊な機能打ち消し文字として使われています。 .IP "z" SPACE と似ていますが、N を指定すると N が新しいウィンドウサイズとなります。 .IP "ESC-SPACE" SPACE と似ていますが、ファイルの終わりに達した場合でも 1 画面分スクロールします。 .IP "RETURN or ^N or e or ^E or j or ^J" 前方に N 行、デフォルトでは 1 行スクロールします。 たとえ N が画面サイズより大きい場合でも、N 行全てを表示します。 .IP "d or ^D" 前方に N 行、デフォルトでは半画面スクロールします。 N が指定された場合、その後の d コマンドと u コマンドの 新しいデフォルトサイズが N になります。 .IP "b or ^B or ESC-v" 後方に N 行、デフォルトでは 1 ウィンドウスクロールします (後述する -z オプションを参照してください)。 N が画面サイズより大きい場合には、 最後の表示可能な部分のみが表示されます。 .IP "w" ESC-v と似ていますが、N を指定すると、N が新しいウィンドウサイズとなります。 .IP "y or ^Y or ^P or k or ^K" 後方に N 行、デフォルトでは 1 行スクロールします。 たとえ N が画面サイズより大きい場合でも、N 行全てを表示します。 警告: いくつかのシステムでは、^Y が特殊なジョブ制御文字として使われています。 .IP "u or ^U" 後方に N 行、デフォルトでは半画面スクロールします。 N が指定された場合、その後の d コマンドと u コマンドの 新しいデフォルトサイズが N になります。 .IP "ESC-) or RIGHTARROW" 右水平方向に N 文字、デフォルトでは画面幅の半分スクロールします (-# オプションを参照)。 数値 N が指定されると、 この値が将来の RIGHTARROW および LEFTARROW のデフォルトとなります。 文字がスクロールされている間、(長い行を切り落とす) -S オプションが 有効であるかのように動作します。 .IP "ESC-( or LEFTARROW" 左水平方向に N 文字、デフォルトでは画面幅の半分スクロールします (-# オプションを参照)。 数値 N が指定されると、 この値が将来の RIGHTARROW および LEFTARROW のデフォルトとなります。 .IP "r or ^R or ^L" 画面を再描画します。 .IP R 画面の再描画をしますが、バッファリングされた入力を破棄します。 ファイルを閲覧中に、ファイルが変更される場合に便利です。 .IP "F" 前方にスクロールし、ファイルの末尾に達した後も読み続けようとします。 通常このコマンドは、既にファイルの終わりに達している場合に使われます。 このコマンドにより、閲覧中に大きくなり続けるファイルの末尾を 監視できます。 ("tail -f" コマンドと同じような動作をします。) .IP "g or < or ESC-<" ファイルの N 行目、デフォルトでは 1 行目 (ファイルの始め) に移動します。 (警告: N が大きいと遅くなります。) .IP "G or > or ESC->" ファイルの N 行目、デフォルトではファイルの終わりに移動します。 (警告: N が大きい場合や、N が指定されておらず しかもファイルでなく標準入力から読み込んでいる場合には遅くなります。) .IP "p or %" ファイルの N パーセント目の位置に移動します。 N は 0 から 100 の間でなければなりません。 .IP "{" 画面内で一番上の行にある左中括弧に対し、 { コマンドで対応する右中括弧の位置に移動します。 対応した右中括弧は画面の最下行に表示されます。 複数の左中括弧が画面の先頭行にある場合、 数字 N で行の N 個目の括弧かを指定できます。 .IP "}" 画面内で一番下の行にある右中括弧に対し、 } コマンドで対応する左中括弧の位置に移動します。 対応した左中括弧は画面の先頭行に表示されます。 複数の右中括弧が画面の先頭行にある場合、 数字 N で行の N 個目の括弧かを指定できます。 .IP "(" { コマンドと似ていますが、中括弧ではなく小括弧に対して動作します。 .IP ")" } コマンドと似ていますが、中括弧ではなく小括弧に対して動作します。 .IP "[" { コマンドと似ていますが、中括弧ではなく大括弧に対して動作します。 .IP "]" } コマンドと似ていますが、中括弧ではなく大括弧に対して動作します。 .IP "ESC-^F" 2 つの文字を続けて入力することで、{ コマンドと似た動作をします。 2 つの文字はそれぞれ開括弧と閉括弧として扱われます。 例えば "ESC ^F < >" を実行すると、 一番上の行に表示されている < に対応する > に進むことができます。 .IP "ESC-^B" 2 つの文字を続けて入力することで、} コマンドと似た動作をします。 2 つの文字はそれぞれ開括弧と閉括弧として扱われます。 例えば "ESC ^B < >" を実行すると、 一番下の行に表示されている > に対応する < に戻ることができます。 .IP m 任意の小文字を続けて入力することで、現在の位置を、入力した文字でマークします。 .IP "'" (シングルクォート)。 任意の小文字を続けて入力することで、以前この文字でマークした位置に戻ります。 シングルクォートをもう 1 つ続けることで、 「大きく」移動するコマンド実行前の位置に戻ります。 ^ や $ で、それぞれファイルの先頭行と最終行にジャンプします。 新しいファイルを読み込んでもマークは保存されるので、' コマンドは 入力ファイルの切り替えに使うことができます。 .IP "^X^X" シングルクォートと同じです。 .IP /pattern ファイルの中で N 番目の pattern を含む行を前方検索します。 N のデフォルトは 1 です。 このパターンは .I ed で認識される正規表現です。 検索は画面に表示されている第 2 行から始まります (しかし -a と -j オプションはこれを変更しますので、参照してください)。 .sp いくつかの文字はパターンの始めに置かれた場合は特殊文字とされます。 これらの文字はパターンの一部としてではなく 検索方法を変更するために使われます: .RS .IP "^N or !" パターンにマッチしない行を検索します。 .IP "^E or *" 複数のファイルを検索します。 つまり、検索がマッチしないまま現在のファイルの終わりに達した場合、 コマンドラインリストにある次のファイルで検索を続行します。 .IP "^F or @" 現在の画面表示や -a または -j オプションの設定に関係なく、 コマンドラインリストの最初のファイルの先頭行から 検索を開始します。 .IP "^K" 現在の画面中でマッチする全てのパターンをハイライト表示しますが、 一番始めのマッチする位置へは移動しません (現在の位置を保持します)。 .IP "^R" 正規表現のメタキャラクタを解釈しません。 つまり、単純な文字列比較を行います。 .RE .IP ?pattern ファイルの中で N 番目の pattern を含む行を後方検索します。 検索は、画面の一番上に表示されている行の直前の行から行います。 .sp / コマンドの時と同様に、いくつかの文字は特殊です: .RS .IP "^N or !" パターンにマッチしない行を検索します。 .IP "^E or *" 複数のファイルで検索します。 つまり、検索がマッチしないまま現在のファイルの先頭に達した場合、 コマンドラインリストにある前のファイルで検索を続行します。 .IP "^F or @" 現在の画面表示や -a または -j オプションの設定に関係なく、 コマンドラインリストにある最後のファイルの最終行から 検索を開始します。 .IP "^K" 前方検索の時と同じです。 .IP "^R" 前方検索の時と同じです。 .RE .IP "ESC-/pattern "/*" と同じです。 .IP "ESC-?pattern" "?*" と同じです。 .IP n 前回使用した検索パターンを含む N 番目の行に対して検索を繰り返します。 前回の検索が ^N で修飾されていた場合、 パターンを含まない N 番目の行を検索します。 前回の検索が ^E で修飾されていた場合、現在のファイルで条件が満たされない 場合には、次の (前の) ファイルで検索を続けます。 前回の検索が ^R で修飾されていた場合、正規表現を用いずに検索を行います。 前回の検索が ^F または ^K で修飾されていた場合、その効果はなくなります。 .IP N 前回の検索を逆方向に繰り返します。 .IP "ESC-n" 前回の検索をファイル境界を越えて繰り返します。 前回の検索が * によって修飾されていた場合と同じです。 .IP "ESC-N" 前回の検索を逆方向にファイル境界を越えて繰り返します。 .IP "ESC-u" 検索結果のハイライト表示を元の状態に戻します。 現在の検索パターンにマッチした文字列のハイライト表示をオフにします。 もし既に以前の ESC-u コマンドによりハイライト表示がオフになっている場合は、 ハイライトをオンに戻します。全ての検索コマンドも ハイライト表示をオンに戻します。 (-G オプションでもハイライトをオフに切り替えることができます。 この場合検索コマンドでハイライトがオンになることはありません。) .IP ":e [filename]" 新しいファイルを読み込みます。 ファイル名が指定されなかった場合は、コマンドラインのファイルリストから 「現在の」ファイル (後述する :n と :p コマンド参照) が読み直されます。 filename 中のパーセント記号 (%) は現在のファイル名で置き換えられます。 filename 中のシャープ記号 (#) は前に読み込んだファイル名で置き換えられます。 しかし、2 つ続けたパーセント記号は、 単純に 1 つのパーセント記号に置き換えられます。 これはパーセント記号を含むファイル名を入力できるようにするためです。 同様に、2 つ続けたシャープ記号は、 1 つのシャープ記号に置き換えられます。 このファイル名は、ファイルのコマンドラインリストに挿入されるので、 その後の :n コマンドと :p コマンドで閲覧できるようになります。 filename に複数のファイルを指定すると、全てをファイルリストに加え、 最初のファイルを読み込みます。 ファイル名が、複数のスペースを含む場合、 ファイル名全体はダブルクォートで囲まれていなければなりません (-" オプションも参照してください)。 .IP "^X^V or E" :e コマンドと同じです。 警告: いくつかのシステムでは ^V が特殊な機能打ち消し文字として 使われています。 そのようなシステムでは、^V を使うことはできないでしょう。 .IP ":n" (コマンドラインで与えられたファイルリストから) 次のファイルを読み込みます。 数字 N が指定されている場合は、N 個後のファイルを読み込みます。 .IP ":p" コマンドラインリストの中にある前のファイルを読み込みます。 数字 N が指定されている場合は、N 個前のファイルを読み込みます。 .IP ":x" コマンドラインリストの中の一番最初のファイルを読み込みます。 数字 N が指定されている時は、N 番目のファイルを読み込みます。 .IP ":d" 現在閲覧中のファイルをファイルリストから削除します。 .IP "t" 現在のタグにマッチするものが複数個あった場合、次のタグに移動します。 タグに関する詳細は \-t オプションを参照してください。 .IP "T" 現在のタグにマッチするものが複数個あった場合、前のタグに移動します。 .IP "= or ^G or :f" 閲覧中のファイルについて、ファイル名、 表示中の最下行の行番号とバイトオフセットといった情報を表示します。 可能な場合には、ファイルの長さ、ファイルの行数、 表示中の最下行より上にあるファイルの割り合い (パーセント) も表示します。 .IP \- コマンドラインオプション文字 (後述するオプション参照) のうちの 1 つを続けて 入力することで、オプション設定を変更し新しい設定を解説するメッセージを 表示します。 ダッシュの直後に ^P (CONTROL-P) が入力された場合、 オプションの設定は変更されますが、メッセージは表示されません。 オプション文字が、(-b や -h のように) 数値を持ったり、 (-P や -t のように) 文字列値を持つ場合、 オプション文字の後に新しい値を入力します。 値を入力しなかった場合、現在の設定を示すメッセージを 表示するのみで、設定は変わりません。 .IP \-\- \- コマンドと似ていますが、1 文字オプションではなく、 長いオプション名 (後述するオプション節を参照) を受け付けます。 オプション名を打ち込んだ後に RETURN を押す必要があります。 2 個目のダッシュ直後の ^P は \- コマンドと同じように、新しい設定を 解説するメッセージの表示を抑制します。 .IP \-+ コマンドラインオプション文字のうちの 1 つを続けて入力することで、 オプションをデフォルト設定に戻して、新しい設定を表示します。 ("\-+\fIX\fP" コマンドは、 コマンドラインで "\-+\fIX\fP" とするのと同じです。) このコマンドは文字列の値を持つオプションには働きません。 .IP \-\-+ \-+ コマンドと似ていますが、1 文字オプションではなく、 長いオプション名を受け付けます。 .IP \-! コマンドラインオプション文字のうちの 1 つを続けて入力することで、 オプションをデフォルト設定の「反対」にして、新しい設定を表示します。 このコマンドは数値または文字列の値を持つオプションには働きません。 .IP \-\-! \-! コマンドと似ていますが、1 文字オプションではなく、 長いオプション名を受け付けます。 .IP _ (アンダスコア。) コマンドラインオプション文字のうちの 1 つを続けて入力することで、 そのオプションの現在設定を表示します。 オプションの設定は変化しません。 .IP __ (2 つのアンダスコア。) _ (アンダスコア) コマンドと似ていますが、1 文字オプションではなく、 長いオプション名を受け付けます。 オプション名を打ち込んだ後に RETURN を押す必要があります。 .IP +cmd 新しいファイルを読み込む度に、指定したコマンド cmd を実行します。 例えば +G は .I less がファイルを最初に表示する際に、始めではなく終わりから表示させます。 .IP V 現在起動している .I less のバージョンを表示します。 .IP "q or Q or :q or :Q or ZZ" .I less を終了します。 .PP 以下の 4 つのコマンドが有効であるかどうかは、 インストールした方法に依存します。 .PP .IP v 現在閲覧しているファイルを編集するため、エディタを起動します。 エディタは、環境変数 VISUAL が定義されている場合はその値が用いられます。 VISUAL が定義されていない時は、EDITOR の値が使われます。 もし VISUAL も EDITOR も定義されていない場合は、"vi" がデフォルトになります。 後述するプロンプト節の LESSEDIT に関する話題も参照してください。 .IP "! shell-command" 与えられたシェルコマンドを実行するため、シェルを起動します。 コマンド中のパーセント記号 (%) は現在のファイル名で置き換えられます。 コマンド中のシャープ記号 (#) は前に読み込んだファイル名で置き換えられます。 "!!" は、直前のシェルコマンドを繰り返します。 シェルコマンドを伴わない "!" は、単にシェルを起動します。 Unix システムでは、シェルは環境変数 SHELL で設定されたもの、もしくは デフォルトの "sh" です。 MS-DOS や OS/2 システムでは、シェルは通常のコマンドプロセッサです。 .IP "| shell-command" は任意のマーク文字です。 入力ファイルのある部分を、与えられたシェルコマンドにパイプで渡します。 渡されるファイルの部分は、現在の画面の一番上の行から 文字でマークされた場所までです。 が ^ と $ の場合、それぞれファイルの先頭行と最終行を示します。 が . または改行の場合、現在の画面がパイプで渡されます。 .IP "s filename" 入力をファイルに保存します。 このオプションは入力が一般のファイルでなく、パイプの時のみ有効です。 .PP .SH オプション コマンドラインオプションを以下に説明します。 大部分のオプションは .I less の実行中に "\-" コマンドを用いて変更できます。 .PP 多くのオプションは 1 つのダッシュの後に 1 つの文字か、または 2 つのダッシュの後に長いオプション名の 2 つの形式のうち片方で指定できます。 長いオプション名は省略があいまいでない長さまで省略できます。 例えば --quit-at-eof は --quit と省略できますが、 --quit-at-eof と --quiet の両方が --qui で始まるので、 --qui とは省略できません。 いくつかの長いオプション名は --QUIT-AT-EOF のように、 --quit-at-eof とは別に大文字になっています。 このようなオプション名は最初の 1 文字が大文字になっていればよく、 名前の残りは大文字でも小文字でも構いません。 例えば --Quit-at-eof は --QUIT-AT-EOF と同等です。 .PP オプションは環境変数 "LESS" の値からも取られます。 例えば .I less を起動する度に "less -options ..." とタイプするのを避けるには、 .I csh では: .sp setenv LESS "-options" .sp .I sh を使っている場合は: .sp LESS="-options"; export LESS .sp とします。 MS-DOS 上では、クォートする必要はありませんが、オプション文字列中の パーセント記号を 2 つのパーセント記号に置き換える必要があります。 .sp 環境変数は、コマンドラインより先に解析されますので、 コマンドラインオプションは、環境変数 LESS に優先します。 あるオプションが環境変数 LESS にあった場合でも、 コマンドラインオプションに "-+" を含めて起動すると、そのオプションは デフォルトにリセットされます。 .sp -P または -D オプションのように、後に文字列が続くオプションでは、 ドル記号 ($) が文字列の終わりを表す記号として使われます。 例えば MS-DOS 上で -D オプションを 2 つ設定するには、下記のように それらの間にドル記号を入れる必要があります: .sp LESS="-Dn9.1$-Ds4.1" .sp .IP "-? or --help" このオプションは、 .I less が受け付けるコマンドの概要を表示します (h コマンドと同じです)。 (使用しているシェルが疑問符をどのように解釈するかに依存し、 "-\\?" のように疑問符をクォートする必要があるかもしれません。) .IP "-a or --search-skip-screen" 画面に表示されている最下行の次の行から検索を開始します。 つまり、現在画面に表示されている行中の検索は行いません。 デフォルトでは、検索は画面中の第 2 行目 (もしくは最後に検索対象が見付かった行のあと; -j オプション参照) から行われます。 .IP "-b\fIn\fP or --buffers=\fIn\fP" .I less が各ファイルに対して使うバッファの数を指定します。 各バッファは 1K で、 デフォルトでは各ファイルに対し 10 個のバッファが使われます (ただし、ファイルがパイプの場合は例外です; -B オプションを参照)。 数字 \fIn\fP で、使用するバッファの数を指定します。 .IP "-B or --auto-buffers" データがパイプから読み込まれる場合、 デフォルトではバッファは必要に応じて自動的に割り当てられます。 そのため、大容量のデータがパイプから読み込まれる場合、 多くのメモリを割り当ててしまいます。 -B オプションはパイプでの自動的な割り当てを禁止しますので、 -b オプションで指定されたバッファ数のみを使用します。 警告: -B オプションを使った場合、ファイルの最も最近閲覧している 部分しかメモリに保持されず以前のデータが無くなっているため、 誤った表示になる場合があります。 .IP "-c or --clear-screen" 全画面の再描画を、先頭行から下に向かって行わせるようにします。 デフォルトでは、 全画面の再描画は、画面の最終行からのスクロールによって行われます。 .IP "-C or --CLEAR-SCREEN" -C オプションは、-c オプションと似ていますが、 画面をクリアしてから再描画します。 .IP "-d or --dumb" -d オプションは端末がダム端末の場合、 通常表示されるエラーメッセージの表示を抑制します。 ダム端末とは画面のクリア、後方にスクロールといった いくつかの重要な機能がない端末のことをいいます。 -d オプションは、それ以外の点についてはダム端末における .I less .\" XXX 原文 ) が余計? の挙動を変化させません。 .IP "-D\fBx\fP\fIcolor\fP or --color=\fBx\fP\fIcolor\fP" [MS-DOS のみ] 表示する文字の色を設定します。 \fBx\fP は設定する文字の種類を表す 1 文字です: n=標準, s=強調, d=太字, u=下線, k=点滅。 \fIcolor\fP は、ピリオドで区切られた数値の組です。 1 つ目の数値で文字の前景色、2 つ目の数値で文字の背景色を選びます。 単独の数値、\fIN\fP は、\fIN.0\fP と同じです。 .IP "-e or --quit-at-eof" ファイルの終わりに 2 度達した際に、自動的に .I less を終了させます。 デフォルトでは、 .I less は "q" コマンドでのみ終了できます。 .IP "-E or --QUIT-AT-EOF" ファイルの終わりに 1 度達した際に、自動的に .I less を終了させます。 .IP "-f or --force" 非標準ファイルを強制的にオープンさせます。 (非標準ファイルとは、ディレクトリまたは デバイス型特殊ファイルのことです。) またバイナリファイルをオープンする際の警告メッセージも表示しません。 デフォルトでは .I less は非標準ファイルのオープンを拒否します。 .IP "-F or --quit-if-one-screen" ファイル全体が最初の画面に表示可能だった場合には、 .I less を自動的に終了させます。 .IP "-g or --hilite-search" 通常、 .I less は、前回の検索コマンドでマッチした画面中全ての文字列をハイライト表示します。 -g オプションは、この動作を前回の検索コマンドでマッチした文字列のみを ハイライト表示するように変更します。 このオプションは、 .I less の動作をデフォルトより多少速くします。 .IP "-G or --HILITE-SEARCH" -G オプションは、検索コマンドで見付かった文字列に対する 全てのハイライト表示を抑制します。 .IP "-h\fIn\fP or ---max-back-scroll=\fIn\fP" 後方にスクロールする最大行数を指定します。 もし \fIn\fP 行を上回って後方にスクロールする必要がある場合は、 代わりに画面が前方に向かって再描画されます。 (端末が後方に戻る機能を持たない場合は、-h0 が暗に意味されています。) .IP "-i or --ignore-case" 大文字小文字の区別をしません。 つまり、大文字と小文字を同一と見なして検索を行います。 このオプションは、検索パターンに大文字が含まれていた場合には無視されます。 いいかえると、検索パターンに大文字が含まれていた場合、 大文字小文字の区別をした検索をします。 .IP "-I or --IGNORE-CASE" -i コマンドと似ていますが、検索パターンが大文字を含んでいた場合でも、 大文字小文字の違いを無視して検索をします。 .IP "-j\fIn\fP or --jump-target=\fIn\fP" 「ターゲット」行の位置を画面上の何行目に表示するか指定します。 ターゲット行とは、文字検索、タグ検索、行番号へのジャンプ、 ファイルのパーセンテージでのジャンプ、マーク位置へのジャンプ の対象となる行です。 画面の行は数字で指定します: 画面の一番上の行は 1、その次の行は 2、 以下同様に指定します。 画面の最終行から何行目かを指定する場合は、数値を負に指定します: 画面の一番下の行は -1、下から 2 行目は -2、以下同様に指定します。 -j オプションが用いられている場合、 検索はターゲット行の直後の行から始まります。 例えば "-j4" の場合、ターゲット行は画面の 4 行目なので、 検索は画面の 5 行目から始まります。 .IP "-J or --status-column" 画面の左端にステータスカラムを表示します。 現在の検索にマッチした行数をステータスカラムに表示します。 ステータスカラムは -w または -W オプションが有効な場合にも使用されます。 .IP "-k\fIfilename\fP or --lesskey-file=\fIfilename\fP" 指定したファイルを .I lesskey (1) のファイルであるとして .I less にオープンさせ、処理させます。 複数の -k オプションを指定することもできます。 環境変数 LESSKEY または LESSKEY_SYSTEM が設定された場合、あるいは lesskey ファイルが標準位置 (キー割り当ての節を参照) に見付かった場合、 そのファイルも .I lesskey ファイルとして使用されます。 .IP "-m or --long-prompt" .I less に (\fImore\fP のような)、 冗長なパーセント表示のプロンプトを表示させます。 デフォルトでは、 .I less は、コロンのプロンプトを表示します。 .IP "-M or --LONG-PROMPT" .I more より、さらに冗長なプロンプトを .I less に表示させます。 .IP "-n or --line-numbers" 行番号の使用を抑制します。 (行番号を使用する) デフォルトの設定では、 特に、入力ファイルが非常に大きな場合に .I less の速度の低下を引き起こすことがあります。 -n オプションで行番号の使用を抑制することで、この問題を避けられます。 行番号の使用とは、冗長なプロンプトと = コマンドでの行番号の表示と、 v コマンドが現在の行番号をエディタに渡すことです (下記のプロンプト節における LESSEDIT に関する話題も参照してください)。 .IP "-N or --LINE-NUMBERS" 画面の各行の先頭に行番号を表示します。 .IP "-o\fIfilename\fP or --log-file=\fIfilename\fP" .I less の入力ファイルを閲覧されている状態のまま、 指定した名前のファイルにコピーします。 このオプションは入力ファイルが通常ファイルではなく、 パイプである場合にのみ適用されます。 ファイルが既に存在する場合は、 .I less は上書きする前に確認を求めます。 .IP "-O\fIfilename\fP or --LOG-FILE=\fIfilename\fP" -O オプションは -o に似ていますが、 既にあるファイルを確認することなく上書きします。 .sp ログファイルが指定されてない場合、 -o と -O オプションは、 .I less のなかから、ログファイルを指定するために使えます。 ファイル名を指定しない場合は、単にログファイル名を表示するだけです。 "s" コマンドは、 .I less のなかから、-o を指定するのと同等です。 .IP "-p\fIpattern\fP or --pattern=\fIpattern\fP" コマンドラインでの -p オプションは、 +/\fIpattern\fP を指定するのと同じです。つまり、 .I less はファイル中で \fIpattern\fP が最初に現れるところから表示を開始します。 .IP "-P\fIprompt\fP or --prompt=\fIprompt\fP" 3 つのプロンプトスタイルを好みに合わせて仕立てる方法を提供します。 このオプションは通常、 .I less コマンドを呼び出す度に打込んだりせずに、 環境変数 LESS で指定します。 このオプションは、変数 LESS の中で 最後のオプションになっているか、 ドル記号で終了している必要があります。 -Ps の後の文字列は、デフォルトの (短い) プロンプトを その文字列に変更します。 -Pm は、中間の (-m) プロンプトを変更します。 -PM は、長い (-M) プロンプトを変更します。 -Ph は、ヘルプ画面のプロンプトを変更します。 -P= は、= コマンドで表示されるメッセージを変更します。 -Pw は、(F コマンド中で) データ待ちの間に表示されるメッセージを変更します。 全てのプロンプト文字列は、 文字と特別なエスケープシーケンスの連続から構成されます。 詳細は、プロンプト節を参照してください。 .IP "-q or --quiet or --silent" 適度に「静かな」動作にします: ファイルの終わりを越えて、またはファイルの始まりを越えて スクロールしようとした場合に端末ベルが鳴らなくなります。 端末が「ビジュアルベル」を持っている場合は代わりにそれを使います。 無効な文字を打った時のような、 その他の確かなエラーに関してはベルを鳴らします。 デフォルトでは、全ての場合において端末ベルを鳴らします。 .IP "-Q or --QUIET or --SILENT" 完全に「静かな」動作にします: 端末ベルは全く鳴らしません。 .IP "-r or --raw-control-chars" 制御文字を「そのまま」表示します。 デフォルトでは、制御文字をキャレットを使って表示します。 例えば control-A (8 進数 001) は、"^A" と表示します。 警告: -r オプションが使われると、 .I less は、(画面が各制御文字の種類にどのように反応するかに依存しているために) 画面の実際の表示状態を追うことができません。 よって長い行が誤った位置で分割されてしまうといったような、 多くの表示上の問題が生じます。 .IP "-R or --RAW-CONTROL-CHARS" -r と似ていますが、可能な限り画面の表示状態を追おうとします。 この機能は入力が通常の文字といくつかの ANSI 「カラー」エスケープシーケンス からなっている場合にのみ働きます。 ANSI 「カラー」エスケープシーケンスとは .sp ESC [ ... m .sp のような形式で、"..." には 0 個以上の "m" でない文字が入ります。 画面表示状態を追うために、全ての制御文字と 全ての ANSI カラーエスケープシーケンスは カーソルを動かさないと仮定されます。 カラーエスケープシーケンスを終了させることのできる文字のリストを LESSANSIENDCHARS 環境変数に設定することにより、"m" 以外の文字が ANSI カラーエスケープシーケンスを終了できることを .I less に教えることができます。 .IP "-s or --squeeze-blank-lines" 連続した空白行を、1 行の空白行にまとめます。 これは、 .I nroff の出力を閲覧する際に便利です。 .IP "-S or --chop-long-lines" 画面幅より長い行を折り返さずに切り捨てます。 つまり、長い行の残りの部分を単純に捨ててしまいます。 デフォルトでは長い行を折り返します。つまり残りが次の行に表示されます。 .IP "-t\fItag\fP or --tag=\fItag\fP" -t オプションの直後にはタグ名が続き、そのタグを含むファイルを編集します。 このオプションを使うためには、タグ情報が必要です。 例えば、 .I ctags (1) コマンドであらかじめ作られた "tags" と呼ばれる ファイルがカレントディレクトリにあるかもしれません。 環境変数 LESSGLOBALTAGS が設定された場合、これは .I global (1) 互換のコマンドの名前として解釈され、 このコマンドがタグを見付けるために使用されます (http://www.gnu.org/software/global/global.html を参照)。 -t オプションは、 .I less の中から (\- コマンドを用いて) 新しいファイルを読み込む方法として 指定することもできます。 コマンド ":t" は、 .I less の中で、-t を指定するのと同じです。 .IP "-T\fItagsfile\fP or --tag-file=\fItagsfile\fP" "tags" の代わりに使用するタグファイルを指定します。 .IP "-u or --underline-special" バックスペースと復帰文字 (carrage return) を印刷可能文字として扱います。 つまり、これらが入力に現れた時は端末に送られます。 .IP "-U or --UNDERLINE-SPECIAL" バックスペース、タブ、復帰文字を制御文字として扱います。 つまり、これらの文字は -r オプションで指定されたものとして扱います。 .sp -u と -U のどちらも指定されていない場合、デフォルトでは 下線文字の隣にあるバックスペースは特別に扱われます。 すなわち、 下線の引かれた文字が、端末のハードウェア下線機能を使って表示されます。 さらに、同一の 2 文字の間にあるバックスペースも特別な扱われ方をします。 すなわち、 重ね打ちされた文字が、端末のハードウェア太字機能を使って表示されます。 その他のバックスペースは、前の文字と共に削除されます。 直後に改行が続く復帰文字は、削除されます。 その他の復帰文字は -r オプションで指定されたように扱われます。 重ね打ちや下線の引かれた文字の検索は -u と -U のどちらも有効でない場合にのみ可能です。 .IP "-V or --version" .I less のバージョン番号を表示します。 .IP "-w or --hilite-unread" 1 ページ前方に移動した後最初の「新しい」行を一時的にハイライト表示します。 最初の「新しい」行とは、移動前に画面の最後だった行の直後の行のことです。 また g や p コマンドの後、ターゲット行をハイライト表示します。 ハイライト表示は次の移動を伴うコマンドで消去されます。 行の全てがハイライト表示されますが、-J オプションが有効な場合は、 ステータスカラムのみがハイライト表示されます。 .IP "-W or --HILITE-UNREAD" -w と似ていますが、1 行より多く前方に移動する全てのコマンドのあと、 最初の新しい行を一時的にハイライト表示します。 .IP "-x\fIn\fP,... or --tabs=\fIn\fP,..." タブストップを設定します。 単一の \fIn\fP だけが指定された場合、 \fIn\fP の倍数の位置にタブストップが設定されます。 複数の値がコンマで区切って指定された場合、 タブストップは、これらの位置と、残りは最後の 2 個の間隔に、配置されます。 例えば \fI-x9,17\fP はタブストップを位置 9, 17, 25, 33 等に設定します。 デフォルトの \fIn\fP は 8 です。 .IP "-X or --no-init" .\" XXX deinitialize って非初期化でいいの? 端末に、termcap 初期化文字列と非初期化文字列を送らないようにします。 画面をクリアする際のように非初期化文字列が何か不必要なことをする場合には、 望ましい場合があります。 .IP "--no-keypad" 端末に、キーパッド初期化文字列と非初期化文字列を送らないようにします。 キーパッド文字列が数値キーパッドを変な風に動作させてしまう場合、 これが有用な場合があります。 .IP "-y\fIn\fP or --max-forw-scroll=\fIn\fP" 前方にスクロールする最大行数を指定します。 もし \fIn\fP 行を上回って前方にスクロールする必要がある場合は、 代わりに画面が再描画されます。 必要ならば、-c か -C オプションを使用して、 画面の先頭から再描画できます。 デフォルトでは、全ての前方移動はスクロールになります。 .IP "-[z]\fIn\fP or --window=\fIn\fP" デフォルトのスクロールするウィンドウの大きさを \fIn\fP 行に変更します。 デフォルトは 1 画面分の行数です。 z と w コマンドはウィンドウの大きさを変更するためにも使えます。 z は、 .I more との互換性のために省略できます。 数値 .I n が負の場合は、現在の画面サイズより .I n 行小さくウィンドウサイズを設定することを意味しています。 例えば画面が 24 行の場合、\fI-z-4\fP はスクロールする ウィンドウを 20 行に設定することを意味しています。 画面が 40 行に変更された場合には、 スクロールウィンドウは自動的に 36 行に変更されます。 .IP -"\fIcc\fP\ or\ --quotes=\fIcc\fP ファイル名をクォートする文字を変更します。 スペースとクォート文字の両方を含むファイル名を指定する場合には このオプションが必要となるでしょう。 1 文字続けた場合、クォート文字が指定した文字に変更されます。 この場合スペースを含むファイル名はダブルクォートではなく、 この文字で囲まなければなりません。 また、2 文字続けた場合は、 1 文字目が開クォートに、2 文字目が閉クォートになります。 この場合スペースを含むファイル名の前に開クォート文字をおき、 ファイル名の後に閉クォート文字をおきます。 引用文字を変更した後でも、このオプションは -" (ダッシュの後にダブルクォート) のままであることに注意してください。 .IP "-~ or --tilde" 通常、ファイルの終わりより後の行は、1 つのチルダ (~) で表示されます。 このオプションを使うと、ファイルの終わりより後の行を空白行で表示します。 .IP "-# or --shift" RIGHTARROW と LEFTARROW コマンドで水平スクロールする デフォルトの桁数を指定します。 0 を指定した場合には、デフォルトの数は画面幅の半分の桁数になります。 .IP -- -コマンドライン引き数 "--" は、オプション引数の終わりを示します。 +コマンドライン引数 "--" は、オプション引数の終わりを示します。 この後の、いかなる引数もファイル名として解釈されます。 このオプションは、"-" や "+" で名前が始まる ファイルを閲覧する場合に便利です。 .IP + あるコマンドラインオプションが \fB+\fP で始まる場合、 オプションの残りは、 .I less に初期コマンドとして渡されます。 例えば +G は、 .I less が、ファイルの始めではなくファイルの終わりを表示して起動するように働きます。 また、オプション +/xyz は、ファイル中で "xyz" が初めて現れる場所から 起動させるように働きます。 特殊な場合として、+ は +g と同じ働きをします。 つまり、このオプションでは指定された行番号から表示が始まります (ただし、上記の "g" コマンドの注意書きを参照のこと)。 もしこのオプションが ++ で始められた場合は、 初期コマンドは閲覧する最初のファイルにだけでなく 全てのファイルに対して適用されます。 上述した "+" コマンドも、全てのファイルに対する初期コマンドの 設定 (および変更) に使われます。 .SH "行編集" 画面の一番下でコマンドラインに (例えば :e コマンドに対するファイル名や、 検索コマンドに対するパターンを) 入力する際に、 いくつかのキーをコマンドラインを操作するために使用できます。 多くのコマンドは、ある種のキーボードでキーが存在しない場合でも 使用できるように、[ 大括弧 ] 中にある代替形式を持っています。 (大括弧の中の形式は、MS-DOS 版では機能しません。) これらの特殊キーはどれでも、^V や ^A といった「リテラル」文字を 前に置くことで文字として入力できます。 バックスラッシュ自身は、2 つのバックスラッシュを入力することで、 文字として入力できます。 .IP "LEFTARROW [ ESC-h ]" カーソルを 1 文字分左へ移動します。 .IP "RIGHTARROW [ ESC-l ]" カーソルを 1 文字分右へ移動します。 .IP "^LEFTARROW [ ESC-b or ESC-LEFTARROW ]" (CONTROL と LEFTARROW を同時入力) カーソルを 1 単語分左へ移動します。 .IP "^RIGHTARROW [ ESC-w or ESC-RIGHTARROW ]" (CONTROL と RIGHTARROW を同時入力) カーソルを 1 単語分右へ移動します。 .IP "HOME [ ESC-0 ]" カーソルを行頭へ移動します。 .IP "END [ ESC-$ ]" カーソルを行末へ移動します。 .IP "BACKSPACE" カーソルの左にある文字の消去、 または、コマンドラインが空の場合にコマンドをキャンセルします。 .IP "DELETE or [ ESC-x ]" カーソルの下にある文字を消去します。 .IP "^BACKSPACE [ ESC-BACKSPACE ]" (CONTROL と BACKSPACE を同時入力) カーソルの左にある単語を消去します。 .IP "^DELETE [ ESC-X or ESC-DELETE ]" (CONTROL と DELETE を同時入力) カーソルの下にある単語を消去します。 .IP "UPARROW [ ESC-k ]" 前のコマンドラインを呼び出します。 .IP "DOWNARROW [ ESC-j ]" 次のコマンドラインを呼び出します。 .IP "TAB" カーソルの左にある部分的なファイル名を補完します。 複数のファイル名にマッチした場合は、 最初にマッチしたファイル名がコマンドラインに入力されます。 TAB を繰り返し打つと、マッチした他のファイル名を順番に表示します。 補完したファイル名がディレクトリの場合、"/" がファイル名に付け加えられます。 (MS-DOS システムでは、"\\" が付け加えられます。) ディレクトリ名に異なる文字を付け加えたい場合は、 環境変数 LESSSEPARATOR で指定できます。 .IP "BACKTAB [ ESC-TAB ]" TAB と似ていますが、マッチしたファイル名を逆順に循環して入力します。 .IP "^L" カーソルの左にある部分的なファイル名を補完します。 複数のファイル名にマッチした場合は、 (もし収まれば) マッチした全てのファイル名がコマンドラインに入力されます。 .IP "^U (Unix と OS/2) or ESC (MS-DOS)" 全てのコマンドラインを消去するか、 またはコマンドが空の場合にはコマンドをキャンセルします。 Unix において、line-kill 文字を ^U 以外の文字に変更している場合は、 その文字が ^U の代わりに使われます。 .SH "キー割り当て" lesskey ファイルを作成する .I lesskey (1) を用いて、独自の .I less コマンドを定義できます。 このファイルはコマンドキーの集合と それぞれのキーに関係づけられた動作を指定します。 また、 .I lesskey を使って行編集キー (行編集を参照) を変更したり、 環境変数を設定したりできます。 環境変数 LESSKEY が設定されている場合には、 .I less は lesskey ファイル名としてその値を使用します。 設定されていない場合、 .I less は、標準の位置にある lesskey ファイルを探します: Unix システムでは、 .I less は "$HOME/.less" という名前のファイルを探します。 MS-DOS と Windows システムでは、 .I less は "$HOME/_less" という lesskey ファイルを探し、 そこに見つからないない場合は、 環境変数 PATH で指定されている全てのディレクトリの下にある "_less" という lesskey ファイルを探します。 OS/2 システムでは、 .I less は "$HOME/less.ini" という lesskey ファイルを探し、 見つからない場合は、環境変数 INIT で指定されている全てのディレクトリの下にある "less.ini" ファイルを探し、 そこに見つからない場合は、 環境変数 PATH で指定されている全てのディレクトリの下にある "less.ini" ファイルを探します。 詳細は、 .I lesskey のマニュアルページを参照してください。 .P システム標準 lesskey ファイルを用いて キー割り当てを提供することもできます。 あるキーがローカル lesskey ファイルとシステム標準ファイルの両方に 見つかった場合は、システム標準のものよりもローカルファイルの キー割り当てが優先されます。 環境変数 LESSKEY_SYSTEM が設定されていた場合は、 .I less はシステム標準 lesskey ファイルとしてその値を使用します。 設定されてない場合、 .I less はシステム標準 lesskey ファイルを標準の場所で探します。 Unix システムでは、システム標準ファイルは /usr/local/etc/sysless です。 (ただし、 .I less が /usr/local/etc とは別の sysconf ディレクトリで作成されていた場合は、 そのディレクトリで sysless は見つかります。) MS-DOS と Windows システムでは、 システム標準 lesskey ファイルは c:\\_sysless です。 OS/2 システムでは、 システム標準 lesskey ファイルは c:\\sysless.ini です。 .SH 入力プリプロセッサ .I less に対して、「入力プリプロセッサ」を定義できます。 .I less はファイルをオープンする前に、まず入力プリプロセッサで 入力ファイルの内容の表示方法を変更する機会を与えます。 入力プリプロセッサは、ファイルの内容を 代替ファイルと呼ばれる別ファイルに書き出す 単純な実行可能プログラム (またはシェルスクリプト) です。 そして代替ファイルの内容がオリジナルファイルの内容の代わりに表示されます。 しかし、ユーザにとってはオリジナルファイルが オープンされているかのように見えます。 つまり .I less は現在のファイルの名前としてオリジナルファイルの名前を表示します。 .PP 入力プリプロセッサは、ユーザによって入力された オリジナルファイル名をコマンドライン引数として 1 つ受け付けます。 入力プリプロセッサは代替ファイルを作成し、 また終了した際に代替ファイル名を標準出力に表示しなければなりません。 入力プリプロセッサが代替ファイル名を出力しない場合は、 .I less は通常どおりオリジナルファイルを使用します。 入力プリプロセッサは、標準入力を閲覧する場合には呼び出されません。 入力プリプロセッサを設定するためには、 入力プリプロセッサを呼び出すコマンドラインを環境変数 LESSOPEN に設定します。 このコマンドラインは、文字列 "%s" を 1 つ含んでいなければなりません。 これは、入力プリプロセッサコマンドが呼び出される際に、 ファイル名に置き換えられます。 .PP .I less がそのようにしてオープンしたファイルをクローズする際には、 入力ポストプロセッサと呼ばれるもう 1 つのプログラムを呼び出します。 このプログラムは、(LESSOPEN によって作られた代替ファイルを消去するといった) 必要な全ての後処理を行います。 このプログラムは、ユーザによって入力されたオリジナルファイル名と 代替ファイル名の 2 つを引数として受け付けます。 入力ポストプロセッサを設定するためには、 入力ポストプロセッサを呼び出すコマンドラインを 環境変数 LESSCLOSE に設定します。 入力ポストプロセッサコマンドはファイル名に置き換えられる 文字列 "%s" を 2 つ含んでいます。1 つ目はファイルのオリジナルの 名前に置き換えられ、2 つ目は LESSOPEN の出力である 代替ファイルの名前に置き換えられます。 .PP 例えば多くの Unix システムでは、次の 2 つのスクリプトにより 圧縮されているファイルを圧縮された状態のまま .I less でそのファイルを直接閲覧できます。 .PP lessopen.sh: .br #! /bin/sh .br case "$1" in .br *.Z) uncompress -c $1 >/tmp/less.$$ 2>/dev/null .br if [ -s /tmp/less.$$ ]; then .br echo /tmp/less.$$ .br else .br rm -f /tmp/less.$$ .br fi .br ;; .br esac .PP lessclose.sh: .br #! /bin/sh .br rm $2 .PP これらのスクリプトを使うためには、それらの両方を実行可能な場所に置き、 LESSOPEN="lessopen.sh\ %s", LESSCLOSE="lessclose.sh\ %s\ %s" と設定します。 異なった種類の圧縮ファイルなどを受け付ける より複雑な LESSOPEN と LESSCLOSE スクリプトを書くこともできるでしょう。 .PP データを代替ファイルに書き出さず、直接 .I less にパイプするような入力プリプロセッサを設定することも可能です。 こうすることにより、 閲覧する前に圧縮ファイル全体を展開することを避けられます。 このような働きをする入力プリプロセッサは、入力パイプと呼ばれます。 入力パイプは、代替ファイル名を標準出力に表示する代わりに、 代替ファイルの内容全てを標準出力に書き出します。 入力パイプが標準出力に何も書き出さない場合は代替ファイルはなく、 .I less は通常どおりオリジナルファイルを使用します。 入力パイプを使う場合は、 入力プリプロセッサが入力パイプであることを知らせるために、 環境変数 LESSOPEN の最初の文字を、縦棒 (|) に設定します。 .PP 例えば多くの Unix システムで、 このスクリプトは上述したスクリプト例と似た働きをします。 .PP lesspipe.sh: .br #! /bin/sh .br case "$1" in .br *.Z) uncompress -c $1 2>/dev/null .br ;; .br esac .br .PP このスクリプトを使うためには、これを実行可能な場所に置いて、 LESSOPEN="|lesspipe.sh %s" と設定します。 入力パイプを使用する際もポストプロセッサ LESSCLOSE を使用できますが、 削除する代替ファイルがないので通常必要ありません。 この例では、LESSCLOSE ポストプロセッサに渡される 代替ファイル名は "-" です。 .SH "各国文字集合" 入力ファイルには、3 種類の文字が含まれています。 .IP "通常文字" 画面に直接表示できる文字。 .IP "制御文字" 画面に直接表示すべきではありませんが、(バックスペースやタブのように) 普通のテキストファイル中で見つかることが予期される文字。 .IP "バイナリ文字" 画面に直接表示すべきではなく、 テキストファイル中で見つかることが予期されていない文字。 .PP 「文字集合」は簡潔にいうとどの文字が通常文字、制御文字、 バイナリ文字として考えられるかということです。 環境変数 LESSCHARSET で文字セットを選択できます。 環境変数 LESSCHARSET に設定できるのは: .IP ascii BS, TAB, NL, CR, formfeed が制御文字で、 32 と 126 の間の値を持つ全ての文字が通常で、 その他全てがバイナリです。 .IP iso8859 ISO 8859 文字集合を選択します。 160 から 255 までが通常文字として扱われること以外は、ASCII と同じです。 .IP latin1 iso8859 と同じです。 .IP latin9 iso8859 と同じです。 .IP dos MS-DOS に適した文字集合を選択します。 .IP ebcdic EBCDIC 文字集合を選択します。 .IP IBM-1047 OS/390 Unix Services が使用する EBCDIC 文字を選択します。 これが EBCDIC における latin1 相当です。 環境変数で LESSCHARSET=IBM-1047 か LC_CTYPE=en_US とすると、 同等の効果が得られます。 .IP koi8-r ロシアの文字集合を選択します。 .IP next NeXT コンピュータに適した文字集合を選択します。 .IP utf-8 ISO 10646 文字集合の UTF-8 符号を選択します。 .PP ある特殊な場合には、 .I less が LESSCHARSET で指定できない文字セットを使うように調整したい場合があります。 このような場合、環境変数 LESSCHARDEF を用いて文字集合を定義できます。 この環境変数は、文字列中の各文字が、 文字集合中の 1 文字を表すように設定します。 文字 "." は通常文字を表すのに使われ、 文字 "c" は制御文字を、文字 "b" はバイナリ文字を表します。 10 進数は繰り返しに使用できます。 例えば "bccc4b." は値 0 の文字がバイナリ、 1, 2, 3 は制御、4, 5, 6, 7 はバイナリ、 そして 8 は通常文字を意味します。 最後の文字より後の文字は全て最後の文字と同じと扱われるので、 9 から 255 までの文字は通常となります。 (これは例なので、 必ずしもなにか実際の文字集合セットを表しているわけではありません。) .PP 下の表は、LESSCHARSET として有効な値に対し、 それぞれ等価な LESSCHARDEF の値を示しています。 .sp ascii\ 8bcccbcc18b95.b .br dos\ \ \ 8bcccbcc12bc5b95.b. .br ebcdic 5bc6bcc7bcc41b.9b7.9b5.b..8b6.10b6.b9.7b .br \ \ \ \ \ \ 9.8b8.17b3.3b9.7b9.8b8.6b10.b.b.b. .br IBM-1047 4cbcbc3b9cbccbccbb4c6bcc5b3cbbc4bc4bccbc \ \ \ \ \ \ 191.b .br iso8859 8bcccbcc18b95.33b. .br koi8-r 8bcccbcc18b95.b128. .br latin1 8bcccbcc18b95.33b. .br next\ \ 8bcccbcc18b95.bb125.bb .PP LESSCHARSET と LESSCHARDEF のどちらも設定されていない場合、 文字列 "UTF-8" が LC_ALL, LC_TYPE, LANG のいずれかの環境変数に見付かれば、 デフォルトの文字集合は utf-8 になります。 .PP この文字列が見付からない場合でも、 システムが .I setlocale インタフェースをサポートしていれば、 .I less は文字集合の決定に setlocale を使用します。 setlocale は環境変数 LANG もしくは LC_CTYPE で制御されます。 .PP 最後に、 .I setlocale インタフェースも使えない場合、デフォルトの文字集合は latin1 になります。 .PP 制御文字とバイナリ文字は強調 (反転) して表示されます。 これらの文字はそれぞれ可能であるならば (例えば control-A を ^A というように) キャレット表記で表示されます。 キャレット表記は、0100 ビットを反転した結果が 印刷可能文字になる場合にのみ使用されます。 そうでない場合は、山括弧で囲まれた 16 進数で表します。 このフォーマットは、環境変数 LESSBINFMT により変更できます。 LESSBINFMT は "*"で始まり、もう1つの文字で表示属性を選択します: "*k" は点滅、"*d" は太字、"*u" は下線、 "*s" は強調、そして、"*n" は通常です。 LESSBINFMT が "*" で始まっていない場合は、通常属性と仮定します。 LESSBINFMT の残りの部分は、1 つの printf スタイルのエスケープシーケンス (x, X, o, d などが後ろに続く %) を含む文字列です。 LESSBINFMT が "*u[%x]" の場合、バイナリキャラクタは 大括弧で囲まれた 16 進数に下線をして表示されます。 LESSBINFMT が指定されていない場合のデフォルトは、"*s<%X>" です。 .SH "プロンプト" -P オプションにより、プロンプトを好みに合わせて仕立てることができます。 -P オプションに与えられた文字列は、指定したプロンプト文字列を置き換えます。 文字列中のある文字は特殊な解釈をされます。 プロンプト機構は柔軟性を持たせるために少々複雑になっていますが、 一般のユーザは、個人用プロンプト文字列の作り方の詳細を理解する必要は ありません。 .sp パーセント記号は後に続く 1 文字が何かによって展開のされ方が異なります: .IP "%b\fIX\fP" 現在の入力ファイルでのバイトオフセットで置き換えられます。 b の後には、(上記で \fIX\fP で示されている) 1 文字が続き、 どの行のバイトオフセットを使用するかを指定します。 その文字が "t" の場合は、画面の先頭行のバイトオフセットが使われます。 "m" の場合は真中の行、"b" の場合は最下行、 "B" の場合は最下行の直後の行の、 "j" の場合には -j オプションで指定したターゲット行の バイトオフセットを使うことを意味しています。 .IP "%B" 現在の入力ファイルの大きさに置き換えられます。 .IP "%c" 画面の最初の桁に表示されている文字の桁番号に置き換えられます。 .IP "%d\fIX\fP" ある行が存在する入力ファイル中のページ番号に置き換えられます。 使用する行は %b オプションと同じように \fIX\fP で決定されます。 .IP "%D" 入力ファイルのページ数、 いいかえると入力ファイルの最終行のページ番号に置き換えられます。 .IP "%E" エディタの名前 (環境変数 VISUAL、VISUAL が定義されていない場合は 環境変数 EDITOR) に置き換えられます。 後述する LESSEDIT 機能に関する話題を参照してください。 .IP "%f" 現在の入力ファイル名に置き換えられます。 .IP "%i" 入力ファイルのリスト中における現在のファイルのインデックスで置き換えらます。 .IP "%l\fIX\fP" ある行の入力ファイル中での行番号で置き換えられます。 使用する行は %b オプションと同じように \fIX\fP で決定されます。 .IP "%L" 入力ファイルの最終行の行番号で置き換えられます。 .IP "%m" 入力ファイルの合計数で置き換えられます。 .IP "%p\fIX\fP" 現在の入力ファイルでのバイトオフセットに基づいたパーセントで置き換えられます。 使用する行は %b オプションと同じように \fIX\fP で決定されます。 .IP "%P\fIX\fP" 現在の入力ファイルでの行番号に基づいたパーセントで置き換えられます。 使用する行は %b オプションと同じように \fIX\fP で決定されます。 .IP "%s" %B と同じです。 .IP "%t" 後に続くスペースを取り除きます。 通常は文字列の最後に使われますが、どこに置いても構いません。 .IP "%x" ファイルリストのうち次の入力ファイル名で置き換えられます。 .PP もし (例えば入力がパイプのためファイルサイズが分からない場合など) 項目が不明な場合は、代わりに疑問符が表示されます。 .PP プロンプト文字列のフォーマットは、ある条件によって変更できます。 疑問符とその後に続く 1 文字で、"IF" のように働き、 どのようような文字が続くかで、条件が評価されます。 条件が真ならば、疑問符と条件文字の後に続く文字列から ピリオドまでがプロンプトの中に表示されます。 条件が偽ならば、そのような文字列はプロンプトに挿入されません。 疑問符とピリオドの間にあるコロンは、"ELSE" として働き、 コロンとピリオドの間にある文字列は、IF の条件が偽の場合にのみ プロンプト文字列に挿入されます。 (疑問符に続く) 条件文字には次のようなものがあります: .IP "?a" プロンプトに既に任意の文字列が含まれている場合に真。 .IP "?b\fIX\fP" 指定した行のバイトオフセットが既知の場合に真。 .IP "?B" 現在の入力ファイルの大きさが既知の場合に真。 .IP "?c" 文字が水平に移動している (%c が 0 でない) 場合に真。 .IP "?d\fIX\fP" 指定した行のページ番号が既知の場合に真。 .IP "?e" ファイルの終わりの場合に真。 .IP "?f" 入力ファイル名がある (つまり、入力がパイプでない) 場合に真。 .IP "?l\fIX\fP" 指定した行の行番号が既知の場合に真。 .IP "?L" ファイルの最終行の行番号が既知の場合に真 .IP "?m" 複数の入力ファイルがある場合に真。 .IP "?n" 新しい入力ファイルの最初のプロンプトの場合に真。 .IP "?p\fIX\fP" 指定した行の現在の入力ファイルでの バイトオフセットに基づくパーセントが既知の場合に真。 .IP "?P\fIX\fP" 指定した行の現在の入力ファイルでの 行番号に基づくパーセントが既知の場合に真。 .IP "?s" "?B" と同じです。 .IP "?x" 次の入力ファイルがある (つまり、現在の入力ファイルが最後のファイルでない) 場合に真。 .PP 特殊文字 (疑問符、コロン、ピリオド、パーセント、バックスラッシュ) 以外の 全ての文字がプロンプトにそのまま表示されます。 特殊文字をプロンプトにそのまま表示させるには、 その文字の前にバックスラッシュを置きます。 .PP 例: .sp ?f%f:Standard input. .sp このプロンプトは、ファイル名が既知の場合にはファイル名を、 そうでない場合には "Standard input" と表示します。 .sp ?f%f .?ltLine %lt:?pt%pt\\%:?btByte %bt:-... .sp このプロンプトはファイル名が既知の場合に表示します。 行番号が既知の場合には、ファイル名に続けて行番号を表示します。 もし行番号が既知でなくパーセントが既知の場合には、パーセントを表示します。 パーセントも既知でなくバイトオフセットが既知の場合には、 バイトオフセットを表示します。 バイトオフセットも既知でない場合には、ダッシュを表示します。 各疑問符にピリオドがどのように対応しているかに注意してください。 また、%pt の後の % を実際に挿入するために、 バックスラッシュでエスケープしていることに注意してください。 .sp ?n?f%f\ .?m(file\ %i\ of\ %m)\ ..?e(END)\ ?x-\ Next\\:\ %x..%t .sp このプロンプトがファイルにおける最初のプロンプトの場合には ファイル名を表示します。 さらに、複数のファイルがある場合には、 "file N of N" というメッセージを加えます。 そして、ファイルの終わりに達した場合には、文字列 "(END)" が表示され、 引き続いて次のファイルがある場合にはそのファイル名を表示します。 最後に、後に続くスペースを切り詰めます。 これはデフォルトのプロンプトです。 参考として、(-m と -M オプションに対応する) 2 つのプロンプトのデフォルトを挙げます。 ここでは読みやすさのために 2 行に分けています。 .nf .sp ?n?f%f\ .?m(file\ %i\ of\ %m)\ ..?e(END)\ ?x-\ Next\\:\ %x.: ?pB%pB\\%:byte\ %bB?s/%s...%t .sp ?f%f\ .?n?m(file\ %i\ of\ %m)\ ..?ltlines\ %lt-%lb?L/%L.\ : byte\ %bB?s/%s.\ .?e(END)\ ?x-\ Next\\:\ %x.:?pB%pB\\%..%t .sp .fi そして、次に挙げるのは = コマンドで表示されるデフォルトのメッセージです。 .nf .sp ?f%f\ .?m(file\ %i\ of\ %m)\ .?ltlines\ %lt-%lb?L/%L.\ . byte\ %bB?s/%s.\ ?e(END)\ :?pB%pB\\%..%t .fi .PP プロンプト展開の機能は他の目的でも使われます: 環境変数 LESSEDIT が定義されている場合、この変数は v コマンドで実行されるコマンドとして使われます。 LESSEDIT の文字列は、プロンプト文字列と同じ方法で展開されます。 LESSEDIT のデフォルトの値は以下のとおりです: .nf .sp %E\ ?lm+%lm.\ %f .sp .fi この文字列は、エディタ名と、その後に + と行番号、その後にファイル名と いうように展開されます。 あなたの指定したエディタが、"+行番号" という構文を受け付けない場合や、 呼び出しの構文が違う場合には、 このデフォルトの LESSEDIT を修正できます。 .SH セキュリティ 環境変数 LESSSECURE が 1 に設定されている場合、 .I less は「安全な」モードで実行されます。この場合、以下の機能は使えません: .RS .IP "!" シェルコマンド .IP "|" パイプコマンド .IP ":e" ファイルの読み込みコマンド .IP "v" 編集コマンド .IP "s -o" ファイルの記録 .IP "-k" lesskey ファイルの使用 .IP "-t" タグファイルの使用 .IP " " ファイル名での * といったメタキャラクタ .IP " " ファイル名補完 (TAB, ^L) .RE .PP less を「安全な」モードでしか実行できないように コンパイルすることも可能です。 .SH 環境変数 環境変数は普通にシステム環境で設定するか、または .I lesskey (1) ファイルで指定できます。 環境変数が複数の個所で定義されている場合、 ローカルな lesskey ファイルでの変数定義、 システム環境での変数定義、 システム標準 lesskey ファイルでの変数定義の順で優先されます。 .IP COLUMNS 画面の 1 行あたりの桁数を設定します。 環境変数 TERM で設定された桁数よりも優先されます。 (ただし画面サイズを知ることができる TIOCGWINSZ または WIOCGETD を サポートしているウィンドウシステムを使用しているのであれば、 その情報が環境変数 LINES と COLUMNS よりも優先されます。) .IP EDITOR (v コマンドで使用される) エディタの名前。 .IP HOME (Unix および OS/2 のシステムで lesskey ファイルを探すのに使われる) ユーザのホームディレクトリ名。 .IP "HOMEDRIVE, HOMEPATH" 変数 HOME が設定されていない場合に、 環境変数 HOMEDRIVE と HOMEPATH を連結した名前が ユーザのホームディレクトリになります (Windows 版のみ)。 .IP INIT (OS/2 システムで lesskey ファイルを探すのに使われる) ユーザの init ディレクトリ名。 .IP LANG 文字集合を決定するための言語。 .IP LC_CTYPE 文字集合を決定するための言語。 .IP LESS 自動的に .I less に渡されるオプション。 .IP LESSANSIENDCHARS ANSI カラーエスケープシーケンスを終了させるとみなす文字 (デフォルトは "m")。 .IP LESSBINFMT 印字可能文字でもなく、制御文字でもない文字を 表示する際のフォーマット。 .IP LESSCHARDEF 文字集合を定義します。 .IP LESSCHARSET あらかじめ定義された文字集合を選択します。 .IP LESSCLOSE (オプションの) 入力ポストプロセッサを呼び出すためのコマンドライン。 .IP LESSECHO lessecho プログラムの名前 (デフォルトは、"lessecho")。 lessecho プログラムは、Unix システムにおいてファイル名の * や ? といったメタキャラクタの展開に必要です。 .IP LESSEDIT (v コマンドで使用される) エディタのプロトタイプ文字列。 プロンプト節での話題を参照してください。 .IP LESSGLOBALTAGS グローバルタグを探すために -t オプションが使用するコマンド名。 .I global (1) コマンドがある場合、通常、"global" です。 設定されていない場合、グローバルタグは使用されません。 .IP LESSKEY デフォルトの lesskey(1) ファイル名。 .IP LESSKEY_SYSTEM デフォルトのシステム標準 lesskey(1) ファイル名。 .IP LESSMETACHARS シェルに「メタキャラクタ」として解釈される文字のリスト。 .IP LESSMETAESCAPE less がシェルにコマンドを送る際にメタキャラクタの前に付加する プレフィックス。 LESSMETAESCAPE が空の文字列である場合、 メタキャラクタを含むコマンドはシェルに送られません。 .IP LESSOPEN (オプションの) 入力プリプロセッサを呼び出すためのコマンドライン。 .IP LESSSECURE less を「安全な」モードで実行させます。 セキュリティ節での話題を参照してください。 .IP LESSSEPARATOR ファイル名補完においてディレクトリ名に付加される文字列。 .IP LINES 画面の行数を設定します。 環境変数 TERM で設定された行数よりも優先されます。 (ただし画面サイズを知ることができる TIOCGWINSZ または WIOCGETD を サポートしているウィンドウシステムを使用しているのであれば、 その情報が環境変数 LINES と COLUMNS よりも優先されます。) .IP PATH (MS-DOS と OS/2 システムで lesskey ファイルを探すのに使われる) ユーザの検索パス。 .IP SHELL ! コマンドを実行したり、ファイル名の補完に使用されるシェル。 .IP TERM .I less が実行されている端末の種類。 .IP VISUAL (v コマンドで使用される) エディタ名。 .SH 関連項目 lesskey(1) .SH 警告 (-P オプションで変更されない限り) = コマンドとプロンプトで表示される 行番号は画面の先頭行と最終行のものですが、 表示されるバイト数とパーセントは画面の最終行の後のものです。 .PP :e コマンドが複数のファイルに対して使われ、 ファイルのうちの 1 つが既に閲覧されている場合、 新しいファイルは予期しない順番でリストに入るかもしれません。 .PP ある種の古い端末 (いわゆる「マジッククッキー」端末) では、 検索の際のハイライト表示が誤った表示を起こします。 そのような端末では、この問題を避けるため、 検索の際のハイライト表示がデフォルトで無効に設定されています。 .PP 検索の際のハイライト表示が有効で、検索パターンが ^ で始まっている場合、 ある特定の条件下では マッチした文字列以上の部分までハイライト表示されることがあります。 (この問題は less が POSIX 正規表現パッケージを用いて コンパイルされている場合には起きません。) .PP -R オプションを使用して、ANSI 色エスケープシーケンスを含むテキストを 見ている場合、検索は、 エスケープシーケンスが埋め込まれたテキストを見付けられません。 また、検索によるハイライトが、ハイライトテキストに続くテキストの色を 変えてしまうかもしれません。 .PP あるシステムでは、 .I setlocale が 0 から 31 の ASCII 文字をバイナリ文字ではなく 制御文字であると主張します。 そのためいくつかのバイナリファイルが .I less に普通の非バイナリファイルとして扱われてしまいます。 この問題を回避するには、環境変数 LESSCHARSET を "ascii" (もしくは、何か適切な文字集合) に設定します。 .PP このバージョンの less の最新の既知なバグのリストは http://www.greenwoodsoftware.com/less を参照してください。 .SH COPYRIGHT Copyright (C) 2001 Mark Nudelman .PP less is part of the GNU project and is free software. You can redistribute it and/or modify it under the terms of either (1) the GNU General Public License as published by the Free Software Foundation; or (2) the Less License. See the file README in the less distribution for more details regarding redistribution. You should have received a copy of the GNU General Public License along with the source for less; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. You should also have received a copy of the Less License; see the file LICENSE. .PP less is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. .SH 作者 .PP Mark Nudelman .br バグ報告やコメントは上記のアドレスまたは bug-less@gnu.org へ 送ってください。 .br 更なる情報については less ホームページの http://www.greenwoodsoftware.com/less を参照してください。 diff --git a/ja_JP.eucJP/man/man1/lesskey.1 b/ja_JP.eucJP/man/man1/lesskey.1 index c3509f07e8..029eea0458 100644 --- a/ja_JP.eucJP/man/man1/lesskey.1 +++ b/ja_JP.eucJP/man/man1/lesskey.1 @@ -1,400 +1,400 @@ .\" $FreeBSD$ .TH LESSKEY 1 "Version 371: 26 Dec 2001" .\" .\" 以下は参考にした Linux JM のクレジット .\" Japanese Version Copyright (c) 1999 Yuichi SATO .\" all rights reserved. .\" Translated Fri Sep 17 03:26:44 JST 1999 .\" by Yuichi SATO .\"WORD: caret キャレット .\"WORD: pound sign シャープ符号 .SH 名称 lesskey \- less のキー割当てを指定する .SH 書式 .B "lesskey [-o output] [--] [input]" .br .B "lesskey [--output=output] [--] [input]" .br .B "lesskey -V" .br .B "lesskey --version" .SH 解説 .I lesskey は .I less で使われるキー割り当てのセットを指定するために使われます。 入力ファイルはキー割り当てを記述したテキストファイルです。 入力ファイルが "-" のときは、標準入力が読み込まれます。 入力ファイルが何も指定されない場合は、 使用しているシステムに応じた 標準のファイル名が入力ファイルの名前として使用されます: Unix システムでは $HOME/.lesskey が、 MS-DOS システムでは $HOME/_lesskey が、 OS/2 システムでは $HOME/lesskey.ini または $HOME が定義されてない場合は $INIT/lesskey.ini が 使用されます。 出力ファイルは .I less で使われるバイナリファイルです。 出力ファイルが何も指定されておらず、 環境変数 LESSKEY が設定されている場合は、 LESSKEY の値が出力ファイルの名前として使われます。 そうでない場合は、 使用しているシステムに応じた 標準のファイル名が出力ファイルの名前として使われます: Unix と OS-9 システムでは $HOME/.less が、 MS-DOS システムでは $HOME/_less が、 OS/2 システムでは $HOME/less.ini または $HOME が定義されない場合は $INIT/less.ini が 使用されます。 出力ファイルが既に存在する場合は、 .I lesskey は上書きします。 .PP -V または --version オプションは、 .I lesskey にバージョン番号を表示してすぐに終了させます。 --V または --version がある場合は、他のオプションと引き数は無視されます。 +-V または --version がある場合は、他のオプションと引数は無視されます。 .PP 入力ファイルは、1 つ以上の .I セクション から構成されます。 各セクションは、セクションのタイプを明らかにする行から始まります。 指定できるセクションは次の通りです: .IP #command 新しいコマンドキーを定義します。 .IP #line-edit 新しい行編集キーを定義します。 .IP #env 環境変数を定義します。 .PP 空白行と、特別なセクションヘッダ行を除いたシャープ符号 (#) から始まる行は 無視されます。 .SH コマンドセクション コマンドセクションは次の行から始まります。 .sp #command .sp コマンドセクションがファイル中で最初のセクションである場合は、 この行は省略することもできます。 コマンドラインセクションは次の形式の行から構成されます: .sp \fIstring\fP \fIaction\fP [extra-string] .sp 空白 (whitespace) とは 1 つ以上のスペースと (または) タブの連続です。 \fIstring\fP はアクションを起こすコマンドキーです。 \fIstring\fP は単一のコマンドキー、または 15 個までのキーの連続です。 \fIaction\fP は下記のリストにある less のアクション名です。 \fIstring\fP 中の文字はそのまま書くか、あるいは キャレットを前においてコントロールキーであることを示します。 バックスラッシュとそれに続く 3 桁までの 8 進数で、 文字を 8 進数で指定できます。 バックスラッシュと、それに続く特定の文字は以下の入力を指定します: .IP \eb BACKSPACE .IP \ee ESCAPE .IP \en NEWLINE .IP \er RETURN .IP \et TAB .IP \eku UP ARROW .IP \ekd DOWN ARROW .IP \ekr RIGHT ARROW .IP \ekl LEFT ARROW .IP \ekU PAGE UP .IP \ekD PAGE DOWN .IP \ekh HOME .IP \eke END .IP \ekx DELETE .PP バックスラッシュの後に続く上に挙げた以外の文字は、 その文字が特殊文字としてでなく、文字通りに使われることを意味しています。 バックスラッシュを前に置かなければならない文字には、 キャレット、スペース、タブ、そしてバックスラッシュ自身が含まれます。 .PP アクションの後には「追加の」文字列 (extra-string) が続くことがあります。 .I less を実行している際にそのようなコマンドが入力されると、 アクションが実行された後、 .I less に入力されたかのように追加の文字列が解釈されます。 この機能を用いてコマンドの機能を拡張することができます。 下の "{" と ":t" コマンドの例を参照してください。 "quit" アクションに対する追加の文字列は特別な意味を持っています: .I less が終了するとき、追加の文字列の最初の 1 文字が終了ステータスとして使われます。 .SH 使用例 以下の入力ファイルは、less で使われるデフォルトのコマンドキーの セットを記述しています: .sp .nf #command \er forw-line \en forw-line e forw-line j forw-line \ekd forw-line ^E forw-line ^N forw-line k back-line y back-line ^Y back-line ^K back-line ^P back-line J forw-line-force K back-line-force Y back-line-force d forw-scroll ^D forw-scroll u back-scroll ^U back-scroll \e40 forw-screen f forw-screen ^F forw-screen ^V forw-screen \ekD forw-screen b back-screen ^B back-screen \eev back-screen \ekU back-screen z forw-window w back-window \ee\e40 forw-screen-force F forw-forever R repaint-flush r repaint ^R repaint ^L repaint \eeu undo-hilite g goto-line \ekh goto-line < goto-line \ee< goto-line p percent % percent \ee[ left-scroll \ee] right-scroll \ee( left-scroll \ee) right-scroll { forw-bracket {} } back-bracket {} ( forw-bracket () ) back-bracket () [ forw-bracket [] ] back-bracket [] \ee^F forw-bracket \ee^B back-bracket G goto-end \ee> goto-end > goto-end \eke goto-end = status ^G status :f status / forw-search ? back-search \ee/ forw-search * \ee? back-search * n repeat-search \een repeat-search-all N reverse-search \eeN reverse-search-all m set-mark ' goto-mark ^X^X goto-mark E examine :e examine ^X^V examine :n next-file :p prev-file t next-tag T prev-tag :x index-file :d remove-file - toggle-option :t toggle-option t s toggle-option o _ display-option | pipe v visual ! shell + firstcmd H help h help V version 0 digit 1 digit 2 digit 3 digit 4 digit 5 digit 6 digit 7 digit 8 digit 9 digit q quit Q quit :q quit :Q quit ZZ quit .fi .sp .SH 優先 .I lesskey で指定されたコマンドは、デフォルトのコマンドよりも優先されます。 デフォルトのコマンドキーは、"invalid" アクションが指定されて 入力ファイルに含まれた場合は、無効化されます。 あるいは、"noaction" アクションが指定された場合は、 そのキーは何もしないと定義されます。 "noaction" は "invalid" と似ていますが、 .I less は、"invalid" なコマンドにはエラービープ音を鳴らしますが、 "noaction" なコマンドには鳴らしません。 さらに、次の制御行を入力ファイルに加えることにより、 全てのデフォルトのコマンドを無効化できます: .sp #stop .sp これにより、全てのデフォルトコマンドは無視されます。 #stop 行は、ファイル中の当該セクションの最後の行に置く必要があります。 .PP #stop は危険を伴うことに気をつけてください。 全てのデフォルトコマンドが無効になるため、 必要な全てのアクションを有効にするために #stop 行の前に十分なコマンドを与える必要があります。 例えば "quit" コマンドを与え忘れると、失敗するでしょう。 .SH 行編集セクション 行編集セクションは次の行で始まります: .sp #line-edit .sp このセクションは、#command セクションでの通常のコマンドのキー割り当ての 指定と似た方法で、 行編集コマンドの新しいキー割り当てを指定します。 行編集セクションは以下の例のように 1 行毎の キーとアクションのリストからなります。 .SH 使用例 以下の入力ファイルは less で使用される デフォルトの行編集キーのセットを記述しています。 .sp .nf #line-edit \et forw-complete \e17 back-complete \ee\et back-complete ^L expand ^V literal ^A literal \eel right \ekr right \eeh left \ekl left \eeb word-left \ee\ekl word-left \eew word-right \ee\ekr word-right \eei insert \eex delete \ekx delete \eeX word-delete \eekx word-delete \ee\eb word-backspace \ee0 home \ekh home \ee$ end \eke end \eek up \eku up \eej down .fi .sp .SH LESS 環境変数セクション 環境変数セクションは次の行から始まります: .sp #env .sp この行の後には、環境変数割り当てのリストが続きます。 各行は、環境変数名、等号 (=)、環境変数に割り当てる値で構成されます。 等号の前後の空白は無視されます。 この方法で割り当てられる変数は、 .I less にしか見えません。 ある変数がシステム環境と、 さらに lesskey ファイルでも指定されている場合、 lesskey ファイルでの値が優先されます。 lesskey ファイルは環境で設定されている変数を上書きする用途に 使用することもできますが、 lesskey ファイルで変数を割り当てる主な目的は、単に .I less の全ての設定情報を 1 つのファイルに保存することです。 .SH 使用例 以下の入力ファイルは、 .I less の実行時に常に -i オプションを設定し、 文字集合を "latin1" にするように指定しています: .sp .nf #env LESS = -i LESSCHARSET = latin1 .fi .sp .SH 関連項目 less(1) .SH 警告 上矢印のような特殊キーをキーボードに依存しない方法で指定することは できません。 そのようなキーを指定する唯一の方法は、 そのキーが押された際にそのキーボードが送るエスケープシーケンスを 指定することです。 .PP MS-DOS と OS/2 システムでは、いくつかのキーは NUL 文字 (0) で 始まる文字列を送ります。 この NUL 文字は、lesskey ファイルでは \e340 と表記する必要があります。 .SH COPYRIGHT Copyright (C) 2000 Mark Nudelman .PP lesskey is part of the GNU project and is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. .PP lesskey is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. .PP You should have received a copy of the GNU General Public License along with lesskey; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. .SH 作者 .PP Mark Nudelman .br バグ報告やコメントは上記のアドレスまたは bug-less@gnu.org へ 送ってください。 diff --git a/ja_JP.eucJP/man/man1/lex.1 b/ja_JP.eucJP/man/man1/lex.1 index 625f5df782..87b539e86e 100644 --- a/ja_JP.eucJP/man/man1/lex.1 +++ b/ja_JP.eucJP/man/man1/lex.1 @@ -1,4079 +1,4079 @@ .\" %FreeBSD: src/usr.bin/lex/lex.1,v 1.14 2001/08/23 21:13:31 dd Exp % .\" .\" $FreeBSD$ .TH FLEX 1 "April 1995" "Version 2.5" .SH 名称 flex \- 高速な字句解析処理系の生成ツール .SH 書式 .B flex .B [\-bcdfhilnpstvwBFILTV78+? \-C[aefFmr] \-ooutput \-Pprefix \-Sskeleton] .B [\-\-help \-\-version] .I [filename ...] .SH 概説 本マニュアルは、 テキストのパターンマッチングを行うプログラムを生成するツール .I flex を扱います。 本マニュアルはチュートリアルとリファレンス節とを含みます: .nf 解説 ツールの短い概説 簡単な例 入力ファイルのフォーマット パターン flex が使用する拡張した正規表現 入力のマッチ方法 何がマッチするかを決定する規則 アクション パターンがマッチした時に何を行うかを指定する方法 生成されたスキャナ flex が生成するスキャナに関する詳細; 入力元の制御方法 開始条件 スキャナへの文脈の導入と、 "ミニスキャナ" の制御方法 複数の入力バッファ 複数の入力元を扱う方法; ファイルではなく文字列からスキャンする方法 ファイルの終りのルール ファイルの終りにマッチする特別なルール 雑多なマクロ アクションで使用可能なマクロのまとめ ユーザが使用可能な値 アクションで使用可能な値のまとめ Yacc とのインタフェース lex スキャナと yacc パーサとの結合 オプション flex のコマンドラインオプションと、 "%option" ディレクティブ 性能関連 スキャナを可能な限り高速にする方法 C++ スキャナの生成 C++ スキャナクラス生成のための (実験的な) 機能 Lex および POSIX との非互換性 AT&T lex および POSIX lex 標準と flex との違い 診断 flex (もしくは生成したスキャナ) が出力する エラーメッセージで意味が明確でないもの 関連ファイル flex が使用するファイル 欠陥 / バグ flex の既知の問題 関連項目 ツールに関係する他のドキュメント 作者 連絡方法を含みます .fi .SH 解説 .I flex は .I スキャナ を生成するためのツールです。 ここで、スキャナとは、 テキスト内の字句パターンを解析するプログラムです。 .I flex は指定したファイル、もしくはファイル名が与えられなかった場合は 標準入力から、生成するスキャナの記述を読み込みます。 この記述は、 正規表現と C コードのペアの形をとっています。 これは .I ルール と呼ばれます。 .I flex は、出力として C ソースファイルの .B lex.yy.c を生成しますが、その中に .B yylex() ルーチンが定義されます。 このファイルはコンパイルされ、 .B \-ll ライブラリとともにリンクされて、 実行形式となります。 実行形式が走り始めると、 正規表現をマッチさせるために 入力が解析されます。 マッチするものを見つけると、対応する C コードが実行されます。 .SH 簡単な例 まず簡単な例から、 .I flex の使い方を見て行きましょう。 次の .I flex の入力は、"username" という文字列に出会うとユーザのログイン名に置き換える スキャナを指定しています: .nf %% username printf( "%s", getlogin() ); .fi デフォルトでは、 .I flex スキャナにマッチしなかったテキストは出力にコピーされますので、 "username" を展開しながら入力を出力にコピーすることが このスキャナの最終的な結果となります。 この入力にはただ一つのルールだけがあります。 "username" は .I パターン であり、"printf" は .I アクション です。 "%%" はルールの始まりの印です。 .PP 別の例を見て見ましょう: .nf %{ int num_lines = 0, num_chars = 0; %} %% \\n ++num_lines; ++num_chars; . ++num_chars; %% main() { yylex(); printf( "# of lines = %d, # of chars = %d\\n", num_lines, num_chars ); } .fi このスキャナは入力の文字数および行数を数えます (数えた最終結果を報告するだけです)。 最初の行は 2 つの大域変数 "num_lines" と "num_chars" を宣言します。 これらの変数は、2 番目の "%%" の後に宣言されている .B yylex() と .B main() のルーチンからアクセス可能です。 ここには 2 つのルールがあります。 1 つ目は改行文字 ("\\n") にマッチし、行数と文字数のカウントを増加させます。 もう 1 つは、改行文字以外の全ての文字 ("." という正規表現で表されています)にマッチします。 .PP 次はもうちょっと複雑な例です: .nf /* scanner for a toy Pascal-like language */ %{ /* need this for the call to atof() below */ #include %} DIGIT [0-9] ID [a-z][a-z0-9]* %% {DIGIT}+ { printf( "An integer: %s (%d)\\n", yytext, atoi( yytext ) ); } {DIGIT}+"."{DIGIT}* { printf( "A float: %s (%g)\\n", yytext, atof( yytext ) ); } if|then|begin|end|procedure|function { printf( "A keyword: %s\\n", yytext ); } {ID} printf( "An identifier: %s\\n", yytext ); "+"|"-"|"*"|"/" printf( "An operator: %s\\n", yytext ); "{"[^}\\n]*"}" /* eat up one-line comments */ [ \\t\\n]+ /* eat up whitespace */ . printf( "Unrecognized character: %s\\n", yytext ); %% main( argc, argv ) int argc; char **argv; { ++argv, --argc; /* skip over program name */ if ( argc > 0 ) yyin = fopen( argv[0], "r" ); else yyin = stdin; yylex(); } .fi これは Pascal のような言語の単純なスキャナの原型です。 異なったタイプの .I トークン を定義し、これを見付けると報告します。 .PP この例の詳細は、以降の節で説明します。 .SH 入力ファイルのフォーマット .I flex の入力ファイルは 3 つの部分からなり、 .B %% だけからなる行により分けられます: .nf 定義 %% ルール %% ユーザコード .fi .I 定義 部分は、スキャナの宣言を単純化する単純な .I 名前 の定義の宣言と、後で説明する .I 開始条件 の宣言とからなります。 .PP 名前の定義は次の形式です: .nf 名前\ 定義 .fi "名前" は語であり、 レターかアンダースコア ('_') から始まって 0 個以上のレター・数字・'_'・'-' (ダッシュ)が続きます。 定義は、名前に続く最初の非空白文字から始まり、行末まで続くものとされます。 定義は後で "{名前}" で参照でき、"(定義)" を展開します。 例えば、 .nf DIGIT [0-9] ID [a-z][a-z0-9]* .fi は、 "DIGIT" が単一の数字にマッチする正規表現であると定義し、 "ID" がレターに 0 個以上のレターか数字が続く正規表現であると定義します。 後で出て来る参照 .nf {DIGIT}+"."{DIGIT}* .fi は .nf ([0-9])+"."([0-9])* .fi と同じであり、1 個以上の数字に '.' が続き、 0 個以上の数字が続くものにマッチします。 .PP .I flex の入力の .I ルール は次の形式の一連のルールからなります: .nf パターン\ \ \ アクション .fi ここで、パターンはインデントされていてはならず、 アクションは同じ行から始まる必要があります。 .PP パターンとアクションの詳細は後の解説を見て下さい。 .PP 最後に、ユーザコードの部分は単純にそのままの形で .B lex.yy.c にコピーされます。 スキャナを呼び出すまたは呼び出される付随ルーチンのために使用されます。 この部分はあっても無くても構いません; 無い場合には、入力ファイル中の 2 番目の .B %% も省略できます。 .PP 定義とルールの部分では、 .I インデントされた テキストと .B %{ と .B %} との間のテキストはそのままの形で出力にコピーされます (この際 %{} は削除されます)。 %{} はインデントされていない行に現れる必要があります。 .PP ルールの部分では、 最初のルールの前に現れるインデントされたもしくは %{} 部分のテキストは、 スキャンルーチンにローカルな変数と、 (宣言の後では)スキャンルーチンに入るたびに実行されるコードとを宣言します。 ルール部分の他のインデントされたもしくは %{} 部分のテキストは 出力にコピーされますが、 意味はちゃんと定義されておらずコンパイル時にエラーとなるかも知れません (この仕様は .I POSIX 互換のためにあります; 他のこのような仕様は以降を見て下さい)。 .PP 定義の部分(ルールの部分ではないです)では、 インデントされていないコメント("/*" から始まる行) は次の "*/" まで そのままの形でコピーされます。 .SH パターン 入力ファイルのパターンは拡張した正規表現を使って記述します。 以下に示します: .nf x 文字 'x' にマッチ。 . 改行を除く全ての文字(バイト)。 [xyz] "文字クラス"; この場合、'x', 'y', 'z' のいずれにも マッチします。 [abj-oZ] 範囲指定を含む "文字クラス"; この場合、'a', 'b' と 'j' から 'o' までの任意のレターと 'Z' にマッチします。 [^A-Z] "否定文字クラス"; クラスに含まれない任意の文字に マッチします。 この場合、'A' から 'Z' までの大文字 「以外の」文字にマッチします。 [^A-Z\\n] 大文字と改行を「除く」全ての文字。 r* 0 もしくはそれ以上の r。r は任意の正規表現。 r+ 1 もしくはそれ以上の r。 r? 0 もしくは 1つの r (「おまけ」の r) r{2,5} 2 つから 5つまでの r。 r{2,} 2 つ以上の r。 r{4} ちょうど 4つ の r。 {名前} "名前" の定義の展開。 (上を参照) "[xyz]\\"foo" 文字列 [xyz]"foo \\X X が 'a', 'b', 'f', 'n', 'r', 't', 'v' のいずれかの とき、ANSI-C での \\X の解釈となります。 それ以外の場合、文字 'X' ('*' のようなオペレータの 意味を打ち消し、その文字自体を指定する際に使います)。 \\123 8進数で 123 と表される文字。 \\x2a 16進数で 2a と表される文字。 (r) r にマッチ; ()は 優先順位を変えるために使用。 (以下を参照) rs 正規表現 r に正規表現 s が続く; 「連結(concatenation)」 と呼びます。 r|s r もしくは s。 r/s 後ろに s が続く時の r。 s にマッチするテキストはこのルールの "最長適合" を判定する 時には含まれますが、アクションが実行される前に 入力に戻されます。 アクションは r にマッチするテキストだけを見ます。 このパターンは "右文脈(trailing context)" と呼ばれます。 (flex が正確にマッチ不能な r/s の組合せは複数あります; "危険な右文脈" については、 以降の、欠陥 / バグ の節の記述を見て下さい。) ^r 行頭にある r。(スキャンの始まりもしくは スキャンされた改行の右です)。 r$ 行末にある r。"r/\\n" と等価(改行の前です)。 "r/\\n" と同じです。 flex の "改行" の表現は flex をコンパイルした C コンパイラが解釈する '\\n' と完全に一致することに 注意して下さい; 特定のシステム DOS では \\r を入力から取り除くか "r$" を表すために明示的に r/\\r\\n を使用する必要があります。 r 開始条件 s における r。(開始条件については以下を 参照)。 r 上に同じ。ただし開始条件は s1, s2, s3 のいずれでもよい。 <*>r 任意の開始条件の r。開始条件は排他的なものでもよい。 <> ファイルの終了。 <> 開始条件が s1 もしくは s2 であるときのファイルの終了。 .fi 文字クラス中では、全ての正規表現のオペレータは、 エスケープ ('\\') および 文字クラスオペレータである '-' と ']' とクラスの先頭の '^' を除き 特別な意味を失うことに注意して下さい。 .PP 上に挙げた正規表現は優先順位によってグループに分けられています。 一番上のグループが最も高い優先度で、 一番下のグループの優先順位が最も低くなっています。 グループ内では同じ優先順位です。例えば、 .nf foo|bar* .fi は .nf (foo)|(ba(r*)) .fi と同じです。なぜなら '*' オペレータは連結より優先度が高く、 連結は選言 ('|') より優先度が高いからです。このパターンは 文字列 "foo" .I もしくは 文字列 "ba" に 0 個以上の r がつづくものの .I どちらにも マッチします。 "foo" もしくは 0 個以上の "bar" にマッチさせるためには次の表現を使用して下さい: .nf foo|(bar)* .fi 0 個以上の "foo" または "bar" にマッチするためには次の表現を使用して下さい: .nf (foo|bar)* .fi .PP 文字もしくは文字範囲に加え、文字クラスも文字クラスの .I 表現 を含みます。 これらの表現は .B [: および .B :] のデリミタに囲まれます (文字クラスの '[' と ']' との間に現れる必要があります; 他の要素が文字クラス中に現れても構いません)。 有効な表現は以下の通りです: .nf [:alnum:] [:alpha:] [:blank:] [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] [:punct:] [:space:] [:upper:] [:xdigit:] .fi これらの表現は対応する標準 C の .B isXXX 関数に適合する全ての文字集合を指示します。例えば、 .B [:alnum:] は .B isalnum() が真を返す文字を指示します - すなわちすべてのアルファベットと数字です。 .B isblank(), が無いシステムでは、flex は .B [:blank:] を空白とタブと定義します。 .PP 例えば以下の表現は全て同じです: .nf [[:alnum:]] [[:alpha:][:digit:]] [[:alpha:]0-9] [a-zA-Z0-9] .fi スキャナが大文字小文字を意識しない場合( .B \-i フラグ指定時) .B [:upper:] と .B [:lower:] は .B [:alpha:] と同じです。 .PP パターンに関する注意点です: .IP - 否定文字クラス、例えば上の "[^A-Z]" は "\\n" (もしくはこれを表すエスケープシーケンス) が明示的に 否定文字クラスに現れている場合 (例えば "[^A-Z\\n]") を除き .I 改行にマッチします。 これは他の正規表現ツールが否定文字クラスを扱う方法とは異なりますが、 不幸なことにこの矛盾は歴史的に確立しています。 改行にマッチするとは、 -入力に別のクオートが存在しない場合に [^"]* のようなパターンが +入力に別のクォートが存在しない場合に [^"]* のようなパターンが 入力全体にマッチすることを意味します。 .IP - ルールは右文脈('/' オペレータもしくは '$' オペレータ) を高々一つしか持てません。 開始条件 '^' と "<>" パターンは パターンの最初になければならず、 '/', '$' 同様に () 内にいれることは出来ません。 ルールの先頭ではない '^' もしくはルールの終りではない '$' は 特別な意味を失い、通常の文字として扱われます。 .IP 以下は無効です: .nf foo/bar$ foobar .fi 前者は "foo/bar\\n" と書けます。 .IP 以下では '$' と '^' とは通常の文字として扱われます: .nf foo|(bar$) foo|^bar .fi "foo" もしくは "改行が続く bar" を指定したい場合は、 次の表現を使用して下さい (特別な '|' の動作は後で説明します): .nf foo | bar$ /* action goes here */ .fi 同じ方法で、foo もしくは 行頭の bar を指定可能です。 .SH 入力のマッチ方法 生成したスキャナを実行すると、 スキャナは入力を見てパターンにマッチする文字列を探します。 1 より多くのマッチを見付けると、最長テキストのマッチを採用します (右文脈(trailing context rule)の後ろの部分も長さに含みますが、 後ろの部分は入力に戻されます)。 同じ長さのマッチを 2 つ以上見付けた場合、 .I flex 入力ファイルで最初に記述されたルールを採用します。 .PP マッチが決定すると、マッチに対応するテキスト( .I トークン と呼ばれます)がグローバル文字ポインタ .B yytext により使用可能となり、長さがグローバル整数 .B yyleng により使用可能となります。 その後、マッチしたパターンに対応する .I アクション が実行され(アクションの詳細な記述は後で行います)、 残りの入力が残りのマッチのためにスキャンされます。 .PP マッチが見付からないと、 .I デフォルトルール が実行されます: 入力の次の文字がマッチしたと見倣され、 標準出力にコピーされます。最も簡単で正当な .I flex の入力は以下の通りです: .nf %% .fi これは、入力を単純に出力にコピー(1 度に 1 文字ずつ)するスキャナを生成します。 .PP .B yytext は 2 つの異なった方法により定義されうることに注意して下さい: 文字 .I ポインタ もしくは文字 .I 配列 です。 .I flex がどちらの定義を使用するかは特別なディレクティブ .B %pointer もしくは .B %array を flex の入力の最初の(定義)部分に含めることにより制御できます。 デフォルトは .B %pointer であり、 .B -l lex 互換オプションを使用した場合には例外的に .B yytext は配列になります。 .B %pointer を使用する利点はスキャンが高速であること、 非常に大きなトークンにマッチする時にも (動的メモリを使用し尽くさない限り)バッファオーバフローとならないことです。 欠点は、アクションが .B yytext を修正することが制限されること(次節参照)、 .B unput() 呼び出しが .B yytext の現在の内容を破壊することです。 これは異なる .I lex バージョン間での移植性に関する頭痛の種です。 .PP .B %array の利点は .B yytext の内容を思った通りに変更できること、 .B unput() を呼び出しても .B yytext の内容が破壊されないことです(下記参照)。 その上、既存の .I lex プログラムは .B yytext を外部から次の形式の宣言を使用してアクセスしていることがあります: .nf extern char yytext[]; .fi この定義は .B %pointer 使用時には誤りですが、 .B %array 使用時には正しいです。 .PP .B %array は .B yytext を文字数 .B YYLMAX (デフォルトは十分大きな値)の配列であると定義します。 この大きさは、 .I flex の入力の最初の部分で単純に .B YYLMAX を異なった値に #define することにより変更できます。 上記の通り、 .B %pointer 使用時には yytext は大きなトークンを格納するために動的に大きくなります。 このことは .B %pointer を使用したスキャナは非常に大きなトークン (例えばコメントブロック全体)を格納可能であることを意味しますが、 スキャナが .B yytext の大きさを変えるたびにトークン全体を先頭から再スキャンすることが必要となるため このようなトークンに対するマッチングは遅くなりうることを覚えておいて下さい。 現在、 .B yytext は .B unput() が結果として返すテキストが大きい時には動的には大きくなり .I ません; 実行時エラーとなります。 .PP また、 .B %array は C++ スキャナクラスでは使用できないことに注意して下さい( .B c++ オプションに関しては下記参照)。 .SH アクション ルール中のパターンは対応するアクションを持ちます。 アクションは任意の C の文です。 パターンは最初のエスケープされていない空白文字で終ります; 行の残りがアクションです。 アクションが空である場合、 パターンがマッチした時に入力トークンは単純に捨てられます。 例えば入力から全ての "zap me" を削除するプログラムの仕様を示します: .nf %% "zap me" .fi (入力の他の全ての文字を出力にコピーします。 なぜならデフォルトルールにマッチするからです。) .PP 次は、複数の空白や文字を単一の空白に圧縮し行末の空白を捨てるプログラムです: .nf %% [ \\t]+ putchar( ' ' ); [ \\t]+$ /* ignore this token */ .fi .PP アクションが '{' を含む場合、アクションは対応する '}' まで続き、 複数行に渡る場合もあります。 .I flex は C の文字列およびコメントに関して知っており、 それらの中のブレースを誤解することはありませんが、 アクションが .B %{ で始まることを許し、次の .B %} までのテキストがアクションであるとします (アクション内部の任意個のブレースには関係ありません)。 .PP 垂直バー ('|') のみからなるアクションは "次のルールと同じ" を意味します。説明は以下を見て下さい。 .PP アクションは任意の C コードを含むことが出来ます。 これには、 .B yylex() を呼び出したルーチンに対して値を返す .B return 文も含まれます。 .B yylex() が呼ばれるたび、最後に残ったトークンから処理を再開し、 ファイルの終了もしくは return を実行するまで処理を行います。 .PP アクションは自由に .B yytext を変更できますが、例外は長さを増やすことです (文字を末尾に加えることになり、 これは入力ストリームの後続する文字を上書きします)。 これは .B %array 使用時には当てはまりません(上述); この場合 .B yytext を自由に変更できます。 .PP アクションは自由に .B yyleng を変更できますが、アクションが .B yymore() を使用する時には例外的に変更してはいけません(後述)。 .PP 多くの特別なディレクティブがあり、アクション中に含めることが出来ます: .IP - .B ECHO yytext をスキャナの出力にコピーします。 .IP - .B BEGIN 後ろに開始条件の名前を書くと、スキャナを対応する開始条件に設定します(後述)。 .IP - .B REJECT 入力(もしくは入力の頭)に "2 番目によく(second best)" マッチするルール に進むようにスキャナに指示します。 "入力のマッチ方法" で示したようにルールは選択され、 .B yytext と .B yyleng は適切に設定されます。 選択されるルールは、最初に選択されたルールと同じ長さであるが .I flex の入力ファイルにて後で出て来るもの、もしくは少ない文字数にマッチするものです。 例えば次の例では入力中の語を数え、 "frob" が見付かるたびにルーチン special() を呼びます: .nf int word_count = 0; %% frob special(); REJECT; [^ \\t\\n]+ ++word_count; .fi .B REJECT が無い場合、 入力中の "frob" は語として数えられず、 スキャナは通常通りトークン毎に 1 つのアクションだけを行います。 複数の .B REJECT を使用可能であり、それぞれ現在有効なルールの次に良い選択を見付けます。 例えば次のスキャナは、"abcd" というトークンをスキャンし、 出力に "abcdabcaba" を書きます: .nf %% a | ab | abc | abcd ECHO; REJECT; .|\\n /* eat up any unmatched character */ .fi (前の 3 つのルールは 4 番目のルールのアクションを共有します。 なぜなら特別な '|' アクションが使用されているからです。) .B REJECT はスキャナの性能という点で特にコストのかかる機能です; もしスキャナのアクションの .I いずれか にでも REJECT が使われたなら、スキャナの .I 全ての マッチング速度を低下させるということです。 さらに .B REJECT をオプション .I -Cf や .I -CF と共に用いることは出来ません。 .IP また、他の特別アクションと違い .B REJECT は .I 分岐(branch) であることに注意してください; すなわち REJECT 直後のアクションは 実行 .I されません。 .IP - .B yymore() 次にルールとマッチしたときには、対応するトークンは、 現在の .B yytext の内容と入れ換えるのではなく .B yytext に .I 追加 するようスキャナに指示します。 例えば、入力 "mega-kludge" が与えられると、以下は "mega-mega-kludge" を出力に書きます: .nf %% mega- ECHO; yymore(); kludge ECHO; .fi 最初の "mega-" はマッチし出力にエコーされます。 次に "kludge" がマッチしますが、直前の "mega-" がまだ .B yytext の先頭に残っており、"kludge" の .B ECHO ルールは実際には "mage-kludge" を書きます。 .PP .B yymore() の使用に関し 2 つの注意点があります。 まず、 .B yymore() は現在のトークンの大きさを反映する .I yyleng の値の正確さに依存することであり、 .B yymore() 使用時には .I yyleng を変更してはなりません。 次に、 スキャナのアクションに .B yymore() があると、スキャナのマッチ速度に若干悪影響があります。 .IP - .B yyless(n) 現在のトークンから最初の .I n 文字を除いたものを入力ストリームに戻します。 戻した文字列はスキャナが次のマッチングをとるときに再度スキャンされます。 .B yytext と .B yyleng は適切に調整されます(例えば .B yyleng は .I n となります)。 例えば、入力 "foobar" が与えられると、以下は "foobarbar" を書きます: .nf %% foobar ECHO; yyless(3); [a-z]+ ECHO; .fi 引数 0 を .B yyless に与えると、現在の入力文字列全体が再度スキャンされます。 (例えば .B BEGIN を使用して)次にスキャナが入力する方法を変更していないと、無限ループとなります。 .PP .B yyless はマクロであり、flex 入力ファイルでのみ使用可能であり、 別のソースファイルからは使用不能であることに注意して下さい。 .IP - .B unput(c) 文字 .I c を入力ストリームへ戻します。戻した文字は次にスキャンされる文字になります。 次のアクションは現在のトークンを取り上げ、 括弧内に入れて再スキャンします。 .nf { int i; /* Copy yytext because unput() trashes yytext */ char *yycopy = strdup( yytext ); unput( ')' ); for ( i = yyleng - 1; i >= 0; --i ) unput( yycopy[i] ); unput( '(' ); free( yycopy ); } .fi .B unput() は文字を入力ストリームの .I 先頭 に戻すので、文字列を戻す場合には後ろから前に向かって戻す必要があります。 .PP .B unput() 使用時の重要な潜在的な問題は、 .B %pointer 使用時(デフォルト)に .B unput() を呼び出すと、 右端の文字から開始し 1 文字ずつ左に向かって消費され、 .I yytext の内容が .I 破壊 されることです。 (上記例のように) .B unput() 呼び出し後も .I yytext の内容を保存するためには、始めに別の場所にコピーするか、 スキャナを .B %array を使うように構築することです(入力のマッチ方法参照)。 .PP 最後に、 .B EOF を戻して入力ストリームにファイルの終りをマークするとは 出来ないことに注意して下さい。 .IP - .B input() 次の文字を入力ストリームから読みます。 次の例は C コメントを食べます: .nf %% "/*" { register int c; for ( ; ; ) { while ( (c = input()) != '*' && c != EOF ) ; /* eat up text of comment */ if ( c == '*' ) { while ( (c = input()) == '*' ) ; if ( c == '/' ) break; /* found the end */ } if ( c == EOF ) { error( "EOF in comment" ); break; } } } .fi (スキャナが .B C++ でコンパイルされたときは、このルーチンは .B yyinput() という名称になり、 .B C++ ストリームの .I input と名前が衝突することを避けます。) .IP - .B YY_FLUSH_BUFFER スキャナの内部バッファをフラッシュし、 次にスキャナがトークンをマッチしようとした時 バッファを .B YY_INPUT にてリフィルします(生成されたスキャナで後述)。 このアクションは、 複数の入力バッファにおいて後述する より一般的な .B yy_flush_buffer() 関数の特別なケースです。 .IP - .B yyterminate() アクションの return 文の代わりに使うことが出来ます。 .B yyterminate() はスキャナを終了し、"全て終了" を意味する 0 を呼び出し元関数に返します。 デフォルトでは .B yyterminate() はファイルの終わりに達したときにも呼ばれます。 .B yyterminate() はマクロであり、定義しなおすことができます。 .SH 生成されたスキャナ .I flex の出力は .B lex.yy.c というファイルであり、スキャンルーチン .B yylex() と、トークンのマッチングに使用する複数のテーブルと、 複数の付属ルーチンとマクロからなります。デフォルトでは、 .B yylex() は次のように宣言されます: .nf int yylex() { ... various definitions and the actions in here ... } .fi (環境が関数プロトタイプをサポートしている場合、 "int yylex( void )" となります。) この定義は "YY_DECL" マクロを定義することにより変更できます。 例えば次のように使用することが出来ます: .nf #define YY_DECL float lexscan( a, b ) float a, b; .fi これはスキャンルーチンの名前を .I lexscan とし、浮動小数点数を返すようにし、2 つの浮動小数点数を引数とします。 K&R の非プロトタイプの関数宣言を使用してスキャンルーチンに対して引数を 与える場合、定義をセミコロン(;)で終了する必要があります。 .PP .B yylex() は呼ばれるたび、グローバル入力ファイル .I yyin (デフォルトでは標準入力)からトークンをスキャンします。 ファイルの終りになる(この場合 0 を返します)か、 アクションが .I return 文を実行するまで、実行を続けます。 .PP スキャナがファイルの終りに到達すると、 .I yyin が新たなファイルを指さないか (新たなファイルを指す場合はこのファイルのスキャンを続けます)、 .B yyrestart() が呼ばれない限り、 後続する呼び出しは未定義です。 .B yyrestart() は .B FILE * ポインタ( .B YY_INPUT を設定して .I yyin 以外のソースをスキャンするようにした場合には nil も可です) である引数を 1 つとり、そのファイルからのスキャンのために .I yyin を初期化します。 本質的に、 .I yyin を新しい入力ファイルに割り当てることと .B yyrestar() を使用することとは同じです; 後者は前のバージョンの .I flex との互換性のために使用可能であり、 またスキャンの途中で入力ファイルを変えることが可能です。 引数を .I yyin として呼び出すことにより、現在の入力バッファを捨てることも出来ます; ただし、 .B YY_FLUSH_BUFFER (上述)を使用する方が良いです。 .B yyrestart() は .B INITIAL の開始条件を変更し .I ない ことに注意して下さい (後述の開始条件参照)。 .PP あるアクション中で .I return 文を実行することにより .B yylex() がスキャンを止めた場合、スキャナは再度呼び出し可能であり、 この場合スキャンの残りの部分から再開します。 .PP デフォルトで(効率のため)、スキャナは単純な .I getc() コールではなくブロックリードを行い、 .I yyin から文字を読みます。 入力取得方法は .B YY_INPUT マクロを定義することにより制御できます。 YY_INPUT 呼び出し手順は "YY_INPUT(buf,result,max_size)" です。 このアクションは、 .I buf 文字配列中に最大 .I max_size 文字を用意し、整数変数 .I result 中に読めた文字数もしくは定数 YY_NULL (Unix システムでは 0)を入れて返します。 デフォルトの YY_INPUT はグローバルファイルポインタ "yyin" から読みます。 .PP YY_INPUT のサンプル定義です(入力ファイルの定義部に格納): .nf %{ #define YY_INPUT(buf,result,max_size) \\ { \\ int c = getchar(); \\ result = (c == EOF) ? YY_NULL : (buf[0] = c, 1); \\ } %} .fi この定義により、入力処理は 1 度に 1 文字ずつ行うように変更されます。 .PP スキャナが YY_INPUT からファイルの終りを通知された場合、 スキャナは .B yywrap() 関数をチェックします。 .B yywrap() 関数が偽(0)を返す場合、関数は続行中であるとされ、 .I yyin を別の入力ファイルを指すように設定し、スキャンを続行します。 関数が真(非0)を返す場合、スキャナは終了し、呼び出し元に 0 を返します。 どちらの場合も開始条件は変化しないことに注意して下さい; つまり .B INITIAL には戻り .I ません。 .PP 独自の .B yywrap() を設定しない場合、 .B %option noyywrap (この場合スキャナは .B yywrap() が 1 を返したかのように動作します)を使用するか、フラグ .B \-ll を指定してデフォルトのルーチン(常に 1 を返します)を使用しなければなりません。 .PP ファイルではなくメモリ中のバッファからスキャンするための 3 つのルーチンを 使用可能です: .B yy_scan_string(), yy_scan_bytes(), yy_scan_buffer() 。 これらに関する議論は複数の入力バッファの節を参照して下さい。 .PP スキャナは、自己の .B ECHO 出力を .I yyout グローバル(デフォルトでは標準出力であり、 別の .B FILE ポインタに割り当てることで再定義できます)に書きます。 .SH 開始条件 .I flex は、条件的に有効となるルールのための機構を提供します。 パターンのプレフィックスが "" となっているルールは、 スキャナが "sc" という名前の開始条件にいる場合のみ有効です。 例えば、 .nf [^"]* { /* eat up the string body ... */ ... } .fi はスキャナが "STRING" 開始条件にいる時のみ有効であり、 .nf \\. { /* handle an escape ... */ ... } .fi は現在の開始条件が、 "INITIAL", "STRING", "QUOTE" のいずれかの場合のみ有効です。 .PP 開始条件は、入力の定義(先頭)部において、インデントされない行で .B %s もしくは .B %x から始まり名前が続く行において宣言されます。 前者は .I 内包的 開始条件を、 後者は .I 排他的 開始条件を、それぞれ宣言します。 開始条件を有効にするのは .B BEGIN アクションです。 次の .B BEGIN アクションが実行されるまで、与えられた開始条件のルールは有効であり、 他の開始条件のルールは無効です。 開始条件が .I 内包的 な場合、開始条件を持たないルールもまた有効です。 開始条件が .I 排他的 な場合、 開始条件を満たすルール .I だけ が有効です。 同じ排他開始条件に依存するルールの組は、 .I flex 入力中の別のルールとは独立なスキャナを記述します。 そのため、排他開始条件を使用すれば、"ミニスキャナ" (別部分とは文法的に異なる部分(例えばコメント)に対するスキャナ) を簡単に指定できます。 .PP 内包的開始条件と排他的開始条件とがまだ少し曖昧であるなら、 両者の関係を表す例を示して説明します。以下のルールの組: .nf %s example %% foo do_something(); bar something_else(); .fi は .nf %x example %% foo do_something(); bar something_else(); .fi と等価です。 .B が無いと、2 番目の例における .I bar パターンは、開始条件が .B example の場合、有効となりません(すなわちマッチしません)。 .B だけを .I bar につけると、 .B example だけにおいて有効となり、 .B INITIAL では有効となりません。一方、最初の例ではどちらの場合でも有効です。 なぜなら最初の例では .B example 開始条件は .I 内包的 .B (%s) 開始条件だからです。 .PP 特殊な開始条件指定子 .B <*> は全ての開始条件にマッチすることに注意して下さい。 このため、上の例は次のようにも書けます; .nf %x example %% foo do_something(); <*>bar something_else(); .fi .PP デフォルトルール(マッチしなかった文字に対しては .B ECHO です)は開始条件中でも有効です。 これは次のものと等価です: .nf <*>.|\\n ECHO; .fi .PP .B BEGIN(0) は、開始条件の無いルールだけが有効である、最初の状態に戻ります。 この状態は開始条件 "INITIAL" として参照できるため、 .B BEGIN(INITIAL) は .B BEGIN(0) と等価です。 (開始条件名を括る括弧は不要ですが、良いスタイルであるとされています。) .PP .B BEGIN アクションは、ルール部の先頭のインデントされたコード中に現れても良いです。 例えば以下の例では、 .B yylex() が呼ばれグローバル変数 .I enter_special が真の場合には、スキャナは "SPECIAL" 開始条件に入ります: .nf int enter_special; %x SPECIAL %% if ( enter_special ) BEGIN(SPECIAL); blahblahblah ...more rules follow... .fi .PP 開始条件を説明するために、 "123.456" のような文字列を 2 通りの異なった解釈をするスキャナを示します。 デフォルトではこれは、 整数 "123" とドット ('.') と整数 "456" の 3 トークンに数えられます。 しかし、この文字列の前に "expect-floats" の文字列がある場合、 これは単一のトークンであるとされ、浮動小数点数 123.456 とされます: .nf %{ #include %} %s expect %% expect-floats BEGIN(expect); [0-9]+"."[0-9]+ { printf( "found a float, = %f\\n", atof( yytext ) ); } \\n { /* that's the end of the line, so * we need another "expect-number" * before we'll recognize any more * numbers */ BEGIN(INITIAL); } [0-9]+ { printf( "found an integer, = %d\\n", atoi( yytext ) ); } "." printf( "found a dot\\n" ); .fi 次は、C のコメントを理解(して捨てる)一方で、 現在の入力行を数えるスキャナです。 .nf %x comment %% int line_num = 1; "/*" BEGIN(comment); [^*\\n]* /* eat anything that's not a '*' */ "*"+[^*/\\n]* /* eat up '*'s not followed by '/'s */ \\n ++line_num; "*"+"/" BEGIN(INITIAL); .fi このスキャナは各ルールで可能な最大のテキストにマッチしようとする場合、 ちょっとした問題が起こります。 一般的には、高速なスキャナを記述する場合、 各ルールで最大のマッチを得ようとすることが最も成功します。 .PP 開始条件名は実際には整数値であり、格納することが出来ることに注意して下さい。 そのため、上記例は以下のように拡張できます: .nf %x comment foo %% int line_num = 1; int comment_caller; "/*" { comment_caller = INITIAL; BEGIN(comment); } ... "/*" { comment_caller = foo; BEGIN(comment); } [^*\\n]* /* eat anything that's not a '*' */ "*"+[^*/\\n]* /* eat up '*'s not followed by '/'s */ \\n ++line_num; "*"+"/" BEGIN(comment_caller); .fi さらに、現在の開始条件を整数値であるマクロ .B YY_START にてアクセスできます。 例えば、上記の .I comment_caller への代入は次のように記述できます。 .nf comment_caller = YY_START; .fi flex は .B YYSTATE を .B YY_START のエイリアスとして提供します (AT&T の .I lex が使用しています)。 .PP 開始条件は独自の名前空間を持たないことに注意して下さい; %s や %x の宣言における名前宣言の扱いは #define と同じです。 .PP 最後に、排他的開始条件を使用する、 展開されたエスケープシーケンスを含む(長すぎる文字列のチェックは含みません) C スタイルのクォート文字列へのマッチ方法を示します: .nf %x str %% char string_buf[MAX_STR_CONST]; char *string_buf_ptr; \\" string_buf_ptr = string_buf; BEGIN(str); \\" { /* saw closing quote - all done */ BEGIN(INITIAL); *string_buf_ptr = '\\0'; /* return string constant token type and * value to parser */ } \\n { /* error - unterminated string constant */ /* generate error message */ } \\\\[0-7]{1,3} { /* octal escape sequence */ int result; (void) sscanf( yytext + 1, "%o", &result ); if ( result > 0xff ) /* error, constant is out-of-bounds */ *string_buf_ptr++ = result; } \\\\[0-9]+ { /* generate error - bad escape sequence; something * like '\\48' or '\\0777777' */ } \\\\n *string_buf_ptr++ = '\\n'; \\\\t *string_buf_ptr++ = '\\t'; \\\\r *string_buf_ptr++ = '\\r'; \\\\b *string_buf_ptr++ = '\\b'; \\\\f *string_buf_ptr++ = '\\f'; \\\\(.|\\n) *string_buf_ptr++ = yytext[1]; [^\\\\\\n\\"]+ { char *yptr = yytext; while ( *yptr ) *string_buf_ptr++ = *yptr++; } .fi .PP 上記例のように同一の開始条件を持つ全てのルールの前に 開始条件を書かねばならないことが多いです。 flex はこれを簡単かつ綺麗にするため開始条件 .I スコープ を導入しました。 開始条件スコープは次のように始まります: .nf { .fi ここで .I SCs は 1 つ以上の開始条件のリストです。 開始条件スコープ内では、 最初の .I '{' にマッチするまでの .I '}' において、全てのルールは自動的に .I のプレフィックスが付きます。 そのため、例えば .nf { "\\\\n" return '\\n'; "\\\\r" return '\\r'; "\\\\f" return '\\f'; "\\\\0" return '\\0'; } .fi は次のものと等価です: .nf "\\\\n" return '\\n'; "\\\\r" return '\\r'; "\\\\f" return '\\f'; "\\\\0" return '\\0'; .fi 開始条件スコープはネストすることが出来ます。 .PP 開始条件のスタックを制御するために 3 つのルーチンを使用可能です: .TP .B void yy_push_state(int new_state) 現在の開始条件を開始条件スタックの先頭にプッシュし、 .B BEGIN new_state を使用したかのように .I new_state に切り替えます (開始条件名は整数値でもあることを思い出して下さい)。 .TP .B void yy_pop_state() スタックの先頭をポップし、 .B BEGIN を使用してその開始条件に切り替えます。 .TP .B int yy_top_state() スタックの内容を変更せずに、スタックの先頭を返します。 .PP 開始条件スタックは動的に大きくなり、 また組み込み時のサイズ制限はありません。 メモリを使い切ると、プログラム実行は中止されます。 .PP 開始条件スタックを使用するためには、スキャナは .B %option stack ディレクティブをインクルードする必要があります (下記オプションを参照して下さい)。 .SH 複数の入力バッファ スキャナによっては(ファイルの "include" をサポートする等) 複数の入力ストリームを扱う必要があります。 .I flex スキャナでは大きなバッファリングを行うため、 スキャンコンテキストに影響される .B YY_INPUT を単純に書き換えるだけでは次の入力がどこから読まれるのかを制御できません。 .B YY_INPUT が呼ばれるのはスキャナがバッファの終りに到達する時だけですので、 例えば "include" のように入力元を切り替える必要のある文をスキャンした後でも 長時間を費す場合があります。 .PP この様な問題を解決するため、 .I flex は複数の入力バッファを生成して切り替える機構を提供します。 入力バッファは次のように生成されます: .nf YY_BUFFER_STATE yy_create_buffer( FILE *file, int size ) .fi これは .I FILE ポインタと size を取り、与えられる file に関連し .I size 文字を保持するに十分なバッファを生成します (疑わしい場合には size には .B YY_BUF_SIZE を使用して下さい)。 これは、別のルーチン(下記参照)に渡すための .B YY_BUFFER_STATE ハンドルを返します。 .B YY_BUFFER_STATE のタイプは .B struct yy_buffer_state 構造体へのポインタであるため、 安全のため YY_BUFFER_STATE 変数を .B ((YY_BUFFER_STATE) 0) と初期化することが出来、 スキャナではなくソースファイルにおいて 入力バッファを正しく宣言するためにこの構造体を参照することが出来ます。 .B yy_create_buffer 呼び出しにおける .I FILE ポインタは .B YY_INPUT から見える .I yyin の値と同じようにだけ使用されることに注意して下さい; .B YY_INPUT を再定義して .I yyin を使わないようにすることにより、 .B yy_create_buffer に対して安全にニル .I FILE ポインタを渡せます。 スキャンするバッファを選択するためには次のようにします: .nf void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) .fi これはスキャナの入力バッファを切り替え、 トークンが .I new_buffer から来るようになります。 新たなファイルをオープンして .I yyin を指すのではなく、スキャンを継続するために yywrap() から .B yy_switch_to_buffer() を使用することがあることに注意して下さい。 また、 .B yy_switch_to_buffer() または .B yywrap() による入力元の切り替えは開始条件を変更し .I ない ことにも注意して下さい。 .nf void yy_delete_buffer( YY_BUFFER_STATE buffer ) .fi はバッファに関連づけられたストレージの返還要求に使用します。( .B buffer はニルでも構いませんがこの場合このルーチンは何もしません。) 現在のバッファの内容をクリアするには次のようにします: .nf void yy_flush_buffer( YY_BUFFER_STATE buffer ) .fi この関数はバッファの内容を捨てるため、 次にスキャナがこのバッファとトークンのマッチを行う場合、 スキャナはまず .B YY_INPUT を使用してこのバッファをフィルします。 .PP .B yy_new_buffer() は .B yy_create_buffer() のエイリアスであり、動的オブジェクトの生成と破壊のために使用する C++ の .I new と .I delete との互換性のために提供しています。 .PP 最後に .B YY_CURRENT_BUFFER マクロは、現在のバッファに対する .B YY_BUFFER_STATE ハンドルを返します。 .PP この機能を使用してインクルードファイルを展開するスキャナの記述例です( .B <> 機能は後述します): .nf /* the "incl" state is used for picking up the name * of an include file */ %x incl %{ #define MAX_INCLUDE_DEPTH 10 YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH]; int include_stack_ptr = 0; %} %% include BEGIN(incl); [a-z]+ ECHO; [^a-z\\n]*\\n? ECHO; [ \\t]* /* eat the whitespace */ [^ \\t\\n]+ { /* got the include file name */ if ( include_stack_ptr >= MAX_INCLUDE_DEPTH ) { fprintf( stderr, "Includes nested too deeply" ); exit( 1 ); } include_stack[include_stack_ptr++] = YY_CURRENT_BUFFER; yyin = fopen( yytext, "r" ); if ( ! yyin ) error( ... ); yy_switch_to_buffer( yy_create_buffer( yyin, YY_BUF_SIZE ) ); BEGIN(INITIAL); } <> { if ( --include_stack_ptr < 0 ) { yyterminate(); } else { yy_delete_buffer( YY_CURRENT_BUFFER ); yy_switch_to_buffer( include_stack[include_stack_ptr] ); } } .fi ファイルではなくメモリ上の文字列をスキャンするための 入力バッファを設定するための 3 つのルーチンを使用可能です。 いずれも文字列をスキャンする新しい入力バッファを生成し、対応する .B YY_BUFFER_STATE ハンドル(終了時には .B yy_delete_buffer() にて消去します)を返します。新しいバッファに切り替える時には .B yy_switch_to_buffer() を使用し、次の .B yylex() の呼び出し時にはこの文字列をスキャン開始します。 .TP .B yy_scan_string(const char *str) NUL ターミネートされた文字列をスキャンします。 .TP .B yy_scan_bytes(const char *bytes, int len) .I len バイト (NUL が含まれるかも知れません)を位置 .I bytes からスキャンします。 .PP どちらの関数も文字列もしくはバイト列の .I コピー を生成してからスキャンします。( .B yylex() はスキャンするバッファの内容を変更するため、これが望ましいのです。) コピーを避けるためには次のようにします: .TP .B yy_scan_buffer(char *base, yy_size_t size) バッファ内で .I base から .I size バイトの長さをスキャンします。最後の 2 バイトは .B YY_END_OF_BUFFER_CHAR (ASCII NUL) である .I 必要があります。 これらの最後の 2 バイトはスキャンされません; そのためスキャンの内容は .B base[0] から .B base[size-2] までで両端を含みます。 .IP この様になるように .I base を設定しなかった場合(つまり最後の 2 つの .B YY_END_OF_BUFFER_CHAR バイトを忘れた場合)、 .B yy_scan_buffer() は新しいバッファを生成するのではなくニルポインタを返します。 .IP 型 .B yy_size_t は整数型であり、 バッファの大きさを反映する整数式をこの型にキャストすることが出来ます。 .SH ファイルの終りのルール 特別ルール "<>" は、 ファイルの終了時もしくは yywrap() が非 0 (すなわち処理するファイルが無いことを表す)の時に 行われるべきアクションを表します。 アクションは以下の 4 つのうちのいずれかで終る必要があります。 .IP - .I yyin に新しいファイルを割り当てる(前のバージョンの flex では、 割り当て後に特別なアクション .B YY_NEW_FILE を呼び出す必要がありました; 今では不要です。); .IP - .I return 文を実行する; .IP - 特別な .B yyterminate() アクションを実行する; .IP - .B yy_switch_to_buffer() を使用して新たなバッファに切り替える (上記例で示した通り)。 .PP <> ルールを他のパターンと共に使用してはなりません; 他のパターンは開始条件のリストともにだけ満たされるからです。 満たされない <> ルールが与えられた場合、 <> アクションをまだ持っていない .I 全ての 開始条件に適用されます。 <> ルールを最初の開始条件だけに指定するためには次のようにして下さい。 .nf <> .fi .PP これらのルールは閉じていないコメントを捕まえる場合等に便利です。 例えば: .nf %x quote %% ...other rules for dealing with quotes... <> { error( "unterminated quote" ); yyterminate(); } <> { if ( *++filelist ) yyin = fopen( *filelist, "r" ); else yyterminate(); } .fi .SH 雑多なマクロ マクロ .B YY_USER_ACTION にはマッチルールアクションに先だって常に行うアクションを定義できます。 例えば、yytext を小文字に変換するルーチンを呼ぶように #define 出来ます。 .B YY_USER_ACTION 起動時には、変数 .I yy_act はマッチしたルールの番号を与えます(ルールは 1 番から数えます)。 各ルールがマッチする頻度を知りたい場合を想像して下さい。 以下に仕掛けを示します: .nf #define YY_USER_ACTION ++ctr[yy_act] .fi ここで .I ctr は配列であり、それぞれのルールがマッチした回数を計数します。 マクロ .B YY_NUM_RULES はルールの総数を表すため( .B \-s を使った時でさえデフォルトルールを含みます)、 正しい .I ctr の宣言は次のようになります: .nf int ctr[YY_NUM_RULES]; .fi .PP マクロ .B YY_USER_INIT には最初のスキャンの前に常に行うアクションを再定義できます (スキャナの内部初期化の前に行われます)。 例えばデータ表を読み込んだり、ログファイルをオープンするために使用できます。 .PP マクロ .B yy_set_interactive(is_interactive) は現在のバッファが .I 対話的 と見倣されているか否かを制御するために使用します。 対話的なバッファの処理は遅くなりますが、 スキャナの入力元が対話的でありバッファをフィルするのを待つことに起因する 問題を避けるためには指定しなければなりません(以下の .B \-I .B %option interactive フラグに関する議論を参照して下さい)。 マクロ起動時に非 0 を指定するとバッファは対話的になり、 0 を指定すると非対話的になります。 このマクロの使用は .B %option interactive , .B %option always-interactive , .B %option never-interactive に優先します(下記オプションを参照して下さい)。 バッファをスキャンして対話的である(もしくはでない)と判断される前に、 .B yy_set_interactive() を起動して下さい。 .PP マクロ .B yy_set_bol(at_bol) は現在のバッファにおける次のトークンに対するマッチのためのスキャンが 行頭から始まるか否かを制御します。 非 0 のマクロ引数は、'^' が付いたルールを有効にしますが、 0 のマクロ引数は '^' が付いたルールを無効にします。 .PP 現在のバッファからスキャンされた次のトークンが有効な '^' ルールを持つ時、 マクロ .B YY_AT_BOL() は真を返します。 そうでない場合は偽を返します。 .PP 生成されたスキャナでは、全てのアクションは大きな一つの switch 文に 集められ、 .B YY_BREAK で分けられています。 .B YY_BREAK は再定義可能です。デフォルトではそれぞれのルールのアクションを 分けるための単なる "break" です。 .B YY_BREAK を再定義することにより、例えば C++ ユーザが #define YY_BREAK を何もしないように定義し (ただし全てのルールが "break" か "return" で終るように 注意しなければなりません!)、 ルールのアクションが "return" で終ることにより .B YY_BREAK がアクセスできないことに起因する、 到達できない文があるという警告を避けることが出来ます。 .SH ユーザが使用可能な値 この節ではユーザがルールのアクション部分で使用可能な値をまとめます。 .IP - .B char *yytext 現トークンのテキストを保持しています。内容を変更しても構いませんが、 その長さを伸ばしてはいけません(終りに文字を追加してはいけない)。 .IP スキャナの記述の最初の部分に特別な指示である .B %array が書かれているとき、 .B yytext は .B char yytext[YYLMAX] と定義されます。 .B YYLMAX はマクロで、デフォルトの値 (多くの場合8KB) を変更したい場合には 最初の部分で再定義可能です。 .B %array を使うといくらか遅いスキャナになりますが、 .B yytext の値は .I input() と .I unput() の呼び出しでも破壊されなくなります。 .B yytext が文字ポインタである場合、 これらの関数呼び出しは .B yytext を破壊する可能性があります。 .B %array と対称な指定 .B %pointer がデフォルトです。 .IP C++ のスキャナクラスを生成する (オプション .B \-+ ) ときには .B %array は使えません。 .IP - .B int yyleng 現トークンの長さを保持しています。 .IP - .B FILE *yyin はデフォルトで .I flex が読むファイルです。再定義することは可能ですが、スキャンを 始める前か EOF に到達した後でのみ再定義は意味を持ちます。 スキャンの途中で変更すると予想外の結果をもたらします。 というのも .I flex は入力をバッファリングしているからです; そのような場合には、直接再定義せず .B yyrestart() を使って下さい。 ファイルの終わりでスキャンが終了した場合には .I yyin を新しい入力ファイルに割り当て、 再びスキャナを呼び出してスキャンを続けることが出来ます。 .IP - .B void yyrestart( FILE *new_file ) を呼ぶことで .I yyin が新しい入力ファイルを指すように出来ます。新しいファイルへの変更は すぐに行われます (それまでにバッファに読み込まれていた入力は失われます)。 .I yyin を引数として .B yyrestart() を呼ぶと、現在の入力バッファを捨てて同じ入力ファイルを スキャンし続けることに注意して下さい。 .IP - .B FILE *yyout は .B ECHO アクションが行われる対象のファイルです。 ユーザが再割当することが出来ます。 .IP - .B YY_CURRENT_BUFFER カレントバッファの .B YY_BUFFER_STATE ハンドルを返します。 .IP - .B YY_START 現在の開始条件に対応する整数値を返します。 続いてこの値を .B BEGIN と共に使うことで、スキャナをその開始条件へ戻すことが出来ます。 .SH YACC とのインタフェース .I flex の主な使用方法の一つは、 .I yacc パーサジェネレータと共に使用することです。 .I yacc パーサは .B yylex() と言う名前のルーチンを呼び、次の入力トークンを見付けるものとしています。 このルーチンは、次のトークンの型を返し、 関連する値をグローバルの .B yylval に格納するものとされています。 .I flex を .I yacc と共に使うには、 .I yacc に .B \-d オプションを指定して、 .I yacc の入力に現れる全ての .B %tokens の定義を含む .B y.tab.h ファイルを生成させます。 このファイルは .I flex スキャナにインクルードされます。 例えばトークンの一つが "TOK_NUMBER" である場合、 スキャナの一部分は次のようになっています: .nf %{ #include "y.tab.h" %} %% [0-9]+ yylval = atoi( yytext ); return TOK_NUMBER; .fi .SH オプション .I flex には以下のようなオプションがあります: .TP .B \-b バックアップ情報を .I lex.backup に出力します。 このファイルには、スキャナのバックアップ(backing-up)を必要とする状態と それに対応する入力文字の一覧がリストされます。 ルールを追加することでバックアップ状態を取り除くこと ができます。バックアップ状態が .I 全て 取り除かれ、 .B \-Cf または .B \-CF を指定すると、生成されたスキャナの実行速度が向上します( .B \-p フラグを見て下さい)。 スキャナをぎりぎりまで最適化しようとしてるユーザのみが このオプションに関係あります。 (後述の性能関連の節を見て下さい。) .TP .B \-c 何もしません。POSIX 互換のために用意されています。 .TP .B \-d 生成されたスキャナが .I デバッグ モードで実行されます。 .B yy_flex_debug が非 0 の場合(デフォルト)、 パターンが認識されるたびに、スキャナは次のようなメッセージを .I 標準エラー出力 へ出力します。 .nf --accepting rule at line 53 ("the matched text") .fi 行番号はスキャナを定義しているファイル (flexに与えられたファイル) でのルールの位置です。 スキャナがバックアップしたとき、デフォルトルールを受け入れたとき、 入力バッファの最後に到達したとき (あるいは、NULに到達したとき; スキャナには、この二つの区別はつきません)、ファイルの最後に到達した ときにもメッセージが出力されます。 .TP .B \-f .I 高速なスキャナ を指定します。 テーブル圧縮は行われず、標準入出力をバイパスします。 その結果生成されるスキャナは大きくなりますが、高速なものになります。 このオプションは .B \-Cfr と同等です (以下を参照)。 .TP .B \-h .I flex のオプションの要約からなる "ヘルプ" を .I 標準出力 に書き出し終了します。 .B \-? と .B \-\-help とは .B \-h と同じです。 .TP .B \-i .I 大文字小文字を区別しない スキャナを生成します。 .I flex の入力パターンに与えられる文字が大文字であるか小文字であるかは区別されず、 スキャナに入力される文字列は大文字小文字に関係なくマッチします。 マッチしたテキスト .I yytext では入力時の大文字小文字が保存されます (大文字を小文字に変換したりしません)。 .TP .B \-l AT&T の .I lex の実装に対して最大限の互換性を持たせます。これは .I 完全な 互換性を意味しません。 このオプションを使用すると性能に大きな影響があります。 このオプションは、 .B \-+, \-f, \-F, \-Cf, \-CF と同時に使用できません。詳しくは、 後述の "Lex および POSIX との非互換性" の節を御覧下さい。 またこのオプションを使用すると、 .B YY_FLEX_LEX_COMPAT が生成されたスキャナの名前に #define されます。 .TP .B \-n 何もしません。POSIX 互換のためにだけ用意されたオプションです。 .TP .B \-p 性能情報を標準エラー出力に出力します。 .I flex 入力ファイルの記述のうち、 生成されるスキャナの性能低下の深刻な原因となる部分について、 コメントされます。 オプションを2回指定すると、より細かな性能低下についても コメントが出力されます。 .IP .B REJECT ・ .B %option yylineno ・可変長右文脈(欠陥/バグの節で後述)は多大なる性能への悪影響があります; .I yymore() の使用・ .B ^ オペレータ・ .B \-I フラグは小さな性能の悪影響があります。 .TP .B \-s .I デフォルトルール (マッチしないスキャナの入力を .I 標準出力 に出力する) が抑制されます。ルールにマッチしない入力が表れたとき、スキャナは エラーで異常終了します。 スキャナのルールの組に抜けが無いかを確認する場合に有効です。 .TP .B \-t .B lex.yy.c ではなく、標準出力にスキャナを書き出します。 .TP .B \-v 生成するスキャナの特徴の要約を .I 標準エラー出力 に出力するように .I flex に指示します。 ほとんどの特徴は通常の .I flex ユーザには意味がありませんが、最初の行は .I flex のバージョンを表示し( .B \-V で表示されるもと同じです)、次の行はデフォルトを含むスキャナ生成時のフラグです。 .TP .B \-w 警告メッセージを抑制します。 .TP .B \-B .I 対話的 なスキャナ (以下の .B \-I の項を参照) ではなく .I バッチ的 なスキャナを生成するよう .I flex に指示します。 通常 .B \-B を使用するのは、スキャナを対話的に使用しないことが .I 分かっている 時であり、 .I 少しでも 性能を追求したい時です。 より大きい性能を追求する場合には、 .B \-Cf もしくは .B \-CF オプションを使用すべきです(後述)。 .B \-B を自動的に設定します。 .TP .B \-F .ul 高速な スキャナテーブルの表現を使う(標準入出力はバイパスする)ことを指定します。 この表現は、完全テーブル表現 .B (-f) とほぼ同じぐらい高速で、 ある種のパターンに対してはかなり小さく (ある種に対しては大きく) なります。 通常、次のように、パターンの組が "keywords" とその対応 および "identifier" ルールからなる場合: .nf "case" return TOK_CASE; "switch" return TOK_SWITCH; ... "default" return TOK_DEFAULT; [a-z]+ return TOK_ID; .fi この場合、完全テーブル表現を使用する方が良いです。 もし "identifier" ルールからのみ表現され、 キーワードを検知するためにハッシュ表等を使用する場合は、 .B -F を使用する方が良いです。 .IP このオプションは .B \-CFr と等価です (以下を参照)。 これは .B \-+ オプションとは同時に指定できません。 .TP .B \-I .I flex に .I 対話的 なスキャナを生成するように指示します。 対話的なスキャナは、 先読みすることによりマッチするトークンが完全に決まる場合のみ先読みします。 現在のトークンが既に明らかな場合でも常に先読みする方法は、 必要時のみ先読みする方法より少し速いです。 しかし、常に先読みする方法では対話性能に著しく悪影響があります; 例えばユーザが改行を入力した場合、 .I 別の トークンを入力するまでそれは改行として認識されません。 大概の場合、次の行全体を入力することになります。 .IP .I flex のスキャナのデフォルトは .I 対話的 であり、例外は .B \-Cf や .B \-CF といったテーブル圧縮オプション(後述)使用時です。 高性能追求時にはこれらのオプションを使用しているべきですので、 これらのオプションを使用していない場合には、 .I flex は実行時性能を少し犠牲にして直観的な対話的な振舞いを取っているものとします。 .B \-I オプションを .B \-Cf や .B \-CF と共に .I 使用できない ことにも注意して下さい。 実際はこのオプションは不要です; 許される場合、デフォルトで有効になっています。 .IP .B isatty() がスキャナの入力に対して偽を返す場合、 .B \-I が指定されていた場合でも、flex はバッチモードへ戻ります。 なにがあっても対話モードを強制するには、 .B %option always-interactive (後述のオプションを参照) を使用します。 .IP スキャナを対話的で .I 無い ように強制するには .B \-B (先述)を使用します。 .TP .B \-L .I flex に .B #line ディレクティブを .B lex.yy.c 中に生成しないように指示します。 デフォルトではこの #line ディレクティブを生成するので、 アクションにおけるエラーメッセージは、オリジナルの .I flex 入力ファイル( エラーが入力ファイルのコードに起因する場合)もしくは ファイル .B lex.yy.c ( .I flex の誤り -- 以下の電子メールアドレスに報告して下さい) における正しい位置を与えます。 .TP .B \-T .I flex を .I トレース モードで実行します。 入力の形式とその結果として出力される非決定性/決定性有限 オートマトンに関して .I 標準エラー出力 に多量のメッセージを出力します。 このオプションは主に .I flex をメンテナンスするために使われます。 .TP .B \-V バージョン番号を .I 標準出力 に出力して終了します。 .B \-\-version は .B \-V と同じです。 .TP .B \-7 7 ビットのスキャナを生成します。 すなわち、入力に 7 ビットの文字のみを使用することを意味します。 .B \-7 を指定する利点は、 .B \-8 オプション(後述)を指定して生成するテーブルの半分まで小さくなりうることです。 欠点は、入力に 8 ビット文字が含まれている時に、 スキャナがハングもしくはクラッシュすることです。 .IP しかしながら、 .B \-Cf や .B \-CF といったテーブル圧縮オプション使用時にはテーブル圧縮の効果は少なく、 移植性が著しく低下することに注意して下さい。 .I flex のデフォルトの動作では、 .B \-Cf や .B \-CF, を指定しない限り 8 ビットスキャナを生成します。 指定時には、 あなたのサイトが常に 8 ビットスキャナを生成するように (USA 以外のサイトでは良くあります)していない場合には、 7 ビットスキャナを生成します。 flex が 7 ビットもしくは 8 ビットのいずれのスキャナを生成するのかを 知りたい場合には、上述の .B \-v の出力のフラグの要約を調べて下さい。 .IP .B \-Cfe もしくは .B \-CFe (これらのテーブル圧縮オプションおよび等価クラスは後述) を使用しても、flex はデフォルトで 8 ビットスキャナを生成することに 注意して下さい。 なぜなら、完全な 8 ビットテーブルは 7 ビットテーブルと比べても たいして高価にはならないからです。 .TP .B \-8 8 ビットのスキャナを生成するように .I flex に指示します。すなわち 8 ビット文字を解釈します。 圧縮オプション .B \-Cf と .B \-CF 使用時にのみ必要です。 なぜなら flex はデフォルトでは 8 ビットスキャナを生成するからです。 .IP flex のデフォルト動作と 7 ビットおよび 8 ビットスキャナの トレードオフに関しては、上記 .B \-7 の議論を見て下さい。 .TP .B \-+ C++ のスキャナクラスを生成します。 詳しくは C++ スキャナの生成で後述します。 .TP .B \-C[aefFmr] テーブル圧縮の程度と、 より一般的には小さいスキャナと高速なスキャナとのトレードオフを指定します。 .IP .B \-Ca ("アライン") 生成されるスキャナのテーブルは、 メモリアクセスおよび計算のためにアラインされるため、より大きなものになります。 RISC アーキテクチャではロングワードのフェッチおよび操作は ショートワードといったより小さな大きさのものに対するものより効率的です。 場合によってはスキャナのテーブルサイズが通常の 2倍になることもあります。 .IP .B \-Ce .I 等価クラス (同一の字句属性を持つ文字セット)を構築します (例えば、 .I flex 入力中に数字が現れるのが文字クラス "[0-9]" のみの場合、 数字 '0', '1', ..., '9' は全て同じ等価クラスになります)。 多くの場合、等価クラスを用いることで最終的なテーブル/ オブジェクトファイルのサイズを劇的(平均して 1/2-1/5)に減らすことが出来ます。 また、その際の性能コストは非常に低く抑えられます ( 1文字スキャンするごとに 1回の配列検索を行うだけです)。 .IP .B \-Cf .I 完全(full) スキャナテーブルを生成することを指示します - .I flex は、別の状態に関する類似した遷移関数をうまく利用するという、 テーブル圧縮手法を用いません。 .IP .B \-CF 別の高速スキャナ表現( .B \-F フラグにて記述)を用いることを指定します。 このオプションは .B \-+ と同時に使用できません。 .IP .B \-Cm .I flex に .I メタ等価クラス を構築するよう指示します。 メタ等価クラスは一緒に使われることの多い等価クラス (等価クラスが使われていないときには文字群) の集合です。 圧縮テーブルを使っているとき、 メタ等価クラスは多くの場合にかなりの効果的をもたらしますが、 やや性能に影響します (1-2 回の条件テストと 1 回の配列検索がスキャンした文字ごとに行われます)。 .IP .B \-Cr 生成されたスキャナは入力に対しては標準入出力ライブラリ(標準入出力)を .I バイパス します。 スキャナは、 .B fread() や .B getc() ではなく、 .B read() システムコールを使用します。 性能改善結果はシステムに依存します。 オプション .B \-Cf もしくは .B \-CF を使用していない場合には、 一般にこのオプションは性能をあまり改善しません。 .B \-Cr を指定すると、例えばスキャナを設定する前に標準入出力を使用して .I yyin を読み取る等した場合奇妙な動作となり得ます (標準入出力の入力バッファに以前読み込んだものを、スキャナは読めません)。 .IP .B \-Cr は .B YY_INPUT を定義した場合意味がありません (前述の生成されたスキャナを参照)。 スキャナの呼出に先だって標準入力を使って .I yyin から読みだしているときには、予想外の振る舞いをすることがあります。 .IP .B \-C のみを指定したときには、スキャナはテーブル圧縮は行いますが、 等価クラスもメタ等価クラスも使いません。 .IP オプション .B \-Cf と .B \-CF はオプション .B \-Cm を同時に指定しても意味をなしません - なぜなら、テーブル圧縮が行われないときメタ等価クラス は現れないからです。 それ以外のオプションは自由に組み合わせることが出来ます。 .IP デフォルトの設定は .B \-Cem です。このとき .I flex は等価クラスとメタ等価クラスを生成します。 この設定は最も高いテーブル圧縮を行います。 テーブルサイズの大きさと実行の高速性はトレードオフの関係にあり、 一般に .nf 遅いが 小さい -Cem -Cm -Ce -C -C{f,F}e -C{f,F} -C{f,F}a 速いが 大きい .fi となります。 小さいテーブルのスキャナは通常生成もコンパイルも高速であるため、 通常の開発時は最大の圧縮を行うでしょう。 .IP 製品のスキャナでは、 .B \-Cfe が速度と大きさの良いバランスです。 .TP .B \-ooutput .B lex.yy.c ではなくファイル .B output にスキャナを書くように flex に指示します。 .B \-o と .B \-t オプションを組み合わせると、 スキャナは .I 標準出力 に書かれますが、 .B #line ディレクティブ( .B \\-L にて上述)はファイル .B output を参照します。 .TP .B \-Pprefix .I flex の使うデフォルトのプレフィックス .I "yy" の代わりに .I prefix を使います。これはグローバル変数とファイル名に影響します。 例えば .B \-Pfoo とすると、 .B yytext の名前は .B footext となります。 またデフォルトの出力ファイル名を .B lex.yy.c から .B lex.foo.c に変えます。 影響を受ける名前の一覧です: .nf yy_create_buffer yy_delete_buffer yy_flex_debug yy_init_buffer yy_flush_buffer yy_load_buffer_state yy_switch_to_buffer yyin yyleng yylex yylineno yyout yyrestart yytext yywrap .fi (C++ スキャナ使用時には .B yywrap と .B yyFlexLexer だけが影響を受けます。) スキャナの中では、グローバル変数および関数を どちらの名前ででも参照できます; 外部的には修正した名前のみ持ちます。 .IP このオプションを使用することにより、複数の .I flex プログラムを同一の実行形式に容易にリンクすることが出来ます。 しかし、このオプションは .B yywrap() の名前をも変えますので、 独自の(適切に名前を付けた)ルーチンをスキャナのために用意するか、 .B %option noyywrap を使用して .B \-ll とリンクする .I 必要があります。 どれもデフォルトでは提供されません。 .TP .B \-Sskeleton_file .I flex がスキャナを構築するのに使うデフォルトの スケルトンファイルに優先します。 .I flex のメンテナンスや開発をする場合以外、このオプションは必要ありません。 .PP .I flex は、flex のコマンドラインではなく、 スキャナ仕様記述中からオプションを制御する機構を提供します。 これはスキャナの最初の部分に .B %option ディレクティブを含めることで実現できます。 単一の .B %option ディレクティブにおいて複数のオプションを指定でき、 また複数のディレクティブを flex 入力ファイルの最初の部分に置くことが出来ます。 .PP ほとんどのオプションが単純な名前であり、 オプションとして前に "no" という語(空白をはさみません)を付けて 意味を反転できます。 数値は flex のフラグやその反転と等価です。 .nf 7bit -7 オプション 8bit -8 オプション align -Ca オプション backup -b オプション batch -B オプション c++ -+ オプション caseful または case-sensitive -i オプションの逆(デフォルト) case-insensitive または caseless -i オプション debug -d オプション default -s オプションの逆 ecs -Ce オプション fast -F オプション full -f オプション interactive -I オプション lex-compat -l オプション meta-ecs -Cm オプション perf-report -p オプション read -Cr オプション stdout -t オプション verbose -v オプション warn -w オプションの逆 (-w オプションには "%option nowarn" を使用して下さい) array "%array" と等価 pointer "%pointer" と等価(デフォルト) .fi .B %option には、他では利用できない機能を提供するものもあります: .TP .B always-interactive 入力を常に "対話的" に扱うスキャナを生成するように flex に指示します。 通常、新たな入力ファイル毎にスキャナは .B isatty() を呼び出し、スキャナの入力元が対話的であり 1 度に 1 文字ずつ読むべきか どうか判定しようとします。 一方このオプションを使用するとこの様な呼び出しは行いません。 .TP .B main スキャナに対し、 .B yylex() を呼び出すだけのデフォルトの .B main() プログラムを提供するように指示します。 このオプションは .B noyywrap (後述)も暗黙的に指示します。 .TP .B never-interactive 入力を "対話的" とはしないスキャナを生成するように flex に指示します (これもまた .B isatty() を呼び出しません)。 これは .B always-interactive の逆です。 .TP .B stack 開始条件スタックの使用を有効にします(前述の開始条件を参照)。 .TP .B stdinit 設定されている場合 (すなわち .B %option stdinit) .I yyin および .I yyout を、 デフォルトの .I nil ではなく、 .I 標準入力 と .I 標準出力 に設定します。 既存の .I lex プログラムには、 ANSI C 互換ではないものの、この動作に依存しているものがあります。 ANSI C では .I 標準入力 と .I 標準出力 がコンパイル時の定数である必要はありません。 .TP .B yylineno 入力から読み取った現在の行番号をグローバル変数 .B yylineno に保持するスキャナを生成するように、 .I flex に指示します。 このオプションは .B %option lex-compat から暗黙的に指定されます。 .TP .B yywrap セットされていない場合 (すなわち .B %option noyywrap) 、スキャナはファイルの終りに際し .B yywrap() を呼ばず単にスキャンすべきファイルがもう無いものとするようになります( ユーザが .I yyin を新しいファイルを指すようにし、再度 .B yylex() を呼び出すまでです)。 .PP .I flex はルールアクションをスキャンし、 .B REJECT と .B yymore() の機能が使われているかどうかを調べます。 .B reject と .B yymore のオプションを使用すると、 オプションで指定した通りにこの判定に優先します。 オプションの指定は、セットして機能を使用していることを示す(例えば .B %option reject) 、もしくはアンセットして機能を使用していないことを示す(例えば .B %option noyymore) ものとします。 .PP 次のオプションは文字列の値を取り、'=' で区切ります: .nf %option outfile="ABC" .fi これは .B -oABC と同じであり、 .nf %option prefix="XYZ" .fi は .B -PXYZ と同じです。 最後に、 .nf %option yyclass="foo" .fi は C++ スキャナ生成時のみ有効( .B \-+ オプション)です。これは .I flex に対して、 .B foo が .B yyFlexLexer のサブクラスであることを知らせますので、 .I flex はアクションを .B yyFlexLexer::yylex() ではなく .B foo::yylex() のメンバ関数とします。 また、( .B yyFlexLexer::LexerError() を起動することにより)呼び出すと実行時エラーを除去する .B yyFlexLexer::yylex() メンバ関数を生成します。 詳細は後述の C++ スキャナの生成を見て下さい。 .PP 生成されたスキャナから不要なルーチンを除きたい lint 純正主義者のために 多くのオプションが用意されています。 以下をアンセットすると(例えば .B %option nounput )、対応するルーチンは生成されるスキャナから除かれます: .nf input, unput yy_push_state, yy_pop_state, yy_top_state yy_scan_buffer, yy_scan_bytes, yy_scan_string .fi ( .B yy_push_state() 等は .B %option stack を使用しない場合には現れません)。 .SH 性能関連 .I flex の主なデザインゴールは高性能なスキャナを生成することです。 多くのルールセットを良く扱うことで最適化されます。 既に概説した .B \-C オプション使用によるテーブル圧縮に起因する速度への影響の他に、 性能を悪化させる多くのオプション/アクションがあります。 それらを高価なものから安価なものへと並べます: .nf REJECT %option yylineno 自由長の右文脈(trailing context) バックアップが必要なパターンの組 %array %option interactive %option always-interactive '^' 行頭オペレータ yymore() .fi 最初の 3 つは非常に高価であり、最後の 2 つは非常に安価です。 .B unput() は潜在的に非常に大きな仕事をするルーチン呼び出しとして実装されているのに対し、 .B yyless() は非常に安価なマクロです; ですからスキャンした余分なテキストを戻すだけの場合には .B yyless() を使って下さい。 .PP 性能が重要な場合には、出来うる限りの努力でもって .B REJECT を避けて下さい。 これは特に高価なオプションです。 .PP バックアップを取り除くと、乱雑になり、 ひどく苦労して複雑なスキャナを作ることになります。 実際的には .B \-b フラグを指定して .I lex.backup ファイルを生成することから始めます。例えば、入力 .nf %% foo return TOK_KEYWORD; foobar return TOK_KEYWORD; .fi に対しては、ファイルは次のようになります: .nf State #6 is non-accepting - associated rule line numbers: 2 3 out-transitions: [ o ] jam-transitions: EOF [ \\001-n p-\\177 ] State #8 is non-accepting - associated rule line numbers: 3 out-transitions: [ a ] jam-transitions: EOF [ \\001-` b-\\177 ] State #9 is non-accepting - associated rule line numbers: 3 out-transitions: [ r ] jam-transitions: EOF [ \\001-q s-\\177 ] Compressed tables always back up. .fi 最初の数行は、 \&'o' に遷移できるが他の文字には遷移できない状態があり、 その状態では現在スキャンされたテキストは他のルールにはマッチしないことを 表します。 この状態が発生したのは、 入力ファイルの行 2, 3 のルールにマッチしようとした時です。 スキャナがこの様な状態にあり 'o' 以外の文字を読んだ場合には、 マッチするルールを探すためのバックアップが必要となります。 少し考えれば、これは "fo" を見た時にある状態に違いないことが分かるでしょう。 この様な時、'o' 以外のものが現れると、 スキャナは、単に 'f' にマッチする(デフォルトルール)ところまで 戻り(バックアップし)ます。 .PP 状態 #8 に関係するコメントは、 "foob" がスキャンされた時に問題があることを表しています。 実際、'a' 以外の文字に出会うと、スキャナは "foo" を受理するところまで戻ります。 同様に状態 #9 に関係するコメントは、 "fooba" がスキャンされ 'r' が続かない場合に関係します。 .PP 最後のコメントが通知するのは、 .B \-Cf や .B \-CF を使っているのでなければ バックアップを取り除こうと努力することは無意味であることです。 なぜなら、圧縮されたスキャナに対してそのようなことをしても、 性能上の利益は無いからです。 .PP バックアップを取り除くためには "エラー" ルールを追加します: .nf %% foo return TOK_KEYWORD; foobar return TOK_KEYWORD; fooba | foob | fo { /* false alarm, not really a keyword */ return TOK_ID; } .fi .PP キーワードのリストからバックアップを取り除くには、"全てを捕まえる" ルールを使用することが出来ます: .nf %% foo return TOK_KEYWORD; foobar return TOK_KEYWORD; [a-z]+ return TOK_ID; .fi 通常、適切な時にはこれは一番良い解決策です。 .PP バックアップメッセージはカスケードすることが多いです。 複雑なルールの組では、数百ものメッセージを得るのは普通のことです。 しかし、これを解析すれば、バックアップを除去するためには 大抵の場合数ダースのルールにだけ関係あることが分かるでしょう (しかし、間違えることが多く、誤ったルールが偶然有効なトークンにマッチし得ます。 将来の .I flex の機能では、 自動的にバックアップを除去するルールを追加するようになるかも知れません)。 .PP バックアップを除去することにより利益があるのは、 .I 全ての バックアップを除去した時だけということを覚えておくことは重要です。 たった一つを残しても何も得ることが出来ません。 .PP .I 可変長の 右文脈 (左部分と右部分のいずれかもしくは両方が可変長)は .B REJECT とほぼ同じだけの(すなわち相当の)性能劣化となります。 そのため次のようなルール: .nf %% mouse|rat/(cat|dog) run(); .fi は次のように書くか: .nf %% mouse/cat|dog run(); rat/cat|dog run(); .fi 次のように書いた方が良いです: .nf %% mouse|rat/cat run(); mouse|rat/dog run(); .fi 特別な '|' アクションは助けにはなり .I ません し、かえって状況を悪くします (後述の欠陥/バグを参照)。 .LP スキャナの性能を向上させるための余地(実現は最も容易)は、 マッチするトークンが長ければスキャナが高速になることにあります。 長いトークンではほとんどの入力処理は(短い)内部ループで処理され、 アクションのためにスキャナ環境を設定する追加の仕事(例えば .B yytext) をほとんどしないからです。 C コメントのスキャナを思い出しましょう: .nf %x comment %% int line_num = 1; "/*" BEGIN(comment); [^*\\n]* "*"+[^*/\\n]* \\n ++line_num; "*"+"/" BEGIN(INITIAL); .fi 次のように書くと高速になります: .nf %x comment %% int line_num = 1; "/*" BEGIN(comment); [^*\\n]* [^*\\n]*\\n ++line_num; "*"+[^*/\\n]* "*"+[^*/\\n]*\\n ++line_num; "*"+"/" BEGIN(INITIAL); .fi 今度は、改行毎に別のアクションの処理を行うのではなく、 改行認識はルール間で "分散" され、 可能な限り長いテキストにマッチするようになっています。 ルールの .I 追加 はスキャナを遅く .I しません! スキャナの速度は、ルール数とも、 オペレータ '*' や '|' といったものに基づくルールの複雑さ (この節の始めで扱いました)とも独立です。 .\" 括弧内自信無しです .\" Apr 29 1997, horikawa@jp.freebsd.org .PP 最後の高速化の例です: 1 行に 1 つずつであり別の文字は付かないような、 識別子とキーワードを全てファイルからスキャンすることを考えます。 最初は次のようになるでしょう: .nf %% asm | auto | break | ... etc ... volatile | while /* it's a keyword */ .|\\n /* it's not a keyword */ .fi 後戻りを避けるために全てを捕まえるルールを導入します: .nf %% asm | auto | break | ... etc ... volatile | while /* it's a keyword */ [a-z]+ | .|\\n /* it's not a keyword */ .fi 1 行に正確に 1 語だけあることが保証されている場合、 改行の認識を別のトークンと併せることで、 マッチの総数を半分に減らすことが出来ます: .nf %% asm\\n | auto\\n | break\\n | ... etc ... volatile\\n | while\\n /* it's a keyword */ [a-z]+\\n | .|\\n /* it's not a keyword */ .fi ここで、再度バックアップをスキャナに組み込んだことに 気を付けなければなりません。 実際 .I 我々は 入力ストリームはレターと改行だけであることを知っていますが、 .I flex はこれが分からないため、 トークン "auto" などをスキャンした次の文字が改行でもレターでもない場合には バックアップが必要であると考えます。 以前は "auto" ルールに適合しそれで終りでしたが、 今は "auto" ルールは無く、"auto\\n" ルールだけがあります。 バックアップの可能性を除去するためには、 最後の改行以外のルールを二重化するか、 そのような入力に出くわさないので分類は不要と分かっているため、 改行を導入しないもう一つの全てを捕まえるルールを導入することが出来ます: .nf %% asm\\n | auto\\n | break\\n | ... etc ... volatile\\n | while\\n /* it's a keyword */ [a-z]+\\n | [a-z]+ | .|\\n /* it's not a keyword */ .fi .B \-Cf を付けてコンパイルすると、実際問題上 .I flex で得られるほぼ最速になります。 .PP 最後の注意事項: .I flex は NUL にマッチする時には遅く、トークンが複数の NUL を含む時には特に遅いです。 テキストがしばしば NUL を含むものと予想される場合には、テキストの .I 短い 部分とマッチするようにルールを書くべきです。 .PP もう一つの性能に関する最終注意事項: 入力のマッチ方法の節で既に示したように、 大きなトークンを納めるために .B yytext のサイズを動的に変更すると処理が遅くなります。 なぜなら、(巨大な)トークンを再度先頭からスキャンしなおさねばならないからです。 性能が重要な場合、 テキストの "大きな" 部分にマッチさせるべきですが "巨大な" 部分にマッチさせる べきではありません。 両者の堺目は 8K 文字/トークンです。 .SH C++ スキャナの生成 .I flex は 2 通りの C++ スキャナ生成方法を提供します。 最初の方法は .I flex が生成したスキャナを単に C コンパイラではなく C++ コンパイラで コンパイルするというものです。 この場合コンパイルエラーには出会わないはずです (見付けた場合には作者の節で後述する電子メールアドレスに報告して下さい)。 この場合ルールにおいて C コードではなく C++ コードを書くことが出来ます。 スキャナのデフォルトの入力元は .I yyin のままであり、 デフォルトのエコー先は .I yyout のままであることに注意して下さい。 どちらも .I FILE * 変数のままであり、C++ .I streams ではないです。 .PP .I flex に C++ スキャナクラスを生成させることも出来ます。 .B \-+ オプションを指定する(もしくは等価的に .B %option c++ を使う)とこのように実行され、 flex の実行形式名が '+' で終っている場合には自動的に指定されます。 このオプションを指定すると flex が生成するスキャナのデフォルトはファイル .B lex.yy.cc となり .B lex.yy.c ではありません。 生成されたスキャナは 2 つの C++ クラスとのインタフェースを定義するヘッダファイル .I FlexLexer.h をインクルードします。 .PP 最初のクラス .B FlexLexer は一般的なスキャナクラスを定義する抽象基盤クラスを提供します。 以下のメンバ関数を提供します: .TP .B const char* YYText() 最後にマッチしたテキストを返します。 .B yytext と等価です。 .TP .B int YYLeng() 最後にマッチしたトークンの長さを返します。 .B yyleng と等価です。 .TP .B int lineno() const 現在の入力の行番号( .B %option yylineno 参照)もしくは .B %option yylineno を使用していない場合には .B 1 を返します。 .TP .B void set_debug( int flag ) スキャナのデバッグフラグをセットします。 .B yy_flex_debug に代入するのと同じです(オプションの節で前述)。 スキャナ構築時に .B %option debug を使用してデバッグ情報を組み込む必要があることに注意して下さい。 .TP .B int debug() const 現在のデバッグフラグの設定を返します。 .PP また次のものと等価なメンバ関数も提供されます .B yy_switch_to_buffer(), .B yy_create_buffer() (最初の引数は .B istream* オブジェクトポインタであり .B FILE* ではありません), .B yy_flush_buffer(), .B yy_delete_buffer(), .B yyrestart() (これもまた最初の引数は .B istream* オブジェクトポインタです)。 .PP 2 番目のクラスは .I FlexLexer.h で定義される .B yyFlexLexer であり、 .B FlexLexer から導出したものです。 以下の追加のメンバ関数を定義します: .TP .B yyFlexLexer( istream* arg_yyin = 0, ostream* arg_yyout = 0 ) 与えられた入出力ストリームを使う .B yyFlexLexer オブジェクトを構築します。 指定しない場合にはそれぞれストリームのデフォルト .B cin と .B cout になります。 .TP .B virtual int yylex() これは .B yylex() が通常の flex スキャナに対して行ったのと同様の役割を担います: ルールのアクションが値を返すまで、 入力ストリームをスキャンし、トークンを消費します。 .B yyFlexLexer からサブクラス .B S を導出し .B yylex() から .B S のメンバ関数および変数をアクセスしたい場合、 .B %option yyclass="S" を指定して .B yyFlexLexer ではなくサブクラスを使用することを .I flex に知らせる必要があります。 この場合 .B yyFlexLexer::yylex() を生成するのではなく、 .I flex は .B S::yylex() (および呼び出されたなら .B yyFlexLexer::LexerError() を呼び出すダミーの .B yyFlexLexer::yylex() も)を生成します。 .TP .B virtual void switch_streams(istream* new_in = 0, .B ostream* new_out = 0) .B yyin を .B new_in (非ニルの場合) に再割当し、 .B yyout を .B new_out (同様)に再割当します。 .B yyin が再割当された場合には以前の入力バッファは消去されます。 .TP .B int yylex( istream* new_in, ostream* new_out = 0 ) まず入力ストリームを .B switch_streams( new_in, new_out ) を使用して切り替え、 .B yylex() の値を返します。 .PP さらに、 .B yyFlexLexer は次のプロテクトされた仮想関数を定義します。 スキャナにあわせてこれらを導出クラスにおいて再定義出来ます: .TP .B virtual int LexerInput( char* buf, int max_size ) 最大 .B max_size 文字を .B buf に読み込み、読めた文字数を返します。 入力の終りを示すには 0 文字を返します。"対話的" スキャナ( .B \-B と .B \-I フラグを参照)はマクロ .B YY_INTERACTIVE を定義することに注意して下さい。 .B LexerInput() を再定義し、 対話的な入力元をスキャンする可能性があるかどうかに依存して 異なるアクションが必要となる場合、 この名前が存在するかどうかのテストは .B #ifdef にて可能です。 .TP .B virtual void LexerOutput( const char* buf, int size ) .B size 文字をバッファ .B buf から書き出します。 スキャナのルールが NUL を含むテキストにマッチ可能な場合、 NUL 終端されているこのバッファは "内部に" NUL を含んでいても構いません。 .TP .B virtual void LexerError( const char* msg ) 致命的なエラーメッセージを報告します。 デフォルトのこの関数はメッセージをストリーム .B cerr に書き、終了します。 .PP .B yyFlexLexer オブジェクトは .I 全ての スキャン時の状態を含むことに注意して下さい。 それゆえこの様なオブジェクトをリエントラントなスキャナとして使用できます。 同一の .B yyFlexLexer クラスの複数のインスタンスを具体化可能であり、 複数の C++ スキャナクラスを組み合わせ上記 .B \-P オプションを使用することで同一のプログラムで使用可能です。 .PP 最後に .B %array 機能は C++ スキャナクラスでは使用できないことに注意して下さい; .B %pointer を使用しなければなりません(デフォルト)。 .PP 単純な C++ スキャナの例を以下に示します: .nf // An example of using the flex C++ scanner class. %{ int mylineno = 0; %} string \\"[^\\n"]+\\" ws [ \\t]+ alpha [A-Za-z] dig [0-9] name ({alpha}|{dig}|\\$)({alpha}|{dig}|[_.\\-/$])* num1 [-+]?{dig}+\\.?([eE][-+]?{dig}+)? num2 [-+]?{dig}*\\.{dig}+([eE][-+]?{dig}+)? number {num1}|{num2} %% {ws} /* skip blanks and tabs */ "/*" { int c; while((c = yyinput()) != 0) { if(c == '\\n') ++mylineno; else if(c == '*') { if((c = yyinput()) == '/') break; else unput(c); } } } {number} cout << "number " << YYText() << '\\n'; \\n mylineno++; {name} cout << "name " << YYText() << '\\n'; {string} cout << "string " << YYText() << '\\n'; %% int main( int /* argc */, char** /* argv */ ) { FlexLexer* lexer = new yyFlexLexer; while(lexer->yylex() != 0) ; return 0; } .fi 複数の(異なった)字句解析クラスを生成したい場合、 .B \-P フラグ (もしくは .B prefix= オプション) を使用して各 .B yyFlexLexer を .B xxFlexLexer 等の別の名前にします。 次に字句解析クラスのソースごとに .B をインクルードします。 以下のように .B yyFlexLexer をリネームします: .nf #undef yyFlexLexer #define yyFlexLexer xxFlexLexer #include #undef yyFlexLexer #define yyFlexLexer zzFlexLexer #include .fi これはあるスキャナに対し .B %option prefix="xx" を使用しもう一方に対し .B %option prefix="zz" を使用した場合です。 .PP 重要: 現在のスキャンクラスの形式は .I 実験的 であり、メジャーリリースが変わると大きく変更される可能性があります。 .SH LEX および POSIX との非互換性 .I flex は AT&T Unix の .I lex ツールのリライトですが(2 つの実装はいかなるコードも共有しません)、 いくばくかの拡張と非互換性を持っており、 どちらの実装でも受理可能なスキャナを書きたい方は これを意識しなければなりません。 flex は POSIX .I lex 仕様に完全合致しますが、例外は .B %pointer (デフォルト)使用と .B unput() 呼び出しにより .B yytext の内容を破壊することであり、これは POSIX 仕様に反します。 .PP この節では、 flex と AT&T lex と POSIX 仕様との間の全ての既知の非互換性を扱います。 .PP .I flex の .B \-l オプションはオリジナルの AT&T .I lex 実装との最大の互換性を有効にしますが、 生成されたスキャナの性能は大きく低下します。 .B \-l オプションを使用しても発生しうる非互換性は後で述べます。 .PP .I flex は以下の例外を除き .I lex と完全互換です: .IP - ドキュメントに記載されていない .I lex スキャナ内部の変数 .B yylineno は .B \-l もしくは .B %option yylineno を使用しないとサポートされません。 .IP .B yylineno はスキャナ毎(単一のグローバル変数)ではなく、バッファ毎に管理されるべきです。 .IP .B yylineno は POSIX 仕様ではありません。 .IP - .B input() ルーチンは再定義できませんが、 ルールにマッチしたものに後続する文字を読むために呼ばれえます。 .B input() がファイルの終りに到達すると、通常の .B yywrap() 処理は終了します。``実際の'' ファイルの終りは .I EOF として返されます。 .IP 実際には入力は .B YY_INPUT マクロを定義することにより制御されます。 .IP .B input() を再定義できないという .I flex の制限は、最初に .I yyin を設定する以外のスキャナ入力制御方法を単に規定していないという、 POSIX 仕様と合致します。 .IP - .B unput() ルーチンは再定義できません。この制限は POSIX に合致しています。 .IP - .I flex スキャナは .I lex スキャナとは異なりリエントラントではありません。 実際、対話的なスキャナにおいて、 割り込みハンドラにてロングジャンプを用いてスキャナから脱出し、 その後スキャナを再度呼び出す場合、以下のメッセージを得るでしょう: .nf fatal flex scanner internal error--end of buffer missed .fi スキャナに再度入るためには、まず以下のようにして下さい .nf yyrestart( yyin ); .fi この呼び出しにより入力バッファは捨てられることに注意して下さい; 通常これは対話的スキャナでは問題ではありません。 .IP また、C++ スキャナクラスはリエントラント .I です ので、C++ を使用できるのなら、C++ を使用すべきです。 前述の "C++ スキャナの生成" を参照して下さい。 .IP - .B output() はサポートされていません。 .B ECHO マクロからの出力はファイルポインタ .I yyout (デフォルトでは .I 標準出力 )に対して行われます。 .IP .B output() は POSIX 仕様にはありません。 .IP - .I lex は排他的開始条件 (%x) をサポートしませんが、これは POSIX 仕様にあります。 .IP - 定義を展開する時、 .I flex では括弧で括ります。 lex では以下は: .nf NAME [A-Z][A-Z0-9]* %% foo{NAME}? printf( "Found it\\n" ); %% .fi 文字列 "foo" にはマッチしません。 なぜなら展開されたマクロはルール "foo[A-Z][A-Z0-9]*?" と等価になり、 優先度にて `?' は "[A-Z0-9]*" と結び付きます。 .I flex ではルールが展開されると "foo([A-Z][A-Z0-9]*)?" となり、 文字列 "foo" がマッチします。 .IP .B ^ で始まるか .B $ で終る定義は、展開時に括弧で括らず、 これらのオペレータが定義において特別な意味を失わないようにすることに 注意して下さい。 しかし .B , /, .B <> オペレータは .I flex の定義では使用できません。 .IP .B \-l を使用すると、 .I lex の振舞いと同じく定義を括弧で括りません。 .IP POSIX 仕様では、定義を括弧で括ります。 .IP - .I lex の実装によっては、 ルールのパターンの右側に空白がある場合、 ルールのアクションを別の行から始めることを許します: .nf %% foo|bar { foobar_action(); } .fi .I flex はこの機能をサポートしません。 .IP - .I lex の .B %r (Ratfor スキャナの生成)オプションはサポートされていません。 これは POSIX 仕様には含まれません。 .IP - スキャナを .B %array を使用して構築したのではない限り、 .B unput() 呼び出し後には、次のトークンにマッチするまで .I yytext は未定義です。 これは .I lex にも POSIX 仕様にも当てはまりません。 .B \-l オプションを指定するとこの非互換性を取り除きます。 .IP - .B {} (数値範囲)オペレータの優先度が異なります。 .I lex は "abc{1,3}" を "1 度か 2 度か 3 度の 'abc' にマッチ" と解釈しますが、 .I flex は "'ab' に 1 度か 2 度か 3 度の 'c' が続くものにマッチ" と解釈します。 後者が POSIX 仕様に合致します。 .IP - .B ^ オペレータの優先度が異なります。 .I lex は "^foo|bar" を "行頭の 'foo' か任意位置の 'bar' にマッチ" と解釈しますが、 .I flex は "行頭の 'foo' か 'bar' にマッチ" と解釈します。 後者が POSIX 仕様に合致します。 .IP - .I lex でサポートされている .B %a 等の特別なテーブルサイズの宣言は .I flex スキャナでは不要です; .I flex はこれらを無視します。 .IP - .I flex と .I lex のどちらでもスキャナを使用可能に書けるように、 .bd .B FLEX_SCANNER という名前を定義します。 スキャナを生成した .I flex のバージョンを表す .B YY_FLEX_MAJOR_VERSION と .B YY_FLEX_MINOR_VERSION を、スキャナは含みます (例えば 2.5 リリースではこれらはそれぞれ 2 と 5 になります)。 .PP 以下の .I flex の機能は .I lex および POSIX 仕様には含まれません: .nf C++ スキャナ %option 開始条件スコープ 開始条件スタック 対話的/非対話的スキャナ yy_scan_string() 等 yyterminate() yy_set_interactive() yy_set_bol() YY_AT_BOL() <> <*> YY_DECL YY_START YY_USER_ACTION YY_USER_INIT #line ディレクティブ アクションの周りの %{} 単一行における複数のアクション .fi さらにほぼ全ての flex フラグです。 リストの最後の機能の意味は、 .I flex では複数のアクションをセミコロンで区切って同一行に記述可能ですが、 .I lex では次の .nf foo handle_foo(); ++num_foos_seen; .fi は (驚くべきことに) 次のように切り詰められるということです。 .nf foo handle_foo(); .fi .I flex はアクションを切り詰めません。 ブレースで括られないアクションは単純に行末で終了します。 .SH 診断 .I warning, rule cannot be matched 常に同じテキストにマッチするルールが前にあるので、 与えられたルールがマッチしません。 例えば以下の "foo" は "全てを捕まえる" ルールの後ろにありますので 決してマッチしません: .nf [a-z]+ got_identifier(); foo got_foo(); .fi スキャナ中で .B REJECT を使用するとこの警告を抑制します。 .PP .I warning, .B \-s .I option given but default rule can be matched (おそらくある特定の開始条件のもとでは) デフォルトルール (任意の一文字にマッチする) しか特定の入力に 対してはマッチしないことがあります。 .B \-s を指定しているので、おそらくそうなりません。 .PP .I reject_used_but_not_detected undefined あるいは .I yymore_used_but_not_detected undefined - これらのエラーは コンパイル時に起きます。スキャナが .B REJECT もしくは .B yymore() を使っていますが .I flex がそのことに気づかなかったということです。 つまり、 .I flex は最初の 2 つの部分を探しても これらのアクションの出現を見つけられなかったのですが、 実際には何らかの方法 (例えば #include ファイルを介して)でこれらが記述されていた、ということです。 .B %option reject か .B %option yymore を使用して、flex にこれらの機能を実際に使用していることを教えて下さい。 .PP .I flex scanner jammed - .B \-s でコンパイルされたスキャナが、どのルールにもマッチしない 入力文字列に遭遇しました。 内部的な問題に起因してこのエラーが起こることもあります。 .PP .I token too large, exceeds YYLMAX - スキャナが .B %array を使っている場合に、あるルールが定数 .B YYLMAX (デフォルトで 8K バイト) より大きな文字列とマッチしました。 .I flex の入力ファイルの定義部で .B YYLMAX を #define することで値を大きくできます。 .PP .I scanner requires \-8 flag to .I use the character 'x' - スキャナの記述に 8 ビットの文字 .I 'x' を識別する部分があり、 .B \-Cf もしくは .B \-CF のテーブル圧縮オプションのためにデフォルトの 7 ビットになっている にもかかわらず、 \-8 オプションをつけていないということです。 詳細は .B \-7 フラグのオプションの議論を参照して下さい。 .PP .I flex scanner push-back overflow - .B unput() でテキストを戻しすぎたため、スキャナのバッファは 戻したテキストと現トークンを .B yytext に保てません。 この場合、理想的にはスキャナが動的にバッファの大きさを変えるべきですが、 現在のところそうなってはいません。 .PP .I input buffer overflow, can't enlarge buffer because scanner uses REJECT - スキャナは非常に大きなトークンのマッチを調べていて、入力バッファを 拡張する必要が起きました。しかしながら、バッファの拡張は .B REJECT を使うスキャナでは働きません。 .PP .I fatal flex scanner internal error--end of buffer missed - スキャナが使用しているフレームから(を越えて)ロングジャンプした後、 再度スキャナに入った場合に起こります。 再度スキャナに入る前に: .nf yyrestart( yyin ); .fi を使うか、前述のように C++ スキャナクラスを使用するようにして下さい。 .PP .I too many start conditions in <> construct! - 存在するより多くの開始条件を <> 中に記載しました (少なくとも一つを二度記載しました)。 .SH 関連ファイル .TP .B \-ll スキャナがリンクしなければならないライブラリ。 .TP .I lex.yy.c 生成されたスキャナ(システムによっては .I lexyy.c という名前になります)。 .TP .I lex.yy.cc .B -+ を使った時に作成された C++ スキャナクラス。 .TP .I C++ スキャナベースクラス .B FlexLexer とその導出クラス .B yyFlexLexer を定義するヘッダファイル。 .TP .I flex.skl スケルトンスキャナ。 このファイルは flex の実行時ではなく、flex を構築する時のみ利用されます。 .TP .I lex.backup .B \-b フラグ用のバックアップ情報(システムによっては .I lex.bck という名前になります)。 .SH 欠陥 / バグ 右文脈(trailing context)パターンの中には、正しくマッチせず 警告メッセージ ("dangerous trailing context") を出すものがあります。 これらのパターンは、 ルールの最初の部分が 2番目の頭の部分とマッチするようなものです。 例えば "zx*/xy*" の場合、'x*' は右文脈の頭の 'x' とマッチします。 (POSIX ドラフトではそのようなパターンにマッチするテキストは 未定義であると述べていることに注意して下さい。) .PP 右文脈の中には、実際には固定長であるのにそうとは解釈されないものがあり、 上に述べた性能の低下が起こります。 特に、 '|' や {n} (例えば "foo{3}") は常に可変長であると解釈されます。 .PP 右文脈と特別なアクション '|' を組み合わせると .I 固定の 右文脈がよりコストのかかる .I 可変の 右文脈となります。例えば、次のようなものです: .nf %% abc | xyz/def .fi .PP .B %array もしくは .B \-l オプションを指定しない場合、 .B unput() を使うと yytext と yyleng を破壊します。 .PP NUL のパターンマッチングは他の文字の比較よりかなり遅くなっています。 .PP 入力バッファの動的な大きさの再調整は時間がかかります。これは現トークン (一般に巨大)までのマッチした全テキストの再スキャンを伴うためです。 .PP 入力のバッファリングと先読みのため、 ルーチンと 混合して使うことが出来ません。例えば、 .B getchar() と .I flex のルールはうまく行きません。代わりに .B input() を使って下さい。 .PP .B \-v オプションで表示される全テーブルエントリには、 どのルールがマッチしたのかを決定するのに必要なテーブルエントリ数が 含まれていません。エントリの数はスキャナが .B REJECT を使っていないときには DFA 状態数に等しく、 使っているときには DFA 状態数よりいくらか大きくなります。 .PP .B REJECT がオプション .B \-f もしくは .B \-F とともに使えません。 .PP .I flex の内部アルゴリズムについてのドキュメントが必要です。 .SH 関連項目 lex(1), yacc(1), sed(1), awk(1) .PP John Levine, Tony Mason, and Doug Brown, .I Lex & Yacc, O'Reilly and Associates. 第 2 版を入手すること。 .PP M. E. Lesk and E. Schmidt, .I LEX \- Lexical Analyzer Generator .PP Alfred Aho, Ravi Sethi and Jeffrey Ullman, .I Compilers: Principles, Techniques and Tools, Addison-Wesley (1986). .I flex で使用しているパターンマッチング技法を解説している(決定性オートマトン)。 .SH 作者 Vern Paxson が多くのアイディアとインスピレーションを得る助けを Van Jacobson から受けました。 オリジナルバージョンは Jef Poskanzer が作成しました。 高速テーブル表現は Van Jacobson のデザインの部分実装です。 この実装は Kevin Gong と Vern Paxson が行いました。 .PP 多くの .I flex ベータテスタ、フィードバッカ、コントリビュータ、特に Francois Pinard, Casey Leedom, Robert Abramovitz, Stan Adermann, Terry Allen, David Barker-Plummer, John Basrai, Neal Becker, Nelson H.F. Beebe, benson@odi.com, Karl Berry, Peter A. Bigot, Simon Blanchard, Keith Bostic, Frederic Brehm, Ian Brockbank, Kin Cho, Nick Christopher, Brian Clapper, J.T. Conklin, Jason Coughlin, Bill Cox, Nick Cropper, Dave Curtis, Scott David Daniels, Chris G. Demetriou, Theo Deraadt, Mike Donahue, Chuck Doucette, Tom Epperly, Leo Eskin, Chris Faylor, Chris Flatters, Jon Forrest, Jeffrey Friedl, Joe Gayda, Kaveh R. Ghazi, Wolfgang Glunz, Eric Goldman, Christopher M. Gould, Ulrich Grepel, Peer Griebel, Jan Hajic, Charles Hemphill, NORO Hideo, Jarkko Hietaniemi, Scott Hofmann, Jeff Honig, Dana Hudes, Eric Hughes, John Interrante, Ceriel Jacobs, Michal Jaegermann, Sakari Jalovaara, Jeffrey R. Jones, Henry Juengst, Klaus Kaempf, Jonathan I. Kamens, Terrence O Kane, Amir Katz, ken@ken.hilco.com, Kevin B. Kenny, Steve Kirsch, Winfried Koenig, Marq Kole, Ronald Lamprecht, Greg Lee, Rohan Lenard, Craig Leres, John Levine, Steve Liddle, David Loffredo, Mike Long, Mohamed el Lozy, Brian Madsen, Malte, Joe Marshall, Bengt Martensson, Chris Metcalf, Luke Mewburn, Jim Meyering, R. Alexander Milowski, Erik Naggum, G.T. Nicol, Landon Noll, James Nordby, Marc Nozell, Richard Ohnemus, Karsten Pahnke, Sven Panne, Roland Pesch, Walter Pelissero, Gaumond Pierre, Esmond Pitt, Jef Poskanzer, Joe Rahmeh, Jarmo Raiha, Frederic Raimbault, Pat Rankin, Rick Richardson, Kevin Rodgers, Kai Uwe Rommel, Jim Roskind, Alberto Santini, Andreas Scherer, Darrell Schiebel, Raf Schietekat, Doug Schmidt, Philippe Schnoebelen, Andreas Schwab, Larry Schwimmer, Alex Siegel, Eckehard Stolz, Jan-Erik Strvmquist, Mike Stump, Paul Stuart, Dave Tallman, Ian Lance Taylor, Chris Thewalt, Richard M. Timoney, Jodi Tsai, Paul Tuinenga, Gary Weik, Frank Whaley, Gerhard Wilhelms, Kent Williams, Ken Yap, Ron Zellar, Nathan Zelle, David Zuhn, および私の最低のメールアーカイブ能力から滑り落ちた方々、 それらの方々の協力にも同様に感謝します。 .PP Keith Bostic, Jon Forrest, Noah Friedman, John Gilmore, Craig Leres, John Levine, Bob Mulcahy, G.T. Nicol, Francois Pinard, Rich Salz, Richard Stallman には多くの悩みの分散に関して感謝します。 .PP Esmond Pitt と Earle Horton には 8 ビット文字サポートに関して; Benson Margulies と Fred Burke には C++ サポートに関して; Kent Williams と Tom Epperly には C++ クラスサポートに関して; Ove Ewerlid には NUL のサポートに関して; Eric Hughes には複数バッファのサポートに関して、それぞれ感謝します。 .PP この作品は当初、私が CA Berkeley の Lawrence Berkeley Laboratory における Real Time Systems Group にいた時に作成されました。 私に協力してくれた方々に感謝します。 .PP コメントは vern@ee.lbl.gov に送って下さい。 diff --git a/ja_JP.eucJP/man/man1/passwd.1 b/ja_JP.eucJP/man/man1/passwd.1 index 823db7989e..3451583afc 100644 --- a/ja_JP.eucJP/man/man1/passwd.1 +++ b/ja_JP.eucJP/man/man1/passwd.1 @@ -1,235 +1,235 @@ .\" Copyright (c) 1990, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)passwd.1 8.1 (Berkeley) 6/6/93 .\" %FreeBSD: src/usr.bin/passwd/passwd.1,v 1.25 2002/10/16 15:32:16 charnier Exp % .\" .\" $FreeBSD$ .Dd June 6, 1993 .Dt PASSWD 1 .Os .Sh 名称 .Nm passwd , yppasswd .Nd ユーザのパスワードを変更する .Sh 書式 .Nm .Op Fl l .Op Ar user .Nm yppasswd .Op Fl l .Op Fl y .Op Fl d Ar domain .Op Fl h Ar host .Op Fl o .Sh 解説 .Nm ユーティリティは、ユーザの local, Kerberos, NIS パスワードを変更します。 ユーザがスーパユーザでない場合、 .Nm は最初に現在のパスワードを求め、 正しいパスワードが入力されない場合には処理を停止します。 .Pp 新規パスワード入力時、パスワードは表示されません。 通りがかりの人にパスワードを見られることを避けるためです。 .Nm ユーティリティは、タイプミスを検出するため、2 度新規パスワード入力を求めます。 .Pp 新しいパスワードは、少なくとも 6 文字以上 (ユーザのログインクラスに対する .Xr login.conf 5 の .Dq minpasswordlen 設定が優先します) で、アルファベットだけにならな いようにすべきです。パスワードの最大文字数は、 .Dv _PASSWORD_LEN (現在は 128 文字) より短いことが必要です。 .Pp 新規パスワードは大文字と小文字を混合して含む必要があります (ユーザのログインクラスに対して .Xr login.conf 5 の .Dq mixpasswordcase の設定を使用することで、上書き可能です)。 小文字だけのパスワードのみ許可可能な場合に、 小文字パスワードを許すと有用でしょう。 例えば Windows クライアントを認証するために Samba を使用する場合が、 該当します。 他のすべての場合、数字、大文字、メタ文字が推奨されます。 .Pp 新しいパスワードが確認されたら .Nm は新しいパスワードを Kerberos 認証ホストに伝えます。 .Pp 次のオプションを使用可能です: .Bl -tag -width indent .It Fl l Kerberosデータベースではなく、 ローカルマシンのパスワードだけを変更します。 ローカルマシンのパスワードだけを変更する場合は、 .Xr pwd_mkdb 8 がパスワードデータベースの更新に使われます。 .El ローカルまたは NIS パスワードを変更する場合、 ユーザのログインクラスの .Dq passwordtime ケーパビリティに基づき、 次にパスワードを変更すべき日付が設定されます。 .Pp 別のユーザの Kerberos パスワードを変更するには、 .Xr kinit 1 を実行してから、 .Xr passwd 1 を実行する必要があります。 スーパユーザがローカルマシンのパスワードを修正するときにかぎり、現在の パスワードの入力は不要です。 .Sh NIS との相互作用 .Nm ユーティリティは NIS のサポートが組み込まれています。 もしユーザ名が NIS のパスワードデータベースの中にあり、 ローカルにはない場合、 .Nm は自動的に .Dq yppasswd に切り替わります。 指定されたユーザ名がローカルのパスワードデータベースにも、 NIS のパスワードマップにも存在しない場合、 .Nm はエラーを返します。 .Pp NIS のパスワードを変更するとき、非特権ユーザは 確認のために現在のパスワードの入力を求められます ( .Xr rpc.yppasswdd 8 デーモンはいかなる変更でも NIS パスワードマップに加える前に 現在のパスワードの入力を求めます)。 この制限はスーパユーザにも適用されますが、大きな例外があります。 NIS マスタサーバのスーパユーザはパスワードの確認が省略されるの です。 したがって、NIS マスタサーバのスーパユーザは、すべてのユーザの NIS パスワードを無制限に変更できます。 しかし、NIS クライアントや NIS スレーブサーバのスーパユーザは 変更にパスワードが必要です。 .Pp 以下のオプションは NIS のためのものです: .Bl -tag -width indent .It Fl y .Nm は強制的に NIS 用になります。 .It Fl l NIS が有効な場合に .Nm を強制的にローカル用にします。 このフラグは同じログイン名で NIS のユーザと ローカルなユーザが存在するときに、 .Dq ローカルユーザの パスワードエントリを変更するために使われます。 例えば、システム用の .Pa bin や .Pa daemon といった .Dq 場所取り エントリは NIS パスワードマップとローカルユーザデータベース の両方に存在することが、よくあります。 この場合デフォルトでは .Nm は NIS のパスワードを変更しようとします。 NIS ではなくローカルのパスワードを変更するとき .Fl l を使います。 .It Fl d Ar domain NIS パスワードを変更するとき、ドメイン名を指定します。デフォルトで .Nm は、システムのデフォルトドメイン名を使います。このフラグは主に NIS マスタサーバのスーパユーザが使用するものです。一つの NIS マスタサーバが複数のドメインを扱っている場合や、NIS マスタサーバでは ドメイン名が設定されていない (NIS サーバは必ずしもクライアントになる 必要はありません) 場合に、 .Nm コマンドがどのドメインを扱うのかを指定する必要があります。 .It Fl h Ar host NIS サーバの名前を指定します。このオプションを .Fl d オプションと共に用いることで、非ローカルな NIS サーバ上の NIS パスワードを変えることが出来ます。 .Fl d オプションでドメイン名を指定し、 NIS マスタサーバの名前が決定できな い (おそらく、ローカルのドメイン名が設定されていないため) ときには、 NIS マスタサーバは、 .Dq localhost であると仮定されます。 このサーバ名を .Fl h で指定することが出来ます。指定するホスト名は NIS マスタサーバ -でなくても構いません。 NIS マスタサーバー名はドメイン内の +でなくても構いません。 NIS マスタサーバ名はドメイン内の NIS (マスタもしくはスレーブ) サーバに問い合わせることで決定される ので、スレーブサーバを指定しても構いません。 .It Fl o NIS マスタサーバにおいて、スーパユーザの確認を省略しません。 \'old' モードにします。このフラグはあまり実用的ではありませんが、 パスワードのテストに使うことが出来ます。 .El .Sh 関連ファイル .Bl -tag -width /etc/master.passwd -compact .It Pa /etc/master.passwd パスワードのマスタファイル .It Pa /etc/passwd Version 7 形式のパスワードファイル .It Pa /etc/passwd.XXXXXX パスワード変更時に作られるテンポラリファイル .It Pa /etc/login.conf ログインクラスケーパビリティデータベース .It Pa /etc/auth.conf 認証サービスの設定 .El .Sh 関連項目 .Xr chpass 1 , .Xr kerberos 1 , .Xr kinit 1 , .Xr login 1 , .Xr login.conf 5 , .Xr passwd 5 , .Xr kpasswdd 8 , .Xr pwd_mkdb 8 , .Xr vipw 8 .Rs .%A Robert Morris .%A Ken Thompson .%T "UNIX password security" .Re .Sh 注 .Xr yppasswd 1 は実際には .Nm へのリンクです。 .Sh 歴史 .Nm passwd コマンドは .At v6 から登場しました。 diff --git a/ja_JP.eucJP/man/man1/strip.1 b/ja_JP.eucJP/man/man1/strip.1 index bb6a5acb22..16099a7f28 100644 --- a/ja_JP.eucJP/man/man1/strip.1 +++ b/ja_JP.eucJP/man/man1/strip.1 @@ -1,301 +1,301 @@ .\" $FreeBSD$ .\" Automatically generated by Pod::Man v1.3, Pod::Parser v1.13 .\" .\" Standard preamble: .\" ======================================================================== .de Sh \" Subsection heading .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' .\" expand to `' in nroff, nothing in troff, for use with C<>. .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .\" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .hy 0 .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "STRIP 1" .TH STRIP 1 "2002-08-05" "binutils-2.12.91" "GNU Development Tools" .UC .SH 名称 strip \- オブジェクトファイルからシンボルの削除 .SH 書式 .IX Header "SYNOPSIS" strip [\fB\-F\fR \fIbfdname\fR |\fB\-\-target=\fR\fIbfdname\fR ] [\fB\-I\fR \fIbfdname\fR |\fB\-\-input\-target=\fR\fIbfdname\fR ] [\fB\-O\fR \fIbfdname\fR |\fB\-\-output\-target=\fR\fIbfdname\fR ] [\fB\-s\fR|\fB\-\-strip\-all\fR] [\fB\-S\fR|\fB\-g\fR|\fB\-d\fR|\fB\-\-strip\-debug\fR] [\fB\-K\fR \fIsymbolname\fR |\fB\-\-keep\-symbol=\fR\fIsymbolname\fR ] [\fB\-N\fR \fIsymbolname\fR |\fB\-\-strip\-symbol=\fR\fIsymbolname\fR ] [\fB\-x\fR|\fB\-\-discard\-all\fR ] [\fB\-X\fR |\fB\-\-discard\-locals\fR] [\fB\-R\fR \fIsectionname\fR |\fB\-\-remove\-section=\fR\fIsectionname\fR ] [\fB\-o\fR \fIfile\fR ] [\fB\-p\fR|\fB\-\-preserve\-dates\fR] [\fB\-v\fR |\fB\-\-verbose\fR] [\fB\-V\fR|\fB\-\-version\fR] [\fB\-\-help\fR] \fIobjfile\fR... .SH 解説 .IX Header "DESCRIPTION" \s-1GNU\s0 \fBstrip\fR はオブジェクトファイル \fIobjfile\fR からシンボルをすべて削除します。 オブジェクトファイルのリストにアーカイブが含まれていても構いません。 少なくともひとつのオブジェクトファイルが必要です。 .PP \fBstrip\fR は変更されたコピーを別名で作成せず、 -引き数で指定したファイルそのものを変更します。 +引数で指定したファイルそのものを変更します。 .SH オプション .IX Header "OPTIONS" .IP "\fB\-F\fR \fIbfdname\fR" 4 .IX Item "-F bfdname" .PD 0 .IP "\fB\-\-target=\fR\fIbfdname\fR" 4 .IX Item "--target=bfdname" .PD オリジナルの \fTobjfile\fR を \fIbfdname\fR オブジェクトコード形式のファイルとして扱い、 それと同じ形式で上書きします。 .IP "\fB\-\-help\fR" 4 .IX Item "--help" \fBstrip\fR のオプションの一覧を表示して終了します。 .IP "\fB\-I\fR \fIbfdname\fR\fB \fR" 4 .IX Item "-I bfdname " .PD 0 .IP "\fB\-\-input\-target=\fR\fIbfdname\fR" 4 .IX Item "--input-target=bfdname" .PD オリジナルの \fIobjfile\fR を \fIbfdname\fR オブジェクトコード形式のファイルとして扱います。 .IP "\fB\-O\fR \fIbfdname\fR" 4 .IX Item "-O bfdname" .PD 0 .IP "\fB\-\-output\-target=\fR\fIbfdname\fR" 4 .IX Item "--output-target=bfdname" .PD \fIobjfile\fR を \fIbfdname\fR 出力形式のファイルに置き換えます。 .IP "\fB\-R\fR \fIsectionname\fR" 4 .IX Item "-R sectionname" .PD 0 .IP "\fB\-\-remove\-section=\fR\fIsectionname\fR" 4 .IX Item "--remove-section=sectionname" .PD 出力ファイルから \fIsectionname\fR という名前のセクションを削除します。 このオプションは 1 回以上使うことができます。 このオプションを不適切に使用すると、オブジェクトファイルが 使用できなくなるかもしれないことに注意してください。 .IP "\fB\-s\fR" 4 .IX Item "-s" .PD 0 .IP "\fB\-\-strip\-all\fR" 4 .IX Item "--strip-all" .PD すべてのシンボルを削除します。 .IP "\fB\-g\fR" 4 .IX Item "-g" .PD 0 .IP "\fB\-S\fR" 4 .IX Item "-S" .IP "\fB\-d\fR" 4 .IX Item "-d" .IP "\fB\-\-strip\-debug\fR" 4 .IX Item "--strip-debug" .PD デバッギングシンボルだけを削除します。 .IP "\fB\-\-strip\-unneeded\fR" 4 .IX Item "--strip-unneeded" 再配置処理に不必要なシンボルをすべて削除します。 .IP "\fB\-K\fR \fIsymbolname\fR" 4 .IX Item "-K symbolname" .PD 0 .IP "\fB\-\-keep\-symbol=\fR\fIsymbolname\fR" 4 .IX Item "--keep-symbol=symbolname" .PD 元ファイルのシンボル \fIsymbolname\fR だけを保持します。 このオプションは 1 回以上使うことができます。 .IP "\fB\-N\fR \fIsymbolname\fR" 4 .IX Item "-N symbolname" .PD 0 .IP "\fB\-\-strip\-symbol=\fR\fIsymbolname\fR" 4 .IX Item "--strip-symbol=symbolname" .PD 元ファイルからシンボル \fIsymbolname\fR を削除します。このオプション は 1 回以上使うことができ、また \fB\-K\fR 以外の strip のオプションと併用することができます。 .IP "\fB\-o\fR \fIfile\fR" 4 .IX Item "-o file" 存在するファイルを置き換える代わりに、 strip された出力を \fIfile\fR に出します。 -この引き数を使用する時には、\fIobjfile\fR 引き数は 1 つしか指定できません。 +この引数を使用する時には、\fIobjfile\fR 引数は 1 つしか指定できません。 .IP "\fB\-p\fR" 4 .IX Item "-p" .PD 0 .IP "\fB\-\-preserve\-dates\fR" 4 .IX Item "--preserve-dates" .PD ファイルのアクセス時刻と更新時刻を保存します。 .IP "\fB\-x\fR" 4 .IX Item "-x" .PD 0 .IP "\fB\-\-discard\-all\fR" 4 .IX Item "--discard-all" .PD グローバルでないシンボルを削除します。 .IP "\fB\-X\fR" 4 .IX Item "-X" .PD 0 .IP "\fB\-\-discard\-locals\fR" 4 .IX Item "--discard-locals" .PD コンパイラによって生成されたローカルシンボル (これは通常 \fBL\fR か \fB.\fR で始まります。) を削除します。 .IP "\fB\-V\fR" 4 .IX Item "-V" .PD 0 .IP "\fB\-\-version\fR" 4 .IX Item "--version" .PD \fBstrip\fR のバージョンを表示して終了します。 .IP "\fB\-v\fR" 4 .IX Item "-v" .PD 0 .IP "\fB\-\-verbose\fR" 4 .IX Item "--verbose" .PD 冗長な出力: 変更されたすべてのオブジェクトファイルを列挙します。 アーカイブの場合、 \fBstrip \-v\fR はアーカイブのすべてのメンバを列挙します。 .SH 関連項目 .IX Header "SEE ALSO" Info の \fIbinutils\fR エントリ。 .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002 Free Software Foundation, Inc. .PP Permission is granted to copy, distribute and/or modify this document under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R". .\" .SH 履歴 .\" 河原大輔 1998/11/07 FreeBSD 用に翻訳 .\" 堀川和雄 2001/08/04 binutil 2.11.2 用に修正 .\" 堀川和雄 2002/12/29 binutil 2.12.91 用に修正 diff --git a/ja_JP.eucJP/man/man1/tar.1 b/ja_JP.eucJP/man/man1/tar.1 index b32139aec6..dd06c3dc75 100644 --- a/ja_JP.eucJP/man/man1/tar.1 +++ b/ja_JP.eucJP/man/man1/tar.1 @@ -1,597 +1,597 @@ .\" Copyright (c) 1991, 1992, 1993 Free Software Foundation -*- nroff -*- .\" See /usr/src/gnu/COPYING for conditions of redistribution .\" .\" Written by John F. Woods .\" Updated by Robert Eckardt .\" .\" %FreeBSD: src/gnu/usr.bin/tar/tar.1,v 1.43 2002/12/12 17:25:52 ru Exp % .\" .\" $FreeBSD$ .Dd December 23, 2000 .Os .Dt TAR 1 .Sh 名称 .Nm tar .Nd "テープアーカイバ; ""tar"" アーカイブファイルの操作" .Sh 書式 .Nm .Op Oo Fl Oc Ns Ar bundled-options Ar Args .Op Ar gnu-style-flags .Op Ar filenames | Fl C Ar directory-name .Ar ... .Sh 解説 .Nm は、歴史的な理由により .Dq tape archiver を省略して名付けられました。 .Nm プログラムは、 .Ar tarfile と呼ばれる .Nm フォーマットのアーカイブファイルを作成し、アーカイブにファイルを追加したり、 またアーカイブからファイルを抽出したりします。 .Ar tarfile は通常磁気テープを指しますが、フロッピディスケットや 通常のファイルでも構いません。 .Pp 通常、 .Nm コマンドラインの最初の引数は、機能文字および機能変更文字からなる単語であり、 その前に ダッシュ (-) を付けても付けなくてもいいようになっています。 単語には、次の機能文字のうち丁度 1 つを含んでいる必要があります: .Cm A , .Cm c , .Cm d , .Cm r , .Cm t , .Cm u , .Cm x , これらはそれぞれ、 .Em 追加 (append) 、 .Em 作成 (create) 、 .Em 差分 (difference) 、 .Em 置換 (replace) 、 .Em リスト表示 (table of contents) 、 .Em 更新 (update) 、 .Em 抽出 (extract) を意味しています (下記に詳細があります)。 これらの他に、以下に詳細を述べる機能変更文字を、コマンド単語に 含めることができます。それらのいくつかは、コマンド単語内と同じ順で コマンドライン引数を要求します ( .Sx 使用例 の節を参照)。 機能文字と機能変更文字は、GNU 形式の引数で指定することもできます (2 つのダッシュを最初に付け、1 つのコマンド単語ごとに機能文字か 機能変更文字を 1 つだけ指定する)。 アーカイブへの追加、アーカイブからの抽出、そしてリスト表示のために コマンドライン指定するファイル名には、 シェルのパターンマッチ文字列を使用することができます。 .Sh 機能 以下の機能のいずれか 1 つだけを必ず指定する必要があります。 .Pp .Bl -tag -width "--concatenate" -compact .It Fl A .It Fl -catenate .It Fl "-concatenate" 指定された ( .Nm アーカイブ形式の) ファイルを tar アーカイブの末尾 に追加します (追加する前の古い end-of-archive ブロックは削除さ れます)。 これは、指定されたファイルがアーカイブの中の 1 ファイルとなるので はなく、指定したファイルの中に含まれているファイルを、最初に指定 したアーカイブに追加するという効果を持ちます。 .Em 注 : このオプションは .Ar tarfile を再書き込みする必要があるため、1/4 インチカートリッジテープでは動作しません。 .It Fl c .It Fl -create 新しいアーカイブを作成して (もしくは古い内容を切り捨てて)、指定 されたファイルをアーカイブに書き込みます。 .It Fl d .It Fl -diff .It Fl -compare アーカイブの中のファイルと、それに相当するファイルシステム内の ファイルとの違いを調査します。 .It Fl -delete 指定されたファイルをアーカイブから削除します (1/4 インチテープでは動作しません)。 .It Fl r .It Fl -append アーカイブの末尾にファイルを追加します (1/4 インチテープでは動作しません)。 .It Fl t .It Fl -list アーカイブ内容のリスト表示をします。もし引数として .Ar filename が指定されていれば、そのファイルだけがリスト表示されます。 そうでなければ、アーカイブに含まれるすべてのファイルリストが表示されます。 .It Fl u .It Fl -update 指定したファイルのうち、アーカイブ内のファイルよりもディスク上の ファイルの変更時刻が新しいものだけを追加します。1/4 インチテープ では動作しません。 .It Fl x .It Fl -extract .It Fl -get アーカイブからファイルを抽出します。可能ならば、所有者、 変更時刻、ファイル属性はリストアされます。もし .Ar file 引数が指定されていなければ、アーカイブ内の全ファイルが抽出されます。 もし .Ar filename 引数がテープ上のディレクトリ名にマッチしていれば、そのディレクトリと ディレクトリ内のファイルが抽出されます (ディレクトリ内の すべてのディレクトリについても同様に抽出されます)。 もしアーカイブ内に、相当する同じファイルが複数含まれていれば (上記の .Fl -append コマンドを参照)、最後に含まれているものが他のすべてのファイルを 上書きする形で抽出されます。 .El .Sh オプション .Nm の他のオプションは、組み合わせて使用することができます。 1 文字オプションは、コマンド単語の中で指定することができます。 引数を与えるべきオプションの場合、オプションに続けて引数を指定し ます。1 文字オプションであれば、これに続くコマンドライン引数を 使用します (以下の .Sx 使用例 を参照してください)。 .Pp .Bl -tag -width "--preserve-permissions" -compact .It Fl -help .Nm のすべてのコマンドオプションについて一覧と解説を表示します。 .It Fl -atime-preserve テープに書かれている、ファイルのアクセス時刻をリストアします。 (inode の変更時刻が変更されることに注意してください!) .It Fl b .It Fl -block-size Ar number 読み書きするブロックサイズを .Ar number * 512-byte ブロック に設定します。 .It Fl B .It Fl -read-full-blocks 短い読みだしブロックを、完全なブロックに再組み立てします ( .Bx 4.2 パイプの読み込み用)。 .It Fl C Ar directory .It Fl -directory Ar directory 残りの引数を処理する前に .Ar directory へ移動します。 .It Fl -checkpoint アーカイブを読み書きする間に読み書きしたバッファの数を表示します。 .It Fl f Xo .Oo Ar hostname : Oc Ns Ar file .Xc .It Fl -file Xo .Oo Ar hostname : Oc Ns Ar file .Xc 指定された .Ar file (デフォルトは .Pa /dev/sa0 ) を読み書きします。 もし .Ar hostname が指定されていれば、 .Nm は .Xr rmt 8 を使って、リモートマシン上の .Ar file を読み書きします。 .Dq Ar - はファイル名として使用されることもありますが、 これは標準入力から読み出したり、標準出力へ書き出したりするために使用されます。 .It Fl -force-local コロンがある時でさえ、アーカイブファイルはローカルのものとします。 .It Fl F Ar file .It Fl -info-script Ar file .It Fl -new-volume-script Ar file それぞれのアーカイブが終ると、スクリプトを実行します (暗黙の .Fl M 指定が行なわれます)。 .It Fl -fast-read ワイルドカードで指定されていないすべての抽出ターゲットが アーカイブ内に見つかったら、その時点で終了します。 .It Fl G .It Fl -incremental 古い GNU-format インクリメンタルバックアップファイルを作成/リスト/抽出します。 .It Fl g Ar file .It Fl -listed-incremental Ar file 新しい GNU-format インクリメンタルバックアップファイルを 作成/リスト/抽出します。 .It Fl h .It Fl -dereference シンボリックリンクをシンボリックのまま書き込みません。シンボリックリンクが 指しているデータを書き込みます。 .It Fl i .It Fl -ignore-zeros -アーカイブの中のゼロブロック (通常、End-Of-File を意味する) を無視します。 +アーカイブの中の 0 ブロック (通常、End-Of-File を意味する) を無視します。 .It Fl -ignore-failed-read ファイルが読めなくても、非 0 のステータスで exit しません。 .It Fl j .It Fl y .It Fl -bzip .It Fl -bzip2 .It Fl -bunzip2 アーカイブを .Xr bzip2 1 でフィルタリングします。 .It Fl k .It Fl -keep-old-files ディスク上に既にあるファイルを保持します。つまり、アーカイブから 抽出するファイルは、ディスク上のファイルへ上書きしません。 .It Fl K Ar file .It Fl -starting-file Ar file アーカイブの中の .Ar file から (抽出、リストなどを) 始めます。 .It Fl l .It Fl -one-file-system あるファイルシステム内にあるファイルだけでアーカイブを作成します (他ファイルシステムへのマウントポイントを跨ぎません)。 .It Fl L Ar number .It Fl -tape-length Ar number .Ar number * 1024 バイト書き込んだ後でテープの交換を要求します。 .It Fl m .It Fl -modification-time ファイルの変更時刻を抽出しません。 .It Fl M .It Fl -multi-volume マルチボリュームアーカイブを作成/リスト/抽出します。 .It Fl n .It Fl -norecurse 作成時に再帰的にサブディレクトリを走査しません。 .It Fl -volno-file Ar file ボリューム番号付きのファイル名です。 .It Fl N Ar date .It Fl -after-date Ar date .It Fl -newer Ar date 作成時間が .Ar date より新しいファイルだけを抽出します。 .It Fl -newer-mtime Ar date 変更時間が .Ar date より新しいファイルだけを抽出します。 .It Fl o .It Fl -old-archive .It Fl -portability POSIX フォーマットではなく、V7 フォーマットのアーカイブを作成します。 .It Fl O .It Fl -to-stdout ファイルを標準出力に抽出します。 .It Fl p .It Fl -same-permissions .It Fl -preserve-permissions 保護情報を完全に抽出します。 .It Fl -preserve .Fl p s の指定と同じ効果を持ちます。 .It Fl P .It Fl -absolute-paths ファイル名から先頭の .Ql / をとりません。 .It Fl R .It Fl -record-number メッセージ中にアーカイブ内のレコード番号を埋め込み表示します。 .It Fl -remove-files アーカイブに追加したファイルを、追加後に削除します。 .It Fl s .It Fl -same-order .It Fl -preserve-order アーカイブ内から抽出するファイルを、指定された順のままにします。 .It Fl -show-omitted-dirs アーカイブ作成中に除外されたディレクトリを表示します。 .It Fl S .It Fl -sparse .Dq 疎な ファイルを効率的に扱うようにします。 .It Fl T Ar file .It Fl I Ar file .It Fl -files-from Ar file .Ar file から抽出もしくは作成するファイル名を得ます (1 行 1 ファイル名)。 .It Fl -null null で終わっている名前を考慮し、 .Fl T の振舞を変更します。 これは .Fl C 指定を無効にします。 .It Fl -totals .Fl -create によって書かれた総バイト数を表示します。 .It Fl U .It Fl -unlink .It Fl -unlink-first ファイルを作成する前に、いったん削除します。 .It Fl v .It Fl -verbose .Fl -create でアーカイブに書くファイルや .Fl -extract でアーカイブから 取り出すファイル名をリスト表示します。 ファイルの保護情報をファイル名とともに表示させるには、 .Fl -list を使います。 .It Fl V Ar volume-name .It Fl -label Ar volume-name 指定された .Ar volume-name を持ったアーカイブを作成します。 .It Fl -version .Nm プログラムのバージョン番号を表示します。 .It Fl w .It Fl -interactive .It Fl -confirmation すべての動作に対して、確認を求めるようになります。 .It Fl W .It Fl -verify アーカイブを書き込んだ後、ベリファイを試みます。 .It Fl -exclude Ar pattern .Ar pattern にマッチするファイルを除外します (抽出しません。追加しません。リスト表示しません)。 .It Fl X Ar file .It Fl -exclude-from Ar file .Ar file に一覧されているファイルを除外します。 .It Fl Z .It Fl -compress .It Fl -uncompress アーカイブを .Xr compress 1 でフィルタリングします。 .It Fl z .It Fl -gzip .It Fl -gunzip アーカイブを .Xr gzip 1 でフィルタリングします。 .It Fl -use-compress-program Ar program アーカイブを .Ar program でフィルタリングします (これは、 .Fl d が指定されたときは .Dq decompress を意味しなければなりません)。 .It Fl -block-compress テープもしくはフロッピのために、圧縮プログラムの出力をブロック 化します (そうしないと、ブロック長がおかしくなり、デバイスドライバは そのブロックを拒絶するでしょう)。 .It Fl Xo .Op Cm 0 Ns - Ns Cm 7 Ns .Op Cm lmh .Xc テープドライブと密度を指定します。 .El .Sh 環境 環境変数 .Ev TAR_OPTIONS に .Nm のデフォルトオプションを保持させることが可能です。 これらのオプションは最初に解釈されますので、 明示的なコマンドラインパラメータで上書き可能です。 .Sh 使用例 .Pa bert と .Pa ernie というファイルを含む、 ブロックサイズが 20 ブロックのアーカイブを、 テープドライブ .Pa /dev/sa0 に作るには、 .Dl "tar cfb /dev/sa0 20 bert ernie" もしくは .Dl "tar --create --file /dev/sa0 --block-size 20 bert ernie" と入力します。 .Fl f および .Fl b フラグは両方とも引数を必要としていることに注意してください。 この引数は、コマンド単語に書かれているのと同じ順序でコマンドラインから 取得されます。 .Pp .Pa /dev/sa0 はデフォルトのデバイスであり、20 はデフォルトのブロック サイズですので、上記の例は次のように単純化できます。 .Dl "tar c bert ernie" \&"backup.tar" というアーカイブから、すべての C ソース及びヘッダを 抽出するには、次のようにタイプします。 .Pp .Dl tar xf backup.tar '*.[ch]' .Pp シェルがカレントディレクトリ内のファイル名に展開しないよう、パターンを クォートしなければならないことに注意してください (当然、 シェルはアーカイブ内のファイル一覧にアクセスすることはできません)。 .Pp ファイルを階層構造ごとコピーするには、このようにコマンドを使用してください: .Bd -literal tar cf - -C srcdir . | tar xpf - -C destdir .Ed .Pp ディスケットに、 .Xr gzip 1 を使った圧縮アーカイブを作成するには、次の ようなコマンドラインを使うといいでしょう。 .Dl "tar --block-compress -z -c -v -f /dev/fd1a -b 36 tar/" .Pp まとめ指定フラグと .Fl - スタイルのフラグを混在させることができない ことに注意してください。次のようにタイプしなければならないわけで はなく、上記のような書き方で 1 文字フラグを使うことができます。 .Dl "tar --block-compress --gzip --verbose --file /dev/fd1a --block-size 20 tar/" .Pp 上のようにして作成したディスクの内容は、次のようにすればリスト 表示できます。 .Pp .Dl "tar tvfbz /dev/fd1a 36" .Pp 2 つの .Nm アーカイブを 1 つのアーカイブにまとめるには、 .Dl "tar Af archive1.tar archive2.tar" を使います。こうすると、 .Pa archive2.tar に含まれているファイルが .Pa archive1.tar の末尾に追加されます (単純に .Dl "cat archive2.tar >> archive1.tar" とタイプしてもうまくいかないことに注意してください。なぜなら、 .Nm アーカイブの末尾には end-of-file ブロックがあるからです)。 .Pp .Pa srcdir ディレクトリから 1997 年 2 月 9 日 13:00 以降に変更をされた 全てのファイルをアーカイブするためには、以下の形式を使って下さい。 .Dl "tar -c -f backup.tar --newer-mtime 'Feb 9 13:15 1997' srcdir/" .Pp 他の時間指定形式としては、 .Sq "02/09/97 13:15" , .Sq "1997-02-09 13:15" , .Sq "13:15 9 Feb 1997" , .Sq "'9 Feb 1997 13:15" , .Sq "Feb. 9, 1997 1:15pm" , .Sq "09-Feb" , .Sq "3 weeks ago" , .Sq "May first Sunday" があります。 正しいタイムゾーンを指定するためには、 .Sq "13:15 CEST" や .Sq "13:15+200" を使用して下さい。 .Sh 環境変数 .Nm プログラムは、以下の環境変数を参照します。 .Bl -tag -width "POSIXLY_CORRECT" .It Ev POSIXLY_CORRECT 通常、 .Nm はファイル指定の中に混ざったフラグを処理します。 この環境変数を設定すると、 .Nm は最初のフラグ以外の引数を見つける とそれ以降の引数に対してフラグ処理を行なわないという、POSIX 仕様 に合わせた動作を行なうようになります。 .It Ev SHELL インタラクティブモードにおいて、サブシェルの起動が要求されたとき、 .Ev SHELL 変数が設定されていればそれが、設定されていなければ .Pa /bin/sh が使用されます。 .It Ev TAPE .Nm のデフォルトのテープドライブを変更します (これは、さらに .Fl f フラグによって変更することができます)。 .It TAR_RSH TAR_RSH 環境変数は、デフォルトシェルに優先して、 .Nm tar のデータ転送に使用されます。 .El .Sh 関連ファイル .Bl -tag -width "/dev/sa0" .It Pa /dev/sa0 デフォルトのテープドライブ .El .Sh 互換性 .Fl y は FreeBSD だけの機能です。 GNU .Nm メンテナは、 .Fl j を GNU .Nm 1.13.18 以降における公式な .Xr bzip2 1 圧縮オプションとして採用しました。 .Fl I オプションは、Solaris の .Nm との互換性のためにあります。 .Sh 関連項目 .Xr bzip2 1 , .Xr compress 1 , .Xr gzip 1 , .Xr pax 1 , .Xr rmt 8 .Sh 歴史 .Nm フォーマットは立派な歴史を持っていて、Sixth Edition UNIX に 原点があります。 この .Nm の実装は GNU 実装であり、 .An John Gilmore によって書かれた パブリックドメイン .Nm が元になっています。 .Sh 作者 .An -nosplit 次の人を含む、大変多くの人々。[ソースの中の .Pa ChangeLog ファイルに記述されている人々] .An John Gilmore (オリジナルのパブリックドメイン版の作者), .An Jay Fenlason (最初の GNU 作者), .An Joy Kendall , .An Jim Kingdon , .An David J. MacKenzie , .An Michael I Bushnell , .An Noah Friedman そして バグフィックスや追加を貢献してくれた無数の人々。 .Pp このマニュアルページは .Nx 1.0 release から、 .Fx グループが 取り込んだものです。 .Sh バグ 特徴的な .Fl C オプションの動作は、伝統的な .Nm プログラムのそれとは異なるので、 あまり頼りにはできません。 .Pp .Fl A コマンドで任意の数の .Nm アーカイブを結合できればいいのですが、それはできません。 これをやろうとしても、2 つ目以降のアーカイブの end-of-archive ブロックが削除されずに残ってしまいます。 .Pp .Nm ファイルフォーマットは準固定幅フィールドフォーマットであり、 デバイス番号用のフィールドは 16 ビット用 (メジャー 8 ビットでマイナ 8 ビット) にデザインされており、我々の 32 ビット番号 (メジャー 8 ビットでマイナ 16+8 ビット) を吸収できません。 diff --git a/ja_JP.eucJP/man/man1/tcsh.1 b/ja_JP.eucJP/man/man1/tcsh.1 index b492b01df5..7726c94243 100644 --- a/ja_JP.eucJP/man/man1/tcsh.1 +++ b/ja_JP.eucJP/man/man1/tcsh.1 @@ -1,5889 +1,5889 @@ .\" Copyright (c) 1980, 1990, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" tcsh マニュアルページ: スタイルに関する注意 .\" .\" - リストのタグはボールド体とします。但し、「関連ファイル (FILES)」 .\" セクション中でイタリック体になっている部分は除きます。 .\" .\" - セクション名、環境変数、シェル変数に対する参照はボールド体としま .\" す。コマンド (外部コマンド、組み込みコマンド、エイリアス、エディ .\" タコマンド) とコマンド引数に対する参照はイタリック体とします。 .\" .\" - .B, .I マクロに注意してください。扱うことができる単語数には限界が .\" あります。この制限を回避するには、\fB, \fI を用います。ただ、 .\" この利用は絶対に必要な場合に限るようにしてください。 .\" これは、tcsh.man2html が名前アンカーを見つける際に .\" .B/.I を使うからです。 .\" .\" - 4 の倍数でインデントしてください。普通は 8 でインデントしてください。 .\" .\" - `' を使ってください。シェル構文の例の中を除いて '' や "" は使わない .\" ようにしてください。行先頭で '' を使うと消えてしまいます。 .\" .\" - \- を使ってください。- は使わないようにしてください。 .\" .\" - ドットファイルの名前を表す際にはチルダも含めるようにしてください。 .\" つまり、`~/.login' と書きますが、`.login' とは書きません。 .\" .\" - 外部コマンドを参照する際は、マニュアルページ形式で参照してください。 .\" 例: `csh(1)'。ただし、tcsh は `tcsh' とし、`tcsh(1)' としません。 .\" というのは、このページが tcsh のマニュアルページだからです。 .\" .\" - tcsh と csh とを区別して表す場合を除き、「このシェル」といい、 .\" 「tcsh」と言わないようにしてください。 .\" .\" - ただ「変数」と言わずに、「シェル変数」、「環境変数」と言うように .\" してください。また、ただ、「ビルトイン」、「コマンド」と言わずに、 .\" 「組み込みコマンド」、「編集コマンド」と言うようにしてください。 .\" ただ、文脈上区別が明らかな場合は別ですが。 .\" .\" - 現在時制を使ってください。`The shell will use' ではなく、`The .\" shell uses' です (この項は日本語訳部分には適用しません)。 .\" .\" - 重要: できるだけ相互参照するようにしてください。「参照 (REFERENCE)」 .\" セクション中にあるコマンド、変数などは、適切な解説セクションの中 .\" で触れるようにしてください。少なくとも、(解説セクションかどこか .\" で触れられている)他のコマンドの「参照」セクションでの記述で触れ .\" るようにしてください。OS 固有事項に関する注意は、「OS 固有機能の .\" サポート(OS variant support)」のセクションに記述するようにして下 .\" さい。新規機能は「新規機能 (NEW FEATURES)」セクションに、外部コマ .\" ンドを参照した場合は、「関連項目 (SEE ALSO)」セクションにそれぞれ .\" 記述するようにしてください。 .\" .\" - tcsh.man2html は、それが作成された時点でマニュアルページで使用さ .\" れていた nroff コマンドにかなり依存しています。可能ならば、ここ .\" で用いているスタイルに厳密に従ってください。特に、これまで使用さ .\" れたことのない nroff コマンドを使用しないようにしてください。 .\" .\" WORD: command-line editor コマンド行編集 .\" WORD: editor command 編集コマンド .\" WORD: autologout mechanism 自動ログアウト機構 .\" WORD: directory stack entries ディレクトリスタックエントリ .\" WORD: word 単語 .\" WORD: positional completion 位置指定補完 .\" WORD: next-word completion 逐次補完 .\" WORD: programmed completion 補完指定 .\" WORD: tilde substitution チルダ置換 .\" WORD: hard limit hard limit .\" WORD: current limit current limit .\" WORD: register a misspelling ミススペルを記録する .\" WORD: switches スイッチ .\" WORD: glob-pattern グロブパターン .\" WORD: Toggles 切り替える .\" WORD: pager ページャー .\" WORD: prefix 接頭辞 .\" WORD: return リターンキー (enter キー) .\" WORD: builtin command 組み込みコマンド .\" WORD: spelling スペル .\" WORD: quote クォートする .\" .\" .\" .\" $FreeBSD$ .TH TCSH 1 "23 July 2002" "Astron 6.12.00" .\" INTERIM1(jpman) .SH 名称 tcsh - ファイル名補完とコマンド行編集を追加した C シェル .SH 書式 .B tcsh \fR[\fB\-bcdefFimnqstvVxX\fR] [\fB\-Dname\fR[\fB=value\fR]] [arg ...] .br .B tcsh \-l .SH 解説 \fItcsh\fR は、バークレイ版 UNIX の C シェル \fIcsh\fR(1) と完全に 互換性があり、さらに機能強化したシェルです。 対話的なログインシェル、またシェルスクリプトのコマンドプロセッサの 両方の用途で使われるコマンドインタプリタです。 \fItcsh\fR には、コマンド行編集 (\fBコマンド行編集\fRの項を参照)、 プログラム可能な単語の補完 (\fB補完と一覧\fRの項を参照)、 スペル訂正 (\fBスペル訂正\fRの項を参照)、 履歴 (\fBヒストリ置換\fRの項を参照)、 ジョブ制御 (\fBジョブ\fRの項を参照)、 C 言語風の文法があります。 \fB新機能\fRの章では、\fIcsh\fR(1) には存在しない、\fItcsh\fR の 主な追加機能について説明しています。 このマニュアルを通じ、\fItcsh\fR の機能のうち、 \fIcsh\fR(1) のほとんどの実装 (特に 4.4BSD の \fIcsh\fR) に ない機能について、ラベル (+) をつけてあります。 そして、\fIcsh\fR(1) にあったけれども文書化されていなかった機能に ラベル (u) をつけてあります。 .SS "引数リスト処理" シェルへの 1 番目の引数 (引数 0 番) が `\-' の場合、シェルは ログインシェルになります。 シェルを \fB\-l\fR フラグを指定して起動することでも ログインシェルにできます。 .PP 残りのフラグは以下のように解釈されます。 .TP 4 .B \-b このフラグは、オプションの処理を強制的に中断させる場合に使用します。 このフラグ以降の引数はすべて、オプションではないものとして 処理されます。これにより、混乱を避け、小細工をしなくても、 シェルスクリプトにオプションを渡すことが可能になります。 set-user ID スクリプトは本オプションなしでは実行できません。 .TP 4 .B \-c コマンドを、本フラグの次にくる引数 (この引数は省略できません。 また、1 つだけである必要があります) から読み込み、実行します。 この引数は、あとで参照できるように、シェル変数 \fBcommand\fR に 格納されます。残りの引数は、シェル変数 \fBargv\fR に代入されます。 .TP 4 .B \-d ログインシェルであるかどうかにかかわらず、 \fBスタートアップとシャットダウン\fRの項で解説されているように \fI~/.cshdirs\fR から、ディレクトリスタックを読み込みます。(+) .TP 4 .B \-D\fIname\fR[=\fIvalue\fR] 環境変数 \fIname\fR に値 \fIvalue\fR を設定します。(Domain/OS のみ) (+) .TP 4 .B \-e 起動したコマンドが異常終了したり、0 でない終了ステータスを返したときに、 ただちにシェルを終了します。 .TP 4 .B \-f \fI~/.tcshrc \fRを読み込まずに無視するので、 起動が高速になります。 .TP 4 .B \-F プロセスを生成する際に \fIvfork\fR(2) の代わりに \fIfork\fR(2) を使います。(Convex/OS のみ) (+) .TP 4 .B \-i たとえ端末上で実行されていなくても、対話的に動作し最上位レベルの 入力の際にプロンプトを表示します。入力と出力がともに端末である場合、 本オプションなしでもシェルは対話的に動作します。 .TP 4 .B \-l ログインシェルとなります (\fB-l\fR が、指定された唯一のフラグである 場合にのみ有効です)。 .TP 4 .B \-m 実効ユーザに属していなくても \fI~/.tcshrc\fR をロードします。 新しいバージョンの \fIsu\fR(1) は \fB-m\fR をシェルに渡すことが できます。(+) .TP 4 .B \-n コマンドの解析は行いますが、実行はしません。 シェルスクリプトのデバッグに役立ちます。 .TP 4 .B \-q SIGQUIT (\fBシグナル処理\fRの項を参照) を受け付けるようにし、 デバッガのもとで使われても作動するようになります。 ジョブ制御は無効になります。(u) .TP 4 .B \-s 標準入力からコマンドを読み込みます。 .TP 4 .B \-t 入力から 1 行だけ読み込み、それを実行します。入力行の改行の直前に `\\' を置くことで、次の行への継続を行うことができます。 .TP 4 .B \-v シェル変数 \fBverbose\fR を設定します。 これにより、ヒストリ置換された状態のコマンド行を表示するようになります。 .TP 4 .B \-x シェル変数 \fBecho\fR を設定します。これにより、実行直前に、 実行するコマンドを表示するようになります。 .TP 4 .B \-V \fI~/.tcshrc\fR を実行する前に、シェル変数 \fBverbose\fR を設定します。 .TP 4 .B \-X \fI~/.tcshrc\fR を実行する前に、シェル変数 \fBecho\fR を設定します。 .TP 4 .B \-X に対する \fB-x\fR の関係は、\fB-V\fR に対する \fB-v\fR の関係に 相当します。 .PP フラグ引数の処理のあと、もし引数が残っていて、かつ、 \fB-c\fR, \fB-i\fR, \fB-s\fR, \fB-t\fR のいずれのフラグも 指定されていなければ、残っている引数のうち最初のものは コマンドファイル、つまり「スクリプト」の名前とみなされます。 シェルはこのファイルをオープンし、`$0' による置換に備えて ファイル名を保存します。 多くのシステムは、スクリプトが本シェルと互換性のない version 6 または version 7 の標準のシェルを使っているため、 スクリプトの先頭の文字が `#' でない場合、 つまりスクリプトがコメントから始まらない場合、本シェルは それらの「標準」のシェルを起動して実行します。 .PP 残りの引数はシェル変数 \fBargv\fR に設定されます。 .SS "スタートアップとシャットダウン" ログインシェルの場合は、実行開始に際し、まずシステムファイル \fI/etc/csh.cshrc\fR と \fI/etc/csh.login\fR を読み込んで実行します。 そしてシェルを起動したユーザの\fBホーム\fRディレクトリの中から、 まずはじめに \fI~/.tcshrc\fR (+) を読み込んで実行します。 もし、\fI~/.tcshrc\fR が見つからない場合は、\fI~/.cshrc\fR を 読み込んで実行します。 次に、\fI~/.history\fR (もしくは、シェル変数 \fBhistfile\fR の値) を、 その次に \fI~/.login\fR を、最後に、\fI~/.cshdirs\fR (もしくは、 シェル変数 \fBdirsfile\fR の値) (+) を読み込んで実行します。 コンパイルの仕方によって、シェルは \fI/etc/csh.cshrc\fR の後ではなく前に \fI/etc/csh.login\fR を読み込み、 \fI~/.tcshrc\fR (または \fI~/.cshrc\fR) と \fI~/.history\fR の後ではなく前に \fI~/.login\fR を読み込む場合があります。 シェル変数 \fBversion\fR を参照してください。(+) .PP ログインシェルでない場合は、\fI/etc/csh.cshrc\fR と、 \fI~/.tcshrc\fR (または \fI~/.cshrc\fR) のみを起動時に読み込みます。 .PP スタートアップファイルの例は、 \fIhttp://tcshrc.sourceforge.net\fR を見てください。 .PP \fIstty\fR(1) や \fItset\fR(1) のようなコマンドは、ログインする ごとに 1 度だけ実行される必要がありますが、これらのコマンドは、 普通は \fI~/.login\fR ファイルに入れます。 \fIcsh\fR(1) と \fItcsh\fR の両方で同じファイルのセットを使う 必要があるユーザは、\fI~/.cshrc\fR だけを使い、その中で シェル変数 \fBtcsh\fR (値は任意) があるかどうかチェックして から、\fItcsh\fR 特有のコマンドを使うようにします。または、 \fI~/.cshrc\fR と \fI~/.tcshrc\fR の両方を使うが、\fI~/.tcshrc\fR で、 \fIsource\fR コマンド (組み込みコマンドの項を参照) を使い \fI~/.cshrc\fR を読み込むようにします。 以下、このマニュアルの残りの部分で `\fI~/.tcshrc\fR' と表現したときは、 「\fI~/.tcshrc\fR、または \fI~/.tcshrc\fR が見つからない 場合は \fI~/.cshrc\fR」という意味で使います。 .PP 通常、シェルはプロンプト `> ' を表示し、端末からコマンドの読み込みを 開始します (引数処理と、コマンドスクリプトを含むファイルの処理のための シェルの使用については、後で説明します)。 シェルは、入力されたコマンド行の読み込み、読み込んだコマンド行を単語に 分解、およびコマンド履歴への格納、コマンド行の解析、 コマンド行の中のコマンドそれぞれの実行を繰り返します。 .PP ログアウトするには、空の行で `^D' とタイプするか、`logout' するか、 `login' するか、シェルの自動ログアウト機構 (シェル変数 \fBautologout\fR を参照) を使います。 ログインシェルが実行終了する際には、ログアウトの状況に応じて シェル変数 \fBlogout\fR を `normal' か `automatic' に設定し、 \fI/etc/csh.logout\fR ファイルと \fI~/.logout\fR ファイルにある コマンドを実行します。 コンパイルの仕方によっては、シェルは、ログアウト時に DTR を落とす ことがあります。これについてはシェル変数 \fBversion\fR を参照してください。 .PP システムのログインファイル名、ログアウトファイル名は、 異なる \fIcsh\fR(1) 間での互換性を保つために、 システムごとにファイルが違います。これについては、 \fB関連ファイル\fRを参照してください。 .SS 編集 はじめに、\fBコマンド行エディタ\fRについて説明します。 \fB補完と一覧\fRと、\fBスペル訂正\fRの 2 つの機能は、 編集コマンドとして実装されていますが、 特に分けて説明する必要があるため、項を改めて説明します。 最後に、\fB編集コマンド\fRの項で、シェルに特有の編集コマンドについて、 一覧をあげ、デフォルトのバインドとともに説明します。 .SS "コマンド行編集 (+)" コマンド行の入力データは、GNU Emacs や \fIvi\fR(1) で使われているものと、 よく似たキーシーケンスを使って編集できます。 シェル変数 \fBedit\fR がセットされているときのみ、編集できるように なっています。対話的なシェルでは、この値はデフォルトで 設定されています。 組み込みコマンド \fIbindkey\fR で、キーバインドを変更したり、 表示したりできます。 デフォルトでは、Emacs 形式のキーバインドが使われています (違う方法でコンパイルしなければそうなります。 シェル変数 \fBversion\fR を参照)。 しかし、コマンド \fIbindkey\fR で、キーバインドを \fIvi\fR 形式に 一括して変更できます。 .PP シェルは、つねに矢印キー (環境変数 \fBTERMCAP\fR で定義されたものです) を、次のように割り付けています。 .PP .PD 0 .RS +4 .TP 8 下矢印 \fIdown-history\fR .TP 8 上矢印 \fIup-history\fR .TP 8 左矢印 \fIbackward-char\fR .TP 8 右矢印 \fIforward-char\fR .PD .RE .PP 他の 1 文字バインドによって、変わっていなければこのようになります。 このようなバインドにしたくない場合、\fIsettc\fR を使って、矢印キーの エスケープシーケンスを空の文字列にセットすることができます。 ANSI/VT100 の矢印キーシーケンスは、つねにバインドされています。 .PP その他のキーバインドは、そのほとんどは、Emacs、\fIvi\fR(1) ユーザが 予想できるものです。また、簡単に \fIbindkey\fR コマンドで表示させる こともできるので、ここで、それらのバインドを並べあげる必要は ないでしょう。 同じく、\fIbindkey\fR コマンドは、それぞれの編集コマンドを 簡単な説明付きで、表示させることができます。 .PP 注意: 「単語」という概念に関して、編集コマンドは、シェルと同じ概念を 持たないことに注意してください。 エディタは、シェル変数 \fBwordchars\fR の中にはない非英数文字 (英文字、数字のどちらでもない文字) によって単語の区切りを決めます。 一方、シェルは、ホワイトスペース (空白、タブ、改行) と、 \fB字句構造\fRの項で列挙する特殊な意味を持つ文字のいくつかを 識別します。 .SS "補完と一覧 (+)" シェルは、一意に決まる短縮形を与えられると、しばしば単語の補完を 行うことができます。 単語の一部 (たとえば `ls /usr/lost') をタイプして、タブキーを押すと、 編集コマンド \fIcomplete-word\fR が実行します。シェルは、 ファイル名 `/usr/lost' を補完して `/usr/lost+found/' にします。 このとき、入力バッファの中で、不完全な単語を完全な単語で置き換えます。 (注意: 末端の `/' について: 補完では、ディレクトリ名を補完すると 最後に `/' を付け加えます。 そして、ディレクトリ名以外の単語を補完すると、末尾に空白文字を 付け加えます。こうすることで、タイプ入力が速くなり、また、 補完が成功したことが一目で分かります。 シェル変数 \fBaddsuffix\fR のセットをはずせば、 これらを付け加えなくすることもできます。) 合致するものが見当たらない場合 (おそらく `/usr/lost+found' が 存在しない場合でしょう)、端末のベルが鳴ります。 単語がすでに補完されている場合 (システムに `/usr/lost' が 存在する場合か、あるいは、ユーザがはるか先まで考えて、すべてを 入力してしまっていた場合でしょう)、`/' または空白文字が末尾に まだなければ、付け加えられます。 .PP 補完は、行の一番最後でなくても、途中どこででも機能します。 そして、テキストの補完によって、その分、行の残りは右方向へ押されます。 単語の中間で補完された場合、しばしばカーソルの右側に文字が残り、 それを消すはめになることもあります。 .PP コマンドと変数は、ほとんど同じ方法で補完できます。 たとえば、`em[tab]' とタイプした時、使用しているシステムで `em' から始まるコマンドが唯一 \fIemacs\fR だけならば、 `em' は `emacs' と補完されます。 補完は、\fBpath\fR 中のディレクトリにあるコマンドか、 フルパスが与えられれば、そこにあるコマンドを見つけ出すことができます。 `echo $ar[tab]' とタイプした時、他に `ar' から始まる変数がなければ、 `$ar' は `$argv' と補完されます。 .PP シェルは、入力バッファを解析して、補完したい単語を、ファイル名としてか、 コマンドとしてか、変数としてか、どのように補完すべきかを決めます。 バッファの中の最初の単語と、`;', `|', `|&', `&&', `||' の すぐ次にくる単語は、コマンドとみなします。 `$' で始まる単語は、変数とみなします。 その他のものは、ファイル名とみなします。 空の行は、ファイル名として `補完されて' います。 .PP いつでも、`^D' とタイプすることで、編集コマンド \fIdelete-char-or-list-or-eof\fR を実行させて、 補完可能な単語の候補を並べ挙げることができます。 シェルは、組み込みコマンド \fIls-F\fR (q.v.) を使って、 補完可能な候補を並べ挙げます。 そして、プロンプトと未完成のコマンドラインを再表示します。 次に例を示します。 .IP "" 4 > ls /usr/l[^D] .br lbin/ lib/ local/ lost+found/ .br > ls /usr/l .PP シェル変数 \fBautolist\fR をセットしていれば、シェルは、 補完に失敗したときはいつでも残りの選択肢を表示します。 .IP "" 4 > set autolist .br > nm /usr/lib/libt[tab] .br libtermcap.a@ libtermlib.a@ .br > nm /usr/lib/libterm .PP シェル変数 \fBautolist\fR を `ambiguous (あいまいな)' に セットした場合は、補完に失敗して補完される単語へ新しい文字を それ以上追加できなくなったときに限り、選択肢を表示します。 .PP 補完するファイル名には、変数、自分もしくは他人のホームディレクトリ (`~' で短縮したもの。\fBファイル名置換\fRの項を参照)、 ディレクトリスタックエントリ (`=' で短縮したもの。 \fBディレクトリスタック置換\fRの項を参照) を含めることができます。 たとえば、次のようになります。 .IP "" 4 > ls ~k[^D] .br kahn kas kellogg .br > ls ~ke[tab] .br > ls ~kellogg/ .PP あるいは、 .IP "" 4 > set local = /usr/local .br > ls $lo[tab] .br > ls $local/[^D] .br bin/ etc/ lib/ man/ src/ .br > ls $local/ .PP 変数については、編集コマンド \fIexpand-variables\fR を指定して使っても 展開できることに注意してください。 .PP コマンド \fIdelete-char-or-list-or-eof\fR は、行の最後でのみ リストを表示します。 行の中間の場合、カーソル位置の文字を消去します。 空行の場合、ログアウトします。ただし、\fBignoreeof\fR がセットされて いれば、何もしません。 `M-^D' は、編集コマンド \fIlist-choices\fR にバインドされていますが、 これは行中のどこでも、補完の候補のリストを表示します。 \fIlist-choices\fR (または、\fIdelete-char-or-list-or-eof\fR のところで 列挙するコマンドで、消去するコマンド、しないコマンド、 リスト表示するコマンド、ログアウトするコマンドのどれでも) は、そうしたい場合、組み込みコマンド \fIbindkey\fR で `^D' にバインドすることもできます。 .PP 編集コマンド \fIcomplete-word-fwd\fR と \fIcomplete-word-back\fR (デフォルトでは、どのキーにも割り付けられていません) を使うことで、 補完候補のリストを上または下に順に巡り、リスト上の現在の単語を、 次の単語または 1 つ前の単語に置き換えることができます。 .PP シェル変数 \fBfignore\fR に、補完の際に無視するファイルの サフィックスのリストをセットできます。 次の例を考えてみます。 .IP "" 4 > ls .br Makefile condiments.h~ main.o side.c .br README main.c meal side.o .br condiments.h main.c~ .br > set fignore = (.o \\~) .br > emacs ma[^D] .br main.c main.c~ main.o .br > emacs ma[tab] .br > emacs main.c .PP `main.c~' と `main.o' は、\fBfignore\fR にサフィックスが 登録されているために、補完では無視されます (しかしリスト上には表示されます)。 \fBファイル名置換\fRの項で解説しているように、\fBhome\fR に 拡張されないようにするために、`~' の前に `\\' が必要なことに 注意してください。補完の候補が1 つしかない場合は、 \fBfignore\fR の設定は無視されます。 .PP シェル変数 \fBcomplete\fR が `enhance(拡張)' にセットされていた場合、補完は 1) 大文字小文字の区別を無視し、 2) ピリオド、ハイフン、アンダスコア (`.', `\-', `_')を、 単語を分ける記号であるとみなし、ハイフンとアンダスコアは 同等なものとみなします。 次のようなファイルがある場合、 .IP "" 4 comp.lang.c comp.lang.perl comp.std.c++ .br comp.lang.c++ comp.std.c .PP `mail \-f c.l.c[tab]' とタイプすれば、`mail \-f comp.lang.c' のように補完され、^D の場合には、`comp.lang.c' と `comp.lang.c++' が リストとして表示されます。 `mail \-f c..c++[^D]' とタイプした場合は、`comp.lang.c++' と `comp.std.c++' が表示されます。 次のファイルがあるディレクトリで、`rm a\-\-file[^D]' とタイプした 場合、 .IP "" 4 A_silly_file a-hyphenated-file another_silly_file .PP の 3 つのファイルすべてが一覧表示されます。 なぜならば、大文字小文字の区別は無視されて、 ハイフンとアンダスコアは同等と解釈されるからです。しかしながら、 ピリオドは、ハイフンやアンダスコアと同等ではありません。 .PP 補完と一覧は、他にもいくつかのシェル変数の影響を受けます。 そのひとつ、\fBrecexact\fR をセットすると、続けてタイプすれば より長い単語に合致するような場合でさえも、 最短で一意に一致する単語に合致するようになります。たとえば、 .IP "" 4 > ls .br fodder foo food foonly .br > set recexact .br > rm fo[tab] .PP この場合はベルが鳴るだけです。 なぜなら、`fo' は、`fod' または `foo' に展開できるからです。 しかし、さらに `o' とタイプすると、 .IP "" 4 > rm foo[tab] .br > rm foo .PP `food' や `foonly' も合致するにもかかわらず、 補完は `foo' で完了します。 \fBautoexpand\fR をセットすると、補完を試みる前に、毎回、 編集コマンド \fIexpand-history\fR を実行するようになります。 \fBautocorrect\fR をセットすると、補完を試みる前に、毎回、 その単語のスペル訂正をするようになります (\fBスペル訂正\fRの項を参照)。 \fBcorrect\fR をセットすると、`return (enter)' キーを押したあと、 自動的にコマンドを補完するようになります。 \fBmatchbeep\fR をセットすると、補完に際して、状況の変化に応じて、 ベルを鳴らしたり、鳴らないようにできます。 \fBnobeep\fR をセットすると、まったくベルを鳴らさないようにできます。 \fBnostat\fR には、ディレクトリのリストやディレクトリに 合致するパターンをセットでき、これらのディレクトリで補完機構が \fIstat\fR(2) を実行しないようにすることができます。 \fBlistmax\fR や \fBlistmaxrows\fR にセットすることで、 まず問い合わせずに一覧表示する項目の数や、列の数を、それぞれ 制限することができます。 \fBrecognize_only_executables\fR をセットすると、 シェルがコマンド一覧を表示する際に、実行可能ファイルだけを 一覧表示するようにさせることができます。ただし、動作はきわめて 遅くなります。 .PP 最後に、組み込みコマンド \fIcomplete\fR を使って、ファイル名、 コマンド、変数以外の単語を補完する方法をシェルに教えることができます。 補完と一覧は、グロブパターン (\fBファイル名置換\fRの項を参照) 上では機能しませんが、編集コマンド \fIlist-glob\fR と \fIexpand-glob\fR はグロブパターンに対し同等の機能として実行されます。 .SS "スペル訂正 (+)" シェルは、補完したり一覧表示するのと同様に、ファイル名、コマンド、 変数名のスペルを訂正することができることがあります。 .PP 個々の単語は、編集コマンド \fIspell-word\fR (普通は M-s と M-S に バインドされています) でスペル訂正できます。入力バッファ全体は \fIspell-line\fR (普通は M-$ に割り付けられています) で スペル訂正できます。 シェル変数 \fBcorrect\fR に `cmd' を設定されておけば、コマンド名が スペル訂正されます。`all' を設定しておけば、リターンがタイプされる たびに行全体がスペル訂正されます。 \fBautocorrect\fR がセットされていれば、単語に補完を試みる前に その単語をスペル訂正します。 .PP スペル訂正が、ここで説明した方法のいずれかにより呼び出され、 コマンド行のどこかにスペル誤りがあると判断すると、 シェルは、次のように訂正済みのコマンド行を表示し入力を待ちます。 .IP "" 4 > set correct = cmd .br > lz /usr/bin .br CORRECT>ls /usr/bin (y|n|e|a)? .PP これに対し、`y' または空白文字で答えると、訂正済み行を実行し、 `e' で答えると、入力バッファに訂正前のコマンドを残し、 `a' で答えると、`^C' が押された場合と同様にコマンドを中止し、 それ以外の場合は、元のままの行を変えないで実行します。 .PP スペル訂正は、ユーザ定義の補完を識別します (組み込みコマンド \fIcomplete\fR を参照)。 もし、補完が実行される位置で、入力された単語が補完リストの中の単語に 似ていたとき、スペル訂正は、ミススペル記録して、見つかった単語を 訂正候補として提案します。しかし、入力された単語がその位置で、 どの補完候補にも合致しなかった時、スペル訂正は、 ミススペルを示しません。 .PP 補完と同様、スペル訂正は行のどこでも機能します。行の残りを右に 押し出したり、残りの余分な文字をカーソルの右に残したりします。 .PP 注意: スペル訂正は、意図どおりに動作する保証はありません。 そして、ほとんど実験的な機能として提供されています。 提案、改善する点があれば歓迎します。 .SS "編集コマンド (+)" `bindkey' はキーバインド一覧を表示し、 `bindkey \-l' は編集コマンドの一覧と短い解説を表示します。 ここでは、新しい編集コマンド、または、特に興味深い編集コマンドに ついてのみ解説します。 エディタのキーバインド割り付けの記述については、 \fIemacs\fR(1) と \fIvi\fR(1) を参照してください。 .PP デフォルトでそれぞれのコマンドにバインドられた文字 (あるいは複数文字) は、括弧の中に示しました。 `^\fIcharacter\fR' は制御文字を意味します。 `M-\fIcharacter\fR'はメタ文字です。 メタキーがない端末の場合は、escape-\fIcharacter\fR とタイプします。 大文字小文字の区別はありますが、 デフォルトで英文字に割り付けられるコマンドは、便宜上、 大文字、小文字の両方にキーバインドされています。 .TP 8 .B complete-word \fR(tab) \fB補完と一覧\fRの項で解説しているとおり、単語を補完します。 .TP 8 .B complete-word-back \fR(not bound) \fIcomplete-word-fwd\fR と同様ですが、単語リストの終わりから、 上へあがって行きます。 .TP 8 .B complete-word-fwd \fR(not bound) 現在の単語を、補完可能単語リスト上の始めの単語で置き換えます。 本コマンドを繰り返すことで、単語リスト上を下へ降りていくことができます。 単語リストの最後までいくと、ベルが鳴り、未補完の単語へ戻ります。 .TP 8 .B complete-word-raw \fR(^X-tab) \fIcomplete-word\fR と同様ですが、ユーザ定義した補完は無視されます。 .TP 8 .B copy-prev-word \fR(M-^_) 現在の行で、1 つ前の単語を入力バッファへコピーします。 \fIinsert-last-word\fR も参照してください。 .TP 8 .B dabbrev-expand \fR(M-/) 以前入力した単語の中で、現在の単語が先頭部分文字列であり、しかも 最近のものを見つけて、それで展開します。 必要ならば、ヒストリリストを一周回って元に戻って探します。 \fIdabbrev-expand\fR を中断せず繰り返すことで、 その次の単語に変わります。 \fIhistory-search-backward\fR と同様に、同一のマッチングは スキップします。 .TP 8 .B delete-char \fR(割り付けなし) カーソル下の文字を削除します。 \fIdelete-char-or-list-or-eof\fR も参照してください。 .TP 8 .B delete-char-or-eof \fR(割り付けなし) カーソル下に文字があれば \fIdelete-char\fR を実行し、 空行では \fIend-of-file\fR を実行します。 \fIdelete-char-or-list-or-eof\fR も参照してください。 .TP 8 .B delete-char-or-list \fR(割り付けなし) カーソル下に文字があれば \fIdelete-char\fR を実行し、 行の末尾では \fIlist-choices\fR を実行します。 \fIdelete-char-or-list-or-eof\fR も参照してください。 .TP 8 .B delete-char-or-list-or-eof \fR(^D) カーソル下に文字があれば \fIdelete-char\fR を実行し、 行の末尾では \fIlist-choices\fR を実行し、 空行では \fIend-of-file\fR を実行します。 これらの 3 つのコマンドも参照してください。 これらのコマンドは、それぞれ 1 つの動作を実行するだけです。 \fIdelete-char-or-eof\fR, \fIdelete-char-or-list\fR, \fIlist-or-eof\fR は、 それぞれ 3 つのうちの異なる 2 つを実行します。 .TP 8 .B down-history \fR(下矢印, ^N) \fIup-history\fR と同様ですが、1 つずつ下に移動し、もとの入力行で止まります。 .TP 8 .B end-of-file \fR(割り付けなし) ファイルの終端であることをシェルに通知します。 シェル変数 \fBignoreeof\fR (そちらも参照) がセットされて いない場合、その結果として、シェルは実行を終了します。 \fIdelete-char-or-list-or-eof\fR も参照してください。 .TP 8 .B expand-history \fR(M-space) 現在の単語のヒストリ置換を展開します。 \fBヒストリ置換\fRを参照してください。 \fImagic-space\fR, \fItoggle-literal-history\fR と、シェル変数 \fBautoexpand\fR も参照してください。 .TP 8 .B expand-glob \fR(^X-*) カーソルの左にグロブパターンを展開します。 \fBファイル名置換\fRを参照してください。 .TP 8 .B expand-line \fR(割り付けなし) \fIexpand-history\fR と同様ですが、入力バッファのそれぞれの単語の ヒストリ置換を展開します。 .TP 8 .B expand-variables \fR(^X-$) カーソルの左に変数を展開します。 \fB変数置換\fRを参照してください。 .TP 8 .B history-search-backward \fR(M-p, M-P) ヒストリリストを後方へ向かって、入力バッファの現在の中身 (カーソル位置まで) で始まるコマンドを検索し、 それを入力バッファへコピーします。 検索文字列は、`*', `?', `[]', `{}' を含んだグロブパターン (\fBファイル名置換\fRを参照) であってもかまいません。 \fIup-history\fR と \fIdown-history\fR は、ヒストリリストの該当する 地点から始める事ができます。 Emacs モードのみです。 \fIhistory-search-forward\fR と \fIi-search-back\fR も参照してください。 .TP 8 .B history-search-forward \fR(M-n, M-N) \fIhistory-search-backward\fR と同様ですが、前方へ検索します。 .TP 8 .B i-search-back \fR(割り付けなし) 後方へ、\fIhistory-search-backward\fR のように検索して、 最初に合致したものを入力バッファへコピーし、 カーソルをパターンの最後に位置させます。 そして、`bck: 'プロンプトと最初に合致したものを表示します。 追加の文字をタイプして、その検索を延長することができます。 \fIi-search-back\fR をタイプして、同じパターンで検索を延長する こともできます。必要があれば、ヒストリリストを一周回って 元に戻って検索を続けます。 (これを行うためには、\fIi-search-back\fR は、1 文字に バインドされていなければなりません。) あるいは、以下の特殊文字をタイプすることもできます。 .PP .RS +8 .RS +4 .PD 0 .TP 8 ^W カーソル下の単語の残りを検索パターンに加えます。 .TP 8 delete (あるいは \fIbackward-delete-char\fR にバインドされた文字) 最後にタイプされた文字の効果をとりけし、 適当なら検索パターンから文字を削除します。 .TP 8 ^G 前の検索が成功していたなら、検索全体を中止します。 そうでないなら、一番最後に成功した検索まで戻ります。 .TP 8 escape 検索を終え、入力バッファの現在の行をそのまま残します。 .RE .PD .PP この他の文字で、\fIself-insert-command\fR にバインドされている 以外のものをタイプすると、検索が終了します。入力バッファの現在の行は そのままになり、タイプした文字は通常の入力として解釈されます。 特に、キャリッジリターンの場合は、現在の行を実行に移します。 Emacs モードのみです。 \fIi-search-fwd\fR と \fIhistory-search-backward\fR も参照してください。 .RE .TP 8 .B i-search-fwd \fR(割り付けなし) \fIi-search-back\fR と同様ですが、前方へ検索します。 .TP 8 .B insert-last-word \fR(M-_) 1 つ前の入力行 (`!$') の最後の単語を入力バッファに挿入します。 \fIcopy-prev-word\fR も参照してください。 .TP 8 .B list-choices \fR(M-^D) \fB補完と一覧\fRで解説しているように、補完の可能性を一覧表示します。 \fIdelete-char-or-list-or-eof\fR と \fIlist-choices-raw\fR も 参照してください。 .TP 8 .B list-choices-raw \fR(^X-^D) \fIlist-choices\fR と同様ですが、ユーザ定義された補完を無視します。 .TP 8 .B list-glob \fR(^X-g, ^X-G) カーソルの左側のグロブパターン (\fBファイル名置換\fRを参照) に 合致したものを (組み込みコマンド \fIls\-F\fR を用いて) 一覧表示します。 .TP 8 .B list-or-eof \fR(割り付けなし) \fIlist-choices\fR を実行するか、または、空行の場合 \fIend-of-file\fR を 実行します。\fIdelete-char-or-list-or-eof\fR も参照してください。 .TP 8 .B magic-space \fR(割り付けなし) まず \fIexpand-history\fR と同様に、現在の行のヒストリ置換を展開して、 その後で空白を 1 つ付け加えます。 \fImagic-space\fR はスペースキーにバインドするように 設計されていますが、デフォルトではバインドされていません。 .TP 8 .B normalize-command \fR(^X-?) パスの中の現在の単語を検索します。そして、見つかった場合、 実行可能ファイルを指すフルパスで置き換えます。 特殊文字はクォートされます。エイリアスは展開されて、クォートされますが、 エイリアス中のコマンドは展開 / クォートされません。 このコマンドは、たとえば、`dbx' や `sh \-x' などのように、 コマンドが引数を取得する場合に役立ちます。 .TP 8 .B normalize-path \fR(^X-n, ^X-N) シェル変数 \fBsymlinks\fR の設定 `expand' の項で説明されているように、 現在の単語を展開します。 .TP 8 .B overwrite-mode \fR(割り付けられていません) 入力モードと上書きモードの間で切り替えます。 .TP 8 .B run-fg-editor \fR(M-^Z) 現在の入力行を保存します。そして、環境変数 \fBEDITOR\fR または \fBVISUAL\fR のファイル名部分の最後の構成要素 (または、どちらもセットされていなければ、`ed' か `vi') と等しい名前を持ち、ストップしているジョブを探します。 そのようなジョブが見つかれば、`fg %\fIjob\fR' とタイプしたのと 同じように、実行再開されます。 これは、エディタとシェルの間を抜けて交互に切り替えるのを容易にする ために使われます。 このコマンドを `^Z' にバインドし、もっと簡単に交互の切り替えが できるようにする人もいます。 .TP .B run-help \fR(M-h, M-H) 補完ルーチンの `現在のコマンド' と同じ概念による 現在のコマンドのドキュメントを検索し、表示します。 ページャを使う方法はありません。\fIrun-help\fR は短いヘルプファイルと のために設計されているためです。 特別なエイリアス \fBhelpcommand\fR が定義されていた場合、 コマンド名を唯一の引数としてその値が実行されます。 ほかに、ドキュメントのファイル名は、\fIコマンド名\fR.help, \fIコマンド名\fR.1, \fIコマンド名\fR.6, \fIコマンド名\fR.8, \fIコマンド名\fRのいずれかでなければなりません。 また、そのファイルは、環境変数 \fBHPATH\fR の中で、 一覧にあがっているディレクトリのうちの 1 つに入っていなければなりません。 もし、1 つ以上のヘルプファイルがある場合は、最初の 1 つのみが プリントされます。 .TP 8 .B self-insert-command \fR(テキスト文字) 挿入モード (デフォルト) では、タイプした文字を、 カーソル下の文字の後に挿入します。 上書きモードでは、タイプした文字で、カーソル下の文字を置き換えます。 入力モードは、通常、各行の間で維持されていますが、 シェル変数 \fBinputmode\fR を `insert(挿入)' あるいは、 `overwrite(上書き)' にセットしておくと、 エディタを、各行の始まりで、そのモードにすることができます。 \fIoverwrite-mode\fR も参照してください。 .TP 8 .B sequence-lead-in \fR(矢印接頭辞、メタ接頭辞、^X) 次に続く文字がマルチキーシーケンス (複数文字の連続) であることを 表します。マルチキーシーケンスをコマンドにバインドする場合、 実際には、次の 2 つのバインドを作ります。 まず、最初の文字を \fIsequence-lead-in\fR とします。そして、 シーケンス全体をそのコマンドにバインドします。 \fIsequence-lead-in\fR にバインドされた文字で始まる すべてのシーケンスは、他のコマンドにバインドされていなければ、 実質的には \fIundefined-key\fR にバインドされたのと同じことに なります。 .TP 8 .B spell-line \fR(M-$) \fIspell-word\fR と同様に、入力バッファ中の各単語のスペル訂正を 試みます。しかし、単語の最初の文字が、 `\-', `!', `^', `%' のうちのどれかの場合と、 単語中に `\\', `*', `?' のいずれかを含んでいる場合は、 スイッチや、置換などの問題を避けるために、これらの単語を無視します。 \fBスペル訂正\fRを参照してください。 .TP 8 .B spell-word \fR(M-s, M-S) \fBスペル訂正\fRの項で説明されているのと同じやり方で、現在の単語の スペルの訂正を試みます。 パス名として現れる単語の部分をそれぞれにチェックします。 .TP 8 .B toggle-literal-history \fR(M-r, M-R) 入力バッファのヒストリ置換を展開したり、`しなかったり' します。 \fIexpand-history\fR と、シェル変数 \fBautoexpand\fR も参照してください。 .TP 8 .B undefined-key \fR(割り付けのコマンドが無いキー) ベルを鳴らします。 .TP 8 .B up-history \fR(上矢印, ^P) ヒストリリストの中から 1 つ前のエントリを入力バッファにコピーします。 \fBhistlit\fR がセットされている場合、その記入された文字どおりの 形式を使います。 ヒストリリストを上の方へ 1 つずつ移動を繰り返した場合、 一番上で止まります。 .TP 8 .B vi-search-back \fR(?) 検索文字列 (\fIhistory-search-backward\fR と同様、グロブパターンでも 構いません) の入力のために `?' をプロンプト表示します。 その文字列を検索して、同じ文字列を入力バッファへコピーします。 合致するものが見つからなければ、ベルが鳴ります。 リターンキー (enter キー) を押すと、検索を終了して、入力バッファ中に 最後に合致した単語を残します。 escape キーを押すと、検索を終了して、合致したものを実行します。 \fIvi\fR モードのみです。 .TP 8 .B vi-search-fwd \fR(/) \fIvi-search-back\fR と同様ですが、前方へ検索します。 .TP 8 .B which-command \fR(M-?) 入力バッファの最初の単語に対して、\fIwhich\fR (組み込みコマンド の解説を参照) を実行します。 .SS "字句構造" シェルは入力された行をタブや空白で単語に分割します。 特殊文字 `&', `|', `;', `<', `>', `(', `)', 2 文字繰り返しの `&&', `||', `<<' , `>>' は、空白で囲まれているか どうかにかかわらず、常に単語の区切りになります。 .PP シェルの入力が端末からではないとき、文字 `#' は、コメントの始まりと して扱われます。`#' とその後ろの入力行の残りはコメントと解釈され、 文法解析されずに捨てられます。 .PP 特殊文字 (空白、タブ含む) は、その文字の直前にバックスラッシュ `\\' を置くことで、または、単一引用符 `''、二重引用符 `"'、 逆引用符 ``' で囲むことで、特殊な意味合いを持たないようにしたり、 場合によっては、他の単語の一部分にすることもできます。 他に引用がなされない限り、`\\' の直後に改行文字を置くと、改行文字は 空白扱いになります。しかし、引用中では、この文字の並びは改行文字に なります。 .PP さらに、\fBヒストリ置換\fRを除く、すべての\fB置換\fR (次項を参照) は、置換を含む文字列 (あるいは文字列の一部) を 単一引用符で囲むことで防ぐことができます。 あるいは、重大な文字 (たとえば、\fB変数置換\fR ならば `$' や、\fBコマンド置換\fRならば ``') を `\\' で クォートすることで 防ぐことができます。(\fBエイリアス置換\fRも例外ではありません。 一度定義された \fIalias\fR に対して、何らかの方法でその単語の どれかの文字をクォートすることで、そのエイリアスの置換を防ぐことが できます。エイリアスをクォートする普通の方法は、そのエイリアスの前に バックスラッシュを置くことです。) \fBヒストリ置換\fRは、バックスラッシュを用いることで防ぐことが できますが、単一引用符では防ぐことができません。 二重引用符、逆引用符でクォートされた文字列は、 \fB変数置換\fRと\fBコマンド置換\fRは受けますが、 その他の置換は受けません。 .PP 単一引用符、二重引用符で囲まれたテキストは 1 つの単語 (または その一部) となります。 それらの文字列中のメタ文字 (空白、タブを含む) は、単語を分割しません。 ひとつだけ特殊な場合 (次の\fBコマンド置換\fRを参照) として、 二重引用符で囲まれた文字列を 1 つ以上の単語に分けることができます。 これは、単一引用符で囲まれた文字列では決してできません。 逆引用符は特殊で、\fBコマンド置換\fR (そちらも参照) に、 影響を与え、その結果が 1 つ以上の単語になることもあります。 .PP 複雑な文字列をクォートする場合、特に、文字列自身にクォート文字が 含まれている場合は、わかりにくいかもしれません。 人間が書いたものの中では、引用符を引用のために使う必要はないことを 忘れないように! 文字列全体をクォートするのではなく、もし適当ならば異なるタイプの 引用符を用い、クォートする必要のある文字列の一部分のみをクォートする ことの方が、簡単かもしれません。 .PP シェル変数 \fBbackslash_quote\fR (そちらも参照) を セットすると、 バックスラッシュが常に `\\', `'', `"' をクォートするようにできます。(+) これによって、複雑な引用をする仕事が簡単になるかもしれません。 しかし \fIcsh\fR(1) のスクリプトでは、構文エラーの原因になります。 .SS 置換 ここで、シェルが入力に対して行うさまざまな変換を、 処理が行われる順に記述します。同時に、処理に関わるデータ構造と、 データ構造に影響を与えるコマンドと変数とにも触れておきます。 \fB字句構造\fRのところで説明する引用により、置換を抑制できることを 覚えておいてください。 .SS ヒストリ置換 端末から入力したコマンドひとつひとつ (イベント) は、ヒストリリストに 保存されます。直前のコマンドは常に保存されます。さらに、保存する コマンド数を、シェル変数 \fBhistory\fR に設定することができます。 重複するイベントを保存するかどうか、同じイベントの連続をそのまま 保存するかどうかを、シェル変数 \fBhistdup\fR に設定することが できます。 .PP 保存されたコマンドには、1 から始まる連続した番号が振られ、 タイムスタンプが打たれます。普通イベント番号を用いる必要はありませんが、 シェル変数 \fBprompt\fR の中に `!' を置くことで、現在のイベント番号を プロンプトの一部にすることができます。 .PP 実際のところ、シェルは、ヒストリを展開形式と 文字どおり (未展開) の形式とで保存しています。 シェル変数 \fBhistlit\fR を設定しておくと、 ヒストリを表示する / ヒストリに保存するコマンドで 文字どおりの形式を用いるようになります。 .PP 組み込みコマンド \fIhistory\fR により、ヒストリリストの表示、 ファイルに保存、ファイルからの読み込み、クリアをいつでも行えます。 シェル変数 \fBsavehist\fR と \fBhistfile\fR により、 ヒストリリストのログアウト時の自動保存と、ログイン時の自動読み込みを 設定することができます。 .PP ヒストリ置換により、ヒストリリストから単語の列を入力ストリームに 持ち込みます。これにより、前のコマンドの繰り返し、前のコマンドで使った 引数の繰り返し、前のコマンドで間違えたスペルの修正を わずかなキー入力で、かなり確実に 容易に行うことができるようになります。 .PP ヒストリ置換は、文字 `!' で始まります。ヒストリ置換は、 入力ストリームのどこから開始してもかまいませんが、入れ子には できません。 文字 `!' の前に `\\' を置くことで、`!' の特殊な意味を打ち消すことが できます。文字 `!' が、空白文字、タブ文字、改行文字、`='、`(' の 前にある場合は、そうした方が便利なので、無変更のまま渡されます。 入力行が `^' で始まる場合にも、ヒストリ置換が生じます。 この省略表現については後で説明します。 ヒストリ置換を示すための文字 (`!' と `^') は、 シェル変数 \fBhistchars\fR を設定することにより変更することが できます。入力行がヒストリ置換を含む場合、実行前に置換結果が 常に表示されます。 .PP ヒストリ置換には「イベント指定」、「単語指定子 (word designator)」、 「修飾子 (modifier)」を含めることができます。イベント指定は、 どのイベントから単語の列を取り出すかを指定します。単語指定子は、 選択したイベントからどの単語を選ぶかを指定します。修飾子は、 選択した単語をどう操作するかを指定します。 .PP イベント指定には、次のものがあります。 .PP .PD 0 .RS +4 .TP 8 .I n 番号: これはある特定のイベントを指定します。 .TP 8 \-\fIn\fR オフセット: これは現在のイベントの前 \fIn\fR 個目のイベントを 指定します。 .TP 8 # 現在のイベントを指定します。これは \fIcsh\fR(1) の中では注意して 扱わねばなりません。\fIcsh\fR(1) では、再帰呼び出しのチェックを していないからです。\fItcsh\fR では、再帰呼び出しは 10 レベルまで 許されています。(+) .TP 8 ! 1 つ前のイベントを指定します (`\-1' と等価)。 .TP 8 .I s 先頭の単語が \fIs\fR で始まるイベントのうち、最も新しいものを 指定します。 .TP 8 ?\fIs\fR? 文字列 \fIs\fR を含むイベントのうち、最も新しいものを指定します。 直後が改行文字の場合は、2 番目の `?' は省略可能です。 .RE .PD .PP たとえば、次のようなヒストリリストがあるとします。 .IP "" 4 \ 9 8:30 nroff \-man wumpus.man .br 10 8:31 cp wumpus.man wumpus.man.old .br 11 8:36 vi wumpus.man .br 12 8:37 diff wumpus.man.old wumpus.man .PP コマンドが、イベント番号とタイムスタンプ付きで表示されています。 現在のイベントは、まだ入力していませんが、イベント 13 です。 `!11' と `!-2' は、イベント 11 を指します。`!!' は、直前の イベントであるイベント 12 を指します。`!!' は、後ろに `:' が 付いている場合、`!' と省略することができます (`:' は後で説明します)。`!n' は、`n' から始まっている、 イベント 9 を指します。`!?old?' は、`old' を含んでいる イベント 12 を指します。単語指示子も単語修飾子もどちらも含まない場合、 ヒストリ参照はそのイベント全体を展開するだけです。ですから、 コピーコマンドを再実行したいときは `!cp' と入力しますし、`diff' の 出力が画面上端からスクロールして消えてしまう場合、`!!|more' と 入力します。 .PP 必要に応じ、中括弧で囲むことで、ヒストリ置換を前後のテキストから 分離することができます。たとえば、`!vdoc' とすると、`vdoc' で始まる コマンドを探しますが、この例で見つからないにしても、`!{v}doc' では、 あいまいさもなく `vi wumpus.mandoc' に展開されます。 中括弧の中でも、ヒストリ置換は入れ子になりません。 .PP (+) \fIcsh\fR(1) では、たとえば `!3d' は、イベント 3 の後ろに 英文字 `d' を付加して展開しますが、\fItcsh\fR では、これを `3d' で 始まるイベントのうち最新のものに展開します。つまり、完全な数値引数 だけをイベント番号と見なします。これにより、数字から始まるイベントを 呼び出すことが可能となります。`!3d' を \fIcsh\fR(1) のように 展開させるには、`!\\3d' と指定してください。 .PP イベントから単語を選択する場合、`:' と選択する単語を表す指示子を使い、 イベント指定を行うことができます。入力行の単語には、0 から始まる 番号が振られています。最初の単語 (普通、コマンドです) は 0 で、 2 番目の単語 (第 1 引数) は 1 といった具合です。基本的な単語指示子は 次のようになります。 .PP .PD 0 .RS +4 .TP 8 0 最初の単語 (コマンド) .TP 8 .I n \fIn\fR 番目の引数 .TP 8 ^ 最初の引数、`1' と等価 .TP 8 $ 最後の引数 .TP 8 % ?\fIs\fR? 検索で一致した単語 .TP 8 x\-y ある範囲の単語 .TP 8 .I \-y \fI`0\-y'\fR と等価 .TP 8 * `^\-$' と等価。但し、イベントが 1 単語しか含まない場合は何も返さない。 .TP 8 .I x* \fI`x\-$'\fR と等価 .TP 8 .I x\- \fI`x*'\fR と等価。但し、最後の単語 (`$') は除く。 .PD .RE .PP 選択した単語は、空白文字 1 つで区切られてコマンド行に挿入されます。 たとえば、`diff !!:1.old !!:1' と打ち込むことで、先の例の `diff' コマンドを入力することもできます (`:1' で、直前のイベントから 最初の引数を選択しています)。また、`diff !\-2:2 !\-2:1' と 打ち込むことで `cp' コマンドの引数を選択し、入れ換えることができます。 `diff' コマンドの引数の順番を気にしなければ、`diff !\-2:1\-2' と 打ち込んでも構いませんし、単に `diff !\-2:*' でも構いません。 `cp' コマンドは、現在のイベントを指す `#' を使い、 `cp wumpus.man !#:1.old' と書くことができます。`!n:\- hurkle.man' は、 `nroff' コマンドから最初の 2 単語を再利用し、 `nroff \-man hurkle.man' とすることになります。 .PP 文字 `:' は単語指定からイベント指定を分離しますが、引数選択子が `^', `$', `*', `%', `\-' で始まるとき、この文字 `:' は省略可能 です。たとえば、先ほどの `diff' コマンドは `diff !!^.old !!^' もしくは `diff !!$.old !!$' でも構わなかったのです。 しかし、`!!' が `!' に省略可能である場合、`\-' で始まる引数選択子は イベント指定として解釈されます。 .PP ヒストリ参照に、イベント指定のない単語指示子があっても構いません。 その場合、直前のコマンドを参照します。 .ig \" Not true, but we thought it was for a long time ... , unless a previous history reference occurred on the same line in which case this form repeats the previous reference. Thus `!?foo?^ !$' gives the first and last arguments from the command matching `?foo?'. 実際には正しくありませんが、我々は長い間そう信じていました。 ただし、これは同じ行に前のヒストリ参照が現れない場合に限ります。 この場合、この形式は直前の参照を繰り返します。よって、`!?foo?^ !$' は、`?foo?' に一致するコマンドから最初と最後の引数を与えます。 .. `diff' の例を続けるなら、単純に `diff !^.old !^' と入力することが できます。もしくは、逆順の引数を得るだけならば、単に `diff !*' で いいです。 .PP ヒストリ参照の中の単語は編集可能です。つまり、単語の後ろに 1 つまたは 複数の修飾子 (修飾子それぞれは `:' で始まります) を付けることで 「修飾」可能です。 .PP .PD 0 .RS +4 .TP 8 h 先頭のもの 1 つを残し、パス名の構成要素の後ろの部分を削除します。 .TP 8 t 末尾のもの 1 つを残し、パス名の構成要素の先頭の部分を削除します。 .TP 8 r ファイル名拡張子 `.xxx' を削除し、名前の基本部分だけを残します。 .TP 8 e 拡張子だけを残し、他をすべて削除します。 .TP 8 u 最初の英小文字を大文字に変換します。 .TP 8 l 最初の英大文字を小文字に変換します。 .TP 8 s\fI/l/r/\fR \fIl\fR を \fIr\fR で置換します。 \fIl\fR は \fIr\fR と同様に、単なる文字列です。名付け親である \fIed\fR(1) コマンドのような正規表現ではありません。 `/' の代わりに任意の文字を区切り文字として使うことができます。 `\\' を使い、\fIl\fR や \fIr\fR の中で区切り文字をクォートすることが できます。 \fIr\fR 中の文字 `&' は、\fIl\fR で置き換えられます。`\\' で `&' も クォートできます。\fIl\fR が空 (``'') の場合、以前の置換の \fIl\fR、 または以前のイベント指定 `?\fIs\fR?' の \fIs\fR を使用します。 最後の区切り文字の直後が改行文字の場合、その区切り文字を省略できます。 .TP 8 & 以前の置換を繰り返します。 .TP 8 g 後ろの修飾子を単語それぞれに適用します。 .TP 8 a (+) 後ろの修飾子を、ある単語だけにできるだけ多くの回数、適用します。 `a' と `g' をいっしょに用いて、修飾子をグローバルに適用することが できます。現在の実装では、修飾子 `a' と修飾子 `s' を同時に使用すると、 無限ループに陥る可能性があります。たとえば、`:as/f/ff/' は決して 終わりません。この動作は今後変更されるかもしれません。 .TP 8 p 新しいコマンド行を表示しますが、実行はしません。 .TP 8 q 置換された単語をクォートし、それ以上の置換が起きないようにします。 .TP 8 x q と同じです。ただし、単語を空白 / タブ / 改行文字のところで分割します。 .PD .RE .PP 修飾子は最初に見つかった修飾可能な単語だけに適用されます (`g' を 使用しない限り)。修飾可能な単語がない場合はエラーになります。 .PP たとえば、先の例の `diff' コマンドは、`diff wumpus.man.old !#^:r' とも 書くことができます。これは、`r' を用いて、同じ行 (`!#^') の最初の 引数から `.old' を削除しています。`echo hello out there' と 言っておいてから、`echo !*:u' を使い `hello' を大文字にできます。 `echo !*:au' を使い大声で言うようにできます。`echo !*:agu' を使い 絶叫させることもできます。`mail \-s "I forgot my password" rot' の後で `!:s/rot/root' を続けることで、`root' のスペル間違いを直すこと ができます (スペル間違いの訂正については、\fBスペル訂正\fRの項に 別のやり方があります)。 .PP 置換には特別な省略記法があります。`^' が入力行の先頭にある場合、 `!:s^' と等価です。よって、先の例でスペルを訂正するには、 ^rot^root と言うこともできたわけです。これは明示的に `!' で 始まらないヒストリ置換としては唯一のものです。 .PP (+) \fIcsh\fR では、ヒストリ展開または変数展開に適用される修飾子は 1 つだけです。\fItcsh\fR では、1 つ以上の修飾子が使用される可能性が あります。たとえば、次のような場合を考えます。 .IP "" 4 % mv wumpus.man /usr/man/man1/wumpus.1 .br % man !$:t:r .br man wumpus .PP \fIcsh\fR では、この結果は `wumpus.1:r' となります。コロンが後ろに続く 置換は、中括弧を用いてコロンと区切る必要があります。 .IP "" 4 > mv a.out /usr/games/wumpus .br > setenv PATH !$:h:$PATH .br Bad ! modifier: $. .br > setenv PATH !{\-2$:h}:$PATH .br setenv PATH /usr/games:/bin:/usr/bin:. .PP 最初の試みは \fIcsh\fR では成功しますが、\fItcsh\fR では失敗します。 この理由は、\fItcsh\fR は 2 番目のコロンの後ろに、`$' ではなく 修飾子があると思っているからです。 .PP 最後に、ヒストリはここで説明してきた置換だけでなく、エディタでも 利用することができます。編集コマンド \fIup-history\fR, \fIdown-history\fR, \fIhistory-search-backward\fR, \fIhistory-search-forward\fR, \fIi-search-back\fR, \fIi-search-fwd\fR, \fIvi-search-back\fR, \fIvi-search-fwd\fR, \fIcopy-prev-word\fR, \fIinsert-last-word\fR は ヒストリリスト中のイベントを検索し、入力バッファにイベントを コピーします。編集コマンド \fItoggle-literal-history\fR は、 入力バッファでヒストリ行を展開するか文字どおりに扱うかを切り替えます。 \fIexpand-history\fR, \fIexpand-line\fR はそれぞれ、現在の単語、 または、入力バッファ全体でヒストリ置換を展開します。 .SS エイリアス置換 シェルは、エイリアスのリストを保持しています。このリストは、 \fIalias\fR, \fIunalias\fR コマンドを使って設定、削除、表示する ことができます。コマンド行を解釈し単純コマンド (\fBコマンド\fRを参照) に分割したあと、複数のコマンドを左から右へ、それぞれの最初の単語が エイリアスを持っているかをチェックします。エイリアスを持っている 場合、最初の単語をエイリアスで置き換えます。置き換えたエイリアスが ヒストリ参照を含む場合、元のコマンドを直前の入力行とみなして、 \fBヒストリ置換\fR (そちらも参照) が適用されます。 エイリアスがヒストリ置換を含まない場合、引数リストは変更されず そのままです。 .PP そのため、たとえば `ls' のエイリアスが `ls \-l' だった場合、コマンド `ls /usr' は `ls \-l /usr' になります。ここで、引数リストは 影響を受けません。`lookup' のエイリアスが `grep !^ /etc/passwd' だとすると、コマンド `lookup bill' は `grep bill /etc/passwd' に なります。エイリアスを使い、パーザのメタ記法を利用できます。 たとえば、`alias print 'pr \e!* | lpr'' は、引数を ラインプリンタに \fIpr\fR(1) する ``コマンド''(`print') を 定義します。 .PP コマンドの最初の単語がエイリアスを持たなくなるまで、エイリアス置換は 繰り返されます。(先の例のように) エイリアス置換が最初の単語を 変更しない場合、そのエイリアスに印を付けてループが生じない ようにします。それ以外のループは検出され、エラー扱いになります。 .PP シェルが参照するエイリアスがいくつかあります。\fB特殊エイリアス\fR を参照してください。 .SS 変数置換 シェルは変数のリストを管理しており、それらは 0 個またはそれ以上の 個数の単語のリストを値として持ちます。シェル変数の値は、コマンド \fIset\fR, \fIunset\fR により表示、変更することができます。システムは、 自分自身の ``環境'' 変数のリストを保持しています。環境変数は コマンド \fIprintenv\fR, \fIsetenv\fR, \fIunsetenv\fR により表示、 変更することができます。 .PP (+) `set \-r' (参照) により変数を読み出し専用にすることが できます。読み出し専用変数は、変更や unset ができません。これを 試みるとエラーになります。一度読み出し専用にした変数は、 書き込み可能に戻すことはできません。ですから、`set \-r' は 注意して使用する必要があります。環境変数は読み出し専用に することはできません。 .PP シェルが設定、参照する変数がいくつかあります。たとえば、変数 \fBargv\fR は、シェルの引数リストの複製で、この変数の値である単語は特別な方法で 参照されます。シェルが参照する変数の中には、トグルスイッチがあります。 シェルは、これらの変数が何の値を持っているかではなく、値が設定されて いるかどうかにだけ影響を受けます。たとえば、変数 \fBverbose\fR は、 コマンド入力をエコーするかどうかを制御するトグルスイッチです。 コマンド行オプション \fB\-v\fR がこの変数に値を設定します。 シェルが参照する変数すべてのリストは、\fB特別なシェル変数\fRにあります。 .PP 変数を数値として扱う操作もあります。コマンド `@' により、 数値計算を実行し、結果を変数に代入することが可能となります。 しかしながら、変数の値は常に (0 個以上の) 文字列として表現されて います。数値として扱うために、空文字列は 0 と見なされます。 複数の単語からなる値の、2 番目以後の単語は無視されます。 .PP 入力行のエイリアス処理を終え、字句解析を終えた後で、そして、 各コマンドを実行する前に、`$' 文字をキーとして変数置換が行われます。 この展開は `$' の前に `\e' を置くことで抑止できます。ただし、`"' の 中は別で、ここでは\fI常に\fR変数置換が行われます。また、`'' の中も 別で、ここでは\fI決して\fR変数置換が行われません。``' で クォートした文字列は後で解釈されますから、 (後の\fBコマンド置換\fRを参照) そこでの `$' 置換は後になるまで行われません。`$' の後ろが空白、 タブ、改行文字の場合は、`$' 置換は発生しません。 .PP 入出力リダイレクトは、変数展開の前に識別され、別々に変数展開されます。 それ以外では、コマンド名と引数リスト全体が一緒に展開されます。ですから、 (この時点での) 最初の単語 (コマンド) から 2 つ以上の単語が生成される 可能性があります。展開後の複数の単語のうち最初のものがコマンド名となり、 残りの単語は引数になります。 .PP `"' で囲まれているか、修飾子 `:q' が指定されている場合を除き、 最終的には、変数置換の結果に対し、コマンド置換とファイル名置換が 適用されます。`"' で囲まれている場合、値が複数の単語で構成される変数は、 1 つの単語 (の一部) に展開されます。 この単語には、その変数の値である単語が空白で区切られたものを 含みます。置換の際に修飾子 `:q' が適用される場合、変数は複数の単語に 展開されます。それぞれの単語は空白で区切られ、以後、コマンド置換と ファイル名置換が適用されないようにクォートされます。 .PP シェルへの入力に変数の値を持ち込むための方法として、以下の構文が あります。特に注がない限り、設定されていない値の参照はエラーになります。 .PP .PD 0 $\fIname\fR .TP 8 ${\fIname\fR} 変数 \fIname\fR の値である単語に置換します。この単語は、 それぞれが空白で区切られたものです。 中括弧は \fIname\fR とそれ以後の文字列とを分離し、以後の文字列も含めて 1 つの変数名として解釈されないようにします。シェル変数の名前は上限が 20 文字であり、先頭は英文字で、2 文字目以後は英文字か数字で 構成されます。アンダスコアは英文字と見なします。\fIname\fR が シェル変数ではないが、環境に設定されている場合、環境の値を返します (ただし、修飾子 `:' と次で示す他の形式は利用可能です)。 .PP $\fIname\fR[\fIselector\fR] .TP 8 ${\fIname\fR[\fIselector\fR]} \fIname\fR の値のうち選択した単語のみで置換します。\fIselector\fR は `$' 置換が適用され、1 つの数値または `\-' で区切った 2 つの数値で 構成することができます。変数の値の先頭の単語は 1 番目として数えます。 範囲の最初の値を省略した場合、デフォルトの値 1 になります。範囲の 最後の数値を省略した場合、デフォルトの値 `$#\fIname\fR になります。 \fIselector\fR `*' はすべての単語を選択します。2 番目の引数が 省略されるか、あるいは範囲に収まっている場合、範囲が空になっても エラーになりません。 .TP 8 $0 コマンド入力を読み込んでいるファイル名で置換します。ファイル名が 不明の場合エラーになります。 .PP $\fInumber\fR .TP 8 ${\fInumber\fR} `$argv[\fInumber\fR]' と等価です。 .TP 8 $* `$argv' と等価です。これは `$argv[*]' と等価です。 .PD .PP \fBヒストリ置換\fRのところで説明した `:' 修飾子 (`:p' を除く) が、 上記の置換に対して適用できます。2 つ以上の修飾子も適用できます。 (+) \fBヒストリ置換\fR (そちらも参照) と同様に、 変数置換とリテラルのコロンとを分離するために、中括弧が必要なことが あります。修飾子は中括弧の中に置かねばなりません。 .PP 以下の置換は `:' 修飾子で修飾することはできません。 .PP .PD 0 $?\fIname\fR .TP 8 ${?\fIname\fR} \fIname\fR が設定されているときは、文字列 `1' で置き換えられます。 設定されていないときは、文字列 `0' で置き換えられます。 .TP 8 $?0 現在の入力ファイル名がわかっているときは、`1' で置き換えられます。 わかっていないときは、`0' で置き換えられます。 対話型のシェルでは、常に `0' です。 .PP $#\fIname\fR .TP 8 ${#\fIname\fR} \fIname\fR 中の単語の数で置き換えられます。 .TP 8 $# `$#argv' と等価です。(+) .PP $%\fIname\fR .TP 8 ${%\fIname\fR} \fIname\fR の文字数で置き換えられます。(+) .PP $%\fInumber\fR .TP 8 ${%\fInumber\fR} $argv[\fInumber\fR] の文字数で置き換えられます。(+) .TP 8 $? `$status' と等価です。(+) .TP 8 $$ (親) シェルの (10 進数の) プロセス番号で置き換えられます。 .TP 8 $! 本シェルが開始したバックグラウンドプロセスのうち最新のものの (10 進数の) プロセス番号で置き換えられます。(+) .TP 8 $_ 最後に実行したコマンドのコマンド行で置き換えます。(+) .TP 8 $< 標準入力から読み込んだ 1 行を、一切解釈をせずにこの変数と置き換えます。 シェルスクリプト中で、キーボードから読み込む際に用います。(+) \fIcsh\fR は、`$<:q' と等価であるかのように、$< をクォートしますが、 \fItcsh\fR はそうしません。それだけでなく、\fItcsh\fR がユーザの 入力行を待つとき、ユーザは割り込みを入力して、置換されるべき行が 入る列を中断することができます。しかし \fIcsh\fR ではそうすることが できません。 .PD .PP 編集コマンド \fIexpand-variables\fR は、 通常は `^X-$' にバインドされていますが、 これを使って、個々の変数を対話的に展開することができます。 .SS "コマンド置換、ファイル名置換、ディレクトリスタック置換" 組み込みコマンドの引数に対し、残りの置換が選択的に適用されます。 選択的とは、行の中で評価されなかった部分は、これらの展開の対象に ならないという意味です。シェルの内部コマンドでないコマンドに対しては、 コマンド名は引数リストとは別個に置換されます。この置換は最後の方、 入出力リダイレクトを実行したあと、メインシェルの子供の中で生じます。 .SS コマンド置換 ``' で囲まれたコマンドは、コマンド置換を示します。囲まれたコマンドの 出力を、空白、タブ、改行文字のところで別々の単語に分割します。 この出力に変数置換、コマンド置換を実行し、 元の文字列があった場所に置きます。 .PP 二重引用符 (`"') の内側のコマンド置換は、空白、タブを保存します。 改行文字だけは新しく単語分けを行います。 ただし、どのような場合でも最後の改行文字だけは新しい単語になりません。 ですから、1 行まるまる出力するようなコマンドでも、コマンド置換を 用いると単語の一部だけを生成することができます。 .SS ファイル名置換 単語が `*', `?', `[', `{' のいずれかの文字を含む場合、または先頭が `~' で始まる場合、その単語はファイル名置換 (あるいはグロブ (globbing) と 呼ばれます) の候補になります。このような単語をパターン (グロブパターン) と見なし、そのパターンにマッチするファイル名の リストをアルファベット順で整列したもので置き換えます。 .PP ファイル名マッチの際に、ファイル名の先頭、または `/' の直後の 文字 `.' は、`/' と同様に、明示的にマッチさせなければなりません。 文字 `*' は、空文字列を含むどのような文字列にもマッチします。 文字 `?' は、どのような 1 文字にもマッチします。列 `[...]' は、 括弧の中で指定した文字のいずれかにマッチします。`[...]' 内では、 文字の対を `\-' でつなぐことで、(文字順序で) その 2 文字の範囲にある 文字のいずれかにマッチします。 .PP (+) グロブパターンの中には反転を指定できるものがあります。 列 `[^...]' は、括弧内の文字 / 範囲で指定して\fIいない\fR文字 ちょうど 1 つにマッチします。 .PP `^' により、グロブパターン全体を反転させることもできます。 .IP "" 4 > echo * .br bang crash crunch ouch .br > echo ^cr* .br bang ouch .PP `?', `*', `[]' のいずれも使わないグロブパターンや、 `{}', `~' (あとで説明します) を使うグロブパターンは、 反転しても正しい結果を得られません。 .PP メタ記法 `a{b,c,d}e' は、`abe ace ade' の省略記法です。左から右への 出現順序は保存されます。`/usr/source/s1/{oldls,ls}.c' は、 `/usr/source/s1/oldls.c /usr/source/s1/ls.c' に展開します。 マッチングの結果は下位のレベルで個別に整列され、出現順序は保存 されます。 `../{memo,*box}' は、`../memo ../box ../mbox' などに 展開されるでしょう (ここで、`memo' が `*box' のマッチング結果とともに 整列されていないことに注意してください)。この指定が展開された結果 ファイルが存在しなくてもエラーになりませんが、展開結果を渡した先の コマンドでエラーになる可能性はあります。この指定は入れ子にすることが できます。特殊な場合として、単語 `{', `}', `{}' は変更されずに そのまま渡されます。 .PP ファイル名先頭の文字 `~' は、ホームディレクトリを指します。単独で 用いられた場合、つまり `~' だけの場合、シェル変数 \fBhome\fR の値に 反映されているように、呼び出したユーザの ホームディレクトリに展開されます。`~' の直後に英文字、 数字、または文字 `\-' で構成される名前が続く場合、シェルはその 名前を持つユーザを検索し、そのユーザのホームディレクトリに展開します。 ですから、`~ken' はたとえば `/usr/ken' に展開されます。 また、`~ken/chmach'は、たとえば `/usr/ken/chmach' に展開されます。 文字 `~' の後ろに英文字でもなく `/' でもない文字が続いた場合、 もしくは、文字 `~' が単語の先頭以外に現れた場合、変更されずに そのまま渡されます。ですから、 `setenv MANPATH /usr/man:/usr/local/man:~/lib/man' のようなコマンド では、期待通りのホームディレクトリ置換が起こりません。 .PP `*', `?', `[', `~' のどれかを含むグロブパターン (`^' は付いていてもいなくとも同じ) は、マッチするファイルが ひとつもないとエラーになります。 しかし、グロブパターンのリストのうちのひとつでも マッチすれば (他のものはマッチするものがなくても) エラーになりません (したがって、たとえば `rm *.a *.c *.o' は、カレントディレクトリに `.a', `.c', `.o' で終わるファイルがひとつもないときに限って エラーになります)。 また、シェル変数 \fBnonomatch\fR が設定されている場合、 どれにもマッチしないパターン (あるいはパターンの列) は エラーにならずに無変換のまま残されます。 .PP ファイル名置換を止めるために、シェル変数 \fBnoglob\fR を設定することが できます。編集コマンド \fIexpand-glob\fR は、通常は `^X-*' に結合されて いますが、これを使い、個々のファイル名置換の展開を対話的に 行うことができます。 .SS "ディレクトリスタック置換 (+)" ディレクトリスタックはディレクトリの列であり、0 から番号付けられ、 組み込みコマンド \fIpushd\fR, \fIpopd\fR, \fIdirs\fR (そちらも参照) が使用します。 \fIdirs\fR コマンドを使用すると、ディレクトリスタックを いつでも表示でき、ファイルに書き込むことができ、 ファイルから読み込むことができ、そしてクリアすることが できます。シェル変数 \fBsavedirs\fR, \fBdirsfile\fR に 値を設定することで、ログアウト時のディレクトリスタックの書き込みと、 ログイン時の読み込みを自動的に行うことができます。シェル変数 \fBdirstack\fR を使い、ディレクトリスタックの中を調べることができ、 ディレクトリスタックに任意のディレクトリを設定することができます。 .PP 文字 `=' の後ろに 1 桁以上の数字が続くと、それは ディレクトリスタック中のエントリに展開されます。特殊な場合として、 `=\-' はスタックの最新のディレクトリに展開します。たとえば、 次のようにです。 .IP "" 4 > dirs \-v .br 0 /usr/bin .br 1 /usr/spool/uucp .br 2 /usr/accts/sys .br > echo =1 .br /usr/spool/uucp .br echo =0/calendar .br /usr/bin/calendar .br > echo =\- .br /usr/accts/sys .PP シェル変数 \fBnoglob\fR, \fBnonomatch\fR と編集コマンド \fIexpand-glob\fR はファイル名置換と同様に ディレクトリスタックにも適用されます。 .SS "その他の置換 (+)" ファイル名を含む変換が他にいくつかあります。厳密には先に説明した ものと関係があるわけではありませんが、完全を期するために ここで説明しておきます。変数 \fBsymlinks\fR (そちらも参照) が `expand' に設定されている場合、\fIどのような\fRファイル名も フルパスに展開される可能性があります。クォートすることで この展開を止めることができ、編集コマンド \fInormalize-path\fR を 使用すると要求に応じて展開を止めることができます。また、編集コマンド \fInormalize-command\fR は、PATH にあるコマンドを、 要求に応じてフルパスに展開します。 最後に、\fIcd\fR と \fIpushd\fR は `\-' を以前の作業ディレクトリ (シェル変数 \fBowd\fR と等価) と解釈します。これは置換でもなんでも なく、このコマンドだけで認識される省略記法です。それでも、この表記も クォートすることでこの解釈を止めることができます。 .SS コマンド 次の 3 つのセクションでは、シェルがどのようにコマンドを実行し、 それらの入出力をどのように扱うかを説明します。 .SS 単純コマンド、パイプライン、コマンド列 単純コマンドは、単語の列であり、 その最初の単語が実行されるコマンドです。 `|' 文字によって区切られた一連の単純コマンドは パイプラインを形成します。 パイプライン内のそれぞれのコマンドの出力は次のコマンドの 入力に接続されます。 .PP 単純コマンドとパイプラインは `;' 文字を使って コマンド列に組み入れることができ、並んでいる順に実行されます。 コマンドとパイプラインは `||' や `&&' でコマンド列に 組み込むこともでき、C 言語で扱われるのと同様に、 最初のコマンドが失敗した時にだけ (`||'の場合)、 あるいは成功した時にだけ (`&&'の場合)、次のコマンドが実行されます。 .PP 単純コマンド、パイプライン、またはコマンド列は、 括弧 `()' を使って単純コマンドを形成することができ、 パイプラインやコマンド列の一部として使用できます。 コマンド、パイプライン、またはコマンド列の後に `&' を 置いて実行すると、そのコマンドの終了を待たずに 次のコマンドを実行できます。 .SS "組み込みコマンド、非組み込みコマンドの実行" 組み込みコマンドは、シェルの中で実行されます。 パイプラインの構成要素の最後以外が組み込みコマンドのとき、 パイプラインは、サブシェル内で実行されます。 .PP 括弧で括られたコマンドは、常にサブシェル内で実行されます。 .IP "" 4 (cd; pwd); pwd .PP これは、現在のディレクトリを移動することなくく\fBホーム\fR ディレクトリを表示 (その後に現在のディレクトリを表示) し、 その一方、 .IP "" 4 cd; pwd .PP この場合は\fBホーム\fRディレクトリに移動します。 括弧で括られたコマンドは、たいてい \fIcd\fR が現在のシェルに 影響するのを防ぐために使用します。 .PP 実行するコマンドが組み込みコマンドでないことが判明すると、 シェルはそのコマンドを \fIexecve\fR(2) を通じて実行しようとします。 環境変数 \fBpath\fR 内の各語は、シェルがコマンドを検索する ディレクトリを指定します。 \fB\-c\fR, \fB\-t\fR オプションのいずれも指定されていない場合、 これらのディレクトリ内の名前を内部テーブルでハッシュし、 そのコマンドが存在する可能性のあるディレクトリだけで \fIexecve\fR(2) の実行を試みます。 このことは、検索パス内のディレクトリの数が多い場合に、 コマンドの位置確定を大いに高速化します。 この機構が (\fIunhash\fR によって) オフにされ、 シェルに \fB\-c\fR または \fB\-t\fR のオプションが与えられるか、 それぞれの \fBpath\fR のディレクトリ構成要素のいずれかが `/' で始まっていない場合、シェルは現在の作業ディレクトリと 与えられたコマンド名を結合して実行するファイルのパス名を形成します。 .PP ファイルに実行許可であってシステムが実行可能ではない場合、 (例 : 実行可能バイナリ、インタプリンタを指定したスクリプト ではないとき)、それをシェルコマンドを含むファイルであるとみなし、 新しいシェルを起動してそのファイルを読み込みます。 \fIシェル\fRの特殊なエイリアスで、シェル自体ではなくインタプリタを 指定するように設定することもできます。 .PP 慣習的な‘#!' スクリプトインタプリタを理解しないシステム上では、 シェルはそれをエミュレートするようにコンパイルされます ; シェル変数 \fBversion\fR を参照してください。 その場合、シェルがファイルの最初の行をチェックし、それが `#!\fIinterpreter\fR \fIarg\fR ...' の形式であるかどうかを 確認します。 この形式であれば、シェルは与えられた\fI引数\fRとともに \fIインタプリタ\fRを起動して、そのファイルを標準入力に供給します。 .SS 入出力 コマンドの標準入力と標準出力は以下の文法に従って リダイレクトすることができます: .PP .PD 0 .TP 8 < \fIname ファイル \fIname\fR (変数、コマンド、ファイル名展開を受けます) をオープンし、コマンドの標準入力とします。 .TP 8 << \fIword \fIword\fR と同一の行が出現するまで、シェルの入力を読み込みます。 \fIword\fR は変数、ファイル名、コマンド置換を受けません。 シェル入力の行は読み込まれるとすぐ、置換を行う前に \fIword\fR と比較されます。\fIword\fR に `\e', `"', `'', ``' のクォートが出現しなければ、行の中でコマンド置換が実行されます。 この置換を抑制するために、`\e' によって `$', `\e', ``' をクォートすることができます。コマンド置換において、 すべての空白、タブ、改行は保存されますが、最後の改行は削除されます。 読み込んだ行はすべてテンポラリファイルに保存され、 コマンドの標準入力として用いられます。 .PP > \fIname .br >! \fIname .br >& \fIname .TP 8 >&! \fIname ファイル \fIname\fR を標準出力として用います。 ファイルが存在しなければ作成されます。すでにファイルが存在すれば その内容は切り捨てられ、以前の内容は失われます。 .RS +8 .PD .PP シェル変数 \fBnoclobber\fR がセットされている場合、 ファイルが存在しないか文字型特殊ファイル (端末や `/dev/null' のような) でなければ エラーになります。これは、すでに存在するファイルを間違えて 削除してしまうことを防止します。`!' を用いた形式を使うと、 この検査を抑制することができます。 .PP `&' を用いた形式では、標準出力とともに診断メッセージ 出力もファイルへリダイレクトされます。 \fIname\fR は、`<' の 入力ファイル名の場合と同様の展開を受けます。 .PD 0 .RE .PP >> \fIname .br >>& \fIname .br >>! \fIname .TP 8 >>&! \fIname `>' と同様に、ファイル \fIname\fR を標準出力として用います。 ただし、コマンドの出力はファイルへ追加されます。 変数 \fBnoclobber\fR がセットされている場合、ファイルが \fI存在しなければ\fRエラーとなります。 `!' を用いることで、この検査を抑制することができます。 .PD .PP コマンドは、シェルが起動されたときの環境を引き継ぎます。 ただしこの環境は入出力のパラメータによって変更されますし、 コマンドがパイプラインの中にあった場合も変更されます。 したがって、以前のいくつかのシェルとは異なり、シェルの コマンドファイルから起動されたコマンドは、デフォルトでは そのコマンドのテキストへアクセスできません。かわりに それらのコマンドは、シェルのもともとの標準入力をそのまま 受け継ぎます。 シェルスクリプトの内部で、コマンドにあらかじめ決まった (inline) データを渡す場合には、標準入出力の形式ではなく、 `<<' の機構を使うことができます。 このように制限することにより、シェルコマンドスクリプトを パイプラインの一部として用いることができます。 バックグラウンドで実行されているコマンドの標準入力も \fI/dev/null\fR 等にリダイレクトされること\fIなく\fR、 シェルの標準入力をそのまま受け継いでいます。 もし標準入力が端末で、コマンドが端末から読み込もうとした場合、 そのプロセスはブロックされ、シェルはユーザにそのことを通知します (\fBジョブ\fRの項を参照)。 .PP 診断メッセージ出力もパイプにリダイレクトすることが できます。単に `|' のかわりに `|&' を使います。 .PP シェルは、標準出力のリダイレクトなしで、診断メッセージ出力を リダイレクトできなくなります。 そのため、`(\fIコマンド\fR > \fI出力ファイル\fR) >& \fIエラーファイル\fR' は、無難な予備手段としてされてます。 \fI出力ファイル\fR、\fIエラーファイル\fRのどちらかが、 端末に出力を送るための `/dev/tty' です。 .SS 特徴 ここではシェルがどのようにコマンドラインを受け入れ、 解釈し、実行するかを説明しました。 次は、便利な特徴について説明します。 .SS "制御フロー" このシェルには、 コマンドファイル (シェルスクリプト) や (制約はあるものの便利な) 端末からの入力 処理の流れを制御するために使用できる 多くのコマンドを備えています。 これらのコマンドは、 入力の再読み込みや読み飛ばしを行うため シェルを強制的に操作します。 これらの実装のために、幾つかのコマンドには制限があります。 .PP \fIforeach\fR、\fIswitch\fR、\fIwhile\fR 文は、 \fIif\fR 文の \fIif-then-else\fR 形式と同様に、 後で示すように入力行の単独の単純コマンド中に 主要なキーワードが現れることを要求します。 .PP シェルの入力がシーク可能でない場合は、 ループが読み込まれると常に入力をバッファし、 この内部バッファをシークすることでループによる 再読み込みを可能にします。 (これを許可した結果、 後方へ向かう \fIgoto\fR がシーク可能でない入力についても 成功することになります。) .SS 式 組み込みコマンドの \fIif\fR, \fIwhile\fR, \fIexit\fR は 共通した文法を持った式を使います。 式には、次の 3 つのセクションの中で説明される 任意の演算子を含めることができます。 \fI@\fR 組み込みコマンド (そちらも参照) 自体は、 文法を区切るので注意してください。 .SS "論理演算子, 算術演算子, 比較演算子" これらの演算子は C の演算子と 同じ優先順位となっています。 演算子には、次のものがあります。 .IP "" 4 || && | ^ & == != =~ !~ <= >= .br < > << >> + \- * / % ! ~ ( ) .PP ここに挙げた演算子は右側のものほど優先順位が高くなっています。 ただし、`==' `!=' `=~' `!~' の 4 つ、`<=' `>=' `<' `>' の 4 つ、 `<<' `>>' の 2 つ、`+' `-' の 2 つ、`*' `/' `%' の 3 つは それぞれ同一のグループに所属しており、同じグループに所属している 演算子の優先順位は同じレベルとなっています。 演算子 `==' `!=' `=~' `!~' は引数を文字列として比較します。 他の演算子はすべて数値で比較します。 演算子 `=~' `!~' は `!=' `==' と似ていますが、 左側のオペランドにマッチするグロブパターン (\fBファイル名置換\fRを参照) を右側に置くことが異なります。 必要なものに対してだけパターンマッチを行うので、 シェルスクリプト中における \fIswitch\fR 組み込みコマンドの使用の必要を減らします。 .PP `0' で始まる文字列は 8 進数とみなされます。 空の文字列や引数がぬけているものは `0' とみなされます。 すべての式の結果は 10 進数で表される文字列になります。 特に、式の構成要素が同一の単語中に複数個現れることはないと いうことに注意してください。 例外として、パーサに文法的に特別な意味を持つ式の構成要素 (`&' `|' `<' `>' `(' `)') が隣りにくることは構いません。 ただし、これらは空白で区切られるべきです。 .SS "コマンド終了ステータス" 式の中でコマンドを実行することができ、 式を中括弧 (`{}') で囲むと 終了ステータスが返されます。 中括弧は、コマンドの単語から空白で区切ることを 忘れないでください。 コマンドの実行が成功した場合は、 真 (たとえば `1') を返します。 コマンドが 0 のステータスで終了した場合、 または実行に失敗した場合は、偽 (たとえば `0') を返します。 もっと詳しいステータスの情報が必要な場合は、 コマンドを式の外部で実行し、 シェル変数 \fBstatus\fR を調べてください。 .SS "ファイル問い合わせ演算子" これらの演算子のうち幾つかは ファイルと関連するオブジェクトについて 真/偽の判定を行います。 これらは \fB\-\fIop file\fR の形式です。 \fIop\fR は次のうちのどれか 1 つです。 .PP .PD 0 .RS +4 .TP 4 .B r 読み取りアクセス .TP 4 .B w 書き込みアクセス .TP 4 .B x 実行アクセス .TP 4 .B X パス中にある実行可能ファイルやシェル組み込みコマンド。 たとえば `\-X ls' と `\-X ls\-F' は一般に真であり、 `\-X /bin/ls' はそうではない (+) .TP 4 .B e 存在 .TP 4 .B o 所有者 .TP 4 .B z サイズ 0 .TP 4 .B s サイズが 0 でない (+) .TP 4 .B f 通常ファイル .TP 4 .B d ディレクトリ .TP 4 .B l シンボリックリンク (+) * .TP 4 .B b ブロック型特殊ファイル (+) .TP 4 .B c キャラクタ型特殊ファイル (+) .TP 4 .B p 名前付きパイプ (fifo) (+) * .TP 4 .B S ソケット型特殊ファイル (+) * .TP 4 .B u set-user-ID ビットがセットされている (+) .TP 4 .B g set-group-ID ビットがセットされている (+) .TP 4 .B k スティッキービットがセットされている (+) .TP 4 .B t \fIfile\fR (これは数字でなければならない) は 端末デバイスに対してオープンしている ファイル記述子である (+) .TP 4 .B R migrate されている (convex システムのみ有効) (+) .TP 4 .B L 多重演算子の中でこの演算子の後にくる演算子は、 シンボリックリンクが指されているファイルではなく、 シンボリックリンクそのものに適用される (+) * .RE .PD .PP \fIfile\fR はコマンドと展開されたファイル名で、 指定された実ユーザに対する関係があるかどうか テストします。 \fIfile\fR が存在していない場合、 もしくはアクセスできない場合、 `*' で示した演算子については、 指定のファイルタイプが現在のシステムに 存在していなければ すべての問い合わせは偽 (たとえば `0') を返します。 .PP s true これらの演算子は、簡潔にするために連結することができます。 `\-\fIxy file\fR' は `\-\fIx file\fR && \-\fIy file\fR' と等価です。(+) たとえば `\-fx' は 通常の実行可能ファイルに対しては真 (`1' を返す) ですが、 ディレクトリに対してはそうではありません。 .PP s \fBL\fR は多重演算子の中で使用できます。 この演算子の後にくる演算子は、 シンボリックリンクが指されているファイルではなく、 シンボリックリンクそのものに適用されます。 たとえば `\-lLo' は 呼び出しユーザが所有しているリンクに対しては真です。 \fBLr\fR, \fBLw\fR, \fBLx\fR は リンクに対しては常に真で、 リンクでないものに対しては偽です。 \fBL\fR は 多重演算子の中で最後の演算子になった場合、 異なった意味を持ちます。 以下を参照してください。 .PP s \fIfile\fR に渡すべき演算子と、そうでない演算子 (たとえば \fBX\fR と \fBt\fR) を連結することは可能ですが、 実用的ではなく、しばしば間違いの元になります。 特に、ファイルでない演算子に \fBL\fR をつけると、 妙な結果になります。 .PP 他の演算子は他の情報、つまり単なる `0' や `1' だけ ではない情報を返します。(+) これらは前に示したのと同じ書式になります。 \fIop\fR は次のうちのどれか 1 つです。 .PP .PD 0 .RS +4 .TP 8 .B A エポックからの秒数で表した、最後にファイルにアクセスした時間 .TP 8 .B A: \fBA\fR と同じで、タイムスタンプの書式。 例: `Fri May 14 16:36:10 1993' .TP 8 .B M 最後にファイルを変更した時間 .TP 8 .B M: \fBM\fR と同じで、タイムスタンプの書式 .TP 8 .B C 最後に inode を変更した時間 .TP 8 .B C: \fBC\fR と同じで、タイムスタンプの書式 .TP 8 .B D デバイス番号 .TP 8 .B I inode 番号 .TP 8 .B F \fIdevice\fR:\fIinode\fR の形式で表した 複合 \fBf\fRile 識別子 .TP 8 .B L シンボリックリンクが指しているファイルの名前 .TP 8 .B N (ハード) リンクの数 .TP 8 .B P 先頭に 0 がついていない 8 進数で表したパーミッション .TP 8 .B P: \fBP\fR と同じで、先頭に 0 がつく .TP 8 .B P\fImode `\-P \fIfile\fR & \fImode\fR' と等価。 たとえば、`\-P22 \fIfile\fR' は \fIfile\fR のグループと他者が書き込み可であれば `22' を、 グループのみであれば `20' を、何もなければ `0' を返す。 .TP 8 .B P\fImode\fB: \fBP\fImode\fB:\fR と同じで、先頭に 0 がつく .TP 8 .B U 数値で表したユーザ ID .TP 8 .B U: ユーザ名、ユーザ名が見つからなかった場合は数値で表したユーザ ID .TP 8 .B G 数値で表したグループ ID .TP 8 .B G: グループ名、グループ名が見つからなかった場合は数値で表したグループ ID .TP 8 .B Z バイト数で表したサイズ .RE .PD .PP これらの演算子のうち 1 つだけ多重演算子の中に 現れることを許されていますが、必ず最後につける必要があります。 ただし、\fBL\fR は多重演算子の中の 最後とそれ以外の箇所では違った意味になるので注意してください。 なぜなら、`0' はこれらの演算子の多くにとって正当な返り値のためです。 これらが失敗した場合、`0' を返しません。 たいていの場合、`\-1' を返し、\fBF\fR は `:' を返します。 .PP このシェルが POSIX を定義してコンパイルされている (シェル変数 \fBversion\fR を参照) 場合、ファイル問い合わせの結果は、 \fIaccess\fR(2) システムコールの結果に基づいたものではなく、 ファイルの許可ビットに基づいたものになります。 たとえば、 通常は書き込み可であるが 読み取り専用でマウントされたファイルシステム上にある ファイルを \fB\-w\fR で検査した場合、 POSIX シェルでは成功し、 非 POSIX シェルでは失敗することになります。 .PP ファイル問い合わせ演算子は \fIfiletest\fR 組み込みコマンド (そちらも参照) と等価になり得ます。(+) .SS ジョブ シェルはパイプラインの各々に対し\fIジョブ\fRを 1 つずつ関連付けます。 シェルは、現在実行中のジョブの一覧表を保持しており、 これは、\fIjobs\fR コマンドによって表示することができます。 ジョブには整数の番号が割り当てられます。 ジョブが `&' を用いて非同期に起動された場合、 シェルは以下のような出力を行います: .IP "" 4 [1] 1234 .PP これは、非同期に起動したジョブがジョブ番号 1 であり、 プロセス ID が 1234 である (トップレベルの) プロセスを 1 つ持っていることを示します。 .PP もし、あるジョブを実行中に他のことをしたくなった場合、サスペンドキー (通常 ^Z) を押すことにより実行中のジョブに STOP シグナルを送信することができます。 通常、シェルはそのジョブが一時停止した (Suspended) ことを出力し、 プロンプトを表示します。 シェル変数の \fBlistjobs\fR が設定されていると、 組み込みコマンドの \fIjobs\fR のようにすべてのジョブがリストされます。 もしそれが `long' と設定されているとリストは `jobs \-l' のような 長い形式になります。 ここで、一時停止したジョブの状態を操作することができます。 つまり、\fIbg\fR コマンドにより停止したプロセスを ``バックグラウンド'' で走行させたり、他のコマンドを実行してから、 停止していたジョブを \fIfg\fR コマンドにより ``フォアグラウンド'' で再実行させることなどができます。 (編集コマンドの \fIrun-fg-editor\fR も参照してください。) `^Z' は即座に効力を発揮し、割り込みと同様に、それまで待たされていた 出力とまだ読み込まれていない入力は捨てられます。 組み込みコマンドの \fIwait\fR はすべてのバックグラウンドのジョブが 終了するまでシェルを待機状態にさせます。 .PP `^]' キーは遅延サスペンドシグナルを現在のジョブに送信します。 この場合はプログラムが \fIread\fR(2) によって読み込もうとした時点で STOP シグナルが送信されます。 これは、実行中のジョブに対していくつかの入力を先に入力しておき、 先行入力を読み終えた時点でジョブを停止させたいときに便利です。 \fIcsh\fR(1) ではこの機能は `^Y' キーに割り当てられていました。 \fItcsh\fR では `^Y' は編集コマンドです。(+) .PP バックグラウンドで実行しているジョブが端末からの入力を試みた場合、 そのジョブは停止します。通常、バックグラウンドジョブが端末に 出力することは可能ですが、これはコマンド `stty tostop' により 禁止することができます。もしこの tty オプションを指定したなら、 バックグラウンドで実行しているジョブは、端末から入力を試みたときと 同様に、端末に出力を試みたときに停止します。 .PP シェルでジョブを参照するにはいくつかの方法があります。文字 `%' は ジョブ名を表すのに用いられます。番号 1 のジョブを参照する場合は `%1' とします。単にジョブ名を入力した場合、そのジョブは フォアグラウンドに移動されます。すなわち `%1' は `fg %1' と等価で、 ジョブ 1 をフォアグラウンドに移行します。同様に `%1 &' は、 ちょうど `bg %1' と同じようにのジョブ 1 をバックグラウンドで 再開させます。ジョブはそのジョブを起動したときにタイプされた文字列の 先頭部分によって参照することもできます。ただしこの先頭部分は あいまいでない必要があります。すなわち `%ex' は、`ex' という文字列で 始まる名前のサスペンドされたジョブが 1 つしかない場合に限り、 サスペンドされた \fIex\fR(1) のジョブを再開します。 文字列 \fIstring\fR を含むジョブが 1 つしかない場合、`%?\fIstring\fR' と 入力することでそれを指定することもできます。 .PP シェルは現在のジョブと直前のジョブを覚えています。 ジョブに関係する出力で、`+' 記号が付加されているのが現在のジョブ、 `\-' 記号が付加されているのが直前のジョブです。 `%+', `%' と (\fIヒストリ\fR機構の文法との類似から) `%%' は すべて現在のジョブ、`%\-' は直前のジョブを参照するための省略形です。 .PP ある種のシステムではジョブ制御機構を利用するために \fIstty\fR(1) の オプション `new' を設定しておく必要があります。 ジョブ制御機構は `新型の' 端末ドライバの実装の上に構築されているからで、 新型の端末ドライバによりジョブを停止させるための割り込み文字を キーボードから入力できるようになるからです。 新型の端末ドライバのオプション設定については \fIstty\fR(1) と 組み込みコマンドの \fIsetty\fR を参照してください。 .SS "状態通知" シェルは、プロセスが状態の変化を起こすとすぐにそれを検知します。 通常はプロンプトが表示される直前にのみ、あるジョブが停止して それ以上処理が進まなくなったことを通知します。これはユーザの仕事を 邪魔しないようにするためです。しかしながら、シェル変数 \fBnotify\fR を 設定することにより、シェルにバックグラウンドジョブの状態が 変化したことをただちに通知させることができます。また、 シェルコマンド \fInotify\fR により、特定のジョブの状態の変化をただちに 通知させるようにマークすることもできます。引数なしの \fInotify\fR は 現在のプロセスに対してマークをつけます。バックグラウンドジョブの 開始直後に単に `notify' と打つとそのジョブをマークします。 .PP 停止したジョブが存在する状態でシェルを終了しようとすると `You have stopped jobs.' という警告を受けます。このとき \fIjobs\fR コマンドによりどのジョブが停止中であるのかを 確認することができます。警告を受けた直後に \fIjobs\fR コマンドで 確認した場合と、警告を受けた直後に再度シェルを終了させようとした 場合には、シェルは 2 度目の警告を行わずに停止中のジョブを 終了させてからシェルを終了します。 .SS "自動イベント、定期イベント、時刻指定イベント (+)" シェルの ``ライフサイクル'' において、いろいろな時間に自動的に コマンドの実行と他のアクションを行うさまざまな方法が用意されています。 それらをここに要約し、詳しくは \fB組み込みコマンド\fR、\fB特別なシェル変数\fR、\fB特別なエイリアス\fRの 適切な場所で説明します。 .PP 組み込みコマンドの \fIsched\fR はコマンドをイベントの予定表に置き、 指定された時刻にシェルによって実行されるようにします。 .PP \fB特別なエイリアス\fRとして \fIbeepcmd\fR, \fIcwdcmd\fR, \fIperiodic\fR, \fIprecmd\fR, \fIpostcmd\fR, \fIjobcmd\fR があり、それぞれ シェルがベルを鳴らす時、作業ディレクトリが変わる時、 \fBtperiod\fR 分毎、各プロンプトの前、各コマンドの実行前、 各コマンドの実行後、ジョブの起動時またはフォアグラウンド移行時に 実行させたいコマンドを設定できます。 .PP シェル変数の \fBautologout\fR を使って、指定した分数の休止後に ログアウトまたはシェルをロックするように設定できます。 .PP シェル変数の \fBmail\fR を使って、定期的に新しいメールを チェックするように設定できます。 .PP シェル変数の \fBprintexitvalue\fR を使って、0 以外のステータスで 終了したコマンドの終了ステータスを表示するように指定できます。 .PP シェル変数の \fBrmstar\fR を使って、`rm *' が入力されたときに ユーザに間違いないかどうか確認を求めるように指定できます。 .PP シェル変数の \fBtime\fR を使って、指定した秒数より多く CPU 時間を 使ったプロセスの終了後に組み込みコマンドの \fItime\fR を実行するように 設定できます。 .PP シェル変数の \fBwatch\fR と \fBwho\fR を使って、指定したユーザが ログインまたはログアウトした時にレポートするように設定できます。 また組み込みコマンドの \fIlog\fR でいつでもそれらのユーザに ついてのレポートを得られます。 .SS "固有言語システムのサポート (+)" シェルは 8 ビットクリーンなので (そのようにコンパイルされていれば。シェル変数の \fBversion\fR を 参照)、それを必要とする文字セットをサポートします。 NLS サポートはシェルがシステムの NLS を使うようにコンパイルされているか どうかによって異なります (再び、\fBversion\fR を参照)。 どちらの場合でも 7 ビット ASCII がデフォルトの文字分類 (たとえばそれらの文字は表示可能) であり、そして順序づけです。 環境変数の \fBLANG\fR または \fBLC_CTYPE\fR を変更すると、 これらの点について変化の有無がチェックされます。 .PP システムの NLS を使う場合には、文字の適切な分類と順序づけを決定するために \fIsetlocale\fR(3) 関数が呼び出されます。この関数は典型的には 環境変数の \fBLANG\fR と \fBLC_CTYPE\fR を調べます。 より詳細についてはシステムのドキュメントを参照してください。 システムの NLS を使わない場合には、シェルは ISO 8859-1 文字セットが 使われていると仮定することでシミュレートします。 変数 \fBLANG\fR と \fBLC_CTYPE\fR のいずれかが設定されていても、 それらの値を無視します。 シミュレートされた NLS では順序づけに影響しません。 .PP 加えて、本物とシミュレートされた NLS の両方で、\e200\-\e377 の範囲、 つまり M-\fIchar\fR でバインドされているすべての表示可能文字は、 自動的に \fIself-insert-command\fR に再バインドされます。 対応する escape-\fIchar\fR へのバインドは、もしあればそのまま残ります。 これらの文字は環境変数の \fBNOREBIND\fR が設定されていれば 再バインドされません。この機能はシミュレートされた NLS や すべてが ISO 8859-1 であると仮定した原始的な本物の NLS で有効でしょう。 そうでなければ、\e240\-\e377 の範囲の M-\fIchar\fR へのバインドは 事実上解除されます。この場合でも、もちろん \fIbindkey\fR で明示的に 関連するキーに再バインドする事は可能です。 .PP 未知の文字 (つまり表示可能でも制御文字でもないような文字) は \ennn のような形式で表示されます。tty が 8 ビットモードになっていない 場合は、ASCII に変換して強調表示モードを使うことで別の 8 ビット文字が 表示されます。シェルは tty の 7/8 ビットモードを変更することはなく、 ユーザによる 7/8 ビットモードの変更に従います。NLS 利用者 (または メタキーを利用したい利用者) は、たとえば \fI~/.login\fR ファイルで 適切に \fIstty\fR(1) コマンドを呼び出すことで、 明示的に tty を 8 ビットモードに設定する必要があるかもしれません。 .SS "OS 固有機能のサポート (+)" 個々のオペレーティングシステムで提供されている機能をサポートするために、 多くの新しい組み込みコマンドが提供されています。すべて \fB組み込みコマンド\fRセクションで詳細に説明されています。 .PP TCF をサポートするシステム (aix-ibm370, aix-ps2) では、 \fIgetspath\fR と \fIsetspath\fR でシステム実行パスを取得、設定し、 \fIgetxvers\fR と \fIsetxvers\fR で試験バージョンプレフィックスを取得、 設定して、\fImigrate\fR でプロセスをサイト間で移動させます。 組み込みコマンドの \fIjobs\fR は各ジョブが実行されているサイトを表示します。 .PP Domain/OS では、\fIinlib\fR で共有ライブラリを現環境に追加し、 \fIrootnode\fR で rootnode を変更し、\fIver\fR で systype を変更します。 .PP Mach では、\fIsetpath\fR が Mach の \fIsetpath\fR(1) と等価です。 .PP Masscomp/RTU と Harris CX/UX では、\fIuniverse\fR で universe を設定します。 .PP Harris CX/UX では、\fIucb\fR か \fIatt\fR によって指定した universe で コマンドを走らせます。 .PP Convex/OS では、\fIwarp\fR で universe を表示または設定します。 .PP 環境変数の \fBVENDOR\fR, \fBOSTYPE\fR, \fBMACHTYPE\fR は、 シェルが自身が実行されていると考えているシステムの、それぞれ ベンダー、オペレーティングシステム、マシンタイプ (マイクロプロセッサのクラスまたはマシンのモデル) を表示します。 これはいろいろなタイプのマシン間でホームディレクトリを共有する場合に 特に便利です。利用者はたとえば各自の \fI~/.login\fR 中で .IP "" 4 set path = (~/bin.$MACHTYPE /usr/ucb /bin /usr/bin .) .PP とし、各マシン用にコンパイルされた実行形式を適切なディレクトリに 置くことができます。 .PP シェル変数の \fBversion\fR は、どのオプションを選択して シェルがコンパイルされたかを表示します。 .PP 組み込みの \fInewgrp\fR、シェル変数の \fBafsuser\fR と \fBecho_style\fR、そしてシステムに依存するシェルの入力ファイル (\fBファイル\fRを参照) の位置にも注意してください。 .SS "シグナル処理" ログインシェルは \fI~/.logout\fR ファイルを読んでいる間は 割り込みを無視します。 シェルは起動時に \fB\-q\fR の指定が無ければ QUIT シグナルを無視します。 ログインシェルは TERM シグナルを捕捉しますが、非ログインシェルは TERM シグナルへの挙動を親から継承します。 他のシグナルについては親からシェルに継承された値を持っています。 .PP シェルスクリプトでは、シェルの INT と TERM シグナルの扱いを \fIonintr\fR で制御できます。そして HUP の扱いを \fIhup\fR と \fInohup\fR で制御できます。 .PP シェルは HUP で終了します (シェル変数の \fBlogout\fR も参照)。 デフォルトでは、シェルの子供たちもそうしますが、シェルは終了時に HUP を子供たちに送りません。\fIhup\fR はシェルが終了時に 子供に HUP を送るようにし、\fInohup\fR は子供が HUP を無視するように 設定します。 .SS "端末管理 (+)" シェルは 3 つの異なる端末 (``tty'') モードの設定を使います。それらは 編集時に使う `edit'、文字リテラルをクォートする場合に使う `quote'、 コマンド実行時に使う `execute' です。 シェルは各モードでいくつかの設定を一定に保つので、 tty を混乱状態にして終了するコマンドがシェルに干渉することはありません。 シェルは tty のスピードとパディングの変更にも対応します。 一定に保たれる tty モードのリストは組み込みの \fIsetty\fR で 取得、設定できます。エディタは CBREAK モード (または同等のモード) を 使いますが、先行入力された文字はいつでも受け付けられます。 .PP \fIechotc\fR, \fIsettc\fR, \fItelltc\fR コマンドを使って、 コマンドラインから端末のケーパビリティを操作、デバッグすることができます。 .PP SIGWINCH か SIGWINDOW をサポートするシステムでは、シェルは ウィンドウのリサイズに自動的に適応して、環境変数の \fBLINES\fR と \fBCOLUMNS\fR が設定されていれば値を補正します。 環境変数の \fBTERMCAP\fR が li# と co# のフィールドを含んでいると、 シェルは新しいウィンドウサイズを反映するようにそれらを補正します。 .SH 参照 このマニュアルの以下のセクションでは使用可能なすべての \fB組み込みコマンド\fR、\fB特別なエイリアス\fR、 \fB特別なシェル変数\fRについて説明します。 .SS "組み込みコマンド" .TP 8 .B %\fIjob 組み込みコマンド \fIfg\fR と同義です。 .TP 8 .B %\fIjob \fB& 組み込みコマンド \fIbg\fR と同義です。 .TP 8 .B : 何もしません。常に成功します。 .PP .B @ .br .B @ \fIname\fB = \fIexpr .br .B @ \fIname\fR[\fIindex\fR]\fB = \fIexpr .br .B @ \fIname\fB++\fR|\fB-- .PD 0 .TP 8 .B @ \fIname\fR[\fIindex\fR]\fB++\fR|\fB-- 最初の形式は、すべてのシェル変数の値を表示します。 .PD .RS +8 .PP 2 番目の書式は、\fIname\fR に値 \fIexpr\fR を設定します。 3 番目の書式は、値 \fIexpr\fR を \fIname\fR の \fIindex\fR 番目の要素に 定義します。 \fIname\fR とその \fIindex\fR 番目の要素の両方が既に存在していなければ なりません。 .PP \fIexpr\fR は C と同様に、`*', `+'のような演算子を含むことがあります。 もし \fIexpr\fR が `<', `>', `&', `' を含むのであれば、少なくとも \fIexpr\fR のその部分は `()' の中に書かれる必要があります。 \fIexpr\fR の書式は、以下の \fBExpressions\fR で説明されるものとは 一切関係がないことに注意してください。 .PP 4 番目、5 番目の書式は \fIname\fR またはその \fIindex\fR 番目の要素を インクリメント (`++') またはデクリメント (`\-\-') します。 .PP `@' と \fIname\fR の間の空白は必須です。\fIname\fR と `=' の間、また `=' と \fIexpr\fR の間の空白はオプションです。\fIexpr\fR の要素は空白によって 区切られていなければなりません。 .RE .PD .TP 8 .B alias \fR[\fIname \fR[\fIwordlist\fR]] 引数がなければ、すべてのエイリアスを表示します。 \fIname\fR を与えると、そのエイリアスの内容を表示します。 \fIname\fR と \fIwordlist\fR を与えると、 \fIwordlist\fR を \fIname\fR のエイリアスとして定義します。 \fIwordlist\fR は、エイリアスされるコマンドとファイル名です。 \fIname\fR は `alias' または `unalias' であってはなりません。 組み込みコマンド \fIunalias\fR についても参照してください。 .ig \" Obsolete tcsh command .TP 8 .B aliases \fR[\fIfile\fR] (+) 引数がなければ、すべてのエイリアスを表示します。 \fIfile\fR を与えると、エイリアスのリストを \fIfile\fR から 1 行に ひとつずつ読み込みます。 後方互換性のためだけに残されています。 .. .TP 8 .B alloc 動的に取得しているメモリのうちの使用量と空き容量を表示します。 何らかの引数を与えるとブロックサイズごとの使用中 / 空きブロックの数を 表示します。このコマンドの出力はシステムによって大きく異なります。 VAX 以外のシステムでは、異なるメモリ管理を行っているかもしれない からです。 .TP 8 .B bg \fR[\fB%\fIjob\fR ...] 指定したジョブ (引数がなければ現在のジョブ) をバックグラウンドに 移動します。もしそれらが停止していれば再開されます。\fIjob\fR は 以下の \fBJobs\fR で説明するように番号、 文字列、`', `%', `+', `\-' で構成されます。 .ig \" Obsolete tcsh command .TP 8 .B bind \fR[\fBdefaults\fR|\fBemacs\fR|\fBvi\fR|\fIkey\fR|\fIkey command\fR] (+) An older version of \fIbindkey\fR, retained for only downward compatibility. Without arguments, lists all bound keys and the editor command to which each is bound. `bind defaults', `bind emacs' and `bind vi' are equivalent to `bindkey \-d', `bindkey \-e' and `bindkey \-v'. With \fIkey\fR, lists the editor command to which \fIkey\fR is bound. With \fIkey\fR and \fIcommand\fR, binds the editor command \fIcommand\fR to \fIkey\fR. .IP "" 8 \fIkey\fR may be a literal character, a control character written ^\fIcharacter\fR (e.g., `^A'), a meta character written M-\fIcharacter\fR (e.g., `M-A') or a function key written F-\fIstring\fR (e.g., `F-foo'). For the function key form to work, the function key prefix must be bound to \fIsequence-lead-in\fR and \fIstring\fR must not contain that prefix. \fIbindkey\fR の古いバージョンで、後方互換性のためだけに 残されています。引数がなければ、バインドされているキーと、 その編集コマンドの一覧を表示します。 `bind defaults', `bind emacs', `bind vi' は `bindkey \-d', `bindkey \-e', `bindkey \-v' と同じ意味を持ちます。 引数に \fIkey\fR を与えると、\fIkey\fR にバインドされている 編集コマンドの一覧を表示します。 引数に \fIkey\fR と \fIcommand\fR を与えると、編集コマンド \fIcommand\fR を \fIkey\fR にバインドします。 .IP "" 8 \fIkey\fR は通常の文字、 ^\fIcharacter\fR (たとえば `^A')のように表記される コントロールキャラクタ、M-\fIcharacter\fR (たとえば `M-A') の ように表記されるメタキャラクタ、F-\fIstring\fR (たとえば `F-foo') のように表記されるファンクションキャラクタのいずれかです。 ファンクションキーを動作するようにするには、 ファンクションキープレフィックスが \fIsequence-lead-in\fR にバインドされていて、 \fIstring\fR がそのプレフィックスを含んでいないことが必要です。 .. .PP .B bindkey \fR[\fB\-l\fR|\fB\-d\fR|\fB\-e\fR|\fB\-v\fR|\fB\-u\fR] (+) .br \fBbindkey \fR[\fB\-a\fR] [\fB\-b\fR] [\fB\-k\fR] [\fB\-r\fR] [\fB\-\-\fR] \fIkey \fR(+) .PD 0 .TP 8 \fBbindkey \fR[\fB\-a\fR] [\fB\-b\fR] [\fB\-k\fR] [\fB\-c\fR|\fB\-s\fR] [\fB\-\-\fR] \fIkey command \fR(+) .\" .B macro can't take too many words, so I used \fB in the previous tags .\" .B マクロは多くの単語を扱えないので、ここまでの部分で \fB を .\" 使っています。 オプション無しでは、第 1 の形式ではバインドされているすべてのキーと 編集コマンドを表示し、第 2 の形式では \fIkey\fR にバインドされている 編集コマンドを表示し、第 3 の形式では 編集コマンド \fIcommand\fR を \fIkey\fR にバインドします。 オプションは以下のものを含みます。 .PD .PP .PD 0 .RS +8 .TP 4 .B \-l すべての編集コマンドの一覧と、それぞれの簡単な解説を表示します。 .TP 4 .B \-d デフォルトのエディタの標準キーバインドをすべてのキーに適用します。 .TP 4 .B \-e GNU Emacs に似たキーバインドをすべてのキーに適用します。 .TP 4 .B \-v 標準の \fIvi\fR(1) に似たキーバインドをすべてのキーに適用します。 .TP 4 .B \-a 代替キーマップを表示またはそのキーバインドを変更します。 代替キーマップは \fIvi\fR コマンドモードのものです。 .TP 4 .B \-b \fIkey\fR を次のように解釈します。 ^\fIcharacter\fR (たとえば `^A')、C-\fIcharacter\fR (たとえば `C-A') のようなものはコントロールキャラクタ、 M-\fIcharacter\fR (たとえば `M-A')のようなものはメタキャラクタ、 F-\fIstring\fR (たとえば `F-string')のようなものは ファンクションキー、X-\fIcharacter\fR (たとえば `X-A') のような ものは拡張プレフィックスキーです。 .TP 4 .B \-k \fIkey\fR は矢印キーの名前、`down', `up', `left', `right' の いずれかとして解釈されます。 .TP 4 .B \-r \fIkey\fR のバインドを解除します。 `bindkey \-r' は \fIkey\fR を \fIself-insert-command\fR にバインドする のでは\fIなく\fR、そのキーのバインドを完全に解除してしまうことに 注意してください。 .TP 4 .B \-c \fIcommand\fR は編集コマンドでなく、組み込みコマンドか 外部コマンドの名前として解釈されます。 .TP 4 .B \-s \fIcommand\fR は通常の文字列として解釈され、\fIkey\fR がタイプされた 時に端末から入力されたように扱われます。\fIcommand\fR で バインドされたキー自体も再び解釈が行われ、10 レベルまで繰り返し 解釈が行われます。 .TP 4 .B \-\- オプション処理の中断を行います。したがって、次の単語が '\-' で 始まっていたとしても、\fIkey\fR として解釈されます。 .TP 4 .B \-u \fR (または何らかの無効なオプション) 使い方を表示します。 .PD .PP \fIkey\fR は 1 文字であっても、文字列であっても構いません。 もしコマンドが文字列にバインドされているならば、文字列の最初の 文字は \fIsequence-lead-in\fR にバインドされ、文字列全体が コマンドにバインドされます。 .PP \fIkey\fR に含まれるコントロール文字はコントロール文字そのもの (通常 `^V' にバインドされているエディタの \fIquoted-insert\fR コマンドで入力できるもの) であっても、`^A' のような キャレット-文字形式であっても構いません。削除文字は `^?' (キャレット-疑問符) のように表します。\fIkey\fR と \fIcommand\fR は下に示す、バックスラッシュで始まる エスケープシーケンスを含むことができます (System V の \fIecho\fR(1) で用いられる形式です)。 .RS +4 .TP 8 .PD 0 .B \ea ベル .TP 8 .B \eb バックスペース .TP 8 .B \ee エスケープ .TP 8 .B \ef 改ページ (フォームフィード) .TP 8 .B \en 改行 .TP 8 .B \er キャリッジリターン .TP 8 .B \et 水平タブ .TP 8 .B \ev 垂直タブ .TP 8 .B \e\fInnn 8 進数 \fInnn\fR で表されるアスキー文字 .PD .RE .PP `\e' は後に続く文字に特別な意味があればそれを無効にします。 特に `\\' や `^' の場合です。 .RE .TP 8 .B break 実行を一番近い \fIforeach\fR または \fIwhile\fR と \fIend\fR の 組の、\fIend\fR の後から再開します。現在の行の残りのコマンドは 実行されます。したがって、複数のレベルのブレークは、1 行にそれらを 並べることで可能になります。 .TP 8 .B breaksw \fIswitch\fR からのブレークで、\fIendsw\fR の後から 実行が開始されます。 .TP 8 .B builtins \fR(+) すべての組み込みコマンドの名前を表示します。 .TP 8 .B bye \fR(+) 組み込みコマンド \fIlogout\fR の別名です。 これが使えるようにコンパイルされている場合にのみ有効です。 シェル変数 \fBversion\fR を参照してください。 .TP 8 .B case \fIlabel\fB: 下で説明する \fIswitch\fR 文で用いられるラベルです。 .TP 8 .B cd \fR[\fB\-p\fR] [\fB\-l\fR] [\fB\-n\fR|\fB\-v\fR] [\fIname\fR] もしディレクトリ名 \fIname\fR が与えられれば、シェルの 作業ディレクトリを \fIname\fR に変更します。与えられなければ \fBhome\fR に変更します。もし \fIname\fR が `\-' であれば、 ひとつ前の作業ディレクトリとして解釈されます (\fBOther substitutions\fR を参照)。\fIname\fR が 現在のディレクトリのサブディレクトリでなく、 `/', `./' , `../' のいずれかで始まるものでもない場合、 変数 \fBcdpath\fR の要素がひとつひとつチェックされ、 サブディレクトリ \fIname\fR が探されます。最後に、そのどれもが 失敗した場合に \fIname\fR が `/' ではじまる値をもつシェル変数で あれば、その変数が指すディレクトリが探されます。 .RS +8 .PP \fB\-p\fR を付けると、\fIdirs\fR と同じように最終的な ディレクトリスタックの内容を表示します。\fIcd\fR の \fB\-l\fR, \fB\-n\fR, \fB\-v\fR フラグは \fIdirs\fR のそれと同じ意味を持ち、 \fB\-p\fR の動作を含んでいます (+)。 .PP シェル変数 \fBimplicitcd\fR についても参照してください。 .RE .TP 8 .B chdir 組み込みコマンド \fIcd\fR の別名です。 .TP 8 .B complete \fR[\fIcommand\fR [\fIword\fB/\fIpattern\fB/\fIlist\fR[\fB:\fIselect\fR]\fB/\fR[[\fIsuffix\fR] \fB/\fR] ...]] (+) 引数なしの場合は、すべての補完の候補を表示します。 \fIcommand\fR をつけると、\fIcommand\fR の補完候補を表示します。 \fIcommand\fR と \fIword\fR などをつけると、補完を定義します。 .RS +8 .PP \fIcommand\fR はコマンドのフルネームでも、何らかのパターンでも 構いません (\fBファイル名置換\fRを参照)。 補完候補がひとつでないことを示すために、`-' ではじめることができます。 .PP \fIword\fR は現在の語の補完にどの単語が関係するのかを指定する もので、以下のうちどれか 1 つです。 .PP .PD 0 .RS +4 .TP 4 .B c 現在の語の補完。 \fIpattern\fR は、コマンドライン上の現在の語にマッチするパターンで なければなりません。 \fIpattern\fR は現在の語の補完が完了すると無視されます。 .TP 4 .B C \fBc\fR に似ていますが、現在の語の補完後に \fIpattern\fR を含みます。 .TP 4 .B n 次の語の補完。 \fIpattern\fR はコマンドライン上のひとつ前の語にマッチする パターンでなければなりません。 .TP 4 .B N \fBn\fR に似ていますが、現在の語のふたつ前の語に マッチするパターンでなければなりません。 .TP 4 .B p 位置に依存した補完。 \fIpattern\fR は数値の範囲を指定するものであり、シェル変数の インデックスと同じ文法が用いられます。 現在の語を含むものでなければなりません。 .PD .RE .ig \" No longer true in 6.05.04 .PP When \fIpattern\fR is a glob-pattern (for \fBc\fR, \fBC\fR, \fBn\fR and \fBN\fR-type completion), a \fIpattern\fR of `*' does not match an empty word. 6.05.04 ではもう有効ではありません。 \fIpattern\fR がグローバルなパターンである場合 (\fBc\fR, \fBC\fR, \fBn\fR, \fBN\fR 型の補完の場合)、\fIpattern\fR の `*' は空の語には マッチしません。 .. .PP \fIlist\fR は以下のリストの中から可能な補完のリストを示します。 .PP .PD 0 .RS +4 .TP 8 .B a エイリアス .TP 8 .B b バインディング (編集コマンド) .TP 8 .B c コマンド (組み込みコマンドも外部コマンドも含みます) .TP 8 .B C 指定されたパスではじまる外部コマンド .TP 8 .B d ディレクトリ .TP 8 .B D 指定されたパスではじまるディレクトリ .TP 8 .B e 環境変数 .TP 8 .B f ファイル名 .TP 8 .B F 指定されたパスではじまるファイル名 .TP 8 .B g グループ名 .TP 8 .B j ジョブ .TP 8 .B l 制限値 .TP 8 .B n 何にも補完しません .TP 8 .B s シェル変数 .TP 8 .B S シグナル .TP 8 .B t プレイン (``テキスト'') ファイル .TP 8 .B T プレイン (``テキスト'') ファイルで、指定されたパスではじまるもの .TP 8 .B v すべての変数 .TP 8 .B u ユーザ名 .TP 8 .B x \fBn\fR に似ていますが、\fIlist-choices\fR が使われている時には \fIselect\fR を表示します。 .TP 8 .B X 補完 .TP 8 $\fIvar\fR 変数 \fIvar\fR に格納されている語 .TP 8 (...) リスト中の語 .TP 8 `...` コマンドの出力に含まれる語 .PD .RE .PP \fIselect\fR は glob パターンです (省略可能)。 これを指定すると、\fIlist\fR にある単語のうち \fIselect\fR にマッチするものだけが対象となり、 シェル変数 \fBfignore\fR は無視されます。 最後の 3 つの補完形式には \fIselect\fR パターンを与えることはできません。 また \fBx\fR は \fIlist-choices\fR 編集コマンドが用いられた時には \fIselect\fR を説明メッセージとして扱います。 .PP \fIsuffix\fR は単一の文字で、補完が成功するとそのあとに追加されます。 空の場合は何も追加されません。省略されると (この場合 4 番目のデリミタも省略できます) ディレクトリにはスラッシュ文字が、 その他の文字にはスペース文字が追加されます。 .PP ではいくつか例を示します。 コマンドによっては、ディレクトリのみを引数として取るものがあります。 (そのようなコマンドに対して) 通常ファイルを補完することは、的外れです。 .IP "" 4 > complete cd 'p/1/d/' .PP `cd' に続く最初の単語のみ (`p/1') をディレクトリで補完します。 コマンド補完を絞りこむために \fBp\fR-形式の補完を用いることもできます。 `cd' に続く最初の単語のみ (`p/1') をディレクトリで補完します。 .IP "" 4 > co[^D] .br complete compress .br > complete \-co* 'p/0/(compress)/' .br > co[^D] .br > compress .PP これは `co' で始まる (すなわち `co*' にマッチする) コマンド (位置 0 にある単語 `p/0') を補完して、 `compress' (リストにある唯一の単語) を与えたものです。 先頭にある `\-' は、 この補完がコマンドを確定できない場合にのみ用いられることを意味します。 .IP "" 4 > complete find 'n/\-user/u/' .PP これは \fBn\fR-形式の補完の例です。 `find' の後で、かつ `\-user' の直後にある単語を、 ユーザのリストで補完します。 .IP "" 4 > complete cc 'c/\-I/d/' .PP \fBc\fR-形式の補完の例です。`cc' の後にあり、 かつ `\-I' ではじまる単語をディレクトリで補完します。 ここでは小文字の \fBc\fR を用いているので、 `\-I' はディレクトリの一部とはみなされません。 .PP コマンドに応じて、便利な \fIlist\fR も異なります。 .IP "" 4 > complete alias 'p/1/a/' .br > complete man 'p/*/c/' .br > complete set 'p/1/s/' .br > complete true 'p/1/x:Truth has no options./' .PP これらでは、 `alias' に続く単語をエイリアスで、 `man' に続く単語をコマンドで、 `set' に続く単語をシェル変数で置き換えています。 `true' はオプションを取らないので、 補完が試みられたときに何も行わず、 補完リストの選択画面には `Truth has no options.' を表示する \fBx\fR を指定しています。 .PP .ig \" Changed in 6.05.04 The \fIman\fR example, and several other examples below, use \fBp\fR-type completion, rather than \fBC\fR- or \fBn\fR-type, so that `*' will match an empty word. .. \fIman\fR の例や、以下に示すいくつかの例では、 `p/*' の代わりに `c/*' や `n/*' を用いることもできます。 .PP 単語の補完を変数で行うこともできます。これらの変数は補完の際に評価されます。 .IP "" 4 > complete ftp 'p/1/$hostnames/' .br > set hostnames = (rtfm.mit.edu tesla.ee.cornell.edu) .br > ftp [^D] .br rtfm.mit.edu tesla.ee.cornell.edu .br > ftp [^C] .br > set hostnames = (rtfm.mit.edu tesla.ee.cornell.edu uunet.uu.net) .br > ftp [^D] .br rtfm.mit.edu tesla.ee.cornell.edu uunet.uu.net .PP また補完の際にコマンドを実行し、そこから補完を行うこともできます。 .IP "" 4 > complete kill 'p/*/`ps | awk \\{print\\ \\$1\\}`/' .br > kill \-9 [^D] .br 23113 23377 23380 23406 23429 23529 23530 PID .PP \fIcomplete\fR コマンド自身は、その引数をクォートしません。 したがって `{print $1}' にある括弧、スペース、`$' は 明示的にクォートしなければなりません。 .PP 1 つのコマンドに複数の補完を指定することもできます。 .IP "" 4 > complete dbx 'p/2/(core)/' 'p/*/c/' .PP これは `dbx' の第 2 引数を `core' という単語で補完し、 他のすべての引数をコマンドで補完します。 位置指定タイプの補完は、逐次補完より前に指定することに注意してください。 補完は左から右に評価されるので、 (常にマッチする) 逐次補完が先に指定されていると、 位置指定補完は決して行われなくなってしまいます。 これは補完定義の際によくやるミスなので注意してください。 .PP \fIselect\fR パターンは、 コマンドが特定の形式を持ったファイルだけを引数にとるような場合に便利です。 以下に例を示します。 .IP "" 4 > complete cc 'p/*/f:*.[cao]/' .PP これは `cc' の引数を、`.c', `.a', `.o' で終わるファイルだけから補完します。 以下の\fBファイル名置換\fRで述べるようなやり方で グロブパターンの否定を指定すれば、 \fIselect\fR で特定のファイルを排除することもできます。 .IP "" 4 > complete rm 'p/*/f:^*.{c,h,cc,C,tex,1,man,l,y}/' .PP これは大事なソースコードを `rm' の補完に現れないようにします。 もちろんこの排除された名前を手で打ったり、 \fIcomplete-word-raw\fR や \fIlist-choices-raw\fR などの編集コマンドを用いて補完の仕組みを変更することもできます (それぞれ該当の部分を参照)。 .PP `C', `D', `F', `T' 各\fIリスト\fRは、 それぞれ `c', `d', `f', `t' と似ていますが、 \fIselect\fR の引数の解釈の仕方が異なり、 補完対象のファイルを前置パス名が特定のものに限ります。 たとえば、メールプログラム Elm は `=' を ユーザのメールディレクトリの省略名として用います。 この場合 `elm \-f =' を `elm \-f ~/Mail/' であるかのように補完するには .IP "" 4 > complete elm c@=@F:$HOME/Mail/@ .PP とすべきです。ここでは `/' の代わりに `@' を用い、 \fIselect\fR 引数を見やすくしています。 またホームディレクトリの置換は単語の先頭でのみ動作するので、 `~' の代わりに `$HOME' を用いています。 .PP \fIsuffix\fR は標準では用意されていないサフィックス (スペースやディレクトリに対する `/' 以外) を単語補完用に追加するために用います。 .IP "" 4 > complete finger 'c/*@/$hostnames/' 'p/1/u/@' .PP これは `finger' の引数を、まずユーザのリストから補完し、 それに `@' を追加し、さらに `@' の後を変数 `hostnames' のリストから 補完します。ここでも補完指定の順序に注意してください。 .PP 最後に、示唆に富む複雑な例を示しましょう。 .IP "" 4 > complete find \\ .br \'n/\-name/f/' 'n/\-newer/f/' 'n/\-{,n}cpio/f/' \e .br \'n/\-exec/c/' 'n/\-ok/c/' 'n/\-user/u/' \e .br \'n/\-group/g/' 'n/\-fstype/(nfs 4.2)/' \e .br \'n/\-type/(b c d f l p s)/' \e .br \'c/\-/(name newer cpio ncpio exec ok user \e .br group fstype type atime ctime depth inum \e .br ls mtime nogroup nouser perm print prune \e .br size xdev)/' \e .br \'p/*/d/' .PP これは `\-name', `\-newer', `\-cpio', `ncpio' に続く単語を ファイルで補完し (最後の両者にマッチするパターンに注意)、 `\-exec', `\-ok' に続く単語をコマンドで補完し、 `user' の後をユーザ名で、`group' の後をグループ名で補完し、 `\-fstype' と `\-type' の後をそれぞれに与えたリストのメンバで補完します。 また find に与えるスイッチ達も与えたリストから補完し (\fBc\fR-型の補完を用いていることに注意)、 それ以外のものすべてをディレクトリで補完します。ふぅ。 .PP 補完指定は、対象となる単語がチルダ置換 (`~' ではじまる) や 変数 (`$' ではじまる) の場合は無視されることに留意してください。 \fIcomplete\fR は実験的な機能であり、 文法はこのシェルの将来のバージョンでは変更されるかもしれません。 組み込みコマンド \fIuncomplete\fR の説明も見てください。 .RE .TP 8 .B continue もっとも近い \fIwhile\fR または \fIforeach\fR ループの実行を継続します。 現在の行にある残りのコマンドは実行されます。 .TP 8 .B default: \fIswitch\fR 文のデフォルトの場合のラベルです。 これはすべての \fIcase\fR ラベルの後に置くべきです。 .PP .B dirs \fR[\fB\-l\fR] [\fB\-n\fR|\fB\-v\fR] .br .B dirs \-S\fR|\fB\-L \fR[\fIfilename\fR] (+) .PD 0 .TP 8 .B dirs \-c \fR(+) 最初の形式はディレクトリスタックを表示します。 スタックの上が左に来て、 スタック先頭のディレクトリは現在のディレクトリになります。 \fB\-l\fR を指定すると、出力の `~' や `~\fIname\fP' は、 \fBhome\fR や、ユーザ \fIname\fP のホームディレクトリのパス名に 明示的に展開されます。 (+) \fB\-n\fR を指定すると、エントリはスクリーンの終端に達する前に 桁折りされます。 (+) \fB\-v\fR を指定すると、各エントリが 1 行に 1 つずつ表示され、 スタック内部での位置がエントリの前に表示されます。 (+) \fB\-n\fR や \fB\-v\fR がひとつ以上指定されると \fB\-v\fR が優先されます。 .PD .RS +8 .PP \fB\-S\fR を指定した 2 番目の形式では、 ディレクトリスタックを \fIcd\fR と \fIpushd\fR からなるコマンド列として \fIfilename\fR に保存します。 \fB\-L\fR を指定すると、このシェルは \fIfilename\fR を source します。 このファイルは、以前に \fB\-S\fR オプションや \fBsavedirs\fR 機構で保存されたディレクトリスタックです。 いずれの場合でも、 \fIfilename\fR が与えられなければ \fBdirsfile\fR を用います。 \fBdirsfile\fR も指定されていなければ \fI~/.cshdirs\fR を用います。 .PP ログインシェルは `dirs \-L' と同様のことを起動時に行っており、 また \fBsavedirs\fR が設定されていれば終了前に `dirs \-S' と同様のことを行います。 通常 \fI~/.tcshrc\fR だけが \fI~/.cshdirs\fR の前に source されるので、 \fBdirsfile\fR は \fI~/.login\fR ではなく \fI~/.tcshrc\fR で設定すべきです。 .PP 最後の形式はディレクトリスタックをクリアします。 .RE .TP 8 .B echo \fR[\fB\-n\fR] \fIword\fR ... 各 \fIword\fR をスペースで区切り、改行で終端させて シェルの標準出力に書き出します。 シェル変数 \fBecho_style\fR を指定すると、 BSD や System V の \fIecho\fR のフラグやエスケープシーケンスを エミュレートする (しない) ようにできます。 詳細は \fIecho\fR(1) を見てください。 .TP 8 .B echotc \fR[\fB\-sv\fR] \fIarg\fR ... (+) \fIarg\fR で与えられた端末の機能 (\fItermcap\fR(5) を参照) を実行します。 たとえば `echotc home' はカーソルをホームポジションに移動し、 `echotc cm 3 10' はカーソルを 3 列 10 行に移動し、 `echotc ts 0; echo "This is a test."; echotc fs' は "This is a test." をステータス行に表示します。 .RS +8 .PP \fIarg\fR が `baud', `cols', `lines', `meta', `tabs' の いずれかであった場合は、その機能の値を表示します ("yes" または "no" は、端末がその機能を持っているかいないかを示します)。 遅い端末でシェルスクリプトの出力をより寡黙にしたり、 コマンドの出力をスクリーンの行数に制限したりするような場合には、 以下のコマンドを使うと良いでしょう。 .IP "" 4 > set history=`echotc lines` .br > @ history\-\- .PP termcap 文字列はワイルドカードを含むことができますが、 これは正しく echo されません。 シェル変数に端末機能文字列を設定するときには、 以下の例のようにダブルクォートを用いてください。 この例では日付をステータス行に表示しています。 .IP "" 4 > set tosl="`echotc ts 0`" .br > set frsl="`echotc fs`" .br > echo \-n "$tosl";date; echo \-n "$frsl" .PP \fB\-s\fR を指定すると、存在しない機能を指定したとき、 エラーをおこさずに空文字列を返します。 \fB\-v\fR を指定するとメッセージが冗長になります。 .RE .PP .B else .br .B end .br .B endif .PD 0 .TP 8 .B endsw 以下の \fIforeach\fR, \fIif\fR, \fIswitch\fR, \fIwhile\fI 文の説明を見てください。 .PD .TP 8 .B eval \fIarg\fR ... 引数をシェルへの入力として扱い、 残りのコマンドを現在のシェルのコンテキストで実行します。 これは通常、コマンド置換や変数置換の結果として生成されたコマンド列を 実行する場合に用いられます。 これはそれらの置換に先立って文法解析が行われてしまうためです。 \fIeval\fR の利用例は \fItset\fR(1) を見てください。 .TP 8 .B exec \fIcommand\fR 指定したコマンドを現在のシェルの代わりに実行します。 .TP 8 .B exit \fR[\fIexpr\fR] 指定した \fIexpr\fR (\fB式\fRで解説した式) の値で (\fIexpr\fR が指定されていなければ \fBstatus\fR 変数の値で) シェルを終了します。 .TP 8 .B fg \fR[\fB%\fIjob\fR ...] 指定したジョブ (あるいは引数がなければ現在のジョブ) をフォアグラウンドに移動します。停止状態にあるものは再開します。 \fIjob\fR には\fBジョブ\fRで解説されているように、 数値、文字列、`', `%', `+', `\-' のどれかを指定できます。 \fIrun-fg-editor\fI 編集コマンドも見てください。 .TP 8 .B filetest \-\fIop file\fR ... (+) (\fBファイル問合わせ演算子\fRで解説されている) ファイル問合わせ演算子 \fIop\fR を各 \fIfile\fR に適用し、 結果をスペース区切りのリストで返します。 .PP .B foreach \fIname \fB(\fIwordlist\fB) .br \&... .PD 0 .TP 8 .B end \fIwordlist\fR のメンバを \fIname\fR に順々に代入し、 これと対応する \fIend\fR に挟まれた範囲の コマンドシーケンスを実行します。 (\fIforeach\fR と \fIend\fR は 1 行に単独で現れなければなりません。) 組み込みコマンド \fIcontinue\fR を用いると ループを途中で継続することができ、 組み込みコマンド \fIbreak\fR を用いると ループを途中で終了させることができます。 このコマンドが端末から読み込まれると、 一度ループを `foreach?' プロンプト (あるいは \fBprompt2\fR) で読み込み、全体を読み終えてからループの各文を実行します。 端末からの入力時にループの途中でタイプミスをした場合は 修正できます。 .PD .TP 8 .B getspath \fR(+) システムの実行パスを表示します。 (TCF のみ) .TP 8 .B getxvers \fR(+) 実験的バージョンのプレフィックスを表示します。 (TCF のみ) .TP 8 .B glob \fIwordlist \fIecho\fR と似ていますが、`\\' でのエスケープを認識せず、 また出力での単語区切りをヌル文字にします。 単語リストをファイル名に展開するために プログラムからシェルを利用したいような場合に便利です。 .TP 8 .B goto \fIword \fIword\fR はファイル名と `label' 形式の文字列を出力するコマンド置換です。 シェルは入力を可能なかぎりさかのぼり、 `label:' 形式の行 (空白やタブが前置されていても良い) を検索し、 その行の次から実行を継続します。 .TP 8 .B hashstat 内部のハッシュテーブルが、 これまでのコマンド探索にどの程度効率的であったか (そして \fIexec\fR 類を使わずに済んだか) を示す統計行を表示します。 \fBpath\fR の各成分のうち、 ハッシュ関数がヒットの可能性があるとしたものや、 `/' で始まらないものに対して \fIexec\fR が試みられます。 .IP \fIvfork\fR(2) のないマシンでは、 単にハッシュバケツのサイズを表示します。 .PP .B history \fR[\fB\-hTr\fR] [\fIn\fR] .br .B history \-S\fR|\fB\-L|\fB\-M \fR[\fIfilename\fR] (+) .PD 0 .TP 8 .B history \-c \fR(+) 最初の形式はイベントリストの履歴を表示します。 \fIn\fR を与えると、新しい方最大 \fIn\fR 個のイベントを 表示または保存します。 \fB\-h\fR を指定すると、行頭の数字抜きでリストを表示します。 \fB\-T\fR を指定すると、タイムスタンプもコメントのかたちで表示されます。 (これを用いると、 `history \-L' や `source \-h' でのロードに適したファイルが作成できます。) \fB\-r\fR を指定すると、 表示の順番がデフォルトの古い順ではなく新しい順になります。 .PD .RS +8 .PP 2 番目の形式で \fB\-S\fR を指定すると、履歴リストを \fIfilename\fR に保存します。シェル変数 \fBsavehist\fR の最初の単語が 数値に設定されていると、最大でその数値までの行数が保存されます。 \fBsavehist\fR の 2 番目の単語が `merge' だった場合には、 履歴リストが現存の履歴ファイルにマージされ、タイムスタンプ順にソートされます (デフォルトでは現存のファイルを置き換えます)。 (+) マージは X Window System のように、 複数のシェルを同時に用いるような場合向けのものです。 現在は、シェルが行儀良く順々に終了するような場合でないと、 マージは成功しません。 .PP \fB\-L\fR を指定すると、シェルは \fIfilename\fR を 履歴リストに追加します。\fIfilename\fR は以前に \fB\-S\fR オプションや \fBsavehist\fR 機構で保存された履歴リストファイルです。 \fB\-M\fR は \fB\-L\fR と似ていますが、 \fIfilename\fR の内容は履歴リストにマージされ、 タイムスタンプの順にソートされます。 いずれの場合でも、\fIfilename\fR が与えられなければ \fBhistfile\fR を用い、 \fBhistfile\fR も設定されていなければ \fI~/.history\fR を用います。 `history \-L' はほとんど `source \-h' と同じですが、 前者ではファイル名を省略できます。 .PP ログインシェルは `history \-L' と同様のことを起動時に行っており、 また \fBsavehist\fR が設定されていれば終了前に `history \-S' と同様のことを行います。 通常 \fI~/.tcshrc\fR だけが \fI~/.history\fR の前に source されるので、 \fBhistfile\fR は \fI~/.login\fR ではなく \fI~/.tcshrc\fR で設定すべきです。 .PP \fBhistlit\fR が設定されていると、 最初の形式と 2 番目の形式は履歴リストを 文字通りの (展開されない) かたちで表示、保存します。 .PP 最後の形式は履歴リストをクリアします。 .RE .TP 8 .B hup \fR[\fIcommand\fR] \fR(+) \fIcommand\fR を指定すると、 hangup シグナルが送られたときに終了するようにして \fIcommand\fR を実行し、 シェルが終了するときにそのコマンドに hangup シグナルを送るようにします。 コマンドによっては hangup に対するそれぞれ独自の反応を設定することがあり、 これは \fIhup\fR より優先されるかもしれません。 引数を設定しないと (シェルスクリプト内部のみで許されます)、 そのシェルは残りのスクリプトの途中で hangup シグナルを受け取ると終了するようになります。 \fBシグナル処理\fRと組み込みコマンド \fInohup\fR の部分も見てください。 .TP 8 .B if (\fIexpr\fB) \fIcommand \fIexpr\fR (\fB式\fRで解説した式) の評価結果が真なら、 \fIcommand\fR が実行されます。 \fIcommand\fR に対する変数置換は、実行に先だって \fIif\fR コマンドの残りの部分と同時に行われます。 \fIcommand\fR は単純なコマンドでなければならず、 エイリアス、パイプライン、(括弧で括られた / ていない) コマンドリストは指定できません。ただし引数は指定できます。 \fIexpr\fR が偽で、 \fIcommand\fR が\fI実行されない\fR場合でも 入出力リダイレクションは行われてしまいます。 これはバグです。 .PP .B if (\fIexpr\fB) then .br \&... .br .B else if (\fIexpr2\fB) then .br \&... .br .B else .br \&... .PD 0 .TP 8 .B endif 指定した \fIexpr\fR が真の場合、 最初の \fIelse\fI までのコマンド群が実行されます。 \fIexpr\fR が偽で \fIexpr2\fR が真の場合は、 2 番目の \fIelse\fR までのコマンド群が実行されます。以下同じです。 \fIelse-if\fR のペアはいくつでも指定できますが、 \fIendif\fR はひとつしかいりません。 また \fIelse\fR 部は省略可能です。 (\fIelse\fR と \fIendif\fR の各単語は入力行の先頭にしか置けません。 \fIif\fR は入力行の先頭に単独で置くか、 \fIelse\fR の後に置くかしなければなりません。) .PD .TP 8 .B inlib \fIshared-library\fR ... (+) 各 \fIshared-library\fR を現在の環境に追加します。 共有ライブラリを削除する方法はありません。 (Domain/OS のみ) .TP 8 .B jobs \fR[\fB\-l\fR] アクティブなジョブをリストします。 \fB\-l\fR を指定すると、 通常の情報に加えてプロセス ID もリストします。 TCF システムでは、各ジョブが実行されているサイトも表示します。 .PP .PD 0 .TP 8 .B kill \fR[\fB\-s \fIsignal\fR] \fB%\fIjob\fR|\fIpid\fR ... .PD 0 .TP 8 .B kill \-l 1 番目または 2 番目の形式は \fIsignal\fR を (何も指定されなければ TERM (terminate) シグナルを) 指定したジョブやプロセスに送ります。 \fIjob\fR には\fBジョブ\fRで解説されているように、 数値、文字列、`', `%', `+', `\-' のどれかを指定できます。 シグナルは数値または名前 (\fI/usr/include/signal.h\fR にあるものから前の `SIG' を取り除いたもの) のいずれかで与えます。 デフォルトの \fIjob\fR はありません。 単に `kill' としても、現在のジョブへはシグナルを送りません。 TERM (terminate) または HUP (hangup) シグナルを送った場合は、 そのジョブやプロセスには CONT (continue) シグナルも送信されます。 3 番目の形式はシグナルの名前をリストします。 .PD .ig \" Obsolete tcsh command .TP 8 .B linedit \fR(+) A synonym for the \fIecho\fR builtin command. .. .TP 8 .B limit \fR[\fB\-h\fR] [\fIresource\fR [\fImaximum-use\fR]] 現在のプロセスと、 現在のプロセスが生成するプロセスが消費する資源が、 指定した \fIresource\fR に対してプロセスひとつにつき \fImaximum-use\fR を越えないようにします。 \fImaximum-use\fR を指定しないと、current limit が表示されます。 \fIresource\fI を指定しないと、すべての制限値を表示します。 \fB\-h\fR フラグを指定すると、 current limit の代わりに hard limit を用います。 hard limit は current limit の限度を与えます。 hard limit はスーパユーザしか増やすことができませんが、 current limit は一般ユーザも可能な範囲内で増減できます。 .RS +8 .PP 現在制御できる資源 (OS がサポートしている場合) は次の通りです: .TP \fIcputime\fR プロセスひとつにつき利用できる cpu 秒 .TP \fIfilesize\fR 作成できる単一ファイルの最大サイズ .TP \fIdatasize\fR プログラムテキストの終端を越えて sbrk(2) で増やせる データ領域+スタック領域の最大サイズ .TP \fIstacksize\fR 自動的に拡張されるスタック領域の最大サイズ .TP \fIcoredumpsize\fR 生成されるコアダンプの最大サイズ .TP \fImemoryuse\fR プロセスひとつにいちどきに割り当てることのできる物理メモリの最大サイズ .TP \fIdescriptors\fR or \fIopenfiles\fR このプロセスが開ける最大ファイル数 .TP \fIconcurrency\fR このプロセスの最大スレッド数 .TP \fImemorylocked\fR プロセスが mlock(2) を使用してロック可能なメモリの最大サイズ .TP \fImaxproc\fR このユーザ ID が同時に使用可能な最大プロセス数 .TP \fIsbsize\fR このユーザが使用可能な最大ソケットバッファサイズ .PP \fImaximum-use\fR は浮動小数点値または整数値に、 単位をつけて指定します。 \fIcputime\fR 以外の制限値は、`k' または `kilobytes' (1024 バイト) をデフォルトの単位としています。 単位として `m' または `megabytes' を用いることもできます。 \fIcputime\fR のデフォルトの単位は `seconds' です。 分を表す `m', 時間を表す `h', 分 + 秒を表す `mm:ss' の形式などを用いることもできます。 .PP \fIresource\fR も単位も、他と区別がつく範囲で後半部を省略可能です。 .RE .TP 8 .B log \fR(+) シェル変数 \fBwatch\fR を表示し、そこにリストアップされている ユーザがログインしていればログインした時刻に関わらず報告します。 \fIwatchlog\fR についても参照してください。 .TP 8 .B login ログインシェルを終了して、\fI/bin/login\fR (訳注: FreeBSD では /usr/bin/login です) のインスタンスで置き換えます。これはログオフする 方法のひとつであり、\fIsh\fR(1) との互換性を保つ意味もあります。 .TP 8 .B logout ログインシェルを終了します。\fBignoreeof\fR がセットされている場合に 特に役立つでしょう。 .TP 8 .B ls\-F \fR[\-\fIswitch\fR ...] [\fIfile\fR ...] (+) `ls \-F' と同じようにファイルのリストを表示しますが、ずっと高速です。 各種の特別なファイル形式は特殊文字を用いて以下のように示されます。 .PP .RS +8 .PD 0 .TP 4 / ディレクトリ .TP 4 * 実行可能 .TP 4 # ブロック型デバイス .TP 4 % キャラクタ型デバイス .TP 4 | 名前付きパイプ (名前付きパイプのあるシステムでのみ) .TP 4 = ソケット (ソケットのあるシステムでのみ) .TP 4 @ シンボリックリンク (シンボリックリンクのあるシステムでのみ) .TP 4 + 隠しディレクトリ (AIX のみ) またはコンテキスト依存 (HP/UX のみ) .TP 4 : ネットワーク特殊型 (HP/UX のみ) .PD .PP シェル変数 \fBlistlinks\fR がセットされている場合は、 シンボリックリンクに関してより詳しく表示されます (もちろん、シンボリックリンクを持つシステムでだけです)。 .PP .PD 0 .TP 4 @ ディレクトリでないものへのシンボリックリンク .TP 4 > ディレクトリへのシンボリックリンク .TP 4 & どこへのリンクでもないシンボリックリンク .PD .PP \fBlistlinks\fR はシンボリックリンクの指し示すファイルが 存在するパーティションのマウントを引き起こすため、\fIls\-F\fR を 遅くしてしまいます。 .PP もしシェル変数 \fBlistfrags\fR が `x', `a', `A' のいずれかに セットされているか、それらの組合せ (たとえば `xA') に セットされている場合は、これが `ls \-xF' や `ls \-Fa'、 もしくは組み合わせて `ls \-FxA' のように \fIls\-F\fR の フラグとして使われます。`ls \-C' がデフォルトでないマシンでは \fBlistflags\fR が `x' を含む場合には \fIls \-xF' のように、 そうでなければ \fIls \-F\fR は `ls \-CF' のように振舞います。 \fIls \-F\fR は、何らかのスイッチが与えられた場合には \fIls\fR(1) に引数を渡すので、`alias ls ls\-F' は通常、正しく動作します。 .PP 組み込みの \fBls\-F\fR はファイルタイプや拡張子によってファイル名を 色分けすることができます。シェル変数 \fBcolor\fR \fItcsh\fR と 環境変数 \fBLS_COLORS\fR を参照してください。 .RE .PP .B migrate \fR[\fB\-\fIsite\fR] \fIpid\fR|\fB%\fIjobid\fR ... (+) .PD 0 .TP 8 .B migrate \-\fIsite\fR (+) 最初の形式では指定したプロセスまたはジョブを、指定した場所もしくは システムパスによって決定されるデフォルトの場所に移動します。 2 番目の形式は `migrate \-\fIsite\fR $$' と同じ意味を持ちます。 これは現在のプロセスを指定した場所に移動します。シェルは その tty を失わないことになっているので、シェル自身を移動することは 予期しない動作の原因となります。(TCF のみ) .PD .TP 8 .B newgrp \fR[\fB\-\fR] \fIgroup\fR (+) `exec newgrp' と同じ意味をもちます。\fInewgrp\fR(1) を 参照してください。 シェルがこれを使うことができるようにコンパイルされている場合に のみ使用可能です。シェル変数 \fBversion\fR を参照してください。 .TP 8 .B nice \fR[\fB+\fInumber\fR] [\fIcommand\fR] シェルのスケジューリング優先度を \fInumber\fR に設定するか、 \fInumber\fR が指定されていない場合は 4 に設定します。\fIcommand\fR をつけると、コマンド \fIcommand\fR を適切な優先度で実行します。 \fInumber\fR が大きいほど、そのプロセスが獲得する CPU 時間は短くなります。 スーパユーザは `nice \-number ...' とすることにより負の値を 設定することができます。コマンドは常にサブシェルから実行され、 コマンドには単純な \fIif\fR 文の場合と同じ制限が課されます。 .TP 8 .B nohup \fR[\fIcommand\fR] \fIcommand\fR をつけると、コマンド \fIcommand\fR を ハングアップシグナルを無視して実行するようにします。 これらのコマンドが \fInohup\fR をオーバライドして ハングアップシグナルに対して自分自身で応答するようにすることが あることに注意してください。引数のない場合 (シェルスクリプト中で のみ許されます)、スクリプトのそれ以降の部分でシェルは ハングアップシグナルを無視するようになります。 \fBシグナル処理\fRと、組み込みコマンド \fIhup\fR についても 参照してください。 .TP 8 .B notify \fR[\fB%\fIjob\fR ...] ユーザに非同期的に指定したジョブ (%\fIjob\fR が省略された場合は カレントジョブ) の状態に何らかの変化があった場合に非同期的に、 通知するようにします。この場合は通常と異なり、次のプロンプトが 出力されるまで待ちません。 \fIjob\fR は \fBJobs\fR に記述されているように番号、文字列、`', `%', `+', `\-' のどれでも許されます。 シェル変数 \fBnotify\fR も参照してください。 .TP 8 .B onintr \fR[\fB\-\fR|\fIlabel\fR] 割り込み時のシェルの動作を制御します。 引数がなければ、シェルのデフォルトの割り込み時の動作に設定されます。 この場合は、シェルスクリプトは割り込みで中断され、 コマンド実行時はコマンドの実行を中断してコマンド入力待ちに戻ります。 `-' が指定された場合はすべての割り込みが無視されます。 \fIlabel\fR を指定すると、割り込みが発生したり子プロセスが 割り込みで中断したりした場合に `goto \fIlabel\fR' を実行します。 .IP "" 8 \fIonintr\fR は、システムのスタートアップファイル (\fBFILES\fR を参照) で割り込みが禁止されている場合には無視されます。 .TP 8 .B popd \fR[\fB\-p\fR] [\fB\-l\fR] [\fB\-n\fR|\fB\-v\fR] \fR[\fB+\fIn\fR] 引数がなければ、ディレクトリスタックからひとつ値を取り出して、 そこに移動します。`+\fIn\fR' のように数値を与えると、 ディレクトリスタックの \fIn\fR' 番目のエントリを破棄します。 .IP "" 8 また、すべての形式の \fIpopd\fR は \fIdirs\fR のように ディレクトリスタックの最後のエントリを表示します。 シェル変数 \fBpushdsilent\fR はこれを抑制し、 \fB-p\fR フラグによって \fBpushdsilent\fR の動作を オーバライドすることができます。 \fB\-l\fR, \fB\-n\fR, \fB\-v\fR フラグは \fIpopd\fR でも、\fIdirs\fR と同じ意味をもちます。 .TP 8 .B printenv \fR[\fIname\fR] (+) すべての環境変数の名前と値を表示するか、\fIname\fR を与えた場合には 環境変数 \fIname\fR の値を表示します。 .TP 8 .B pushd \fR[\fB\-p\fR] [\fB\-l\fR] [\fB\-n\fR|\fB\-v\fR] [\fIname\fR|\fB+\fIn\fR] 引数がなければ、ディレクトリスタックの一番上にあるふたつの エントリを入れ換えます。もし \fBpushdtohome\fR がセットされていれば、 引数なしの \fIpushd\fR は \fIcd\fR のように `pushd ~' を行います。 (+) \fIname\fR をつけると、現在の作業ディレクトリを ディレクトリスタックに積んで \fIname\fR に移動します。 もし \fIname\fR が `\-' であれば、ひとつ前の作業ディレクトリとして 解釈されます (\fBファイル名置換\fRを参照)。 (+) \fBdunique\fR がセットされていれば、\fIpushd\fR は、スタックに \fIname\fR を積む前にすべてのそれと同じものを指すエントリを スタックから除去します。(+) `+\fIn\fR' として番号をつけると、ディレクトリスタックの \fIn\fR 番目のエントリがトップにくるようにスタックを回転します。 \fBdextract\fR がセットされている場合、`pushd +\fIn\fR' を行うと \fIn\fR 番目のディレクトリが展開されて、 スタックのトップに移動されます。(+) .IP "" 8 また、すべての形式の \fIpushd\fR は \fIdirs\fR と同じように ディレクトリスタックの最終的な内容を表示します。シェル変数 \fBpushdsilent\fR をセットすることでこれをやめることができ、 またさらにこれは \fB-p\fR フラグによってオーバライドすることが 可能です。\fIpushd\fR に対する \fB\-l\fR, \fB\-n\fR, \fB\-v\fR フラグの意味は \fIdirs\fR のものと同様です。(+) .TP 8 .B rehash \fBpath\fR 変数の示すディレクトリの内容を保持する 内部ハッシュテーブルを再構成します。これはログインしている間に 新しいコマンドが \fBpath\fR の示すディレクトリに追加された場合に 必要です。これはあなたが自分の個人的なディレクトリにコマンドを 追加した場合か、システム管理者がシステムディレクトリの内容を変更した 場合にのみ行われるべきです。このコマンドはまた、チルダ記号を 用いたホームディレクトリ記述のキャッシュもフラッシュします。 .TP 8 .B repeat \fIcount command\fR 指定されたコマンド \fIcommand\fR を \fIcount\fR 回 繰り返し実行します。\fIcommand\fR に指定するものは 一行 \fIif\fR 文で指定する \fIcommand\fR と同様の制限を受けます。 入出力リダイレクションは \fIcount\fR が 0 であっても、 必ず一回だけ処理されます。 .TP 8 .B rootnode //\fInodename \fR(+) ルートノードを //\fInodename\fR に変更します。結果として `/' は `//\fInodename\fR' として解釈されます。 (Domain/OS のみ) .PP .B sched \fR(+) .br .B sched \fR[\fB+\fR]\fIhh:mm command\fR \fR(+) .PD 0 .TP 8 .B sched \-\fIn\fR (+) 最初の形式は、予定されているイベントのリストを表示します。 シェル変数 \fBsched\fR は予定されているイベントのリストを 表示する形式を設定するためにセットされます。 3 番目の形式は \fIcommand\fR を予定されているイベントのリストに 追加します。たとえば、 .PD .RS +8 .IP "" 4 > sched 11:00 echo It\\'s eleven o\\'clock. .PP は、午前 11 時に `It's eleven o'clock.' を表示させます。 時間は 12 時間制の AM/PM を指定する書式でも構いません。 .IP "" 4 > sched 5pm set prompt='[%h] It\\'s after 5; go home: >' .PP また、現在時刻からの相対的な時間でも構いません。 .IP "" 4 > sched +2:15 /usr/lib/uucp/uucico \-r1 \-sother .PP 相対的な指定では AM/PM を使うべきではありません。 3 番目の書式では \fIn\fR 番のイベントをリストから削除します。 .IP "" 4 > sched .br 1 Wed Apr 4 15:42 /usr/lib/uucp/uucico \-r1 \-sother .br 2 Wed Apr 4 17:00 set prompt=[%h] It's after 5; go home: > .br > sched \-2 .br > sched .br 1 Wed Apr 4 15:42 /usr/lib/uucp/uucico \-r1 \-sother .PP 予定イベントのリストにあるコマンドは、コマンドがリストに 入れられてから最初のプロンプトが出たあとで実行されます。 実行の正確な時間を過ぎてしまうことはありますが、 次のプロンプトでは遅れたコマンドが実行されます。 シェルがユーザのコマンド入力を待っている間に実行予定時間が来た コマンドは直ちに実行されます。しかし、既に実行されているコマンドの 実行に割り込むことはできませんし、 予定されていたコマンドの実行についても同様です。 .PP この仕組みはいくつかの Unix システムに実装されている \fIat\fR(1) に 似ていますが同じではありません。 指定した時刻通りにコマンドが実行できないことがあるのは非常に大きな 短所です。しかしこの仕組みの長所は、\fIsched\fR はシェルから 直接実行でき、シェル変数やその他の資源へのアクセスが できるということです。これは時刻によってユーザの作業環境を 変化させることを可能にします。 .RE .PP .B set .br .B set \fIname\fR ... .br .B set \fIname\fR\fB=\fIword\fR ... .br .B set [\-r] [\-f|\-l] \fIname\fR\fB=(\fIwordlist\fB)\fR ... (+) .br .B set \fIname[index]\fR\fB=\fIword\fR ... .br .B set \-r \fR(+) .br .B set \-r \fIname\fR ... (+) .PD 0 .TP 8 .B set \-r \fIname\fR\fB=\fIword\fR ... (+) 1 番目の形式ではすべてのシェル変数の値を表示します。 複数の単語からなる値を持つ変数は括弧で囲まれた値のリストとして表示します。 2 番目の形式では \fIname\fR に空文字列をセットします。 3 番目の形式では \fIname\fR に単一の単語 \fIword\fR をセットします。 4 番目の形式では \fIname\fR に \fIwordlist\fR で示した単語の リストをセットします。すべての場合においてコマンド置換や ファイル名置換が値に対して行われます。\-r が指定された場合には、 値は読み取り専用でセットされます。\-f または \-l が 指定された場合には、単語リストの中での順番を保ちながら 重複した単語が取り除かれます。 \-f は最初に出てきたものをリストに残し、\-l は最後に出てきたものを リストに残します。 5 番目の書式では変数 name の \fIindex\fR 番目の要素に \fIword\fR を セットします。この場合この要素は既に存在していなければなりません。 6 番目の書式は読み取り専用にセットされているシェル変数の 名前の一覧を表示します。 7 番目の書式は \fIname\fR を、値の有無に関わらず読み取り専用に セットします。 8 番目の書式は 3 番目の書式と同じですが、同時に \fIname\fR を 読み取り専用にセットします。 .PD .IP "" 8 複数の変数をセットしたり、読み取り専用にセットするために ひとつの set コマンドへの引数を繰り返すことができます。 しかし、変数への代入処理を開始する前に変数展開処理が一度に 行われることに注意してください。また、`=' は \fIname\fR と \fIword\fRの両方と接しているか、空白で区切られているかの どちらかであり、片方だけと接してはいけないことに注意してください。 組み込みコマンド \fIunset\fR についても参照してください。 .TP 8 .B setenv \fR[\fIname \fR[\fIvalue\fR]] 引数がなければ、すべての環境変数の名前と値を表示します。 \fIname\fR を与えられた場合は、環境変数 \fIname\fR の値を \fIvalue\fR に セットするか、\fIvalue\fR がなければ空文字列にセットします。 .TP 8 .B setpath \fIpath \fR(+) \fIsetpath\fR(1) と同様です。(Mach のみ) .TP 8 .B setspath\fR LOCAL|\fIsite\fR|\fIcpu\fR ... (+) システム実行パスを設定します。(TCF のみ) .TP 8 .B settc \fIcap value \fR(+) シェルに端末ケーパビリティ \fIcap\fR (\fItermcap\fR(5) で定義されたもの) は 値 \fIvalue\fR を持つことを教えます。 妥当性のチェックは行われません。 Concept 端末のユーザは、一番右の桁で適切な折り返しを行うために `settc xn no' を行う必要があるかもしれません。 .TP 8 .B setty \fR[\fB\-d\fR|\fB\-q\fR|\fB\-x\fR] [\fB\-a\fR] [[\fB+\fR|\fB\-\fR]\fImode\fR] (+) シェルが変更してはならない tty モード (\fB端末管理\fRを参照) を制御します。 \fB\-d\fR, \fB\-q\fR, \fB\-x\fR は \fIsetty\fR に、 それぞれ `edit', `quote', `execute' 時の tty モードをセットします。 \fB\-d\fR, \fB\-q\fR, \fB\-x\fR が指定されない場合、 `execute' が使用されます。 .IP "" 8 他の引数がなければ、\fIsetty\fR はオン (`+mode') または オフ (`-mode') に固定されているモードを一覧表示します。 使用可能なモードはシステムごとに異なるため、表示も異なります。 \fB\-a\fR をつけると、固定されているかどうかにかかわらず すべての tty モードを一覧表示します。 \fB+\fImode\fR, \fB\-\fImode\fR, \fImode\fR は、それぞれモード \fImode\fR をオンに固定、オフに固定、非固定にします。 たとえば、`setty +echok echoe' は `echok' をオンに固定し、 シェルがコマンドを実行する際に `echoe' モードを オンにしたりオフにしたりできるようにします。 .TP 8 .B setxvers\fR [\fIstring\fR] (+) \fIstring\fR に試験的なバージョンプレフィックスをセットし、 \fIstring\fR が省略された場合にはそれを削除します。(TCF のみ) .TP 8 .B shift \fR[\fIvariable\fR] 引数がなければ、\fBargv\fR[1] を破棄してメンバを左にずらします。 \fBargv\fR がセットされていなかったり、 値が 1 つもなかった場合にはエラーになります。 変数名 \fIvariable\fR を指定すると、 変数 \fIvariable\fR に対して同じ動作を行います。 .TP 8 .B source \fR[\fB\-h\fR] \fIname\fR [\fIargs\fR ...] \fIname\fR からコマンドを読み取って実行します。 コマンドはヒストリリストには残されません。 もし引数 \fIargs\fR が与えられればそれは \fBargv\fR に 入れられます。(+) \fIsource\fR コマンドは入れ子にすることができます。 もし入れ子のレベルがあまりに深くなり過ぎると、 シェルはファイル記述子の不足を起こすでしょう。 \fIsource\fR でのエラーはすべての入れ子になっている \fIsource\fR の 実行を停止します。 \fB\-h\fR を付けると、コマンドを実行するかわりに `history \-L' の ようにヒストリリストに入力されます。 .TP 8 .B stop \fB%\fIjob\fR|\fIpid\fR ... 指定したバックグラウンドで実行されているジョブまたはプロセスを 停止します。\fIjob\fR は番号か、文字列か、あるいは\fBジョブ\fRに 示されている `', `%', `+', `\-' のいずれかを指定します。 デフォルトの \fIjob\fR は存在しないので、 ただ `stop' を実行するだけではカレントジョブを 停止することにはなりません。 .TP 8 .B suspend \fB^Z\fR で送られるような stop シグナルが送られたかのように、 その場でシェルを停止させます。 これは多くの場合 \fIsu\fR(1) で起動したシェルを停止するのに用いられます。 .PP .B switch (\fIstring\fB) .br .B case \fIstr1\fB: .PD 0 .IP "" 4 \&... .br .B breaksw .PP \&... .PP .B default: .IP "" 4 \&... .br .B breaksw .TP 8 .B endsw 指定された文字列 \fIstring\fR に対して、各 case ラベルを連続的に マッチさせます。\fIstring\fR にはそれに先だってコマンド置換と ファイル名置換が行われます。case ラベルには変数置換が行われ、 ファイル名メタキャラクタの `*', `?', `[...]' を用いることができます。 `default' ラベルが出てくるまでにどの case ラベルとも マッチしなかった場合、default ラベルの後から実行が開始されます。 各 case ラベルと default ラベルは行の最初になければなりません。 \fIbreaksw\fR コマンドは実行を中断して \fIendsw\fR の後から 再開させます。 \fIbreaksw\fR を使用しない場合は C 言語と同様に case ラベルや default ラベルを通過して実行が続けられます。 もしマッチするラベルも default ラベルも存在しない場合は、 実行は \fIendsw\fR の後から再開されます。 .PD .TP 8 .B telltc \fR(+) 端末ケーパビリティのすべての値を一覧表示します (\fItermcap\fR(5) を参照)。 .TP 8 .B time \fR[\fIcommand\fR] コマンド \fIcommand\fR (エイリアスやパイプライン、コマンドリストや 括弧でくくったコマンドリストでない単純なものでなければなりません) を実行し、変数 \fBtime\fR の項で説明する形式で、実行所用時間に 関する要約を表示します。必要ならば、コマンド終了時に時間を 表示するための追加のシェルが生成されます。\fIcommand\fR を 指定しなかった場合は、現在のシェルとその子プロセスが使用した時間に 関する要約が表示されます。 .TP 8 .B umask \fR[\fIvalue\fR] 8 進数で指定されたファイル作成マスクを \fIvalue\fR に設定します。 一般的なマスクの値としては、グループにすべての権限を与え、 その他には読み取りと実行のみを許可する 002 や、グループとその他に 読み取りと実行を許可する 022 があります。 \fIvalue\fR を省略すると、現在のファイル作成マスクを表示します。 .TP 8 .B unalias \fIpattern .br パターン \fIpattern\fR にマッチするすべてのエイリアスを削除します。 したがって `unalias *' とすることですべてのエイリアスを 削除できます。 \fIunalias\fR するものがなかった場合もエラーにはなりません。 .TP 8 .B uncomplete \fIpattern\fR (+) パターン \fIpattern\fR にマッチするすべての補完対象を削除します。 したがって `uncomplete *' とすることですべての補完対象を 削除します。 \fIuncomplete\fR するものがなかった場合もエラーにはなりません。 .TP 8 .B unhash 実行プログラムの検索を高速化する内部ハッシュテーブルの使用を 禁止します。 .TP 8 .B universe \fIuniverse\fR (+) universe を \fIuniverse\fR に設定します。(Masscomp/RTU のみ) .TP 8 .B unlimit \fR[\fB\-h\fR] [\fIresource\fR] リソース \fIresource\fR の制限を解除します。\fIresource\fR が 指定されない場合は、すべてのリソースに関する制限が解除されます。 \fB\-h\fR が指定されると、対応するハードリミットが解除されます。 これはスーパユーザのみが行うことができます。 .TP 8 .B unset \fIpattern パターン \fIpattern\fR にマッチするすべての変数を、読み取り専用の 場合も含めて削除します。したがって `unset *' とすることによって 読み取り専用のものも含めてすべての変数が削除されますが、 これは良いことではありません。 \fIunset\fR するものがなかった場合もエラーにはなりません。 .TP 8 .B unsetenv \fIpattern パターン \fIpattern\fR にマッチするすべての環境変数を削除します。 したがって `unsetenv *' とすることによってすべての環境変数を 削除することができますが、これは良いことではありません。 \fIunsetenv\fR する環境変数がなかった場合もエラーにはなりません。 .TP 8 .B ver \fR[\fIsystype\fR [\fIcommand\fR]] (+) 引数が与えられなかった場合は \fBSYSTYPE\fR を表示します。 \fIsystype\fR を指定した場合は、\fBSYSTYPE\fR を \fIsystype\fR に設定します。\fIsystype\fR とコマンド \fIcommand\fR を指定した場合は、\fIsystype\fR で \fIcommand\fR を 実行します。\fIsystype\fR は `bsd4.3' か `sys5.3' のいずれかです。 (Domain/OS のみ) .TP 8 .B wait すべてのバックグラウンドジョブの終了を待ちます。対話的にシェルが 実行されている場合、割り込みにより wait を停止することが できます。この際シェルはまだ終了していないすべてのジョブの名前と その番号を表示します。 .TP 8 .B warp \fIuniverse\fR (+) universe を \fIuniverse\fR に設定します。(Convex/OS のみ) .TP 8 .B watchlog \fR(+) 組み込みコマンド \fIlog\fR の別名です (そちらも参照)。 コンパイル時に使用できるように設定されている場合にのみ使用可能です。 シェル変数 \fBversion\fR を参照してください。 .TP 8 .B where \fIcommand\fR (+) コマンド \fIcommand\fR について、エイリアスや組み込みコマンド、 \fBpath\fR にある実行可能ファイルを含めてシェルの知っている すべての実体を一覧表示します。 .TP 8 .B which\fR \fIcommand\fR (+) コマンド \fIcommand\fR が、\fBpath\fR の検索などの処理のあとで、 実際に実行されるコマンドを表示します。組み込みのものは \fIwhich\fR(1) とほとんど同じですが、 \fItcsh\fR のエイリアスや組み込みコマンドついても正しく報告し、 また 10 から 100 倍高速です。 編集コマンド \fIwhich-command\fR についても参照してください。 .PP .B while (\fIexpr\fB)\fR .br \&... .PD 0 .TP 8 .B end 指定された式 \fIexpr\fR (\fB式\fRで述べられている式) の評価結果が 0 でない限り、\fIwhile\fR とそれに対応する \fIend\fR の間のコマンド を繰り返し実行します。 \fIwhile\fR と \fIend\fR はその行に単独で書かれなければなりません。 \fIbreak\fR と \fIcontinue\fR は、ループを途中で中断したり再開する 場合に使用します。 入力が端末の場合は、\fIforeach\fR の場合と同じように、 ループの内容を一通り入力するまでユーザにプロンプトが出力されます。 .PD .SS "特別なエイリアス (+)" これらのエイリアスは、設定されている場合それぞれ指示された時刻に 自動的に実行されます。これらのエイリアスは、初期状態ではすべて 未定義です。 .TP 8 .B beepcmd シェルが端末ベルを鳴らしたいときに実行されます。 .TP 8 .B cwdcmd 作業ディレクトリが変更されるたびに実行されます。たとえば、 ユーザが X Window System 上で作業していて、 \fIxterm\fR(1) および \fItwm\fR(1) のように、 タイトルバーをサポートしている リペアレントウィンドウマネージャを使用していて、 .RS +8 .IP "" 4 > alias cwdcmd 'echo \-n "^[]2;${HOST}:$cwd ^G"' .PP を実行すると、シェルは、動作中の \fIxterm\fR(1) のタイトルを ホスト名、コロン、そしてカレント作業ディレクトリのフルパスに 変更します。 これをもっと面白く実行するには、次のようにします。 .IP "" 4 > alias cwdcmd 'echo \-n "^[]2;${HOST}:$cwd^G^[]1;${HOST}^G"' .PP こうすると、ホスト名および作業ディレクトリはタイトルバーに 変更されますが、アイコンマネージャのメニューにはホスト名しか 表示されなくなります。 .PP \fIcwdcmd\fR 中に \fIcd\fR, \fIpushd\fR あるいは \fIpopd\fR を置くと、 無限ループを引き起こす可能性があることに注意してください。 そういうことをする人は、そうしてしまった代償は受けるものだというのが 作者の見解です。 .RE .TP 8 .B jobcmd 各コマンドが実行される前またはコマンドが状態を変える前に実行します。 \fIpostcmd\fR と似ていますが、組み込みコマンドでは表示しません。 .RS +8 .IP "" 4 > alias jobcmd 'echo \-n "^[]2\e;\e!#^G"' .PP として \fIvi foo.c\fR を実行すると、 コマンド文字列が xterm タイトルバーに表示されます。 .RE .TP 8 .B helpcommand \fBrun-help\fR 編集コマンドが実行します。ヘルプが探すコマンド名は、 単一の引数として渡されます。 たとえば、 .RS +8 .IP "" 4 > alias helpcommand '\e!:1 --help' .PP とすると、GNU のヘルプ呼び出し方法を使った、 コマンドそのもののヘルプ表示が実行されます。 現在のところ、たくさんのコマンドを書いたテーブルを使う以外には、 いろいろな呼び出し方法 (たとえば、Unix の `-h' オプション)を 使い分ける簡単な方法はありません。 .RE .TP 8 .B periodic \fBtperiod\fR 分おきに実行されます。このエイリアスは、 たとえば新しいメールが届いたというような、 日常的ではあってもそれほど頻繁には起こらない変更点を チェックするのに便利な手段を提供します。 たとえば、 .RS +8 .IP "" 4 > set tperiod = 30 .br > alias periodic checknews .PP とすると、30 分おきに \fIchecknews\fR(1) プログラムが起動します。 \fIperiodic\fR が設定されているが、\fBtperiod\fR が設定されていないか あるいは 0 に設定されている場合、\fIperiodic\fR は \fIprecmd\fR のように振る舞います。 .RE .TP 8 .B precmd プロンプトが表示される直前に実行されます。たとえば、 .RS +8 .IP "" 4 > alias precmd date .PP とすると、各コマンド用にシェルプロンプトが表示される直前に \fIdate\fR(1) が起動します。 \fIprecmd\fR に何を設定できるかには制限はありませんが、 慎重に選んでください。 .RE .TP 8 .B postcmd 各コマンドが実行される前に実行されます。 .RS +8 .IP "" 4 > alias postcmd 'echo \-n "^[]2\e;\e!#^G"' .PP とすると、\fIvi foo.c\fR を実行すると xterm のタイトルバーに このコマンド文字列が書かれます。 .RE .TP 8 .B shell スクリプト中でインタプリタを指定していない実行可能スクリプト用の インタプリタを指定します。 最初の単語は、使用したいインタプリタへのフルパスでなくてはなりません (たとえば、`/bin/csh' や `/usr/local/bin/tcsh')。 .SS "特別なシェル変数" このセクションで述べる変数は、シェルにとっては特別な意味のあるものです。 .PP シェルは、起動時に次の変数を設定します。\fBaddsuffix\fR, \fBargv\fR, \fBautologout\fR, \fBcommand\fR, \fBecho_style\fR, \fBedit\fR, \fBgid\fR, \fBgroup\fR, \fBhome\fR, \fBloginsh\fR, \fBoid\fR, \fBpath\fR, \fBprompt\fR, \fBprompt2\fR, \fBprompt3\fR, \fBshell\fR, \fBshlvl\fR, \fBtcsh\fR, \fBterm\fR, \fBtty\fR, \fBuid\fR, \fBuser\fR そして \fBversion\fR です。 これらの変数は、起動後はユーザが変更しない限り変更されません。 シェルは、必要があれば、\fBcwd\fR, \fBdirstack\fR, \fBowd\fR および \fBstatus\fR を更新し、ログアウト時に \fBlogout\fR を設定します。 .PP シェルは、シェル変数 \fBafsuser\fR, \fBgroup\fR, \fBhome\fR, \fBpath\fR, \fBshlvl\fR, \fBterm\fR および \fBuser\fR と同名の 環境変数との同期を取ります。 つまり、環境変数が変更されると、シェルは対応するシェル変数を合致するように 変更するのです (シェル変数が読み込み専用でない場合です)。また、その逆も 行います。ここで、\fBcwd\fR と \fBPWD\fR は同じ意味を持ちますが、 この方法では同期は行われないということに注意してください。 また、シェルは、自動的に \fBpath\fR と \fBPATH\fR の違った形式を 相互変換するということにも注意してください。 .TP 8 .B addsuffix \fR(+) これが設定されている場合、ファイル名が補完の際に完全に一致するときに、 一致したものがディレクトリの場合には末尾に `/' を付け加え、 通常のファイルの場合には末尾にスペースを加えます。 デフォルトで設定されています。 .TP 8 .B afsuser \fR(+) これが設定されている場合、\fBautologout\fR の autolock 機能は、 ローカルのユーザ名の代わりにこの値を kerberos 認証用に使います。 .TP 8 .B ampm \fR(+) これが設定されている場合、時刻が 12 時間単位の AM/PM フォーマットで すべて表示されます。 .TP 8 .B argv シェルへの引数です。位置パラメータは \fBargv\fR から取られます。 すなわち、`$1' は `$argv[1]' に置き換えられるといった具合です。 デフォルトで設定されていますが、通常対話型シェルでは空です。 .TP 8 .B autocorrect \fR(+) これが設定されている場合は、補完を試みる前に 自動的に \fIspell-word\fR 編集コマンドが実行されます。 .TP 8 .B autoexpand \fR(+) これが設定されている場合は、補完を試みる前に自動的に \fIexpand-history\fR 編集コマンドが実行されます。 .TP 8 .B autolist \fR(+) これが設定されている場合は、あいまいな補完を行った後、 可能性のあるものをリストします。 `ambiguous' が設定されている場合、可能性のあるものを リストするのは、補完によって何の文字も 追加されなかった場合に限られます。 .TP 8 .B autologout \fR(+) 1 番目の単語は、時間を分単位で表しており、 この時間以上の間、何の処理もしていなければ 自動的にログアウトされます。2 番目の単語はオプションであり、 ここで指定された時間以上の間、何の処理もしていなければ 自動ロックがかかります。 シェルが自動的にログアウトする際には、 シェルは `auto-logout' と出力し、logout 変数を `automatic' に 設定し、そして終了します。 シェルが自動的にロックされたユーザは、作業を続けたいなら 自分のパスワードを入力することが必要になります。5 回入力に 失敗すると、自動的にログアウトします。 ログインシェルおよびスーパユーザのシェルでは、デフォルトで `60'(60 分後自動的にログアウトし、ロックはかけない) に 設定されています。しかし、シェルがウィンドウシステムの もとで動いていると認識した場合 (すなわち、\fBDISPLAY\fR 環境変数が設定されている) や、 tty が疑似 tty(pty) である場合、あるいは、シェルがそのようには コンパイルされていない場合 (\fBversion\fR シェル変数を参照) には設定されません。 \fBafsuser\fR および \fBlogout\fR シェル変数も 参照してください。 .TP 8 .B backslash_quote \fR(+) これが設定されている場合、バックスラッシュ (`\\') は 常に `\\', `'', および `"' でクォートされます。これによって、 複雑なクォートをする手間が緩和されますが、 \fIcsh\fR(1) スクリプト中で文法エラーをひき起こす 可能性が出てきます。 .TP 8 .B catalog メッセージカタログのファイル名です。 これが設定されている場合、 デフォルトの `tcsh' の代りに `tcsh.${catalog}' を、 メッセージカタログとして tcsh は使用します。 .TP 8 .B cdpath カレントディレクトリ中にサブディレクトリが見つからなかった場合に、 \fIcd\fR が探索すべきディレクトリのリストです。 .TP 8 .B color これが設定されている場合、組み込みコマンド \fBls\-F\fR 用の カラー表示を有効にし、\fB\-\-color=auto\fR を \fBls\fR に渡します。あるいは、ただ 1 つのコマンドに 対してカラー表示を有効にするため、\fBls\-F\fR または \fBls\fR のみに設定することができます。 何に対しても設定しない場合は、\fB(ls\-F ls)\fR に対して 設定したのと等価です。 .TP 8 .B colorcat これが設定されている場合は、NLS メッセージファイルに対して カラー用エスケープシーケンスを有効にします。これによって、 色のついた NLS メッセージが表示されます。 .TP 8 .B command \fR(+) これが設定されている場合、シェルに渡されたコマンドは、 \fB-c\fR フラグ (そちらも参照) をつけたものに なります。 .TP 8 .B complete \fR(+) これが `enhance' に設定されている場合、補完は、 1) 大文字小文字を無視し、2) ピリオド、ハイフン、および アンダスコア (`.', `-', `_') を単語の区切り文字と みなし、ハイフンとアンダスコアを等価なものとみなします。 .TP 8 .B continue \fR(+) コマンドリストに対してこれが設定されている場合、シェルは リストされているコマンドを継続実行し、新たにコマンドを 開始しません。 .TP 8 .B continue_args \fR(+) continue と同じですが、シェルは次のコマンドを実行します: .RS +8 .IP "" 4 echo `pwd` $argv > ~/._pause; % .RE .TP 8 .B correct \fR(+) `cmd' に設定されている場合、コマンドは自動的にスペル訂正されます。 `complete' に設定されている場合、コマンドは自動的に補完されます。 `all' に設定されている場合、コマンドライン全体が訂正されます。 .TP 8 .B cwd カレントディレクトリのフルパス名です。 シェル変数 \fBdirstack\fR および \fBowd\fR も参照してください。 .TP 8 .B dextract \fR(+) これが設定されている場合、`pushd +\fIn\fR' はディレクトリを先頭に 持っていくのではなく、ディレクトリスタックから \fIn\fR 番目の ディレクトリを取り出します。 .TP 8 .B dirsfile \fR(+) `dirs \-S' および `dirs \-L' がヒストリファイルを探すデフォルトの 場所です。設定していない場合は、\fI~/.cshdirs\fR が使われます。 通常、\fI~/.tcshrc\fR の方が \fI~/.cshdirs\fR よりも先に ソースとして使われるため、\fBdirsfile\fR は、\fI~/.login\fR ではなく \fI~/.tcshrc\fR 中で設定すべきです。 .TP 8 .B dirstack \fR(+) ディレクトリスタック上の全ディレクトリの配列です。 `$dirstack[1]' はカレントディレクトリであり、`$dirstack[2]' は スタック上の最初のディレクトリといった具合です。 カレントディレクトリは `$dirstack[1]' ですが、 ディレクトリスタックの置換では `=0' であるなどということに 注意してください。\fBdirstack\fR を設定することでスタックを 任意に変更することができますが、最初の要素 (カレント ディレクトリ) は常に正しいものになります。 シェル変数 \fBcwd\fR および \fBowd\fR も参照してください。 .TP 8 .B dspmbyte \fR(+) `euc' に設定されている場合、EUC-kanji(Japanese) コードで 表示および編集ができるようになります。 `sjis' に設定されている場合、Shift-JIS(Japanese) コードで 表示および編集ができるようになります。 `big5' に設定されている場合、Big5(Chinese) コードで 表示および編集ができるようになります。 `utf8' に設定されている場合、Utf8(Unicode) コードで 表示および編集ができるようになります。 次のようなフォーマットに設定されている場合、 独自のマルチバイトコードフォーマットで 表示および編集ができるようになります: .RS +8 .IP "" 4 > set dspmbyte = 0000....(256 bytes)....0000 .PP テーブルには\fBちょうど\fR 256 バイト必要です。 256 文字それぞれは、ASCII コード 0x00, 0x01, ... 0xff に (左から右に向かって) 対応しています。 各キャラクタは、 .\" (position in this table?) 数値 0, 1, 2, 3 に設定されます。各数字には次のような意味があります: .br 0 ... マルチバイト文字に対しては使われません。 .br 1 ... マルチバイト文字の最初の 1 バイトに対して使われます。 .br 2 ... マルチバイト文字の 2 バイト目に対して使われます。 .br 3 ... マルチバイト文字の 1, 2 バイト両方に対して使われます。 .\" SHK: I tried my best to get the following to be grammatically correct. .\" However, I still don't understand what's going on here. In the .\" following example, there are three bytes, but the text seems to refer to .\" each nybble as a character. What's going on here? It this 3-byte code .\" in the table? The text above seems to imply that there are 256 .\" characters/bytes in the table. If I get some more info on this (perhaps .\" a complete example), I could fix the text to be grammatically correct. .\" (steve.kelem@xilinx.com 1999/09/13) .\" SHK: 私は、次の例が文法的に正しいものになるように全力を尽くしました。 .\" しかし、いまだに何が起こっているのか理解できていません。次の例では .\" 3 バイトありますが、テキストは各ニブル (半バイト) を 1 文字とみなして .\" いるようです。ここでは何が起こっているのでしょう?テーブル中にあるのは、 .\" この 3 バイトのコードなのですか?上のテキストでは、テーブル中には .\" 256 文字/バイトあるのだと暗に言っているように思えるのです。 .\" この件についてもっと情報が得られたら (おそらくそれは完全な .\" 使用例でしょう)、このテキストを文法的に正しいものにできるでしょう。 .PP 使用例: .br `001322' に設定した場合、最初の文字 (すなわち、ASCII コードで 0x00) と 2 番目の文字 (すなわち、ASCII コードで 0x01) は `0' に設定されます。 つまり、マルチバイト文字に対してはこれらの文字は使用しません。 3 番目の文字 (0x02) は `2' に設定されます。これは、マルチバイト文字の 最初の 1 バイトにこの文字が使用されることを表しています。 4 番目の文字 (0x03) は `3' に設定されます。この文字は、 マルチバイト文字の 1 バイト目にも 2 バイト目にも使用されます。 5 番目および 6 番目の文字 (0x04, 0x05) は `2' に設定されます。 これは、これらの文字がマルチバイト文字の 2 バイト目に使用されることを 表しています。 .PP GNU fileutils バージョンの ls では、-N ( --literal ) オプションが ついていないとマルチバイト文字のファイル名を表示できません。 もし、fileutils バージョンを使っている場合は、dspmbyte の 2 番目の文字を "ls" に設定してください。そうしないと、 たとえば "ls-F -l" でマルチバイト文字のファイル名が表示できません。 .PP 注: .br この変数が使用可能であるのは、 KANJI と DSPMBYTE がコンパイル時に定義された場合だけです。 .RE .TP 8 .B dunique \fR(+) これが設定されている場合、\fIpushd\fR は、ディレクトリ名を スタックに置く前に \fIname\fR である任意の要素をスタックから削除します。 .TP 8 .B echo これが設定されている場合、各コマンドは、実行される直前に 引数と一緒にエコーされます。組み込みコマンド以外のコマンドについては、 展開がすべて行われた後にエコーされます。組み込みコマンドについては、 コマンドおよびファイル名の置換が行われるよりも前にエコーされます。 これは、置換がユーザの選択によって行われるものだからです。 このシェル変数は、コマンドラインオプション \fB-x\fR で設定されます。 .TP 8 .B echo_style \fR(+) echo 組み込みコマンドのスタイルです。次のように設定できます。 .PP .RS +8 .PD 0 .TP 8 bsd 第 1 引数が `-n' である場合、改行をエコーしません。 .TP 8 sysv echo 中の文字列のバックスラッシュで始まるエスケープシーケンスを 認識します。 .TP 8 both `-n' フラグとバックスラッシュで始まるエスケープシーケンスの 両方ともを認識します。これがデフォルトです。 .TP 8 none どちらも認識しません。 .PD .PP デフォルトでは、ローカルシステムのデフォルトに設定されます。 BSD ならびに System V オプションは、適当なシステムの \fIecho\fR(1) マニュアルページに解説があります。 .RE .TP 8 .B edit \fR(+) これが設定されている場合、コマンドラインエディタが使われます。 対話型シェルではデフォルトで設定されています。 .TP 8 .B ellipsis \fR(+) これが設定されている場合、`%c'/`%.' および `%C' プロンプトシーケンス (\fBprompt\fR シェル変数を参照) は、`/' の代わりに 省略記号 (`...') つきのスキップディレクトリを示すようになります。 .TP 8 .B fignore \fR(+) 補完する際に無視されるファイル名のサフィックスリストです。 .TP 8 .B filec デフォルトでは \fItcsh\fR では補完は常に行われますので、この変数は無視されます。 .B edit が未設定である場合、伝統的な \fIcsh\fR の補完が使用されます。 \fIcsh\fR で設定されている場合は、ファイル名の補完が使われる ようになります。 .TP 8 .B gid \fR(+) ユーザの実グループ ID です。 .TP 8 .B group \fR(+) ユーザのグループ名です。 .TP 8 .B histchars \fBヒストリ置換\fR (そちらも参照) で使われる文字を 決定する文字列です。この値の最初の文字は、デフォルトの `!' の 代わりにヒストリ置換文字として使われます。2 番目の文字は、 クイック置換の際の文字 `^' の代わりをします。 .TP 8 .B histdup \fR(+) ヒストリリスト中の重複エントリの扱いを制御します。 この値が `all' に設定されている場合、単一のヒストリイベントが ヒストリリストに入力されます。`prev' に設定されている場合、 最後のヒストリイベントは現在のコマンドと同じとなり、そのため、 現在のコマンドはヒストリには入力されません。`erase' に設定されて いる場合、ヒストリリスト中に同じイベントが見つかったときには、 古い方のイベントは消去され、現在のものが挿入されます。 `prev' および `all' オプションはヒストリイベントの番号づけを やり直しますので、すき間はあかないのだということに注意してください。 .TP 8 .B histfile \fR(+) `history \-S' および `history \-L' が探すヒストリファイルの デフォルトの場所です。これが設定されていない場合、\fI~/.history\fR が 使われます。別々のマシン間で同じホームディレクトリを共有していたり、 端末ごとにヒストリを分けて保存していたりする場合、\fBhistfile\fR は 便利なものです。通常、\fI~/.history\fR ファイルよりも前に読み込まれる のは \fI~/.tcshrc\fR だけなので、\fBhistfile\fR は\fI~/.login\fR ではなく、\fI~/.tcshrc\fR で設定してください。 .TP 8 .B histlit \fR(+) これが設定されている場合、組み込みコマンド、編集コマンド および \fBsavehist\fR 機構はヒストリリスト中のコマンド行を 文字通りの (展開しない) 形式で使用します。\fItoggle-literal-history\fR 編集コマンドも参照してください。 .TP 8 .B history 最初の単語は、記録しておくべきヒストリイベント数を表します。 オプションである 2 番目の単語 (+) は、ヒストリが どういう形式で表示されるかを示しています。 これが与えられていなければ、 `%h\\t%T\\t%R\\n' が使われます。 フォーマットシーケンスは、\fBprompt\fR 下に記述されており、 そこでは、`%R' の意味が変わることの注意がされています。 デフォルトでは `100' です。 .TP 8 .B home 起動したユーザのホームディレクトリに初期化されます。 ファイル名での `\fI~\fR の展開には、この変数が参照されています。 .TP 8 .B ignoreeof これが空文字列あるいは `0' に設定されており、 入力デバイスが端末である場合には、 \fIend-of-file\fR コマンド (通常は、ユーザが空行に `~D' を打つことで 生成されます) を入力すると、シェルは終了してしまう代わりに `Use "exit" to leave tcsh.' と表示します。 これによって、シェルがうっかり kill されてしまうのを防ぐことができます。 番号 \fIn\fR を設定している場合には、 シェルは \fIn\fR - 1 回連続した \fIend-of-file\fR を無視し、 \fIn\fR 回目の \fIend-of-file\fR があればそのときに終了します。(+) これが設定されていない場合には、`1' が使われます。 つまり、シェルは `^D' 1 回で終了します。 .TP 8 .B implicitcd \fR(+) これが設定されている場合、シェルは、コマンドとして入力された ディレクトリ名を、あたかもそのディレクトリへ移動する要求であるものと 解釈します。\fIverbose\fR に設定されている場合、ディレクトリの移動が 行われることが標準出力にエコーされるようになります。 この振る舞いは、非対話的なシェルスクリプト、あるいは 2 語以上あるコマンド行では禁止されています。 ディレクトリを移動するのは、ディレクトリ名のような名前を持ったコマンドを 実行するよりも優先されますが、エイリアスの置換よりは後になります。 チルダおよび変数の展開も動作します。 .TP 8 .B inputmode \fR(+) `insert' あるいは `overwrite' に設定されている場合、 各行の先頭でエディタが入力モードに入るようになります。 .TP 8 .B killdup \fR(+) キルリング中の重複エントリの扱いを制御します。 `all' にセットすると、一意なエントリのみがキルリングに登録されます。 `prev' にセットすると、 最後にキルされた文字列が現在のキル文字列にマッチする場合、 現在の文字列はリングに登録されません。 `erase' にセットすると、同じ文字列がキルリング中に見付かった場合、 古い文字列が削除されて現在の文字列が挿入されます。 .TP 8 .B killring \fR(+) 何個のキルされた字列をメモリ中に保持するかを示します。 デフォルトで `30' にセットされます。 セットしないか、`2' より小さい値を設定すると、 最近キルした文字列のみをシェルは保持します。 .TP 8 .B listflags \fR(+) `x', `a', `A' あるいはこれらの組合せ (たとえば、`xA') に設定されている場合、 これらの値は、\fIls\-F\fR へのフラグとして使われ、`ls \-xF', `ls \-Fa', `ls \-FA' あるいはこれらの組合せ (たとえば、`ls \-FxA') のように振る舞うようになります。 `a' はすべてのファイルを表示します (たとえ、`.' で始まるファイルで あっても)。`A' は `.' および `..' 以外のファイルすべてを表示し、 `x' は上から下に向かってではなく、左から右に向かってソートします。 \fBlistflags\fR に 2 番目の単語が設定されていれば、 それは `ls(1)' へのパスとして使われます。 .TP 8 .B listjobs \fR(+) これが設定されていれば、ジョブが一時停止したときにすべての ジョブがリストされます。`long' に設定されていれば、 リストは長い形式のものになります。 .TP 8 .B listlinks \fR(+) これが設定されていれば、組み込みコマンド \fIls\-F\fR は 各シンボリックリンクが指しているファイルの種類を表示します。 .TP 8 .B listmax \fR(+) \fIlist-choices\fR 編集コマンドがユーザに最初に尋ねてこないで リストする最大要素数です。 .TP 8 .B listmaxrows \fR(+) \fIlist-choices\fR 編集コマンドがユーザに最初に尋ねてこないで リストする要素の最大行数です。 .TP 8 .B loginsh \fR(+) シェルがログインシェルである場合に設定されます。 シェル中でこの変数を設定したり設定を解除したりしても 何の効力もありません。\fBshlvl\fR も参照してください。 .TP 8 .B logout \fR(+) 通常のログアウトの前には、シェルによって `normal' が、 自動ログアウトの前には `automatic' が、そして、 シェルがハングアップシグナルによって終了させられた場合 (\fBシグナルの扱い\fRを参照) には `hangup' が設定されます。 \fBautologout\fR シェル変数も参照してください。 .TP 8 .B mail 届けられるメールをチェックするためのファイルあるいは ディレクトリ名です。これは、スペースで区切られ、 オプションで数字を前につけます。 プロンプトを出す前に、最後にメールチェックをしてから 10 分経っていた場合、シェルは各ファイルをチェックし、 もしファイルサイズが 0 より大きいか、あるいはアクセス時刻よりも 変更時刻の方が大きかった場合には `You have new mail.' (あるいは、\fBmail\fR に複数のファイルが含まれていた場合、 `You have new mail in \fIname\fR.') と表示します。 .PP .RS +8 .PD .PP ログインシェルにいる場合には、シェルの起動時刻後にファイルが 変更されない限り、どのメールファイルも報告されません。 これは、余計に通知しないようにするためです。 大部分の login プログラムでは、ログイン時にメールが届いているかどうかを 教えてくれるものです。 .PP \fBmail\fR で指定されたファイルがディレクトリである場合、 シェルは、ディレクトリ中の各ファイルを別々のメッセージとして計算し、 `You have \fIn\fR mails.' とか `You have \fIn\fR mails in \fIname\fR.' とかと適切に報告します。この機能は、主に Andrew Mail System のように、 メールをこの方式で保存するシステム用に提供されたものです。 .PP \fBmail\fR の最初の単語が数値である場合、それはメールチェックの 間隔を変えるものとして受け取られます。秒単位です。 .PP とても稀な状況下ですが、シェルが `You have new mail.' ではなく `You have mail.' と報告することがあります。 .RE .TP 8 .B matchbeep \fR(+) これが `never' に設定されている場合、補完が行われてもビープ音は 鳴りません。 `nomatch' に設定されている場合、マッチするものがないときにのみ ビープ音が鳴ります。 `ambiguous' に設定されている場合、マッチするものが複数あるときに ビープ音が鳴ります。 `notunique' に設定されている場合、完全にマッチするものが 1 つあり、 また、それとは別にもっと長くマッチするものがあったときにビープ音が 鳴ります。 これが設定されていない場合、`ambiguous' が使われます。 .TP 8 .B nobeep \fR(+) これが設定されている場合、ビープ音は完全に無効になります。 \fBvisiblebell\fR も参照してください。 .TP 8 .B noclobber これが設定されている場合、出力リダイレクションに制限がおかれるようになり、 \fB入出力\fRセクションで述べているように、 ファイルをうっかり壊さないように、また、`>>' リダイレクションが存在する ファイルを指すように保証できます。 .TP 8 .B noding \fBprompt\fR の時刻指定子において、時間の変わり目に `DING!' と 表示するのを無効にします。 .TP 8 .B noglob これが設定されている場合、\fBファイル名置換\fRおよび、 \fBディレクトリスタック置換\fR (そちらも参照) が 禁止されます。この機能は、ファイル名を扱わないシェルスクリプトや、 ファイル名のリストを取得した後、さらに展開をされたくない スクリプトには最も有効なものです。 .TP 8 .B nokanji \fR(+) これが設定されており、シェルが漢字をサポートしている場合 (シェル変数 \fBversion\fR を参照)、漢字のサポートを無効にし、 メタキーが使えるようにします。 .TP 8 .B nonomatch これが設定されている場合、\fBファイル名置換\fRおよび \fBディレクトリスタック置換\fR (そちらも参照) の際に、 存在するファイルにマッチしなかったときに、エラーを出さずに そのまま放置するようになります。置換が機能しないときには 相変わらずエラーになります。 たとえば、`echo [' は相変わらずエラーとなります。 .TP 8 .B nostat \fR(+) 補完処理が行われている間に \fIstat\fR(2) をかけるべきではない ディレクトリのリスト (あるいは、ディレクトリにマッチする グロブパターンです。\fBファイル名置換\fRを参照) です。 この機能は、\fIstat\fR(2) を実行するととてつもない時間が かかってしまうようなディレクトリ、 たとえば \fI/afs\fR などを除外するのに通常使われます。 .TP 8 .B notify これが設定されている場合、シェルはジョブが完了したことを非同期に 通知します。デフォルトは、プロンプトが表示される直前に ジョブの完了を提示します。 .TP 8 .B oid \fR(+) ユーザの実組織 ID です (Domain/OS のみです)。 .TP 8 .B owd \fR(+) 前の作業ディレクトリで、\fIcd\fR が使う `\-' および \fIpushd\fR と等価です。 \fBcwd\fR および \fBdirstack\fR シェル変数も参照してください。 .TP 8 .B path 実行可能なコマンドを探すディレクトリのリストです。 null 文字はカレントディレクトリを示します。 \fBpath\fR 変数がない場合、フルパス名での指定のみ実行されます。 \fBpath\fR は、起動時にシェルが環境変数 \fBPATH\fR から設定するか、 あるいは \fBPATH\fR が存在しなかった場合には、システム依存の デフォルト、たとえば `(/usr/local/bin /usr/bsd /bin /usr/bin .)' のようなものに 設定します。 シェルは、`.' を \fBpath\fR の先頭あるいは末尾に置くことができ、 また、コンパイルの仕方に依存しますが、 `.' を完全に省いてしまうことも できます。\fB\-c\fR, \fB\-t\fR オプションのどちらも与えられていない シェルは、\fI~/.tcshrc\fR を読み込んだ後および \fBpath\fR が リセットされるたびにディレクトリの中身をハッシュに格納します。 シェルがアクティブである間に、ユーザが \fBpath\fR 中の ディレクトリに新しいコマンドを追加した場合、 シェルがそのコマンドを見つけられるように \fIrehash\fR を実行する必要があるかもしれません。 .TP 8 .B printexitvalue \fR(+) これが設定されており、対話型のプログラムが 0 以外のステータスで 終了した場合、シェルは `Exit \fBstatus\fR' と表示します。 .TP 8 .B prompt 端末からコマンドを読み込む前に表示される文字列です。 \fBprompt\fR には、次のフォーマット列 (+) のどれを含んでも構いません。 このフォーマット列は、与えられた情報で書き換えられます。 .PP .RS +8 .PD 0 .TP 4 %/ カレント作業ディレクトリです。 .TP 4 %~ カレント作業ディレクトリですが、`~' で表現される ユーザのホームディレクトリおよび `~user' で表現される 他のユーザのホームディレクトリを \fBファイル名置換\fRします。 `~user' の置換は、現在のセッションにおいて、 シェルがパス名に `~\fIuser\fR' を使っている場合にのみ起こります。 .TP 4 %c[[0]\fIn\fR], %.[[0]\fIn\fR] 現在の作業ディレクトリの、末尾の要素です。 数字 \fIn\fR が指定されている場合、末尾の \fIn\fR 個の要素です。 \fIn\fR が `0' で開始する場合、スキップされた要素数が 末尾要素の前に付き、次の書式となります `/<\fIスキップされた数\fR>末尾要素'。 シェル変数 \fBellipsis\fR が設定されている場合、 スキップされた要素は省略記号で置換されますので、 全体的には `...末尾要素' となります。 `~' 置換は、前述の `%~' と同様に行われますが、 `~' 要素は、末尾要素数を数える対象からは除外されます。 .TP 4 %C %c に似ていますが、`~' の置換を行いません。 .TP 4 %h, %!, ! 現在のヒストリイベント番号です。 .TP 4 %M 完全なホスト名です。 .TP 4 %m 最初の `.' までのホスト名です。 .TP 4 %S (%s) 強調表示モードを開始 (終了) します。 .TP 4 %B (%b) ボールド体表示モードを開始 (終了) します。 .TP 4 %U (%u) アンダラインモードを開始 (終了) します。 .TP 4 %t, %@ AM/PM の 12 時間表記での時刻です。 .TP 4 %T `%t' に似ていますが、こちらは 24 時間表記です (ただし、シェル変数 \fBampm\fR も参照)。 .TP 4 %p 秒まで含めた、AM/PM の 12 時間表記での `正確な' 時刻です。 .TP 4 %P `%p' に似ていますが、こちらは 24 時間表記です (ただし、シェル変数 \fBampm\fR も参照)。 .TP 4 \e\fIc\fR \fIc\fR は \fIbindkey\fR 中にあるものとしてパースされます。 .TP 4 ^\fIc\fR \fIc\fR は \fIbindkey\fR 中にあるものとしてパースされます。 .TP 4 %% `%' 1 つです。 .TP 4 %n ユーザ名です。 .TP 4 %j ジョブ数です。 .TP 4 %d `Day' 形式の曜日。 .TP 4 %D `dd' 形式の日にち。 .TP 4 %w `Mon' 形式の月。 .TP 4 %W `mm' 形式の月。 .TP 4 %y `yy' 形式の年。 .TP 4 %Y `yyyy' 形式の年。 .TP 4 %l シェルの tty。 .TP 4 %L プロンプトの終わりから、 ディスプレイの終わりまたは行末までクリアします。 .TP 4 %$ `$' の直後のシェル変数または環境変数を展開します。 .TP 4 %# 普通のユーザは `>' (または \fBpromptchars\fR シェル変数の最初の文字)、 スーパユーザは `#' (または \fBpromptchars\fR の 2 番目の文字)。 .TP 4 %{\fIstring\fR%} \fIstring\fR を文字通りのエスケープシーケンスとして取り込みます。 これは端末属性を変更するためにのみ使うべきで、 カーソル位置の移動をこれで行ってはいけません。 これは \fBprompt\fR の最後のシーケンスであってはいけません。 .TP 4 %? プロンプトの直前で実行されたコマンドの戻り値。 .TP 4 %R \fBprompt2\fR の中ではパーザの状態。 \fBprompt3\fR の中では修正された文字列。 \fBhistory\fR の中では履歴文字列。 .PD .PP `%B', `%S', `%U', `%{\fIstring\fR%}' は、 8bit クリーンなシェルでのみ利用できます。 \fBversion\fR シェル変数を参照してください。 .PP ボールド、スタンドアウト、下線といったシーケンスは、 スーパユーザのシェルを区別するために使われることが多いです。 たとえば、 .IP "" 4 > set prompt = "%m [%h] %B[%@]%b [%/] you rang? " .br tut [37] \fB[2:54pm]\fR [/usr/accts/sys] you rang? _ .PP `%t', `%@', `%T', `%p', `%P' のどれかが使われていて、 かつ \fBnoding\fR が設定されていなければ、 毎正時 (`:00' 分) には実際の時刻の代わりに `DING!' を表示します。 .PP 対話的シェルでのデフォルトは `%# ' です。 .RE .TP 8 .B prompt2 \fR(+) \fIwhile\fR ループや \fIforeach\fR ループの中で、 また `\\' で終った行の次の行で、 プロンプトとして用いられる文字列。 \fBprompt\fR (そちらも参照) と同じ フォーマットシーケンスが使えます。 `%R' の意味が変わることに注意してください。 対話的シェルでのデフォルトは `%R?' です。 .TP 8 .B prompt3 \fR(+) 自動スペル訂正の確定時のプロンプト文字列。 \fBprompt\fR (そちらも参照) と同じ フォーマットシーケンスが使えます。 `%R' の意味が変わることに注意してください。 対話的シェルでのデフォルトは `CORRECT>%R (y|n|e|a)?' です。 .TP 8 .B promptchars \fR(+) (2 文字の文字列に) 設定すると、\fBprompt\fR シェル変数中の `%#' フォーマットシーケンスが、普通のユーザでは最初の文字で、 スーパユーザでは 2 番目の文字で置き換えられます。 .TP 8 .B pushdtohome \fR(+) 設定すると、引数をとらない \fIpushd\fR は、 \fIcd\fR のように `pushd ~' を実行します。 .TP 8 .B pushdsilent \fR(+) 設定すると、\fIpushd\fR と \fIpopd\fR の際に ディレクトリスタックが表示されなくなります。 .TP 8 .B recexact \fR(+) 設定すると、補完の際に正確なマッチがあれば、 より長いマッチが可能な場合でも、正確なほうに補完します。 .TP 8 .B recognize_only_executables \fR(+) 設定すると、コマンドリストは パス中にある実行可能なファイルのみを表示します。遅いです。 .TP 8 .B rmstar \fR(+) 設定すると、ユーザは `rm *' を実行する前に確認を受けます。 .TP 8 .B rprompt \fR(+) (コマンド入力後) prompt が左に表示される際に、 スクリーンの右側 (コマンド入力の後ろ側) に表示される文字列。 prompt と同じフォーマット文字列が使えます。 この文字列は、コマンド入力を邪魔しないように自動的に隠れたり、 また再度現れたりします。 (左側の) プロンプト、コマンド入力、この文字列が 最初の 1 行に収まる場合に限り、この文字列は表示されます。 \fBedit\fR が設定されていなければ、 \fBrprompt\fR はプロンプトの後、コマンド入力の前に表示されます。 .TP 8 .B savedirs \fR(+) 設定すると、シェルは終了する前に `dirs \-S' を行います。 最初の単語を数字に設定すると、 その個数までディレクトリスタックのエントリを保存します。 .TP 8 .B savehist 設定すると、シェルは終了する前に `history \-S' を行います。 最初の単語を数字に設定すると、その個数までの行が保存されます。 (個数は \fBhistory\fR 以下でなければなりません。) 2 番目の単語を `merge' にすると、 履歴ファイルが存在する場合に、置換ではなく追加を行います。 そしてタイムスタンプによってソートを行い、 最近のイベントを残します。(+) .TP 8 .B sched \fR(+) \fIsched\fR 組み込みコマンドがスケジュールイベントを表示する書式。 特に指定しなければ `%h\\t%T\\t%R\\n' が使われます。 フォーマットシーケンスは上記の \fBprompt\fR 以下に書いてあります。 `%R' の意味が変わることに注意してください。 .TP 8 .B shell シェルのファイル。これはシェルをフォークして、 実行ビットが設定されているがシステムによる実行が不可能なファイルを 実行するために用いられます (\fB組み込みコマンド、非組み込みコマンドの実行\fRを参照)。 初期値は、(システム依存の) シェルの置き場所です。 .TP 8 .B shlvl \fR(+) 入れ子になったシェルの数。ログインシェルでは 1 にリセットされます。 \fBloginsh\fR も参照してください。 .TP 8 .B status 最後のコマンドによって返された状態。 コマンドが異常終了した場合には 0200 が加えられます。 組み込みコマンドは、失敗すると終了状態 `1' を返します。 その他の場合は、すべての組み込みコマンドは状態 `0' を返します。 .TP 8 .B symlinks \fR(+) いくつか異なった値に設定でき、 シンボリックリンク (`symlink') の解決を制御できます。 .RS +8 .PP `chase' に設定すると、 カレントディレクトリがシンボリックリンクを含むディレクトリになったら、 リンクをそれが指しているディレクトリの実名に展開します。 この機能はユーザのホームディレクトリでは働きません。これはバグです。 .PP `ignore' にすると、 このシェルはリンクを通ってカレントディレクトリを移動する場合、 移動先のディレクトリを現在のディレクトリに対する 相対位置として構築しようとします。 これはすなわち、シンボリックリンクを通して cd を行い、 続いて `cd ..' を行うと、 元のディレクトリに戻る、ということを意味します。 これは組み込みコマンドとファイル名補完にのみ影響します。 .PP -`expand' に設定すると、シェルはパス名のように見える引き数を +`expand' に設定すると、シェルはパス名のように見える引数を 実際に展開して、シンボリックリンクを元に戻そうとします。 これは組み込みコマンドのみならず、すべてのコマンドに影響します。 残念ながら、これは認識しにくいファイル名 (たとえばコマンドオプションに埋めこまれたものなど) には動作しません。 クォートすれば展開は行われません。 たいていの場合はこの設定が便利ですが、 -展開すべき引き数を認識できないと、誤解や混乱の元になるかもしれません。 +展開すべき引数を認識できないと、誤解や混乱の元になるかもしれません。 妥協案として、 `ignore' にしておいて、 必要な場合には編集コマンド \fInormalize-path\fR (デフォルトでは ^X-n にバインドされています) を使うのがいいかもしれません。 .PP 順にいくつか例を示します。 まずは遊び場となるディレクトリを準備しましょう。 .IP "" 4 > cd /tmp .br > mkdir from from/src to .br > ln \-s from/src to/dst .PP \fBsymlinks\fR が設定されていない場合の動作: .IP "" 4 > cd /tmp/to/dst; echo $cwd .br /tmp/to/dst .br > cd ..; echo $cwd .br /tmp/from .PP \fBsymlinks\fR が `chase' に設定されている場合の動作: .IP "" 4 > cd /tmp/to/dst; echo $cwd .br /tmp/from/src .br > cd ..; echo $cwd .br /tmp/from .PP \fBsymlinks\fR が `ignore' に設定されている場合の動作: .IP "" 4 > cd /tmp/to/dst; echo $cwd .br /tmp/to/dst .br > cd ..; echo $cwd .br /tmp/to .PP \fBsymlinks\fR が `expand' に設定されている場合の動作: .IP "" 4 > cd /tmp/to/dst; echo $cwd .br /tmp/to/dst .br > cd ..; echo $cwd .br /tmp/to .br > cd /tmp/to/dst; echo $cwd .br /tmp/to/dst .br > cd ".."; echo $cwd .br /tmp/from .br > /bin/echo .. .br /tmp/to .br > /bin/echo ".." .br \&.. .PP いくつか注意しますと、`expand' による展開は、 1) \fIcd\fR のような組み込みコマンドに対しては `ignore' のように働きます。 2) クォートすれば行われません。 3) 非組み込みコマンドの場合は、ファイル名を渡す前に行われます。 .RE .TP 8 .B tcsh \fR(+) `R.VV.PP' 形式のシェルのバージョン番号です。 `R' はメジャーリリース番号、 `VV' はカレントバージョン、 `PP' はパッチレベルです。 .TP 8 .B term 端末の種類。 \fBスタートアップとシャットダウン\fR で述べているように、通常は \fI~/.login\fR で設定されます。 .TP 8 .B time 数値を設定すると、それ以上の CPU 時間 (秒) を消費したコマンドの実行後に、 自動的に組み込みコマンド \fItime\fR (そちらも参照) を実行します。2 番目の単語があれば、 \fItime\fR 組み込みコマンドの出力フォーマット文字列として 使われます。 (u) 以下のシーケンスがフォーマット文字列で使えます。 .PP .RS +8 .PD 0 .TP 4 %U プロセスがユーザモードで消費した CPU 時間 (秒)。 .TP 4 %S プロセスがカーネルモードで消費した CPU 時間 (秒)。 .TP 4 %E (壁時計での) 経過時間 (秒)。 .TP 4 %P (%U + %S) / %E として計算される CPU 使用率。 .TP 4 %W プロセスがスワップされた回数。 .TP 4 %X (共有) テキスト空間の平均使用量。 Kbyte 単位。 .TP 4 %D (非共有) データ/スタック空間の平均使用量。 Kbyte 単位。 .TP 4 %K (%X + %D) の総使用量。 Kbyte 単位。 .TP 4 %M プロセスが使用したメモリの瞬間最大値。 Kbyte 単位。 .TP 4 %F メジャーページフォールトの回数 (ディスクから取って来る必要があったページ数)。 .TP 4 %R マイナーページフォールトの回数。 .TP 4 %I 入力操作の回数。 .TP 4 %O 出力操作の回数。 .TP 4 %r ソケットメッセージを受け取った回数。 .TP 4 %s ソケットメッセージを送った回数。 .TP 4 %k シグナルを受け取った回数。 .TP 4 %w 自発的なコンテキストスイッチの回数 (wait の回数)。 .TP 4 %c 非自発的なコンテキストスイッチの回数。 .PD .PP BSD 資源制限機能の無いシステムでは、 最初の 4 つのシーケンスだけがサポートされています。 デフォルトの時間フォーマットは、 資源使用報告をサポートしているシステムでは `%Uu %Ss %E %P %X+%Dk %I+%Oio %Fpf+%Ww' で、 そうでないシステムでは `%Uu %Ss %E %P' です。 .PP Sequent の DYNIX/ptx では、 %X, %D, %K, %r, %s が使えませんが、 以下の追加シーケンスが利用できます。 .PP .PD 0 .TP 4 %Y システムコールが実行された回数。 .TP 4 %Z 要求に応じて 0 で埋められたページ数。 .TP 4 %i プロセスの常駐サイズがカーネルによって増加させられた回数。 .TP 4 %d プロセスの常駐サイズがカーネルによって減少させられた回数。 .TP 4 %l read システムコールが実行された回数。 .TP 4 %m write システムコールが実行された回数。 .TP 4 %p raw ディスク装置から読み込んだ回数。 .TP 4 %q raw ディスク装置へ書き込んだ回数。 .PD .PP デフォルトの時間フォーマットは `%Uu %Ss $E %P %I+%Oio %Fpf+%Ww' です。 マルチプロセッサでは CPU 使用率が 100% より高くなることがあります。 .RE .TP 8 .B tperiod \fR(+) 特別なエイリアス \fIperiodic\fR の実行される周期 (分単位)。 .TP 8 .B tty \fR(+) tty の名前。端末にアタッチされていない場合は空。 .TP 8 .B uid \fR(+) ユーザの実ユーザ ID。 .TP 8 .B user ユーザのログイン名。 .TP 8 .B verbose 設定すると、ヒストリ置換後に、 各コマンドの単語を (あれば) 表示します。 コマンドラインオプション \fB\-v\fR によって設定されます。 .TP 8 .B version \fR(+) バージョン ID スタンプ。 シェルのバージョン番号 (\fBtcsh\fR を参照)、 配布元、リリース日、ベンダー、オペレーティングシステム、 マシン (\fBVENDOR\fR, \fBOSTYPE\fR, \fBMACHTYPE\fR を参照)、 コンパイル時に設定されたオプションをカンマで区切ったリストからなります。 ディストリビューションのデフォルトとして セットされたオプションが記録されています。 .PP .RS +8 .PD 0 .TP 4 8b シェルは 8bit クリーン。デフォルト。 .TP 4 7b シェルは 8bit クリーンでない。 .TP 4 nls システムの NLS を使う。 NLS のあるシステムではデフォルト。 .TP 4 lf ログインシェルは \fI/etc/csh.cshrc\fR の後ではなく先に \fI/etc/csh.login\fR を実行し、 \fI~/.tcshrc\fR と \fI~/.history\fR の後ではなく先に \fI~/.login\fR を実行する。 .TP 4 dl セキュリティ上の理由から `.' を \fBpath\fR の最後に置く。デフォルト。 .TP 4 nd セキュリティ上の理由から `.' を \fBpath\fR に含めない。 .TP 4 vi \fIemacs\fR-形式ではなく \fIvi\fR-形式の編集をデフォルトにする。 .TP 4 dtr ログインシェルは終了時に DTR を落とす。 .TP 4 bye \fIbye\fR を \fIlogout\fR の同義語とし、 \fIlog\fR を \fIwatchlog\fR の別名として扱う。 .TP 4 al \fBautologout\fR を有効にする。デフォルト。 .TP 4 kan \fBnokanji\fR シェル変数が設定されない限り、 ロケール設定が適切であれば、漢字を使う。 .TP 4 sm システムの \fImalloc\fR(3) を使う。 .TP 4 hb シェルスクリプトの実行時に `#! ' 方式をエミュレートする。 .TP 4 ng \fInewgrp\fR 組み込みコマンドが利用可能。 .TP 4 rh シェルは \fBREMOTEHOST\fR 環境変数を設定しようとする。 .TP 4 afs シェルはもしローカルな認証が失敗したら、 kerberos サーバにパスワードを確認する。 \fBafsuser\fR シェル変数か \fBAFSUSER\fR 環境変数が 設定されていたら、その内容でローカルユーザ名を上書きする。 .PD .PP システム管理者は、文字列を追加して ローカルバージョンでの違いを示すようにできます。 .RE .TP 8 .B visiblebell \fR(+) 設定すると、音声ベルの代わりに画面をフラッシュします。 \fBnobeep\fR も参照してください。 .TP 8 .B watch \fR(+) ログイン / ログアウトの監視対象とする、「ユーザ / 端末」ペアのリスト。 ユーザに対する端末が `any' なら、指定したユーザをすべての端末で監視します。 逆にユーザが `any' なら、指定した端末ですべてのユーザを監視します。 \fBwatch\fR を `(any any)' に設定すると、 すべてのユーザと端末を監視します。 たとえば、 .RS +8 .IP "" 4 set watch = (george ttyd1 any console $user any) .PP は、ユーザ `george' の ttyd1 での行動を、 そしてあらゆるユーザのコンソールでの行動を、 そして自分自身 (または不法侵入者) のすべての端末での行動を報告します。 .PP デフォルトでは、ログインとログアウトは 10 分毎に調べられますが、 \fBwatch\fR の最初の単語に、調べる間隔を分単位で書くこともできます。 たとえば、 .IP "" 4 set watch = (1 any any) .PP は 1 分おきにあらゆるログイン / ログアウトを報告します。 我慢の効かない人は、\fIlog\fR 組み込みコマンドを用いれば、 いつでも \fBwatch\fR のレポートを見ることができます。 \fBwatch\fR が最初に設定された時には、 現在ログインしているユーザリストが (\fIlog\fR 組み込みコマンドによって) 報告されます。 .PP \fBwatch\fR の報告形式は \fBwho\fR シェル変数で制御します。 .RE .TP 8 .B who \fR(+) \fBwatch\fR メッセージのフォーマット文字列。 以下のシーケンスが得られた情報で置換されます。 .PP .RS +8 .PD 0 .TP 4 %n ログイン / ログアウトしたユーザの名前。 .TP 4 %a 観察された行動: `logged on', `logged off', `replaced \fIolduser\fR on' のいずれか。 .TP 4 %l ユーザがログイン / ログアウトした端末 (tty)。 .TP 4 %M リモートホストの完全なホスト名。 ローカルホストでのログイン / ログアウトの場合は `local'。 .TP 4 %m リモートホストの、最初の `.' までのホスト名。 IP アドレスや X Window System ディスプレイの場合は名前全体。 .PD .PP %M と %m は \fI/etc/utmp\fR にリモートホスト名を 格納するシステムでのみ利用できます。 設定しなければ `%n has %a %l from %m.' が用いられます。 ただしリモートホスト名を格納しないシステムでは `%n has %a %l.' が用いられます。 .RE .TP 8 .B wordchars \fR(+) \fIforward-word\fR, \fIbackward-word\fR 等の編集コマンドで、 単語の一部とみなされる非英数文字のリスト。 設定されなければ `*?_\-.[]~=' が使われます。 .SH 環境変数 .TP 8 .B AFSUSER \fR(+) \fBafsuser\fR シェル変数と同じです。 .TP 8 .B COLUMNS 端末の桁数です (\fB端末管理\fR を参照)。 .TP 8 .B DISPLAY X Window System によって使われます (\fIX\fR(1) を参照)。 設定されると、このシェルは \fBautologout\fR (そちらも参照) を設定しません。 .TP 8 .B EDITOR デフォルトのエディタのパス名です。 \fBVISUAL\fR 環境変数と \fIrun-fg-editor\fR 編集コマンドも参照してください。 .TP 8 .B GROUP \fR(+) \fBgroup\fR シェル変数と同じです。 .TP 8 .B HOME \fBhome\fR シェル変数と同じです。 .TP 8 .B HOST \fR(+) シェルが実行されているマシンの名前で初期化されます。 これは \fIgethostname\fR(2) システムコールで決定されます。 .TP 8 .B HOSTTYPE \fR(+) シェルが実行されているマシンのタイプで初期化されます。 これはコンパイル時に決定されます。 この変数は廃止される予定であり、将来のバージョンで削除されるでしょう。 .TP 8 .B HPATH \fR(+) \fIrun-help\fR 編集コマンドがコマンドの解説文書を探す ディレクトリのリストです。区切り文字はコロンです。 .TP 8 .B LANG 優先的に使用される文字環境を与えます。 \fB固有言語システムのサポート\fRを参照してください。 .TP 8 .B LC_CTYPE 設定されていると、ctype キャラクタの扱いだけが変更されます。 \fB固有言語システムのサポート\fRを参照してください。 .TP 8 .B LINES 端末の行数です。 \fB端末管理\fRを参照してください。 .TP 8 .B LS_COLORS この変数のフォーマットは \fBtermcap\fR(5) ファイルのフォーマットと 似ています。"\fIxx=string\fR" の形をした式をコロンで区切って並べた リストです。"\fIxx\fR" は 2 文字の変数名です。 変数とそれらのデフォルト値は以下の通りです。 .PP .RS +8 .RS +4 .PD 0 .TP 12 no 0 Normal (non-filename) text: ファイル名を除く通常のテキスト .TP 12 fi 0 Regular file: 通常のファイル .TP 12 di 01;34 Directory: ディレクトリ .TP 12 ln 01;36 Symbolic link: シンボリックリンク .TP 12 pi 33 Named pipe (FIFO): 名前付きパイプ .TP 12 so 01;35 Socket: ソケット .TP 12 do 01;35 Door: ドア .TP 12 bd 01;33 Block device: ブロック型デバイス .TP 12 cd 01;32 Character device: キャラクタ型デバイス .TP 12 ex 01;32 Executable file: 実行可能ファイル .TP 12 mi (none) Missing file (defaults to fi): 行方不明のファイル .TP 12 or (none) Orphaned symbolic link (defaults to ln): リンク先のないシンボリックリンク .TP 12 lc ^[[ Left code: 色指定シーケンス開始コード .TP 12 rc m Right code: 色指定シーケンス終了コード .TP 12 ec (none) End code (replaces lc+no+rc): 色出力を終えるシーケンス .PD .RE .PP デフォルトから変更したい変数だけを指定すれば OK です。 .PP ファイルの名前を、ファイル名の拡張子をもとに色づけすることもできます。 これの指定は、\fBLS_COLORS\fR 変数に \fB"*ext=string"\fR のシンタックスを用いて行います。 たとえば、ISO 6429 のコードを使いすべての C 言語のソースファイルを ブルーに色づけするには \fB"*.c=34"\fR と指定すればよいでしょう。 これは \fB.c\fR で終わるすべてのファイルをブルー (34) に色づけします。 .PP コントロールキャラクタは C スタイルのエスケープ表記か stty のような ^\- 表記のどちらかで書くことができます。C スタイルの表記では エスケープコードの記述に \fB^[\fR, スペースコードの記述に \fB\_\fR, デリートコードの記述に \fB?\fR を追加します。 さらに、\fB^[\fR エスケープキャラクタを用いると、 \fB^[\fR, \fB^\fR, \fB:\fR, \fB=\fR のデフォルトの解釈を 変更することができます。 .PP それぞれのファイルは \fB\fR \fB\fR \fB\fR \fB\fR \fB\fR のように書かれます。 \fB\fR が未定義ならば、\fB\fR \fB \fB\fR のシーケンスが代わりに使われます。 こちらの方が通常便利に使えますが、あまり一般的ではありません。 left, right, end のコードを用意した理由は、 同じシーケンスを繰り返し入力しなくてもいいように、また、 妙な端末に対応できるようにするためです。 通常は、ISO 6429 カラーシーケンスと異なるシステムを使っていない 限り、これらを変更する必要はほとんどありません。 .PP 端末が ISO 6429 color コードを使っていれば、(\fBlc\fR, \fBrc\fR, \fBec\fR コードを全く使わずに) セミコロンで区切られた数字のコマンドで タイプコードを構成することができます。 良く用いられるコマンドは以下の通りです。 .PP .RS +8 .PD 0 .TP 4 0 デフォルトの色に戻します。 .TP 4 1 高輝度色 .TP 4 4 アンダライン付きテキスト .TP 4 5 点滅テキスト .TP 4 30 前景色黒 .TP 4 31 前景色赤 .TP 4 32 前景色グリーン .TP 4 33 前景色黄 (ブラウン) .TP 4 34 前景色ブルー .TP 4 35 前景色紫 .TP 4 36 前景色シアン .TP 4 37 前景色白 (グレー) .TP 4 40 背景色黒 .TP 4 41 背景色赤 .TP 4 42 背景色グリーン .TP 4 43 背景色黄 (ブラウン) .TP 4 44 背景色ブルー .TP 4 45 背景色紫 .TP 4 46 背景色シアン .TP 4 47 背景色白 (グレー) .PD .RE .PP すべてのコマンドがすべてのシステムや表示装置で 動作するわけではありません。 .PP 少なからぬ端末プログラムではデフォルトの終了コードを正しく 認識しません。ディレクトリのリストをした後ですべてのテキストに 色を付けるためには、\fBno\fR コードと \fBfi\fR コードを、 それぞれ 0 から前景色、背景色の数値コードへ変更してみてください。 .RE .TP 8 .B MACHTYPE \fR(+) コンパイル時に決定されたマシンタイプ (マイクロプロセッサまたは、 マシンモデル) です。 .TP 8 .B NOREBIND \fR(+) 設定されていると、印刷可能文字は \fIself-insert-command\fR を 繰り返し実行されません。 \fB固有言語システムのサポート\fRを参照してください。 .TP 8 .B OSTYPE \fR(+) コンパイル時に決定されたオペレーションシステムです。 .TP 8 .B PATH 実行可能ファイルを探すディレクトリの、コロン区切り形式のリスト。 シェル変数 \fBpath\fR によく似ていますがフォーマットに違いがあります。 .TP 8 .B PWD \fR(+) シェル変数 \fBcwd\fR に似ていますが、シェル変数とは同期していません。 実際のディレクトリ変更が行われたあとでだけアップデートされます。 .TP 8 .B REMOTEHOST \fR(+) ユーザがどのホストからログインしているかを示します (リモートからのログインで、 かつこのシェルがこれらの情報を決定できる場合)。 シェルがそのようにコンパイルされている場合だけに設定されます。 \fBversion\fR シェル変数を参照してください。 .TP 8 .B SHLVL \fR(+) \fBshlvl\fR と同じです。 .TP 8 .B SYSTYPE \fR(+) 現在のシステムタイプです。 (Domain/OS のみ) .TP 8 .B TERM \fBterm\fR シェル変数と同じです。 .TP 8 .B TERMCAP 端末のケーパビリティ文字列です。 \fB端末管理\fRを参照してください。 .TP 8 .B USER \fBuser\fR シェル変数と同じです。 .TP 8 .B VENDOR \fR(+) コンパイル時に決定されたベンダ名です。 .TP 8 .B VISUAL デフォルトのフルスクリーンエディタへのパス名です。 \fBEDITOR\fR 環境変数と \fIrun-fg-editor\fR 編集コマンドも参照してください。 .SH 関連ファイル .PD 0 .TP 16 .I /etc/csh.cshrc すべてのシェルで最初に読み込まれます。 ConvexOS, Stellix, Intel では \fI/etc/cshrc\fR を使います。 NeXTs では \fI/etc/cshrc.std\fR を使います。 A/UX, AMIX, Cray, IRIX の \fIcsh\fR(1) はこのファイルを読みませんが、 いずれにせよ \fItcsh\fR ではこのファイルが読み込まれます。 Solaris 2.x もこのファイルを持ちませんが、\fItcsh\fR は \fI/etc/.cshrc\fR を読み込みます。(+) .TP 16 .I /etc/csh.login \fI/etc/csh.cshrc\fR の後にログインシェルによって読み込まれます。 ConvexOS, Stellix, Intel では \fI/etc/login\fR を使います。 NeXTs では \fI/etc/login.std\fR を使用します。 Solaris 2.x では \fI/etc/.login\fR を使います。 A/UX, AMIX, Cray, IRIX では \fI/etc/cshrc\fR を使います。 .TP 16 .I ~/.tcshrc \fR(+) \fI/etc/csh.cshrc\fR かそれに相当するファイルの後に、 すべてのシェルで読み込まれます。 .TP 16 .I ~/.cshrc \fI~/.tcshrc\fR が存在しなければ、 \fI/etc/csh.cshrc\fR かそれに相当するファイルの後に、 すべてのシェルで読み込まれます。 このマニュアルでは `\fI~/.tcshrc\fR' を 「`\fI~/.tcshrc\fR' か `\fI~/.tcshrc\fR' が見つからなかった場合の \fI~/.cshrc\fR'」 の意味で使用します。 .TP 16 .I ~/.history \fBsavehist\fR が設定されている場合は \fI~/.tcshrc\fR の後にログインシェルによって読み込まれます。 ただし \fBhistfile\fR の部分も参照してください。 .TP 16 .I ~/.login \fI~/.tcshrc\fR または \fI~/.history\fR の後にログインシェルによって 読み込まれます。シェルは\fI~/.login\fR を \fI~/.tcshrc\fR と \fI~/.history\fR の後にではなく、前に読み込むように コンパイルされているかもしれません。 \fBversion\fR シェル変数を参照してください。 .TP 16 .I ~/.cshdirs \fR(+) \fBsavedirs\fR が設定されている場合には、 \fI~/.login\fR の後にログインシェルによって読み込まれます。 ただし \fBdirsfile\fR も参照してください。 .TP 16 .I /etc/csh.logout ログアウト時にログインシェルによって読み込まれます。 ConvexOS, Stellix, Intel では、 \fI/etc/logout\fR を使います。 A/UX, AMIX, Cray, IRIX では、 \fIcsh\fR(1) はこれに対応するファイルを持ちませんが、 いずれにしても \fItcsh\fR はこのファイルを読みます。 Solaris 2.x も \fI/etc/logout\fR を持っていませんが、 \fItcsh\fR は \fI/etc/.logout\fR を読み込みます。 (+) .TP 16 .I ~/.logout \fI/etc/csh.logout\fR またはその相当ファイルが実行された後に、 ログインシェルによって読み込まれます。 .TP 16 .I /bin/sh `#' で始まらないシェルスクリプトを解釈実行するために使われます。 .TP 16 .I /tmp/sh* `<<' 用の一時ファイルです。 .TP 16 .I /etc/passwd ホームディレクトリ `~name' を代入するための情報源です。 .PD .PP スタートアップファイルの読み込みの順番は、 シェルのコンパイル時に変更されているかもしれません。 \fBスタートアップとシャットダウン\fRと \fBversion\fR を参照してください。 .SH "新規機能 (+)" このマニュアルでは、\fItcsh\fR をひとつの対象として記述してきました。 しかし \fIcsh\fR(1) の経験者は、 \fItcsh\fR の新しい機能に特に興味があるでしょう。 .PP コマンド行編集: GNU Emacs スタイルや \fIvi\fR(1)-スタイルの キーバインディングをサポートしています。 \fBコマンド行エディタ\fRと\fB編集コマンド\fRを参照してください。 .PP プログラマブルで対話的な単語補完と一覧表示。 \fB補完と一覧\fRと、組み込みコマンド \fIcomplete\fR, \fIuncomplete\fR の記述を見てください。 .PP ファイル名、コマンド、変数名の\fBスペル訂正\fR (そちらも参照)。 .PP \fBエディタ編集コマンド\fR (そちらも参照) で、 コマンドのタイプ中に他の便利な機能を実行できます。 ヘルプファイルの参照してください (\fIrun-help\fR)、 手軽にエディタの再起動 (\fIrun-fg-editor\fR)、 コマンド解決 (\fIwhich-command\fR) などができます。 .PP 高性能化されたヒストリ機能。 ヒストリリストのイベントにタイムスタンプをつけられます。 \fIhistory\fR コマンドおよびそれに関連するシェル変数、 \fBヒストリ置換\fRに記述されている、 以前には文書化されていなかった `#' イベント記述子と新しい修正子、 \fI*-history\fR, \fIhistory-search-*\fR, \fIi-search-*\fR, \fIvi-search-*\fR, \fItoggle-literal-history\fR 各編集コマンド、 シェル変数 \fBhistlit\fR なども参照してください。 .PP 高性能化されたディレクトリ解釈 (parsing) とディレクトリスタック操作。 \fIcd\fR, \fIpushd\fR, \fIpopd\fR and \fIdirs\fR コマンドとそれらに 関連するシェル変数、\fBディレクトリスタック置換\fRでの説明、 \fBdirstack\fR, \fBowd\fR, \fBsymlinks\fR シェル変数、 \fInormalize-command\fR, \fInormalize-path\fR 編集コマンドなどを参照してください。 .PP グロブパターンの否定。 \fBファイル名置換\fRを見てください。 .PP 新しいファイル問い合わせ演算子 (そちらも参照) とそれらを用いる組み込みコマンド \fIfiletest\fR。 .PP スケージューリングされたイベント、特別なエイリアス、自動ログアウト、 端末のロック、コマンド待ち、ログインとログアウトの監視などなどを含む、 各種の\fB自動イベント、定期イベント、時刻指定イベント\fR (それぞれの項目を参照)。 .PP 固有言語システムのサポート (\fB固有言語システムのサポート\fRを見てください)、 OS 固有の各種機能のサポート (\fBOS 固有機能のサポート\fRと \fBecho_style\fR シェル変数を参照)、 システム依存のファイル配置 (\fB関連ファイル\fRを参照) .PP 拡張された端末管理能力 (\fB端末管理\fRを参照)。 .PP \fIbuiltins\fR, \fIhup\fR, \fIls\-F\fR, \fInewgrp\fR, \fIprintenv\fR, \fIwhich\fR, \fIwhere\fR などの新しい 組み込みコマンド (それぞれの項目を参照)。 .PP 新しい変数。シェルから便利な情報を簡単に入手できます。 \fBgid\fR, \fBloginsh\fR, \fBoid\fR, \fBshlvl\fR, \fBtcsh\fR, \fBtty\fR, \fBuid\fR, \fBversion\fR シェル変数と、 \fBHOST\fR, \fBREMOTEHOST\fR, \fBVENDOR\fR, \fBOSTYPE\fR, \fBMACHTYPE\fR 環境変数。 それぞれの説明を見てください。 .PP 有用な情報をプロンプト文字列に埋めこむための新しいシンタックス (\fBprompt\fR を参照)。 ループとスペル訂正用の特別なプロンプト (\fBprompt2\fR と \fBprompt3\fR を参照)。 .PP 読み取り専用の変数 (\fB変数置換\fRを参照)。 .SH バグ サスペンドされたコマンドが再開されたときに、 カレントディレクトリが起動されたときと違っている場合には、 起動時のディレクトリを表示します。 ジョブが内部でディレクトリを変更することもあり得るので、 これは間違った情報を与えてしまうかもしれません。 .PP シェルの組み込み機能は停止、再開できません。 `a ; b ; c' のような形のコマンド列を停止させるときの処理も あまり上品なものではありません。 `b' コマンドをサスペンドさせると、 シェルは即座に `c' コマンドを実行してしまいます。 \fIalias\fR での展開結果を実行しているときには、 特にこの点に注意が必要です。 コマンド列を () の中に入れて、 サブシェルに押し込めてしまうのがいいでしょう。 つまり `( a ; b ; c )' のようにするのです。 .PP プロセス開始後の端末出力の制御が原始的です。 誰かが仮想端末の良いインタフェースを作ってくれるといいのですが。 仮想端末インタフェースの分野では、 出力制御に関して面白いことがたくさん行えるはずです。 .PP エイリアス置換がシェル手続きのシミュレートに大変良く用いられますが、 これはあまり気のきいたものではありません。 エイリアスよりもシェル手続きを提供すべきです。 .PP ループの中のコマンドは、ヒストリリストに追加されません。 制御構造は、組み込みコマンドとしては認識されず、単に解釈されます。 したがって制御コマンドはどこにでも置くことができ、 パイプ `|' といっしょにも、 `&' と `;' のようなメタシンタックスといっしょにも使えます。 .PP \fIforeach\fR は \fIend\fR を探しているとき ヒアドキュメントを無視しません。 .PP `:' 修飾子は、 コマンド置換の出力に使えるべきです。 .PP ダム端末のように、端末がカーソルを上に移動できない場合には、 スクリーン幅より長い行の更新が大変貧弱です。 .PP \fBHPATH\fR と \fBNOREBIND\fR は環境変数である必要はありません。 .PP `?' や `*' や `[]' を使わないグロブパターンや、 `{}' や `~' を使うグロブパターンは、否定が正しく扱われません。 .PP \fIif\fR の単一コマンド形式では、たとえ式が偽で、 コマンドが実行されなかったとしても、リダイレクト出力をしてしまいます。 .PP \fIls\-F\fR はファイル名をソートするとき、 ファイル識別キャラクタを勘定に入れてしまいます。 またファイル名の中の制御文字を正しく扱うことができません。 中断させることもできません。 .PP バグレポートは tcsh-bugs@mx.gw.com まで送ってください。 修正もいっしょに送っていただけるとありがたいです。 もし tcsh のメンテナンスとテストを手伝って下さる場合には、 本文に "subscribe tcsh " と一行書いたメールを listserv@mx.gw.com に送ってください。 "subscribe tcsh-bugs " を講読すれば すべてのバグレポートが取得できます。 "subscribe tcsh-diffs " を講読すれば 開発 ML に参加でき、各パッチレベルでの diff を入手できます。 .SH tcsh の T の由来 1964 年 DEC は PDP-6 を開発しました。 のちに PDP-10 が再実装されました。 1970 年前後に DEC がそのセカンドモデル KI10 を発表したとき、 これには DECsystem-10 という新しい名前がつけられました。 .PP TENEX は 1972 年に Bolt, Beranek & Newman (Massachusetts 州 Cambridge のシンクタンク) において、 実験的なデマンドページ型仮想記憶 OS として作られました。 彼らは DEC PDP-10 用の新しいページャを構築し、 それを使った OS を作りました。 これは学術分野で非常に大きな成功を収めました。 .PP 1975 年 DEC は PDP-10 の新しいモデル KL10 を発表しました。 DEC は BBN から TENEX のライセンスを受け、 KL10 は TENEX 版のみにするつもりでした。 DEC はそれらのバージョンを TOPS-20 と呼んでいました (大文字化は商標です)。 多くの TOPS-10 ("The OPerating System for PDP-10" の頭文字です) ユーザが これに反対しました。 こうして DEC は同じハードウエアにふたつの互換性のないシステムを サポートしなければならないことになりました。 --でもそのとき PDP-11 には 6 つの OS があったのですが! .PP TENEX の TOPS-20 はバージョン 3 までに、 ULTCMD と呼ばれるユーザコードレベルのコマンド補完機能サブルーチンを 備えていました。バージョン 3 で DEC は、 これらの機能すべてと、さらにそれ以上とをモニタ (Unix でいうところのカーネル) に追加し、 COMND& JSYS (`Jump to SYStem' 命令; スーパバイザを呼び出す機能 [私が IBM 上がりだってバレちゃった?]) でアクセスできるようにしました .PP tcsh の作者たちは TENEX と TOPS-20 における これらの機能に影響を受け、これを模倣した版の csh を作成したのです。 .SH 制限 単語は 1024 文字より長くできません。 .PP システムは引数並びを 10240 文字までに制限しています。 .PP -コマンドに与える引き数の数 (ファイル名展開を含む) は、 -引き数リストに許された文字数の 1/6 までに制限されています。 +コマンドに与える引数の数 (ファイル名展開を含む) は、 +引数リストに許された文字数の 1/6 までに制限されています。 .PP コマンド置換では、 引数リストに許された文字数より多くの文字数に置換できません。 .PP シェルはループを検出するために、 \fIalias\fR 置換の回数を 1 行当たり 20 に制限しています。 .SH 関連項目 csh(1), emacs(1), ls(1), newgrp(1), sh(1), setpath(1), stty(1), su(1), tset(1), vi(1), x(1), access(2), execve(2), fork(2), killpg(2), pipe(2), setrlimit(2), sigvec(2), stat(2), umask(2), vfork(2), wait(2), malloc(3), setlocale(3), tty(4), a.out(5), termcap(5), environ(7), termio(7), Introduction to the C Shell .SH バージョン このマニュアルは tcsh 6.11.00 (Astron) 2001-09-02 に関するドキュメントです。 .SH 作者 .PD 0 .TP 2 William Joy \fIcsh\fR(1) のオリジナル作者 .TP 2 J.E. Kulp, IIASA, Laxenburg, Austria ジョブコントロールとディレクトリスタック機能 .TP 2 Ken Greer, HP Labs, 1981 ファイル名補完 .TP 2 Mike Ellis, Fairchild, 1983 コマンド名認識 / 補完 .TP 2 Paul Placeway, Ohio State CIS Dept., 1983-1993 コマンドラインエディタ、プロンプトルーチン、新しいグロブの文法、 たくさんの修正とスピードアップ .TP 2 Karl Kleinpaste, CCI 1983-4 特別なエイリアス、ディレクトリスタックの取出し機能、 ログイン / ログアウト監視、スケジュールイベント、 新しいプロンプト書式のアイデア .TP 2 Rayan Zachariassen, University of Toronto, 1984 \fIls\-F\fR と \fIwhich\fR の組み込み、たくさんのバクフィックス、 修正とスピードアップ .TP 2 Chris Kingsley, Caltech 高速ストレージアロケータルーチン .TP 2 Chris Grevstad, TRW, 1987 4.3BSD \fIcsh\fR の \fItcsh\fR へのマージ .TP 2 Christos S. Zoulas, Cornell U. EE Dept., 1987-94 HPUX, SVR2, SVR3 に移植、SysV 版 getwd.c, SHORT_STRINGS をサポート、 sh.glob.c の新バージョン .TP 2 James J Dempsey, BBN, and Paul Placeway, OSU, 1988 A/UX に移植 .TP 2 Daniel Long, NNSC, 1988 \fBwordchars\fR .TP 2 Patrick Wolfe, Kuck and Associates, Inc., 1988 \fIvi\fR モードのクリーンアップ .TP 2 David C Lawrence, Rensselaer Polytechnic Institute, 1989 \fBautolist\fR と、あいまい補完の一覧 .TP 2 Alec Wolman, DEC, 1989 プロンプト中の改行 .TP 2 Matt Landau, BBN, 1989 ファイル \fI~/.tcshrc\fR .TP 2 Ray Moody, Purdue Physics, 1989 スペースバーの魔法によるヒストリ展開 .TP 2 Mordechai ????, Intel, 1989 printprompt() の修正と追加 .TP 2 Kazuhiro Honda, Dept. of Computer Science, Keio University, 1989 自動スペル訂正と \fBprompt3\fR .TP 2 Per Hedeland, Ellemtel, Sweden, 1990- さまざまなバグフィックス、改良とマニュアルのアップデート .TP 2 Hans J. Albertsson (Sun Sweden) \fBampm\fR, \fIsettc\fR, \fItelltc\fR .TP 2 Michael Bloom 割り込みハンドリングの修正 .TP 2 Michael Fine, Digital Equipment Corp 拡張キーのサポート .TP 2 Eric Schnoebelen, Convex, 1990 Convex サポート、\fIcsh\fR の多数のバグフィックス、 ディレクトリスタックの保存と復帰 .TP 2 Ron Flax, Apple, 1990 A/UX 2.0 への (再) 移植 .TP 2 Dan Oscarsson, LTH Sweden, 1990 NLS サポートと非 NLS サイト用の NLS シミュレート機能、修正 .TP 2 Johan Widen, SICS Sweden, 1990 \fBshlvl\fR, Mach サポート、\fIcorrect-line\fR, 8 ビット表示 .TP 2 Matt Day, Sanyo Icon, 1990 POSIX termio サポート、SysV limit 修正 .TP 2 Jaap Vermeulen, Sequent, 1990-91 vi モード修正、expand-line, ウィンドウ変更の修正、Symmetry 移植 .TP 2 Martin Boyer, Institut de recherche d'Hydro-Quebec, 1991 \fBautolist\fR beeping オプション、 行の先頭からカーソルまでのすべてを対象とするヒストリ検索の修正 .TP 2 Scott Krotz, Motorola, 1991 Minix に移植 .TP 2 David Dawes, Sydney U. Australia, Physics Dept., 1991 SVR4 ジョブコントロールの修正 .TP 2 Jose Sousa, Interactive Systems Corp., 1991 拡張 \fIvi\fR の修正、\fIvi\fR デリートコマンド .TP 2 Marc Horowitz, MIT, 1991 ANSIfication の修正、新しい exec ハッシュコード、 imake の修正、\fIwhere\fR .TP 2 Bruce Sterling Woodcock, sterling@netcom.com, 1991-1995 ETA と Pyramid への移植、 Makefile と lint の修正、\fBignoreeof\fR=n 追加、 その他のさまざまな移植性向上のための変更、およびバグ修正 .TP 2 Jeff Fink, 1992 \fIcomplete-word-fwd\fR と \fIcomplete-word-back\fR .TP 2 Harry C. Pulley, 1992 Coherent に移植 .TP 2 Andy Phillips, Mullard Space Science Lab U.K., 1992 VMS-POSIX に移植 .TP 2 Beto Appleton, IBM Corp., 1992 移動プロセスグループの修正、\fIcsh\fR バグ修正、 POSIX file tests, POSIX SIGHUP .TP 2 Scott Bolte, Cray Computer Corp., 1992 CSOS に移植 .TP 2 Kaveh R. Ghazi, Rutgers University, 1992 Tek, m88k, Titan と Masscomp への移植と修正、 autoconf サポートの追加 .TP 2 Mark Linderman, Cornell University, 1992 OS/2 に移植 .TP 2 Mika Liljeberg, liljeber@kruuna.Helsinki.FI, 1992 Linux に移植 .TP 2 Tim P. Starrin, NASA Langley Research Center Operations, 1993 読み取り専用変数 .TP 2 Dave Schweisguth, Yale University, 1993-4 新しいマニュアルページと tcsh.man2html .TP 2 Larry Schwimmer, Stanford University, 1993 AFS と HESIOD パッチ .TP 2 Luke Mewburn, RMIT University, 1994-6 プロンプトの中でのディレクトリ表示の拡張、 \fBellipsis\fR と \fBrprompt\fR .TP 2 Edward Hutchins, Silicon Graphics Inc., 1996 暗黙的な cd の追加。 .TP 2 Martin Kraemer, 1997 Siemens Nixdorf EBCDIC machine に移植 .TP 2 Amol Deshpande, Microsoft, 1997 WIN32 (Windows/95 and Windows/NT) に移植、 足りないライブラリすべてと、 メッセージカタログコードのすべてを作成し、 Windows と通信できるようにした .TP 2 Taga Nayuta, 1998 色つき ls の追加 .PD .PP .SH 謝辞 以下のみなさんに感謝します。 .br Bryan Dunlap, Clayton Elwell, Karl Kleinpaste, Bob Manson, Steve Romig, Diana Smetters, Bob Sutterfield, Mark Verber, Elizabeth Zwicky そして提案と応援をしてくれたオハイオ州のすべてのみなさん。 .PP あらゆるバージョンに耐え、バグレポートを送ってくれ、 提案と新規追加をしてくれたネット上のすべてのみなさん。 .PP "tcsh の T の由来" の章を執筆してくれた Richard M. Alderson III。 .SH 翻訳 t_ogawa .br おさな .br ゆ〜こ .br 森浩二 .br NOKUBI Hirotaka .br 中野武雄 (JM プロジェクト) .br 蔭山 .br 中村和志@神戸 .br 大澤千敏@岐阜 .br 熊谷典大 .br (順不同) .PP 翻訳にあたり、JM プロジェクトの方々の御協力を頂きました。 diff --git a/ja_JP.eucJP/man/man6/grdc.6 b/ja_JP.eucJP/man/man6/grdc.6 index b53592909d..16153db154 100644 --- a/ja_JP.eucJP/man/man6/grdc.6 +++ b/ja_JP.eucJP/man/man6/grdc.6 @@ -1,30 +1,30 @@ .\" %FreeBSD: src/games/grdc/grdc.6,v 1.4 2002/12/11 15:55:28 ru Exp % .\" .\" $FreeBSD$ .Dd September 25, 2001 .Dt GRDC 6 .Os .Sh 名称 .Nm grdc .Nd 立派なデジタル時計 (curses) .Sh 書式 .Nm .Op Fl s .Op Ar n .Sh 解説 .Nm は curses 互換な VDU 画面に反転表示された空白を使ってデジタル時計を -表示します。 省略可能な数値引き数 +表示します。 省略可能な数値引数 .Ar n を指定すると、 .Ar n 秒後に止まります (デフォルトでは止まりません)。省略可能な .Fl s フラグを指定すると数字が変わるときにスクロールするようになります。 この curses モードの実装では、遅れないようにスクロールするのは難しいです。 .Sh 作者 .An -nosplit .An Amos Shapir が作成し、 .An John Lupien が curses 用に修正しました。 diff --git a/ja_JP.eucJP/man/man8/vinum.8 b/ja_JP.eucJP/man/man8/vinum.8 index 34ad3d2476..409ccc3c1b 100644 --- a/ja_JP.eucJP/man/man8/vinum.8 +++ b/ja_JP.eucJP/man/man8/vinum.8 @@ -1,2793 +1,2793 @@ .\" Hey, Emacs, edit this file in -*- nroff-fill -*- mode .\"- .\" Copyright (c) 1997, 1998 .\" Nan Yang Computer Services Limited. All rights reserved. .\" .\" This software is distributed under the so-called ``Berkeley .\" License'': .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by Nan Yang Computer .\" Services Limited. .\" 4. Neither the name of the Company nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" This software is provided ``as is'', and any express or implied .\" warranties, including, but not limited to, the implied warranties of .\" merchantability and fitness for a particular purpose are disclaimed. .\" In no event shall the company or contributors be liable for any .\" direct, indirect, incidental, special, exemplary, or consequential .\" damages (including, but not limited to, procurement of substitute .\" goods or services; loss of use, data, or profits; or business .\" interruption) however caused and on any theory of liability, whether .\" in contract, strict liability, or tort (including negligence or .\" otherwise) arising in any way out of the use of this software, even if .\" advised of the possibility of such damage. .\" -.\" $Id: vinum.8,v 1.29 2002-11-18 06:17:45 horikawa Exp $ +.\" $Id: vinum.8,v 1.30 2003-02-03 05:22:43 horikawa Exp $ .\" %FreeBSD: src/sbin/vinum/vinum.8,v 1.59 2002/08/21 18:11:48 trhodes Exp % .\" .\" $FreeBSD$ .\" WORD: attach 結合 (する) .Dd December 20, 2000 .Dt VINUM 8 .Sh 名称 .Nm vinum .Nd 論理ボリュームマネージャの制御プログラム .Sh 書式 .Nm .Op Ar command .Op Fl options .Sh コマンド .Bl -tag -width indent .It Ic attach Ar plex volume Op Cm rename .It Xo .Ic attach Ar subdisk plex .Op Ar offset .Op Cm rename .Xc プレックスをボリュームに、またはサブディスクをプレックスに結合します。 .It Xo .Ic checkparity Ar plex .Op Fl f RAID-4 または RAID-5 のプレックスのパリティブロックを検査します。 .Xc .It Xo .Ic concat .Op Fl f .Op Fl n Ar name .Op Fl v .Ar drives .Xc 指定したドライブからコンカチネート化ボリュームを作成します。 .It Xo .Ic create .Op Fl f .Ar description-file .Xc .Ar description-file の記述に従ってボリュームを作成します。 .It Ic debug ボリュームマネージャをカーネルデバッガに移行させます。 .It Ic debug Ar flags デバッグフラグを設定します。 .It Xo .Ic detach .Op Fl f .Op Ar plex | subdisk .Xc 結合されていたボリュームやプレックスから、プレックスやサブディスクを分離します。 .It Ic dumpconfig Op Ar drive ... 指定されたドライブに格納されている設定情報を表示します。 ドライブ名を指定しないと、システムの全ドライブの情報を表示します。 .It Xo .Ic info .Op Fl v .Op Fl V .Xc ボリュームマネージャの状態を表示します。 .It Xo .Ic init .Op Fl S Ar size .Op Fl w .Ar plex | subdisk .Xc .\" XXX サブディスクまたはプレックスの全サブディスクの内容をすべて 0 に初期化します。 .It Ic label Ar volume ボリュームラベルを作成します。 .It Xo .Ic l | list .Op Fl r .Op Fl s .Op Fl v .Op Fl V .Op Ar volume | plex | subdisk .Xc 指定したオブジェクトの情報を表示します。 .It Xo .Ic ld .Op Fl r .Op Fl s .Op Fl v .Op Fl V .Op Ar volume .Xc ドライブの情報を表示します。 .It Xo .Ic ls .Op Fl r .Op Fl s .Op Fl v .Op Fl V .Op Ar subdisk .Xc サブディスクの情報を表示します。 .It Xo .Ic lp .Op Fl r .Op Fl s .Op Fl v .Op Fl V .Op Ar plex .Xc プレックスの情報を表示します。 .It Xo .Ic lv .Op Fl r .Op Fl s .Op Fl v .Op Fl V .Op Ar volume .Xc ボリュームの情報を表示します。 .It Ic makedev .Ar /dev/vinum にデバイスノードを再作成します。 .It Xo .Ic mirror .Op Fl f .Op Fl n Ar name .Op Fl s .Op Fl v .Ar drives .Xc 指定したドライブからミラー化ボリュームを作成します。 .It Xo .Ic move | mv .Fl f .Ar drive object ... .Xc 指定したドライブにオブジェクトを移動します。 .It Ic printconfig Op Ar file 現在の設定のコピーを .Ar file へ書き込みます。 .It Ic quit 対話モード時に、 .Nm ユーティリティを終了します。通常 .Dv EOF 文字を入力することにより実現できます。 .It Ic read Ar disk ... 指定したディスクから .Nm の設定を読み出します。 .It Xo .Ic rename Op Fl r .Op Ar drive | subdisk | plex | volume .Xc 指定したオブジェクトの名前を変更します。 .\" XXX .\".It Ic replace Ar drive newdrive .\"指定したドライブから新しいドライブ上へすべてのサブディスクを移動します。 .It Xo .Ic rebuildparity Ar plex Op Fl f .Op Fl v .Op Fl V .Xc RAID-4 または RAID-5 のプレックスのパリティブロックを再構築します。 .It Ic resetconfig すべての .Nm の設定をリセットします。 .It Xo .Ic resetstats .Op Fl r .Op volume | plex | subdisk .Xc 指定したオブジェクトの統計情報をリセットします。指定がない場合はすべての オブジェクトが対象です。 .It Xo .Ic rm .Op Fl f .Op Fl r .Ar volume | plex | subdisk .Xc オブジェクトを削除します。 .It Ic saveconfig 設定失敗後に、 .Nm の設定をディスクへ保存します。 .\" XXX .\".It Xo .\".Ic set .\".Op Fl f .\".Ar state .\".Ar volume | plex | subdisk | disk .\".Xc .\"オブジェクトの状態を .\".Ar state .\"に設定します。 .It Ic setdaemon Op Ar value デーモンの設定を与えます。 .It Xo .Ic setstate .Ar state .Op Ar volume | plex | subdisk | drive .Xc 他のオブジェクトに影響を与えずに状態を設定します。 診断のためだけに使用します。 .It Ic start 全 vinum ドライブから設定を読み込みます。 .It Xo .Ic start .Op Fl i Ar interval .Op Fl S Ar size .Op Fl w .Ar volume | plex | subdisk .Xc システムがオブジェクトへアクセスできるようにします。 .It Xo .Ic stop .Op Fl f .Op Ar volume | plex | subdisk .Xc オブジェクトへのアクセスを終了させます。 パラメータを指定しないと、 .Nm を停止させます。 .It Xo .Ic stripe .Op Fl f .Op Fl n Ar name .Op Fl v .Ar drives .Xc 指定したドライブからストライプ化ボリュームを作成します。 .El .Sh 解説 .Nm ユーティリティは、 Vinum 論理ボリュームマネージャのカーネルコンポーネントと通信します。 対話形式と、単独のコマンドを実行する形式のいずれも実行可能になっています。 コマンドライン引数を伴わずに .Nm を起動すると対話形式になる一方、 コマンドラインでコマンドを指定するとそのコマンド だけを実行します。 対話モードでは、 .Nm はコマンドラインヒストリを保持します。 .Sh オプション .Nm のコマンドにはオプションを付加することができます。どのコマンドにも 下記オプションのどれでも指定することができますが、 オプションが無視される場合があります。例えば、 .Ic stop コマンドは .Fl v オプションと .Fl V オプションを無視します。 .Bl -tag -width indent .It Fl f .Fl f .Pq Dq force: 強制 オプションは安全性の確認を無効にします。細心の注意を払って 使用して下さい。 このオプションは緊急時にのみ使用するものです。例えば、 コマンド .Pp .Dl rm -f myvolume .Pp は .Ar myvolume がオープンされていたとしても削除します。以降、このボリュームに アクセスすると、ほぼ確実にパニックを起こします。 .It Fl i Ar millisecs .Ic init または .Ic start のコマンドを実行時、各ブロックのコピーの間に .Ar millisecs ミリ秒待ちます。 これにより、システム負荷を軽減できます。 .It Fl n Ar name ボリューム名を指定するために .Fl n オプションを使用します。単純な設定コマンド .Ic concat , .Ic mirror , .Ic stripe 用です。 .It Fl r .Fl r .Pq Dq recursive: 再帰的 オプションは表示系のコマンドで使い、 指示したオブジェクト だけでなく、下位のオブジェクトの情報も表示します。 例えば、 .Ic lv コマンドとともに使われる場合、 .Fl r オプションは対象のボリュームに属するプレックスとサブディスクの情報も表示します。 .It Fl s .Fl s .Pq Dq statistics: 統計 オプションは表示系のコマンドで統計情報を表示するために使います。 .Ic mirror コマンドもこのオプションを使用し、 ストライプ化プレックスを作成すべきことを示します。 .It Fl S Ar size .Fl S オプションは、 .Ic init と .Ic start コマンドのための転送サイズを指定します。 .It Fl v .Fl v .Pq Dq verbose: 冗長 オプションは、 さらに詳細な情報を要求するために使用します。 .It Fl V .Fl V .Pq Dq Very verbose: とても冗長 オプションは、 .Fl v オプションが提供するものよりもさらに詳細な情報を要求するために使用します。 このフラグは .Nm init コマンドではベリファイを意味します。 .It Fl w .Fl w .Pq Dq wait: 待ち オプションは、 .Ic init のように通常はバックグラウンドで実行するコマンドの完了を、 .Nm に待たせます。 .El .Sh コマンドの詳細 .Nm コマンドは以下の機能を実行します。 .Pp .Bl -tag -width indent -compact .It Ic attach Ar plex volume Op Cm rename .It Xo .Ic attach Ar subdisk plex .Op Ar offset .Op Cm rename .Xc .Nm Ic attach は指定されたプレックスやサブディスクをそれぞれボリュームやプレックスに 組み込みます。サブディスクに ついては、プレックス中の始点 (オフセット) を指定することができます。 指定がない場合、 サブディスクは有効な最初の位置に結合されます。空でないボリュームにプレックスが 結合されると、 .Nm はそのプレックスを再統合します。 .Pp .Cm rename キーワードが指定されると、 .Nm はオブジェクトの (プレックスの場合には下位のサブディスクの) 名前を変更して デフォルトの .Nm 命名規則に合わせます。 オブジェクトを他の名前に変更するには、 .Ic rename コマンドを使用します。 .Pp サブディスク結合に際しては、いくつか考慮すべきことがあります: .Bl -bullet .It サブディスクの結合対象は、通常、コンカチネート化プレックスのみです。 .It ストライプ化プレックスおよび RAID-5 プレックスにおいて サブディスクが失われた場合 (例えばドライブの故障後など)、 当該サブディスクを置き換えられるのは同じ大きさのサブディスクだけです。 .It ストライプ化または RAID-5 のプレックスに更にサブディスクを追加するには、 .Fl f (強制) オプションを使用します。プレックス内のデータを破壊します。 .\" ストライプ化および RAID-5 のプレックスに対しては、 .\" 別のサブディスクを結合することは、現在許されていません。 .It コンカチネート化プレックスに対しては、 .Ar offset パラメータが、プレックスの先頭からのブロック単位のオフセットを指定します。 ストライプ化プレックスおよび RAID-5 プレックスに対しては、 本パラメータは、サブディスクの最初のブロックのオフセットを指定します。 別の表現をするなら、オフセットは、 サブディスクの数値指定による位置とストライプの大きさとの積になります。 例えば、ブロックの大きさが 271k のプレックスでは、 最初のサブディスクはオフセット 0 に、2 番目のオフセットは 271k に、 3 番目は 542k に、などとなります。 この計算では、RAID-5 プレックスのパリティブロックは無視されます。 .El .Pp .It Xo .Ic checkparity .Ar plex .Op Fl f .Op Fl v .Xc 指定した RAID-4 または RAID-5 プレックスのパリティブロックをチェックします。 この操作はプレックス中のポインタを維持しますので、 望むならば、一時停止して後で同じ場所から再開可能です。 さらに、このポインタは .Ic rebuildparity コマンドも使用します。 最初にパリティの問題が検出された箇所から、 パリティブロックの再構築を開始可能です。 .Pp .Fl f フラグが指定されると、 .Ic checkparity はプレックスの先頭からチェックを開始します。 .Fl v フラグが指定されると、 .Ic checkparity は進捗報告を表示します。 .Pp .It Xo .Ic concat .Op Fl f .Op Fl n Ar name .Op Fl v .Ar drives .Xc .Ic concat コマンドは、単一のコンカチネート化プレックスからなるボリュームを作成する .Ic create コマンドの、単純な代替手段です。 各ドライブ中の最大の連続空間が、 プレックスのサブディスク作成のために使用されます。 .Pp 通常、 .Ic concat コマンドは任意の名前をボリュームと構成要素に付けます。 名前はテキスト .Dq Li vinum および小さな整数からなり、例えば .Dq Li vinum3 となります。 ボリュームに対して指定した名前を割り当てる .Fl n Ar name オプションで、上書きすることが可能です。 プレックスとサブディスクの名前は、通常の作法で、ボリューム名からとられます。 .Pp ドライブの名前には選択の余地はありません。 ドライブが既に .Nm ドライブとして初期化されていた場合、名前はそのままになります。 そうでない場合、ドライブにはテキスト .Dq Li vinumdrive と小さな整数から始まる名前が与えられ、例えば .Dq Li vinumdrive7 となります。 .Ic create コマンドと同様、 .Fl f オプションを使用して、以前の名前の上書きを指定可能です。 .Fl v オプションは、冗長な出力のために使用します。 .Pp このコマンドの例は、後述の .Sx 単純な設定 の節を参照してください。 .Pp .It Xo .Ic create .Op Fl f .Ar description-file .Xc .Nm Ic create はどのオブジェクトの作成にも使われます。相互の関連性が比較的複雑で .Nm オブジェクトの作成には潜在的に危険があることを考慮して、この機能には対話的な インタフェースはありません。 ファイル名を指定しないと、 .Nm は一時ファイルに対してエディタを起動します。 環境変数 .Ev EDITOR が設定されている場合、 .Nm はこのエディタを起動します。設定されていない場合のデフォルトは .Nm vi です。 詳細は後述の .Sx 設定ファイル の節を参照して下さい。 .Pp .Nm Ic create 機能は加法的であることに注意してください: 複数回実行すると、名前付けしていない全オブジェクトのコピーを、 複数生成することになります。 .Pp 通常 .Ic create は既存の .Nm ドライブの名前を変更しません。これは、誤って消去してしまうのを避けるためです。 不要な .Nm ドライブを破棄する正しい方法は、 .Ic resetconfig コマンドで設定をリセットすることです。 しかし、起動できない .Nm ドライブ上に新規データを生成する必要がある場合があります。 この場合、 .Ic create Fl f を使用してください。 .Pp .It Ic debug 引数無しの .Nm Ic debug は、リモートカーネルデバッガに入るために使用します。これは .Nm が .Dv VINUMDEBUG オプション付きで作成されている場合にのみ実行可能です。 このオプションはカーネルデバッガから抜け出るまでオペレーティング システムの実行を停止させます。 リモートデバッグが設定されており、 カーネルデバッガへのリモートコネクションがないと、 デバッガから抜け出るためにはシステムをリセットしてリブート することが必要になります。 .Pp .It Ic debug Ar flags 内部デバッグフラグのビットマスクを設定します。 本製品が改良されるにつれ、このビットマスクは警告無しに変更されるでしょう。 確認のために、ヘッダファイル .Aq Pa sys/dev/vinumvar.h を見てください。 ビットマスクは次の値から構成されます: .Bl -tag -width indent .It Dv DEBUG_ADDRESSES Pq No 1 リクエスト中のバッファ情報を表示します。 .\".It Dv DEBUG_NUMOUTPUT Pq No 2 .\".Va vp->v_numoutput .\" の値を表示します。 .It Dv DEBUG_RESID Pq No 4 .Fn complete_rqe においてデバッガに移行します。 .It Dv DEBUG_LASTREQS Pq No 8 最新のリクエストのリングバッファを保存します。 .It Dv DEBUG_REVIVECONFLICT Pq No 16 再生における衝突に関する情報を表示します。 .It Dv DEBUG_EOFINFO Pq No 32 ストライププレックスで .Dv EOF を返すとき、内部状態の情報を表示します。 .It Dv DEBUG_MEMFREE Pq No 64 最後にメモリアロケータが解放したメモリ領域に関する循環リストを管理します。 .It Dv DEBUG_REMOTEGDB Pq No 256 .Ic debug コマンドが発行されたときに、リモート .Nm gdb に移行します。 .It Dv DEBUG_WARNINGS Pq No 512 実装内のミラーの問題に関する警告を表示します。 .El .Pp .It Xo .Ic detach Oo Fl f Oc Ar plex .Xc .It Xo .Ic detach Oo Fl f Oc Ar subdisk .Xc .Nm Ic detach は指定されたプレックスやサブディスクを、 結合されているボリュームやプレックスから 分離します。分離するとボリュームのデータが欠ける可能性のある 場合、この操作は .Fl f オプションを指定しない限り実行されません。 オブジェクトが上位のオブジェクトに従った名前になっている場合 (例えば、プレックス .Li vol1.p7 に結合されているサブディスク .Li vol1.p7.s0 の場合)、 その名前は頭に .Dq Li ex- がついたものに変更されます (例えば .Li ex-vol1.p7.s0 に変更されます)。 その後の処理で必要であれば、その名前から頭の部分が外されます。 .Pp ストライプ化プレックスおよび RAID-5 プレックスにおいては、 .Ic detach はサブディスク数を減らしません。 その代わり、サブディスクには存在しないという印が付けられ、後で .Ic attach コマンドを使用して交換可能となります。 .Pp .It Ic dumpconfig Op Ar drive ... .Nm Ic dumpconfig は、指定されたドライブ上に保管された設定情報を表示します。ドライブ名が 指定されていない場合、 .Ic dumpconfig はシステム上にあるすべてのドライブから vinum パーティションを探し出し、 その情報をダンプします。設定の更新を無効にしている場合、このコマンドが 返す情報と .Ic list コマンドが返す情報とが同じにならないことがあります。このコマンドは、 主に保守およびデバッグ用に使用されるものです。 .Pp .It Ic info .Nm Ic info は .Nm のメモリ使用に関する情報を表示します。これは主にデバッグのためのものです。 .Fl v オプションを付けると、使用中のメモリ領域についての詳細な情報を表示します。 .Pp .Fl V オプションを付けると、 .Nm ドライバが扱った最大 64 個までの最近の I/O リクエストに関する情報を、 .Ic info は表示します。 この情報は、デバッグフラグ 8 が設定されているときのみ収集されます。 書式は次のようになります: .Bd -literal vinum -> info -V Flags: 0x200 1 opens Total of 38 blocks malloced, total memory: 16460 Maximum allocs: 56, malloc table at 0xf0f72dbc Time Event Buf Dev Offset Bytes SD SDoff Doffset Goffset 14:40:00.637758 1VS Write 0xf2361f40 91.3 0x10 16384 14:40:00.639280 2LR Write 0xf2361f40 91.3 0x10 16384 14:40:00.639294 3RQ Read 0xf2361f40 4.39 0x104109 8192 19 0 0 0 14:40:00.639455 3RQ Read 0xf2361f40 4.23 0xd2109 8192 17 0 0 0 14:40:00.639529 3RQ Read 0xf2361f40 4.15 0x6e109 8192 16 0 0 0 14:40:00.652978 4DN Read 0xf2361f40 4.39 0x104109 8192 19 0 0 0 14:40:00.667040 4DN Read 0xf2361f40 4.15 0x6e109 8192 16 0 0 0 14:40:00.668556 4DN Read 0xf2361f40 4.23 0xd2109 8192 17 0 0 0 14:40:00.669777 6RP Write 0xf2361f40 4.39 0x104109 8192 19 0 0 0 14:40:00.685547 4DN Write 0xf2361f40 4.39 0x104109 8192 19 0 0 0 11:11:14.975184 Lock 0xc2374210 2 0x1f8001 11:11:15.018400 7VS Write 0xc2374210 0x7c0 32768 10 11:11:15.018456 8LR Write 0xc2374210 13.39 0xcc0c9 32768 11:11:15.046229 Unlock 0xc2374210 2 0x1f8001 .Ed .Pp .Ar Buf フィールドは、ユーザバッファヘッダのアドレスを常に含みます。 ユーザリクエストに関連付けられるリクエスト (複数可) を識別するために 使用できますが、100% 信頼できるものというわけではありません: 理論的には、シーケンス中の 2 個のリクエストが同じバッファヘッダを使い得ますが、 これは一般的ではありません。 リクエストの先頭は、イベント .Ar 1VS または .Ar 7VS で識別可能です。 前述の 1 番目の例は、ユーザ要求に関連するリクエストを示しています。 2 番目は、ロックを伴うサブディスク I/O リクエストです。 前記の例では、複数のリクエストが単一のユーザリクエストに含まれています。 .Pp .Ar Event フィールドは、 リクエストチェーン中のイベントシーケンスに関連する情報を含みます。 .Ar 1 から .Ar 6 までの数字はイベントの大まかなシーケンスを示し、 2 文字の省略形は位置のニーモニックです。 .Bl -tag -width Lockwait .It 1VS (vinum の strategy) .Fn vinumstrategy の入口にある、ユーザリクエストに関する情報を表示します。 デバイス番号は .Nm デバイスであり、オフセットと長さはユーザパラメータです。 本ニーモニックは、常にリクエストシーケンスの先頭になります。 .It 2LR (リクエスト発行) 関数 .Fn launch_requests において低レベル .Nm リクエストを発行する直前の、ユーザリクエストを表示します。 パラメータは .Ar 1VS の情報と同じはずです。 .El .Pp ここから後のリクエストでは、利用可能である場合、 .Ar Dev は関連付けられたディスクパーティションのデバイス番号であり、 .Ar Offset はパーティションの先頭からのオフセットであり、 .Ar SD は .Va vinum_conf 中のサブディスクインデックスであり。 .Ar SDoff はサブディスクの先頭からのオフセットであり、 .Ar Doffset は関連付けられたデータリクエストのオフセットであり、 .Ar Goffset は関連付けられたグループリクエストのオフセットです。 .Bl -tag -width Lockwait .It 3RQ (リクエスト) 高レベルのリクエストを満たすために発行される、 いくつかありうる低レベル .Nm リクエストのうちのひとつを表示します。 この情報は、 .Fn launch_requests においても記録されます。 .It 4DN (完了) .Fn complete_rqe から呼ばれ、リクエストの完了を表示します。 この完了は、ステージ .Ar 4DN において .Fn launch_requests から発行されたリクエストか、またはステージ .Ar 5RD か .Ar 6RP の .Fn complete_raid5_write から発行されたリクエストにマッチするはずです。 .It 5RD (RAID-5 データ) .Fn complete_raid5_write から呼ばれ、 パリティ計算後に RAID-5 データストライプへ書き込まれたデータを表現します。 .It 6RP (RAID-5 パリティ) .Fn complete_raid5_write から呼ばれ、 パリティ計算後に RAID-5 パリティストライプへ書き込まれたデータを表現します。 .It 7VS サブディスク I/O リクエストを表示します。 通常、これらのリクエストは .Nm 内部のものであり、プレックスの初期化や再構築といった操作に使用します。 .It 8LR サブディスク I/O リクエストのために生成した、低レベル操作を表示します。 .It Lockwait プロセスがレンジロックを待っていることを示します。 パラメータは、リクエストに関連付けられたバッファヘッダと、 プレックス番号と、ブロック番号です。 内部的な理由で、ブロック番号は、 ストライプ開始アドレスよりも 1 個大きくなっています。 .It Lock レンジロックを取得済みであることを示します。 パラメータはレンジロックと同じです。 .It Unlock レンジロックを解放済みであることを示します。 パラメータはレンジロックと同じです。 .El .\" XXX .Pp .It Xo .Ic init .Op Fl S Ar size .Op Fl w .Ar plex | subdisk .Xc .Nm Ic init は指定したサブディスクに 0 を書き込んで初期化します。 プレックスが指定された場合はプレックス内の全サブディスクを初期化できます。 これはプレックス中のデータに矛盾のないことを確実にする唯一の方法です。 RAID-5 プレックスの使用前には、この初期化が必要です。 他の新規プレックスに対しても、この初期化を推奨します。 .Nm はプレックス中のすべてのサブディスクを並行して初期化します。 この操作には長い時間が かかるため、通常バックグラウンドで実行されます。 このコマンドの完了を待ちたい場合、 .Fl w (待ち) オプションを使用してください。 .Pp .Fl S オプションでデフォルト値の 16 kB と異なるサイズの書き込みブロックを 指定できます。 .Nm は初期化が完了するとコンソールメッセージを出力します。 .Pp .It Ic label Ar volume .Ic label コマンドは、ボリュームに .Em ufs 形式のボリュームラベルを書き込みます。これは適切に .Ic disklabel を呼び出すことに対しての、単純な代替方法です。 いくつかの .Em ufs コマンドはラベルを入手するために正規の .Xr ioctl 2 コールを使わず、依然としてラベルを捜してディスクの読み込みを行う ため、このコマンドは必要になります。 .Nm はボリュームのデータとは別にボリュームラベルを保持しているため、この コマンドは .Xr newfs 8 用には必要ありません。 このコマンドの価値は低下しています。 .Pp .It Xo .Ic list .Op Fl r .Op Fl V .Op Ar volume | plex | subdisk .Xc .It Xo .Ic l .Op Fl r .Op Fl V .Op Ar volume | plex | subdisk .Xc .It Xo .Ic ld .Op Fl r .Op Fl s .Op Fl v .Op Fl V .Op Ar volume .Xc .It Xo .Ic ls .Op Fl r .Op Fl s .Op Fl v .Op Fl V .Op Ar subdisk .Xc .It Xo .Ic lp .Op Fl r .Op Fl s .Op Fl v .Op Fl V .Op Ar plex .Xc .It Xo .Ic lv .Op Fl r .Op Fl s .Op Fl v .Op Fl V .Op Ar volume .Xc .Ic list は指定したオブジェクトの情報を表示するために使われます。引数が省略されると .Nm が認識しているすべてのオブジェクトについての情報が表示されます。 .Ic l コマンドは .Ic list と同じものです。 .Pp .Fl r オプションはボリュームとプレックスに関連します。 指定されると、そのオブジェクト下位のサブディスクと (ボリュームに対しては) プレックスの情報を再帰的に表示します。 .Ic lv , .Ic lp , .Ic ls , .Ic ld のコマンドは、それぞれボリューム、プレックス、サブディスク、そしてドライブの 情報だけを表示します。これはパラメータを指定しないで使う場合に特に有用です。 .Pp .Fl s オプションで .Nm は装置の統計情報を出力するようになり、 .Fl v (verbose: 饒舌な) オプションはいくらかの付加情報を出力させ、 そして .Fl V は数多くの付加情報を出力させます。 .Pp .It Ic makedev .Ic makedev コマンドは、ディレクトリ .Pa /dev/vinum を除去した上で、 現在の設定を反映するようなデバイスノードと共にこのディレクトリを再作成します。 本コマンドは、通常の場合に使用されることを意図していません。 非常時にのみ使用するために提供しています。 .Pp .It Xo .Ic mirror .Op Fl f .Op Fl n Ar name .Op Fl s .Op Fl v .Ar drives .Xc .Ic mirror コマンドは、ミラー化ボリュームを作成する .Ic create コマンドの、単純な代替手段です。 オプションを指定しないと、RAID-1 (ミラー化) ボリュームを、 2 つのコンカチネート化ボリュームで作成します。 各ドライブ中の最大の連続空間が、 プレックスのサブディスク作成のために使用されます。 1 番目のプレックスは、リストの奇数番号のドライブから構築され、 2 番目のプレックスは、リストの偶数番号のドライブから構築されます。 ドライブの大きさが異なる場合、プレックスの大きさは異なるでしょう。 .Pp .Fl s オプションを指定すると、 .Ic mirror はストライプの大きさが 279 kB のストライプ化プレックスを構築します。 各プレックスのサブディスクの大きさは、 プレックスを構成するドライブの中で、最小の連続ストレージの大きさです。 ここでもまた、プレックスの大きさは異なるかもしれません。 .Pp 通常、 .Ic mirror コマンドは任意の名前をボリュームと構成要素に付けます。 名前はテキスト .Dq Li vinum および小さな整数からなり、例えば .Dq Li vinum3 となります。 ボリュームに対して指定した名前を割り当てる .Fl n Ar name オプションで、上書きすることが可能です。 プレックスとサブディスクの名前は、通常の作法で、ボリューム名からとられます。 .Pp ドライブの名前には選択の余地はありません。 ドライブが既に .Nm ドライブとして初期化されていた場合、名前はそのままになります。 そうでない場合、ドライブにはテキスト .Dq Li vinumdrive と小さな整数から始まる名前が与えられ、例えば .Dq Li vinumdrive7 となります。 .Ic create コマンドと同様、 .Fl f オプションを使用して、以前の名前の上書きを指定可能です。 .Fl v オプションは、冗長な出力のために使用します。 .Pp このコマンドの例は、後述の .Sx 単純な設定 の節を参照してください。 .Pp .It Ic mv Fl f Ar drive object ... .It Ic move Fl f Ar drive object ... 指定したオブジェクトから新しいドライブへすべてのサブディスクを移動します。 オブジェクトは、サブディスク、ドライブあるいはプレックスです。ドライブ またはプレックスが指定された場合、オブジェクトに関係するすべての サブディスクが移動されます。 .Pp この機能は現在サブディスク中のデータを保存しないため .Fl f オプションが必要です。 この付加機能は、後日追加されます。しかしながら、この状態でも、故障した ディスクドライブを復旧させるのには十分です。 .Pp .It Ic printconfig Op Ar file 現在の設定のコピーを、 .Nm 設定を再生成可能な書式で、 .Ar file に書き込みます。 ディスク上に保存された設定とは違い、ドライブの定義を含みます。 .Ar file を指定しないと、 .Nm は一覧を .Dv stdout へ書き込みます。 .Pp .It Ic quit 対話モードで実行中のときに、 .Nm ユーティリティを終了します。通常は、文字 .Dv EOF を入力することで実現できます。 .Pp .It Ic read Ar disk ... .Ic read コマンドは、指定したディスクを走査し、作成済の設定情報を含む .Nm パーティションを探します。 そして、最近更新されたものから過去に更新されたものの順番で、 設定を読み込みます。 .Nm ユーティリティは、 最新のすべての設定情報を各ディスクパーティションに保持しています。 このコマンドの パラメータとして、設定の中の全スライスを指定する必要があります。 .Pp .Ic read コマンドは、他の .Nm パーティションを持つシステム上で、 .Nm 設定を選択的にロードすることを意図しています。 システム上の全パーティションを起動したい場合、 .Ic start コマンドを使用する方が簡単です。 .Pp 本コマンド実行時に .Nm がエラーになると、 ディスク上のコピーが壊れないようにするため、自動的な設定更新を無効にします。 これは、ディスク上の設定が、設定エラーを示す (例えば、有効な空間指定を持たないサブディスク) 場合にも同様です。 再度更新をオンにするには、 .Ic setdaemon と .Ic saveconfig のコマンドを使用してください。 デーモンオプションマスクのビット 2 をリセットして、 設定保存を再度有効にしてください。 .Pp .It Xo .Ic rebuildparity .Ar plex .Op Fl f .Op Fl v .Op Fl V .Xc 指定した RAID-4 または RAID-5 プレックスのパリティブロックを再構築します。 この操作はプレックス中のポインタを維持しますので、 望むならば、一時停止して後で同じ場所から再開可能です。 さらに、このポインタは .Ic checkparity コマンドも使用します。 最初にパリティの問題が検出された箇所から、 パリティブロックの再構築を開始可能です。 .Pp .Fl f フラグが指定されると、 .Ic rebuildparity はプレックスの先頭から再構築を開始します。 .Fl v フラグが指定されると、 .Ic rebuildparity はまず既存のパリティブロックをチェックし、 再構築前に、不整合情報を表示します。 .Fl V フラグが指定されると、 .Nm rebuildparity は進捗報告を表示します。 .Pp .It Xo .Ic rename .Op Fl r .Ar [ drive | subdisk | plex | volume ] .Ar newname .Xc 指定したオブジェクトの名前を変更します。 .Fl r オプションが指定されると、下位のオブジェクトがデフォルトの規則に従って命名され ます。プレックスの名前はボリューム名に .Li .p Ns Ar number を付加して作られ、 サブディスクの名前はプレックス名に .Li .s Ns Ar number を付加して作られます。 .\" .It Xo .\" .Ic replace .\" .Ar drive .\" .Ar newdrive .\" .Pp .\" 指定したドライブから新しいドライブへすべてのサブディスクを移動します。 .\" これは回復可能なサブディスクを回復しようとします。そして、回復不可能な .\" サブディスクを最初から作ります。 .\" もし、新しいドライブにこの操作のための容量が不足する時は、できるだけ .\" 多くのサブディスクを新しいドライブ上に組み込み、残りを元のドライブに .\" 残します。 .Pp .It Ic resetconfig .Ic resetconfig コマンドはシステム内の .Nm 設定を完全に削除します。設定を完全に消去したい場合にだけ使って下さい。 .Nm は確認を求めます。 .Li "NO FUTURE" (前途なし) という語句を以下の通りに入力する必要が あります。 .Bd -unfilled -offset indent .No # Nm Ic resetconfig WARNING! This command will completely wipe out your vinum configuration. All data will be lost. If you really want to do this, enter the text NO FUTURE .No "Enter text ->" Sy "NO FUTURE" Vinum configuration obliterated (訳注: ここから上記テキストの翻訳です) 警告! このコマンドはあなたの vinum 設定を完全に消し去ります。 全データは失われます。本当にこれを実行したい場合は、語句 NO FUTURE を入力して下さい。 入力してください -> \f(BINO FUTURE\fP vinum の設定は削除されました。 (訳注: ここまで上記テキストの翻訳です) .Ed .Pp メッセージが示すように、どたん場のコマンドです。 既存の設定をもう見たくもないとき以外は、このコマンドを使わないでください。 .Pp .It Xo .Ic resetstats .Op Fl r .Op Ar volume | plex | subdisk .Xc .Nm は各オブジェクトについて多数の統計カウンタを保持しています。詳細は ヘッダファイル .Aq Pa sys/dev/vinumvar.h を参照して下さい。 .\" XXX 仕上がったらここに入れる これらのカウンタをリセットするためには .Ic resetstats コマンドを使って下さい。 .Fl r オプションも共に指定すると、 .Nm は下位のオブジェクトのカウンタもリセットします。 .Pp .It Xo .Ic rm .Op Fl f .Op Fl r .Ar volume | plex | subdisk .Xc .Ic rm はオブジェクトを .Nm 設定から消去します。ひとたびオブジェクトが消去されるとそれを復旧する方法は ありません。通常 .Nm はオブジェクトを消去する前に数多くの一貫性確認を行います。 .Fl f オプションを指定すると、 .Nm はこの確認を省略し、オブジェクトを無条件に消去します。このオプションは細心の 注意を払って使用して下さい。ボリューム上のすべてのデータを失うことも あり得ます。 .Pp 通常、 .Nm は下位にプレックスを持つボリュームや、下位にサブディスクを持つプレックスを 消去することを拒否します。 .Fl f フラグを指定すると、 .Nm は無条件にオブジェクトを消去します。または .Fl r (recursive: 再帰的) フラグを使うことで、同様に下位のオブジェクトを 消去することができます。 .Fl r フラグを付けてボリュームを消去すると、プレックスとそれに属するサブディスクも 消去します。 .Pp .It Ic saveconfig 現在の設定をディスクに保存します。 .Nm は自動的に設定変更を保存するので、通常これは不要です。 起動時にエラーが発生した場合、更新は無効化されます。 .Ic setdaemon コマンドで再度有効化しても、 .Nm は設定を自動的にはディスクへ保存しません。 このコマンドを使用して設定を保存してください。 .\".It Xo .\".Ic set .\".Op Fl f .\".Ar state .\".Ar volume | plex | subdisk | disk .\".Xc .\".Ic set .\"は指定したオブジェクトに、妥当な状態 (下記 .\".Sx オブジェクト状態 .\"参照) のひとつを .\"セットします。 .\"通常、 .\".Nm .\"は変更を加える前に非常に多くの一貫性の調査を実行します。 .\".Fl f .\"オプションを指定すると、 .\".Nm .\"はこの調査を省略し、無条件に変更を行います。このオプションは大いに注意して .\"使って下さい。ボリューム上のすべてのデータを失うこともあり得ます。 .Pp .It Ic setdaemon Op Ar value .Ic setdaemon は .Nm デーモンの変数ビットマスクを設定します。 本コマンドは一時的なものであり、将来置き換えられます。 現在、ビットマスクにはビット 1 (全アクションを syslog へ記録する) と ビット 4 (設定を更新しない) があります。 オプションビット 4 はエラー回復時に有用かもしれません。 .Pp .It Xo .Ic setstate Ar state .Op Ar volume | plex | subdisk | drive .Xc .Ic setstate は、指定したオブジェクトの状態を指定した状態に設定します。 .Nm の通常の一貫性機構はバイパスされます。回復の目的でのみ使用すべきです。 このコマンドを誤って使用すると、システムを破壊する可能性があります。 .Pp .It Xo .Ic start .Op Fl S Ar size .Op Fl w .Op Ar plex | subdisk .Xc .Ic start は 1 つまたはそれ以上の .Nm オブジェクトを起動します ( .Em up 状態に移行させます)。 .Pp オブジェクト名を指定しないと、システムが .Nm ドライブであると知っているディスクを、 .Nm は走査します。その後、 .Ic read コマンドのところに書いてあるように、設定を読み込みます。 .Nm ドライブにはそのドライブ中のデータについてのすべての情報を持つヘッダが 入っており、その情報としてはプレックスとボリュームを表現するために必要な 他のドライブの名前を含んでいます。 .Pp 本コマンド実行時に .Nm がエラーになると、 ディスク上のコピーが壊れないようにするため、自動的な設定更新を無効にします。 これは、ディスク上の設定が、設定エラーを示す (例えば、有効な空間指定を持たないサブディスク) 場合にも同様です。 再度更新をオンにするには、 .Ic setdaemon と .Ic saveconfig のコマンドを使用してください。 デーモンオプションマスクのビット 4 をリセットして、 設定保存を再度有効にしてください。 .Pp オブジェクト名が指定されると、 .Nm はそれらを起動します。 通常、この操作はサブディスクに対してのみ行います。 動作はオブジェクトの現在の状態に依存します: .Bl -bullet .It オブジェクトが既に .Em up 状態の場合、 .Nm はなにもしません。 .It オブジェクトがサブディスクであり、 .Em down または .Em reborn の状態の場合、 .Nm は .Em up 状態に変更します。 .It オブジェクトがサブディスクであり、 .Em empty 状態の場合、変更はサブディスクに依存します。 サブディスクがプレックスの一部であり このプレックスが他のプレックスを含むボリュームの一部である場合、 .Nm はサブディスクを .Em reviving 状態にし、データをボリュームからコピーしようとします。 操作完了時に、サブディスクは .Em up 状態に設定されます。 サブディスクがプレックスの一部であり このプレックスが他のプレックスを含まないボリュームの一部である場合、 またはサブディスクがプレックスの一部ではない場合、 .Nm は即時にサブディスクを .Em up 状態にします。 .It オブジェクトがサブディスクであり、 .Em reviving 状態である場合、 .Nm は 再生 操作をオフラインにて継続します。 操作完了時に、サブディスクは .Em up 状態に設定されます。 .El .Pp サブディスクが .Em up 状態になると、 .Nm は自動的に、 サブディスクが属す可能性のあるプレックスとボリュームの状態をチェックし、 これらの状態を適切に更新します。 .Pp オブジェクトがプレックスの場合、 .Ic start は下位のサブディスクの (ボリュームの場合にはこれに加えてプレックスの) 状態を チェックし、起動可能なサブディスクを起動します。 .Pp マルチプレックスボリュームの中の 1 つのプレックスを起動するには、 ボリューム中の他のプレックスからデータをコピーする必要があります。 これにはしばしば長い時間がかかるため、バックグラウンドで実行されます。 この操作が完了することを待ちたい場合 (例えば、この操作をスクリプト中で実行している場合)、 .Fl w オプションを使用してください。 .Pp データのコピーにはたいして時間がかかりません。それは、さらに重大な負荷を システムにかけ得ます。 .Fl S オプションで転送サイズを、 .Fl i オプションで各ブロックを転送する間隔を (ミリ秒で) 指定可能です。 どちらもシステム負荷を軽減します。 .Pp .It Xo .Ic stop .Op Fl f .Op Ar volume | plex | subdisk .Xc パラメータを指定しないと、 .Ic stop は .Nm kld を削除し、 .Xr vinum 4 を停止します。 活動状態のオブジェクトが存在しない場合のみ、行うことが可能です。 特に、 .Fl f オプションはこの要求に優先しません。 通常、 .Ic stop コマンドは、終了前に現在の設定をディスクへ書き戻します。 設定の更新が無効になっている場合にはこれはできませんので、 設定の更新が無効になっている場合には .Nm は停止しません。 これを上書きするには .Fl f オプションを指定します。 .Pp .Ic stop コマンドは .Nm が kld としてロードされている場合のみ動作します。 静的に構成されたドライバをアンロードすることはできないからです。 .Nm が静的に構成されている場合、 .Nm Ic stop は失敗します。 .Pp オブジェクト名が指定されると、 .Ic stop はそのオブジェクトへのアクセスを無効化します。 オブジェクトに下位オブジェクトがある場合、 それらのサブオブジェクトは既に非活動状態 (stop また error) となっているか、 .Fl r と .Fl f のオプションが指定されていることが必要です。 このコマンドは、オブジェクトを設定から取り除きません。 .Ic start コマンドの後で再度アクセスができるようになります。 .Pp デフォルトでは .Nm は動作中のオブジェクトは停止しません。例えば、動作中のボリュームに結合 されているプレックスは停止できないし、オープン中のボリュームは停止できません。 .Fl f オプションは .Nm にこの確認を省略して無条件に削除するよう指示します。このオプションは 大いに注意し、よく理解した上で使って下さい。もし間違って使うとひどい データ破壊を起こすことがあります。 .Pp .It Xo .Ic stripe .Op Fl f .Op Fl n Ar name .Op Fl v .Ar drives .Xc .Ic stripe コマンドは、単一のストライプ化プレックスからなるボリュームを作成する .Ic create コマンドの、単純な代替手段です。 サブディスクの大きさは、 全ドライブで利用可能な最大の連続空間の大きさです。 ストライプの大きさは 279 kB に固定されています。 .Pp 通常、 .Ic stripe コマンドは任意の名前をボリュームと構成要素に付けます。 名前はテキスト .Dq Li vinum および小さな整数からなり、例えば .Dq Li vinum3 となります。 ボリュームに対して指定した名前を割り当てる .Fl n Ar name オプションで、上書きすることが可能です。 プレックスとサブディスクの名前は、通常の作法で、ボリューム名からとられます。 .Pp ドライブの名前には選択の余地はありません。 ドライブが既に .Nm ドライブとして初期化されていた場合、名前はそのままになります。 そうでない場合、ドライブにはテキスト .Dq Li vinumdrive と小さな整数から始まる名前が与えられ、例えば .Dq Li vinumdrive7 となります。 .Ic create コマンドと同様、 .Fl f オプションを使用して、以前の名前の上書きを指定可能です。 .Fl v オプションは、冗長な出力のために使用します。 .Pp このコマンドの例は、後述の .Sx 単純な設定 の節を参照してください。 .El .Sh 単純な設定 この節では、 .Ic concat , .Ic mirror , .Ic stripe コマンドを使用する、 .Nm 設定の単純なインタフェースを説明します。 これらのコマンドは、大概の通常状況では便利な設定を作成しますが、 .Ic create コマンド程の柔軟性はありません。 .Pp コマンドの解説は前述を参照してください。 ここでは例を示します。どれも同じディスクを使用しています。 最初のドライブ .Pa /dev/da1h は他のドライブよりも小さいことに注意してください。 各サブディスクの大きさに影響があります。 .Pp 次に示す例ではすべて .Fl v オプションを使用することにより、システムに渡すコマンドを見せ、 ボリュームの構造を列挙します。 .Fl v オプションを使用しないと、これらのコマンドは何も出力しません。 .Ss 単一コンカチネート化プレックスのボリューム 単一コンカチネート化プレックスのボリュームを使用し、 最大のストレージ容量を得ます。 ただし、ドライブ故障への耐性はありません。 .Bd -literal vinum -> concat -v /dev/da1h /dev/da2h /dev/da3h /dev/da4h volume vinum0 plex name vinum0.p0 org concat drive vinumdrive0 device /dev/da1h sd name vinum0.p0.s0 drive vinumdrive0 size 0 drive vinumdrive1 device /dev/da2h sd name vinum0.p0.s1 drive vinumdrive1 size 0 drive vinumdrive2 device /dev/da3h sd name vinum0.p0.s2 drive vinumdrive2 size 0 drive vinumdrive3 device /dev/da4h sd name vinum0.p0.s3 drive vinumdrive3 size 0 V vinum0 State: up Plexes: 1 Size: 2134 MB P vinum0.p0 C State: up Subdisks: 4 Size: 2134 MB S vinum0.p0.s0 State: up D: vinumdrive0 Size: 414 MB S vinum0.p0.s1 State: up D: vinumdrive1 Size: 573 MB S vinum0.p0.s2 State: up D: vinumdrive2 Size: 573 MB S vinum0.p0.s3 State: up D: vinumdrive3 Size: 573 MB .Ed .Pp この場合、4 ディスクすべての空間を使用し、 ボリュームの大きさは 2134 MB になります。 .Ss 単一ストライプ化プレックスのボリューム 単一ストライプ化プレックスのボリュームは コンカチネート化プレックスよりも性能が良いかもしれません。 しかし、ストライプ化プレックスの制約により、 ボリュームは小さいかもしれません。 これもまたドライブ故障の耐性はありません。 .Bd -literal vinum -> stripe -v /dev/da1h /dev/da2h /dev/da3h /dev/da4h drive vinumdrive0 device /dev/da1h drive vinumdrive1 device /dev/da2h drive vinumdrive2 device /dev/da3h drive vinumdrive3 device /dev/da4h volume vinum0 plex name vinum0.p0 org striped 279k sd name vinum0.p0.s0 drive vinumdrive0 size 849825b sd name vinum0.p0.s1 drive vinumdrive1 size 849825b sd name vinum0.p0.s2 drive vinumdrive2 size 849825b sd name vinum0.p0.s3 drive vinumdrive3 size 849825b V vinum0 State: up Plexes: 1 Size: 1659 MB P vinum0.p0 S State: up Subdisks: 4 Size: 1659 MB S vinum0.p0.s0 State: up D: vinumdrive0 Size: 414 MB S vinum0.p0.s1 State: up D: vinumdrive1 Size: 414 MB S vinum0.p0.s2 State: up D: vinumdrive2 Size: 414 MB S vinum0.p0.s3 State: up D: vinumdrive3 Size: 414 MB .Ed .Pp この場合、サブディスクの大きさは利用できるディスクの最小に制限され、 ボリュームの大きさは 1659 MB になります。 .Ss 2 つのコンカチネート化プレックスのミラー化ボリューム 信頼性を向上するため、ミラー化およびボリューム化を使用します: .Bd -literal vinum -> mirror -v -n mirror /dev/da1h /dev/da2h /dev/da3h /dev/da4h drive vinumdrive0 device /dev/da1h drive vinumdrive1 device /dev/da2h drive vinumdrive2 device /dev/da3h drive vinumdrive3 device /dev/da4h volume mirror setupstate plex name mirror.p0 org concat sd name mirror.p0.s0 drive vinumdrive0 size 0b sd name mirror.p0.s1 drive vinumdrive2 size 0b plex name mirror.p1 org concat sd name mirror.p1.s0 drive vinumdrive1 size 0b sd name mirror.p1.s1 drive vinumdrive3 size 0b V mirror State: up Plexes: 2 Size: 1146 MB P mirror.p0 C State: up Subdisks: 2 Size: 988 MB P mirror.p1 C State: up Subdisks: 2 Size: 1146 MB S vinum0.p0.s0 State: up D: vinumdrive0 Size: 414 MB S vinum0.p0.s2 State: up D: vinumdrive2 Size: 414 MB S vinum0.p0.s1 State: up D: vinumdrive1 Size: 414 MB S vinum0.p0.s3 State: up D: vinumdrive3 Size: 414 MB .Ed .Pp この例ではボリューム名を .Ar mirror と指定しています。 1 つのドライブの大きさが他のドライブよりも小さいため、 2 つのプレックスの大きさは異なり、 ボリュームの最後の 158 MB には耐性がありません。 このような状況で完全な信頼性を保証するためには、 .Ic create コマンドを使用して 988 MB のボリュームを作成します。 .Ss 2 つのストライプ化プレックスのミラー化ボリューム 今度は、2 つのストライプ化プレックスのミラー化ボリュームを作成するために .Fl s オプションを使用します: .Bd -literal vinum -> mirror -v -n raid10 -s /dev/da1h /dev/da2h /dev/da3h /dev/da4h drive vinumdrive0 device /dev/da1h drive vinumdrive1 device /dev/da2h drive vinumdrive2 device /dev/da3h drive vinumdrive3 device /dev/da4h volume raid10 setupstate plex name raid10.p0 org striped 279k sd name raid10.p0.s0 drive vinumdrive0 size 849825b sd name raid10.p0.s1 drive vinumdrive2 size 849825b plex name raid10.p1 org striped 279k sd name raid10.p1.s0 drive vinumdrive1 size 1173665b sd name raid10.p1.s1 drive vinumdrive3 size 1173665b V raid10 State: up Plexes: 2 Size: 1146 MB P raid10.p0 S State: up Subdisks: 2 Size: 829 MB P raid10.p1 S State: up Subdisks: 2 Size: 1146 MB S raid10.p0.s0 State: up PO: 0 B Size: 414 MB S raid10.p0.s1 State: up PO: 279 kB Size: 414 MB S raid10.p1.s0 State: up PO: 0 B Size: 573 MB S raid10.p1.s1 State: up PO: 279 kB Size: 573 MB .Ed .Pp この場合、使用可能なボリュームはより小さくなります。 なぜなら、最小のドライブに適合するように、 第 1 プレックスが小さくなったためです。 .Sh 設定ファイル .Nm ユーティリティでは、 .Ic create コマンドに渡すすべての引数は設定ファイルに入っている必要があります。 設定ファイルのエントリは、ボリュームやプレックスやサブディスクを定義します。 エントリは 1 行に 1 つということ以外には決まった書式はありません。 .Ss スケールファクタ これらの値は、バイトで指定しても良いですし、 次のスケールファクタのいずれか 1 つを後に付けても良いです: .Bl -tag -width indent .It s 値が 512 バイトのセクタ数であることを示します。 .It k 値がキロバイト数であることを示します (1024 バイト)。 .It m 値がメガバイト数であることを示します (1048576 バイト)。 .It g 値がギガバイト数であることを示します (1073741824 バイト)。 .It b .Tn VERITAS との互換性のために使用します。 これは、512 バイトのブロック数を意味します。 .Dq ブロック という語を別の意味で使用していますので、 この短縮形は混乱させるものです。 この短縮形の価値は低下しています。 代りにキーワード 's' を使用してください。 .El .Pp 例えば、16777216 バイトという値は、 .Em 16m , .Em 16384k , .Em 32768s のいずれの表記も可能です。 .Pp 設定ファイルには以下のエントリを記述することができます。 .Pp .Bl -tag -width 4n .It Ic drive Ar name devicename Op Ar options ドライブを定義します。オプションは次の通りです: .Bl -tag -width 18n .It Cm device Ar devicename ドライブが乗るデバイスを指定します。 .Ar devicename は、例えば .Pa /dev/da1e や .Pa /dev/ad3s2h といったパーティションである必要があり、タイプ .Em vinum である必要があります。 .Dq Li c パーティションを使用してはなりません。 これはディスク全体のために予約されているからです。 .It Cm hotspare ドライブを .Dq ホットスペア ドライブであると定義します。 これは、故障したドライブと自動的に交換するために管理されます。 .Nm ユーティリティはこのドライブを他の用途に使用することを許しません。 特に、サブディスクをこの上に作成できません。 この機能はまだ完全には実装されていません。 .El .It Ic volume Ar name Op Ar options .Ar name という名前でボリュームを定義します。 オプションには次のものがあります。 .Bl -tag -width 18n .It Cm plex Ar plexname 指定したプレックスをボリュームに追加します。 .Ar plexname が .Cm * として指定されると、 .Nm は設定ファイル中のボリューム定義の後で、次の妥当なエントリとなり得るプレックス の定義を捜します。 .It Cm readpol Ar policy ボリュームの .Em read policy (読み込み方針) を定義します。 .Ar policy は .Cm round か .Cm prefer Ar plexname のどちらかです。 .Nm ユーティリティは読み込み要求を、ただ 1 つのプレックスによって満たします。 .Cm round 読み込み方針は、読み込みを別々のプレックスから .Em ラウンドロビン 方式で 行うように指定します。 .Ar prefer 読み込み方針では、指定したプレックスから毎回読み込みを行います。 .It Cm setupstate マルチプレックスボリュームを作成する際に、すべてのプレックスの内容に一貫性が あると仮定します。通常こうなることはないため、デフォルトでは、 最初のプレックスを除いたすべてのプレックスを .Em faulty 状態に設定します。 .Ic start コマンドを使って、最初に一貫性のある状態にする必要があります。しかし ストライプ化プレックスとコンカチネート化プレックスの場合には、普通は一貫性が ないままでも問題にはなりません。ボリュームをファイルシステムや スワップパーティションとして使う場合にはディスク上の以前の内容は どうでもよいため、それは無視されます。この危険を受け入れる場合には、 .Cm setupstate キーワードを使って下さい。 設定ファイル中でボリュームの直後で定義されるプレックスに対してのみ 適用されます。 後でプレックスをボリュームに追加する場合には、 これらのプレックスを .Ic start コマンドで統合する必要があります。 .Pp RAID-5 プレックスには .Ic init を使うことが .Em 必要 なことに注意して下さい。さもないと 1 つのサブディスクに障害が起きた時、大きくデータが破壊されます。 .El .It Ic plex Op Ar options プレックスを定義します。ボリュームとは違い、名前の指定は不要です。 オプションには次のものを指定可能です: .Bl -tag -width 18n .It Cm name Ar plexname プレックスの名前を指定します。プレックスやサブディスクに名前をつける場合には .Cm name キーワードが必要になることに注意して下さい。 .It Cm org Ar organization Op Ar stripesize プレックスの編成を指定します。 .Ar organization は .Cm concat か .Cm striped か .Cm raid5 のいずれかです。 .Cm striped と .Cm raid5 のプレックスに対しては .Ar stripesize 引数を指定する必要がありますが、 .Cm concat のプレックスに対しては省略する必要があります。 .Ar striped タイプについては各ストライプの幅を指定します。 .Ar raid5 については、グループの大きさを指定します。 グループとはプレックスの一部分であり、 同じサブディスクに入っているすべてのデータのパリティが入っています。 それはプレックスの大きさの約数である必要があり (つまり、プレックスの大きさをストライプの大きさで割ったものは 整数である必要があり)、 ディスクセクタ長 (512バイト) の倍数である必要があります。 .Pp 最適な性能のためには、ストライプの大きさは少なくとも 128kB であるべきです。 これより小さくすると、 個々のリクエストが複数のディスクに対して割り当てられることにより、 I/O のアクティビティが非常に増加します。 本マッピングによる並行転送数増加に起因する性能向上は、 レイテンシ増加に起因する性能劣化を引き起しません。 ストライプの大きさの目安は、256 kB から 512 kB の間です。 2 の羃乗は避けるべきです。 2 の羃乗を使用すると、すべてのスーパブロックを 最初のサブディスクに置く傾向があるからです。 単純なコマンドでは、ストライプの大きさに 279 kB を使用するため、 スーパブロックが適度に分散されます。 .Pp ストライプ化プレックスは最低 2 つのサブディスクを持つ必要がありますし (そうでないとコンカチネート化プレックスになります)、 それぞれは同じ大きさである必要があります。 RAID-5 プレックスは最低 3 つのサブディスクを持つ必要があり、 それぞれは同じ大きさである必要があります。 実際には RAID-5 プレックスは最低 5 つのサブディスクから構成されるべきです。 .It Cm volume Ar volname プレックスを、指定したボリュームに追加します。 .Cm volume キーワードが指定されないと、プレックスは設定ファイル中の最後に記述された ボリュームに追加されます。 .It Cm sd Ar sdname offset 指定したサブディスクをプレックスの .Ar offset の位置に追加します。 .El .It Ic subdisk Op Ar options サブディスクを定義します。オプションには次のものを指定可能です: .Bl -hang -width 18n .It Cm name Ar name サブディスクの名前を指定します。これは必ずしも指定する必要は ありません。 上記の .Sx オブジェクトの命名 を参照してください。 サブディスクに名前をつける場合には .Cm name キーワードを指定する必要があることに注意して下さい。 .It Cm plexoffset Ar offset プレックス内のサブディスクの始点を指定します。指定がないと、 .Nm はすでにサブディスクがあればその直後の領域を割り当て、なければ プレックスの先頭から割り当てます。 .It Cm driveoffset Ar offset ドライブ内のサブディスクの始点を指定します。指定がないと、 .Nm はドライブ中で最初の .Ar length バイト連続の空き領域を割り当てます。 .It Cm length Ar length サブディスクの大きさを指定します。このキーワードは必須です。 デフォルト値はありません。 値 0 を指定すると、 .Dq ドライブ上で最大限利用可能な連続空き領域を使用 という意味になります。 ドライブが空の場合、サブディスクとしてドライブ全体を使用することを意味します。 .Cm length は .Cm len と短縮することもできます。 .It Cm plex Ar plex サブディスクが属すプレックスを指定します。デフォルトでは、サブディスクは 最後に記述されたプレックスに属します。 .It Cm drive Ar drive サブディスクが乗るドライブを指定します。デフォルトでは最後に記述された ドライブ上に位置します。 .It Cm retryerrors 回復不能エラーが発生しても、サブディスクがダウンとみなさないように指定します。 通常、 .Nm は、回復不能エラーが発生すると、サブディスク全体をアクセス不能とします。 .El .El .Sh 設定ファイル例 .Bd -literal # vinum 設定ファイル例 # # ドライブ drive drive1 device /dev/da1h drive drive2 device /dev/da2h drive drive3 device /dev/da3h drive drive4 device /dev/da4h drive drive5 device /dev/da5h drive drive6 device /dev/da6h # 1 つのストライプ化プレックスをもつボリューム volume tinyvol plex org striped 279k sd length 64m drive drive2 sd length 64m drive drive4 volume stripe plex org striped 279k sd length 512m drive drive2 sd length 512m drive drive4 # 2 つのプレックス volume concat plex org concat sd length 100m drive drive2 sd length 50m drive drive4 plex org concat sd length 150m drive drive4 # 1 つのストライプ化プレックスと 1 つのコンカチネート化プレックスを持つボリューム volume strcon plex org striped 279k sd length 100m drive drive2 sd length 100m drive drive4 plex org concat sd length 150m drive drive2 sd length 50m drive drive4 # 1 つの RAID-5 プレックスと 1 つのストライプ化プレックスを持つボリューム # RAID-5 ボリュームの方が 1 つのサブディスク分だけ大きいことに注意 volume vol5 plex org striped 491k sd length 1000m drive drive2 sd length 1000m drive drive4 plex org raid5 273k sd length 500m drive drive1 sd length 500m drive drive2 sd length 500m drive drive3 sd length 500m drive drive4 sd length 500m drive drive5 .Ed .Sh ドライブレイアウト上の考慮点 現在、 .Nm ドライブは .Bx ディスクパーティションです。それは 他の用途で使用されているデータの上書きを避けるために .Em vinum タイプである必要があります。 .Nm disklabel Fl e を使用して、パーティションタイプ定義を編集してください。 次の表示は、 .Xr disklabel 8 が示す典型的なパーティションレイアウトです: .Bd -literal 8 partitions: # size offset fstype [fsize bsize bps/cpg] a: 81920 344064 4.2BSD 0 0 0 # (Cyl. 240*- 297*) b: 262144 81920 swap # (Cyl. 57*- 240*) c: 4226725 0 unused 0 0 # (Cyl. 0 - 2955*) e: 81920 0 4.2BSD 0 0 0 # (Cyl. 0 - 57*) f: 1900000 425984 4.2BSD 0 0 0 # (Cyl. 297*- 1626*) g: 1900741 2325984 vinum 0 0 0 # (Cyl. 1626*- 2955*) .Ed .Pp この例では、パーティション .Dq Li g を .Nm パーティションとして使用可能です。パーティション .Dq Li a , .Dq Li e , .Dq Li f は、 .Em UFS ファイルシステムまたは .Em ccd パーティションとして使用可能です。パーティション .Dq Li b はスワップパーティションであり、パーティション .Dq Li c はディスク全体を表現するため他の用途に使用できません。 .Pp .Nm ユーティリティは各パーティションの先頭から 265 セクタを設定情報に使用するため、 サブディスクの最大の大きさはドライブよりも 265 セクタ小さくなります。 .Sh ログファイル .Nm ユーティリティはログファイルを管理します。 ログファイルは、デフォルトでは .Pa /var/log/vinum_history であり、 .Nm に対して発行したコマンドの履歴を保持します。 環境変数 .Ev VINUM_HISTORY をファイルの名前に設定することにより、 このファイルの名前をオーバライド可能です。 .Pp ログファイル中のメッセージの前には日付が付きます。 デフォルトの書式は .Qq Li %e %b %Y %H:%M:%S です。書式の文字列に関するさらなる詳細については .Xr strftime 3 を参照してください。 これは環境変数 .Ev VINUM_DATEFORMAT でオーバライド可能です。 .Sh VINUM 設定法 本節では、 .Nm システムの実装方法に関する、現実的なアドバイスを行います。 .Ss データを何処に置くか まず決定が必要な選択は、データを何処に置くかです。 .Nm 専用のディスクパーティションが必要です。 これらは、デバイスやパーティション .Dq Li c ではなく、パーティションであるべきです。 例えば、適切な名前とは、 .Pa /dev/da0e や .Pa /dev/ad3s4a です。 不適切な名前とは、パーティションではなくデバイスを表現する .Pa /dev/da0 , .Pa /dev/da0s1 や、ディスク全体を表現しタイプ .Em unused であるべき .Pa /dev/ad1c です。 前述の、 .Sx ドライブレイアウト上の考察点 下にある使用例を参照してください。 .Ss ボリュームのデザイン .Nm ボリュームの設定方法は、あなたの意図に依存します。 次のように多くの可能性があります: .Bl -enum .It 多くの小さなディスクを結合して、 適切な大きさのファイルシステムを作成したいと考えるかもしれません。 例えば、小さなディスクを 5 個持っていて、 全空間を単一ボリュームとして使用したい場合、次のような設定ファイルを書きます: .Bd -literal -offset indent drive d1 device /dev/da2e drive d2 device /dev/da3e drive d3 device /dev/da4e drive d4 device /dev/da5e drive d5 device /dev/da6e volume bigger plex org concat sd length 0 drive d1 sd length 0 drive d2 sd length 0 drive d3 sd length 0 drive d4 sd length 0 drive d5 .Ed .Pp この場合、サブディスクの長さを 0 と指定します。 これは、 .Dq ドライブ上にある空き空間のうち、最大領域を使用する ことを意味します。 指定するサブディスクが、ドライブ上の唯一のサブディスクである場合、 このサブディスクは使用可能な空間全体を使用します。 .It ディスク故障に対する追加の回復力 (レジリエンス; resilience) を .Nm に与えたい場合を考えます。 選択肢としては、 .Dq ミラーリング とも呼ばれる RAID-1 か、 .Dq パリティ とも呼ばれる RAID-5 があります。 .Pp ミラーリングの設定のためには、 単一ボリュームの中に複数のプレックスを作成する必要があります。 例えば、 2 GB のミラー化ボリュームを作成するには、 次のような設定ファイルを作成します: .Bd -literal -offset indent drive d1 device /dev/da2e drive d2 device /dev/da3e volume mirror plex org concat sd length 2g drive d1 plex org concat sd length 2g drive d2 .Ed .Pp ミラー化ドライブを作成するときには、 各プレックスからのデータが、 違う物理ディスク上にあることを保証することが重要です。 これにより、単一ドライブ故障においても、 .Nm はボリュームの完全なアドレス空間にアクセス可能となります。 各プレックスが、 完全なボリュームと同じだけのデータを必要とすることに注意してください: この例では、ボリュームは 2 GB の大きさですが、各プレックス (と各サブディスク) は 2 GB を必要としますので、全体のディスクストレージ要求は 4 GB となります。 .Pp RAID-5 の設定をするには、タイプ .Cm raid5 の単一プレックスを作成します。 例えば、回復力を持つ 2 GB に相当するボリュームを作成するには、 次のような設定ファイルを使用します: .Bd -literal -offset indent drive d1 device /dev/da2e drive d2 device /dev/da3e drive d3 device /dev/da4e drive d4 device /dev/da5e drive d5 device /dev/da6e volume raid plex org raid5 433k sd length 512m drive d1 sd length 512m drive d2 sd length 512m drive d3 sd length 512m drive d4 sd length 512m drive d5 .Ed .Pp RAID-5 プレックスは、最低 3 個のサブディスクを必要とします。 これらのうち 1 個には、パリティ情報を格納するので、 データストレージとしては使用しません。 より多くのディスクを使用すると、 より多くの割合のディスクストレージを、 データストレージとして使用可能となります。 この例では、総ストレージ使用量は 2.5 GB です。 これに対し、ミラー設定での総ストレージ使用量は 4 GB です。 最小の 3 個のディスクだけを使用する場合、 情報格納のために次のように 3 GB を必要とします: .Bd -literal -offset indent drive d1 device /dev/da2e drive d2 device /dev/da3e drive d3 device /dev/da4e volume raid plex org raid5 433k sd length 1g drive d1 sd length 1g drive d2 sd length 1g drive d3 .Ed .Pp ミラー化ドライブを作成するときには、 各サブディスクからのデータが、 違う物理ディスク上にあることを保証することが重要です。 これにより、単一ドライブ故障においても、 .Nm はボリュームの完全なアドレス空間にアクセス可能となります。 .It また、 .Nm の設定により、 ファイルシステムへのアクセスの並行性を増したいと考えるかもしれません。 多くの場合、単一のファイルシステムへのアクセスは、 ディスク速度により制限されます。 ボリュームを複数のディスクに分散することにより、 複数アクセス環境でのスループットを増すことが可能です。 この技術は、単一アクセス環境では、 ほとんど効果がないかまったく効果がありません。 .Nm ユーティリティは .Dq ストライピング または RAID-0 とも呼ばれる技術を使用し、アクセスの並行性を増します。 RAID-0 という名称は誤解を生じさせるものです: なぜなら、ストライピングは冗長性も更なる信頼性も提供しないからです。 実際、信頼性は低下します。 なぜなら、単一ディスクの故障はボリュームを使用不可とし、 多くのディスクを使うほどこれらのうち 1 個が故障する確率は増加するからです。 .Pp ストライピングの実装のためには、 .Cm striped (ストライプ化) プレックスを使用します: .Bd -literal -offset indent drive d1 device /dev/da2e drive d2 device /dev/da3e drive d3 device /dev/da4e drive d4 device /dev/da5e volume raid plex org striped 433k sd length 512m drive d1 sd length 512m drive d2 sd length 512m drive d3 sd length 512m drive d4 .Ed .Pp ストライプ化プレックスの最低サブディスク数は 2 個です。 多くのディスクを使用するほど、性能が向上します。 .It 両方の最良点を得ることにより、回復力と性能の両方を得ることを考えます。 これは、RAID-10 (RAID-1 と RAID-0 の組み合わせ) と呼ばれることがあります。 この名称もまた誤解を生じさせるものです。 .Nm では、次のような設定ファイルを使用可能です: .Bd -literal -offset 4n drive d1 device /dev/da2e drive d2 device /dev/da3e drive d3 device /dev/da4e drive d4 device /dev/da5e volume raid setupstate plex org striped 433k sd length 512m drive d1 sd length 512m drive d2 sd length 512m drive d3 sd length 512m drive d4 plex org striped 433k sd length 512m drive d4 sd length 512m drive d3 sd length 512m drive d2 sd length 512m drive d1 .Ed .Pp ここでは、プレックスはストライプ化され、性能を向上しています。 そして、このようなプレックスが 2 個あり、回復力を向上しています。 この例で、2 番目のプレックスのサブディスクの順番が、 1 番目のプレックスの逆になっていることに注意してください。 これは性能のためであり、後で議論します。 更に、ボリューム指定にキーワード .Cm setupstate を含み、全プレックスが作成後に .Em up となることを保証しています。 .El .Ss ボリュームの作成 ひとたび設定ファイルを作成した後は、 .Nm を起動し、ボリュームを作成します。 この例では、設定ファイルは .Pa configfile です: .Bd -literal -offset 2n # vinum create -v configfile 1: drive d1 device /dev/da2e 2: drive d2 device /dev/da3e 3: volume mirror 4: plex org concat 5: sd length 2g drive d1 6: plex org concat 7: sd length 2g drive d2 Configuration summary Drives: 2 (4 configured) Volumes: 1 (4 configured) Plexes: 2 (8 configured) Subdisks: 2 (16 configured) Drive d1: Device /dev/da2e Created on vinum.lemis.com at Tue Mar 23 12:30:31 1999 Config last updated Tue Mar 23 14:30:32 1999 Size: 60105216000 bytes (57320 MB) Used: 2147619328 bytes (2048 MB) Available: 57957596672 bytes (55272 MB) State: up Last error: none Drive d2: Device /dev/da3e Created on vinum.lemis.com at Tue Mar 23 12:30:32 1999 Config last updated Tue Mar 23 14:30:33 1999 Size: 60105216000 bytes (57320 MB) Used: 2147619328 bytes (2048 MB) Available: 57957596672 bytes (55272 MB) State: up Last error: none Volume mirror: Size: 2147483648 bytes (2048 MB) State: up Flags: 2 plexes Read policy: round robin Plex mirror.p0: Size: 2147483648 bytes (2048 MB) Subdisks: 1 State: up Organization: concat Part of volume mirror Plex mirror.p1: Size: 2147483648 bytes (2048 MB) Subdisks: 1 State: up Organization: concat Part of volume mirror Subdisk mirror.p0.s0: Size: 2147483648 bytes (2048 MB) State: up Plex mirror.p0 at offset 0 Subdisk mirror.p1.s0: Size: 2147483648 bytes (2048 MB) State: up Plex mirror.p1 at offset 0 .Ed .Pp .Fl v フラグは、設定に従ってファイルをリストするよう、 .Nm に指示します。その後、 .Ic list Fl v コマンドと同じ書式で、現在の設定をリストします。 .Ss より多くのボリュームを作成する ひとたび .Nm ボリュームを作成した後は、 .Nm はこれらの情報を内部の設定ファイルにて管理します。 再度作成する必要はありません。 特に、 .Ic create コマンドを再実行すると、追加のオブジェクトを作ることになります: .Bd -literal # vinum create sampleconfig Configuration summary Drives: 2 (4 configured) Volumes: 1 (4 configured) Plexes: 4 (8 configured) Subdisks: 4 (16 configured) D d1 State: up Device /dev/da2e Avail: 53224/57320 MB (92%) D d2 State: up Device /dev/da3e Avail: 53224/57320 MB (92%) V mirror State: up Plexes: 4 Size: 2048 MB P mirror.p0 C State: up Subdisks: 1 Size: 2048 MB P mirror.p1 C State: up Subdisks: 1 Size: 2048 MB P mirror.p2 C State: up Subdisks: 1 Size: 2048 MB P mirror.p3 C State: up Subdisks: 1 Size: 2048 MB S mirror.p0.s0 State: up PO: 0 B Size: 2048 MB S mirror.p1.s0 State: up PO: 0 B Size: 2048 MB S mirror.p2.s0 State: up PO: 0 B Size: 2048 MB S mirror.p3.s0 State: up PO: 0 B Size: 2048 MB .Ed .Pp この例では (今回は .Fl f フラグを付けています)、 .Ic create の再実行により 4 個の新規プレックスを作成し、 それぞれが新規サブディスクを持ちます。 他のボリュームを追加したい場合、これらのための新規設定ファイルを作成します。 .Nm が既に知っているドライブを参照する必要はありません。 例えば、ボリューム .Pa raid を 4 個のディスク .Pa /dev/da1e , .Pa /dev/da2e , .Pa /dev/da3e , .Pa /dev/da4e 上に作成するには、他の 2 個についてのみ記述するだけで良いです: .Bd -literal -offset indent drive d3 device /dev/da1e drive d4 device /dev/da4e volume raid plex org raid5 433k sd size 2g drive d1 sd size 2g drive d2 sd size 2g drive d3 sd size 2g drive d4 .Ed .Pp この設定ファイルでは、次のようになります: .Bd -literal # vinum create newconfig Configuration summary Drives: 4 (4 configured) Volumes: 2 (4 configured) Plexes: 5 (8 configured) Subdisks: 8 (16 configured) D d1 State: up Device /dev/da2e Avail: 51176/57320 MB (89%) D d2 State: up Device /dev/da3e Avail: 53220/57320 MB (89%) D d3 State: up Device /dev/da1e Avail: 53224/57320 MB (92%) D d4 State: up Device /dev/da4e Avail: 53224/57320 MB (92%) V mirror State: down Plexes: 4 Size: 2048 MB V raid State: down Plexes: 1 Size: 6144 MB P mirror.p0 C State: init Subdisks: 1 Size: 2048 MB P mirror.p1 C State: init Subdisks: 1 Size: 2048 MB P mirror.p2 C State: init Subdisks: 1 Size: 2048 MB P mirror.p3 C State: init Subdisks: 1 Size: 2048 MB P raid.p0 R5 State: init Subdisks: 4 Size: 6144 MB S mirror.p0.s0 State: up PO: 0 B Size: 2048 MB S mirror.p1.s0 State: up PO: 0 B Size: 2048 MB S mirror.p2.s0 State: up PO: 0 B Size: 2048 MB S mirror.p3.s0 State: up PO: 0 B Size: 2048 MB S raid.p0.s0 State: empty PO: 0 B Size: 2048 MB S raid.p0.s1 State: empty PO: 433 kB Size: 2048 MB S raid.p0.s2 State: empty PO: 866 kB Size: 2048 MB S raid.p0.s3 State: empty PO: 1299 kB Size: 2048 MB .Ed .Pp RAID-5 プレックスの大きさに注意してください: 6 GB しかありませんが、 これを構成するためにディスク空間を 8 GB 使用しています。 これは、サブディスク 1 個分相当をパリティデータ格納に使用しているからです。 .Ss Vinum の再起動 システムのリブート時に、 .Ic start コマンドで .Nm を起動します: .Pp .Dl "# vinum start" .Pp これにより、システム中の全 .Nm ドライブが起動します。 なんらかの理由で一部のドライブのみを起動したい場合、 .Ic read コマンドを使用してください。 .Ss 性能関連 最高性能の RAID アレイ設定に関する、多くの誤った考えが存在しています。 特に、ほとんどのシステムで使用しているストライプの大きさは、小さ過ぎます。 以降の議論は、 .Nm だけでなく、全 RAID システムにあてはまります。 .Pp .Fx のブロック I/O システムは、.5 kB から 128 kB までの要求を発行します; .\" mix = workload mix ? 典型的なミックスでは、ほぼ 8 kB です。 どんなストライピングシステムにおいても、 ある要求が 2 個の物理要求に分割されることを避けることはできませんし、 ストライプを十分細かくするならばより多くに分割されてしまいます。 これにより、甚大な性能劣化となります: ディスクあたりの転送時間の削減は、 より大きなオーダで増加するレイテンシによって相殺されてしまいます。 .Pp 最近のディスクの大きさと .Fx のブロック I/O システムでは、 ストライプの大きさを 256 kB から 512 kB にすると、 適度に少数な要求に分割されることを期待できます; 正しい RAID の実装では、 大きなディスクでのストライプの大きさを 2 または 4 MB に増さない 明確な理由はありません。 .Pp ストライプサイズを選択するときには、 最新の UFS ファイルシステムのシリンダグループの大きさは 32 MB であることを 認識していてください。 ストライプサイズとディスク数が共に 2 の累乗の場合、 すべてのスーパブロックと inode が同一のサブディスクに置かれる可能性があります。 これは、性能に重大な影響を与えます。 代りに奇数、例えば 479 kB を選択してください。 .Pp 複数アクセスシステムでの転送のインパクトを考えるためのもっとも容易な方法は、 潜在的なボトルネック、すなわちディスクサブシステムの観点から見ることです: つまり、転送に要するディスク時間の総計はいくらか?です。 ほとんどすべてがキャッシュされているので、 要求と完了との時間的な関係はそれほど重要ではありません: 重要なパラメータは、要求がディスクを活動状態にする総時間であり、 この間ディスクは他の転送ができなくなります。 この結果、転送が同時に発生しても違う時に発生しても、 実際には問題とはなりません。 実際的には、我々が見ている時間は、レイテンシの総和 (位置決定時間と回転遅延、 言い替えるとデータがディスクヘッド下に来るまでの時間) と総転送時間です。 同じ速度のディスクへの転送においては、 転送時間は転送の大きさの合計のみに依存します。 .Pp 24 kB の典型的なニュースの記事やウェブページを考えると、 これは 1 回の I/O で読み込めます。 ディスクが転送レート 6 MB/s で平均位置決定時間 8 ms であり、 ファイルシステムを 4 kB ブロックであるとします。 24 kB ですから、断片化を考慮する必要はなく、 ファイルは 4 kB 境界から開始します。 必要な転送回数はブロック開始位置に依存します: 式は (S + F - 1) / S となり、 S はファイルシステムブロック数でのストライプの大きさ、 F はファイルシステムブロック数でのファイルの大きさです。 .Bl -enum .It ストライプの大きさは 4 kB。転送回数は 6 回。 サブシステムの負荷: レイテンシ 48 ms、転送 2 ms、合計 50 ms。 .It ストライプの大きさは 8 kB。転送回数は 3.5 回。 サブシステムの負荷: レイテンシ 28 ms、転送 2 ms、合計 30 ms。 .It ストライプの大きさは 16 kB。転送回数は 2.25 回。 サブシステムの負荷: レイテンシ 18 ms、転送 2 ms、合計 20 ms。 .It ストライプの大きさは 256 kB。平均転送回数は 1.08 回。 サブシステムの負荷: レイテンシ 8.6 ms、転送 2 ms、合計 10.6 ms。 .It ストライプの大きさは 4 MB。平均転送回数は 1.0009 回。 サブシステムの負荷: レイテンシ 8.01 ms、転送 2 ms、合計 10.01 ms。 .El .Pp ハードウェア RAID システムによっては、 大きなストライプでは問題があるものがあるようです: このようなシステムでは完全なストライプを常にディスクとの間で転送するようで、 大きなストライプは性能に逆効果となります。 .Nm ユーティリティではこの問題の被害を受けません: すべてのディスク転送を最適化し、不要なデータを転送しないからです。 .Pp 良く知られたベンチマークプログラムで真の複数アクセス状態 (100 を越える同時ユーザ) をテストするものはないので、 この主張の正しさを証明することは困難であることに注意してください。 .Pp これらのことを考えると、次の事項が .Nm ボリュームの性能に影響します: .Bl -bullet .It ストライピングは、複数アクセスのみの性能を向上します。 各要求が違うディスク上にある確率が増加するからです。 .It 複数ドライブにまたがるコンカチネート化 UFS ファイルシステムもまた、 複数ファイルアクセスの性能を向上します。 UFS は、ファイルシステムをシリンダグループに分割し、 ファイルを単一のシリンダグループに置こうとするからです。 一般的に、ストライピングほどは効果がありません。 .It ミラーリングは、読み込み複数アクセスの性能を向上可能です。 デフォルトでは .Nm は、連続する複数の読み込みを、 連続する複数のプレックスに対して発行するからです。 .It ミラーリングは、複数アクセスか単一アクセスかに関わらず、 すべての書き込みの性能を劣化させます。 両方のプレックスに対し、データを書き込む必要があるからです。 これが、前述のミラーリング設定におけるサブディスクのレイアウトの説明です: 各プレックス中の対応するサブディスクが別の物理ディスクにある場合、 書き込みコマンドは並列に発行可能です。 しかし、同じ物理ディスクにある場合、逐次的に実行されてしまいます。 .It RAID-5 の読み込みは、 ストライプ化の読み込みと本質的に同じ考慮すべき点があります。 ただし、ストライプ化プレックスがミラー化ボリュームの一部である場合を除きます。 この場合、ミラー化ボリュームの方が性能が良くなります。 .It RAID-5 の書き込みは、ストライプ化の書き込みの約 25% の速度です: 書き込みを行うには、 .Nm はまずデータブロックと対応するパリティブロックを読み込み、 いくばくかの計算を行い、 パリティブロックとデータブロックを書き戻す必要がありますので、 ストライプ化プレックスに対する書き込みの 4 倍の転送回数となります。 一方、これはミラーリングのコストにより相殺されますので、 単一 RAID-5 プレックスのボリュームへの書き込みは、 2 個のストライプ化プレックスからなる正しく設定されたボリュームへの 書き込み速度の半分となります。 .It .Nm の設定が変わると (例えば、オブジェクトの追加や削除、またはオブジェクトの状態変更)、 .Nm は 128 kB までの更新された設定を各ドライブに書き込みます。 ドライブ数が増加すると、この時間が長くなります。 .El .Ss Vinum ボリューム上にファイルシステムを作成する .Nm ボリューム上にファイルシステムを作成する前に .Xr disklabel 8 を実行する必要はありません。 .Xr newfs 8 だけを実行してください。 .Fl v オプションを使用して、 デバイスがパーティションに分割されないようにしてください。 例えば、ボリューム .Pa mirror 上にファイルシステムを作成するには、次のコマンドを入力します: .Pp .Dl "# newfs -v /dev/vinum/mirror" .Pp .Nm の設定に関係する数個のその他のことがらがあります: .Bl -bullet .It 複数のドライブを単一ディスク上に作成しても、利益はありません。 各ドライブは 131.5 kB のデータをラベルと設定情報に使用し、 設定変更時に性能が劣化します。 適切な大きさのサブディスクを使用してください。 .It コンカチネート化 .Nm プレックスの大きさを増すことはできますが、 現在のところストライプ化プレックスと RAID-5 プレックスでは増せません。 現在のところ既存の UFS ファイルシステムの大きさを増すこともできません。 プレックスおよびファイルシステムを拡張可能とする計画はあります。 .El .Sh 状態管理 (STATE MANAGEMENT) Vinum オブジェクトは .Em state の概念を持ちます。 詳細は .Xr vinum 4 を参照して下さい。もしそれらの状態が .Em up なら、それらは完全にアクセス可能なだけです。 オブジェクトの状態を .Em up に変更するには .Ic start コマンドを使います。オブジェクトの状態を .Em down に変更するには .Ic stop コマンドを使います。 通常、他の状態はオブジェクト間の関係によって自動的に作られます。 例えば、もしあなたがボリュームにプレックスを追加したら、プレックスの サブディスクは、ハードウェアがアクセス可能であるけれども、サブディスク上の データは不正であることを示す .Em empty 状態に設定されるでしょう。この状態の結果として、プレックスは .Em faulty 状態に設定されるでしょう。 .Ss `reviving' 状態 多くの場合、あなたがサブディスクを起動する時に、システムはサブディスクに データをコピーしなければなりません。 サブディスクの大きさによりますが、これは長い時間かかります。この間、 サブディスクは .Em reviving 状態に設定されます。コピー操作が正しく終了すれば、それは自動的に .Em up 状態に設定されます。 プロセスが、回復 (revive) を停止させ、そして再開させることがあります。 システムはサブディスクの回復の進み具合を保持し、そして .Ic start コマンドが再発行された時、その時点からコピーを再開します。 .Pp ボリュームのプレックスが一つ以上が回復している間はボリュームの整合性を 保つために、 .Nm は書き込む場所まで回復させたサブディスクに書きます。もし読みとる領域が すでに回復しているならば、プレックスから読み出すことができます。 .Sh 分かりにくい仕様 (GOTCHAS) 次の事柄はバグではありませんし、存在する理由があるのですが、 混乱を引き起こすものです。 各項目は適切な節において議論されています。 .Bl -enum .It .Nm ドライブは .Ux ディスクパーティションであり、パーティションタイプ .Em vinum であることが必要です。 これは、パーティションタイプが .Em 4.2BSD であることを期待する ccd とは異なります。 この .Nm ccd の動作は、自分の足元をすくうことになります: .Nm ccd では、容易にファイルシステムを上書きできてしまいます。 .Nm ユーティリティではそのようなことは許しません。 .Pp 同様の理由で、 .Nm Ic start コマンドは、パーティション .Dq Li c 上のドライブを受け付けません。 パーティション .Dq Li c は、ディスク全体を表現するためにシステムが使用し、タイプ .Em unused である必要があります。 ここには明確な矛盾があるので、 .Dq Li c パーティションを使用しないことにより .Nm は問題を解決しています。 .It 複数のプレックスからなるボリューム作成時に、 .Nm はプレックスを自動的には初期化しません。 これは、内容については分からなくても、 これらの間には確かに一貫性がないということを意味しています。 その結果デフォルトでは、 新規作成されたプレックスのうち最初のものを除いたすべての状態を、 .Nm は .Em faulty (誤り) 状態に設定します。 これらを最初のプレックスと同期させるには、 これらのサブディスクを .Ic start させる必要があります。 これにより、 .Em up 状態のプレックスから .Nm にデータをコピーさせます。 関係するサブディスクの大きさに依存して、必要な時間は長くなり得ます。 .Pp 実際上は、プレックス作成時にその内容に多大な興味を持つ人はいないので、 他のボリュームマネージャはどんなときでも .Em up に設定して騙します。 .Nm ユーティリティは、新規作成されたプレックスが .Em up 状態であることを保証するために、2 つの方法を提供します: .Bl -bullet .It プレックスを作成し、それらを .Nm Ic start で同期します。 .It キーワード .Cm setupstate 付きでボリューム (プレックスではありません) を作成します。 このキーワードは、矛盾が存在しても無視してプレックスの状態を .Em up 状態にするように、 .Nm に指示します。 .El .It 現在 .Nm がサポートしているコマンドには、実際には不要なものがあります。 私には理解できない理由があるのでしょうが、 .Ic label および .Ic resetconfig のコマンドを使おうとするユーザをしばしば見掛けます。特に .Ic resetconfig は、あらゆる種類の恐しいメッセージを表示するにもかかわらずです。 正当な理由無しに、これらのコマンドを使わないでください。 .It 状態遷移には非常に分り難いものがあります。 事実、これがバグであるのか仕様であるのかは明かではありません。 .Em reborn サブディスクなどの、奇妙な状態になったオブジェクトを起動できない場合には、 .Ic stop または .Ic stop Fl f のコマンドを使用して、まず .Em stopped 状態に遷移させてください。 これが上手くいけば、オブジェクトを起動できるはずです。 簡単な方法では上手くいかなくて、これが唯一の回復手段である場合、 その状況を報告してください。 .It カーネルモジュールを .Fl D Ns Dv VINUMDEBUG オプション付きで構築した場合、 .Nm もまた .Fl D Ns Dv VINUMDEBUG オプション付きで構築する必要があります。 なぜなら、両方のコンポーネントで使用されるデータオブジェクトに、 大きさが本オプションに依存しているものがあるからです。 前記のようにしないと、対応するエラーメッセージを表示してコマンドが失敗します。 .It .Nm Ic read コマンドの文法は、吐き気を催すものです。 これが唯一の .Nm 起動のためのコマンドでしたが、今の好ましい方法は .Nm Ic start です。 .Nm Ic read は整備のみに使用すべきです。 -文法が変更されたので、引き数が +文法が変更されたので、引数が .Pa /dev/da0 のようなディスクスライスであり .Pa /dev/da0e のようなパーティションではないことに注意してください。 .El .\"XXX.Sh BUGS .Sh 関連ファイル .Bl -tag -width /dev/vinum/control -compact .It Pa /dev/vinum .Nm オブジェクトのデバイスノードがあるディレクトリ .It Pa /dev/vinum/control .Nm の制御デバイス .It Pa /dev/vinum/plex .Nm プレックスのデバイスノードがあるディレクトリ .It Pa /dev/vinum/sd .Nm サブディスクのデバイスノードがあるディレクトリ .El .Sh 環境変数 .Bl -tag -width VINUM_DATEFORMAT .It VINUM_HISTORY ログファイルの名前です。デフォルトでは /var/log/vinum_history です。 .It VINUM_DATEFORMAT ログファイル中の日付の書式です。デフォルトは %e %b %Y %H:%M:%S です。 .It EDITOR 設定ファイルの編集に使用するエディタの名前です。デフォルトは .Nm vi です。 .El .Sh 関連項目 .Xr strftime 3 , .Xr vinum 4 , .Xr disklabel 8 , .Xr newfs 8 .Pp .Pa http://www.vinumvm.org/vinum/ , .Pa http://www.vinumvm.org/vinum/how-to-debug.html . .Sh 作者 .An Greg Lehey Aq grog@lemis.com .Sh 歴史 .Nm ユーティリティは .Fx 3.0 から登場しました。 .Nm の RAID-5 コンポーネントは、 NetMAX 製品のために Cybernet Inc.\& .Pq Pa www.cybernet.com が開発しました。 diff --git a/ja_JP.eucJP/man/man9/acl.9 b/ja_JP.eucJP/man/man9/acl.9 index 71099463e3..c6ee892704 100644 --- a/ja_JP.eucJP/man/man9/acl.9 +++ b/ja_JP.eucJP/man/man9/acl.9 @@ -1,212 +1,212 @@ .\"- .\" Copyright (c) 1999-2001 Robert N. M. Watson .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" %FreeBSD: src/share/man/man9/acl.9,v 1.12 2002/12/12 17:25:58 ru Exp\ % .\" .\" $FreeBSD$ .Dd December 23, 1999 .Os .Dt ACL 9 .Sh 名称 .Nm acl .Nd 仮想ファイルシステムアクセス制御リスト .Sh 書式 .In sys/param.h .In sys/vnode.h .In sys/acl.h .Pp カーネルコンフィギュレーションファイルの中に、 .Cd "options UFS_ACL" .Sh 解説 アクセス制御リスト、すなわち ACL は、 ファイルおよびディレクトリを表現する vnode に対する権限を、 きめ細かく指定可能とします。 しかしながら、 異なる ACL のセマンティクスを持つファイルシステムが過多にあるため、 vnode インタフェースは ACL の文法のみを理解し、基礎をなすファイルシステムが 細部を実装することを当てにしています。 基礎をなすファイルシステムに依存して、個々のファイルまたはディレクトリは、 関連付けられる 0 個以上の ACL を持つことが可能です。 それぞれ ACL の名前は、適切な vnode ACL 呼び出し .Xr VOP_ACLCHECK 9 , .Xr VOP_GETACL 9 および .Xr VOP_SETACL 9 の .Fa type フィールドを使用して指定されます。 .Pp 現在は、個々の ACL は以下に定義されるカーネル内で固定サイズの .Vt acl 構造体によって表現されます。 .Bd -literal -offset indent struct acl { int acl_cnt; struct acl_entry acl_entry[ACL_MAX_ENTRIES]; }; .Ed .Pp ACL は、ACL エントリの固定サイズ配列で構成されます。 各 ACL エントリは、 パーミッションの組、主要な名前空間、主要な識別子から構成されます。 .Pp 個別の ACL エントリは、以下のメンバを持つ構造体の .Vt acl_entry_t 型です。 .Bl -tag -width 2n .It Vt acl_tag_t Va ae_tag 以下は .Va ae_tag に設定されるべき ACL の型の定義のリストです。 .Pp .Bl -tag -width ".Dv ACL_UNDEFINED_FIELD" -offset indent -compact .It Dv ACL_UNDEFINED_FIELD 未定義の ACL 型。 .It Dv ACL_USER_OBJ 実効ユーザ ID がファイルの所有者のユーザ ID と 一致するプロセスのための任意のアクセス権。 .It Dv ACL_USER 実効ユーザ ID が ACL エントリの権限と 一致するプロセスのための任意のアクセス権。 .It Dv ACL_GROUP_OBJ 実効グループ ID または全ての追加のグループがファイルの所有者のグループ ID と 一致するプロセスのための任意のアクセス権。 .It Dv ACL_GROUP 実効グループ ID または全ての追加のグループが ACL エントリの権限と 一致するプロセスのための任意のアクセス権。 .It Dv ACL_MASK ファイルグループクラスの中のプロセスが許可されることができる 任意のアクセス権の最高限度。 .It Dv ACL_OTHER その他の ACL エントリによって保護されていない プロセスのための任意のアクセス権。 .It Dv ACL_OTHER_OBJ .Dv ACL_OTHER と同じです。 各々の ACL エントリは、厳密に、1 つの .Dv ACL_USER_OBJ と 1 つの .Dv ACL_GROUP_OBJ と 1 つの .Dv ACL_OTHER を含まなければなりません。 .Dv ACL_USER , .Dv ACL_GROUP または .Dv ACL_OTHER が存在する場合には、厳密に 1 つの .Dv ACL_MASK エントリが存在するべきです。 .El .It Vt uid_t Va ae_id -この ACL がアクセスパーミションを記述しているユーザのユーザ ID。 +この ACL がアクセスパーミッションを記述しているユーザのユーザ ID。 .It Vt acl_perm_t Va ae_perm このフィールドは、この ACL に適合するプロセスが関連したファイルの アクセスのために、どの種類のアクセスかを定義します。 .Bl -tag -width ".Dv ACL_POSIX1E_BITS" .It Dv ACL_EXECUTE プロセスは関連したファイルの実行が可能です。 .It Dv ACL_WRITE プロセスは関連したファイルへの書込みが可能です。 .It Dv ACL_READ プロセスは関連したファイルからの読込みが可能です。 .It Dv ACL_PERM_NONE -プロセスは関連したファイルへの読込み、書込みまたは実行のパーミションを +プロセスは関連したファイルへの読込み、書込みまたは実行のパーミッションを 所有していません。 .El .El .Pp .Sh 実装に関する注 .Bd -literal typedef mode_t *acl_permset_t; /* 内部の ACL 構造体 */ struct acl { int acl_cnt; struct acl_entry acl_entry[ACL_MAX_ENTRIES]; }; /* 外部の ACL 構造体 */ struct acl_t_struct { struct acl ats_acl; int ats_cur_entry; }; typedef struct acl_t_struct *acl_t; /* * ae_tag フィールドに有効な値 */ #define ACL_UNDEFINED_TAG 0x00000000 #define ACL_USER_OBJ 0x00000001 #define ACL_USER 0x00000002 #define ACL_GROUP_OBJ 0x00000004 #define ACL_GROUP 0x00000008 #define ACL_MASK 0x00000010 #define ACL_OTHER 0x00000020 #define ACL_OTHER_OBJ ACL_OTHER /* * acl_type_t 引数のために有効な値 */ #define ACL_TYPE_ACCESS 0x00000000 #define ACL_TYPE_DEFAULT 0x00000001 #define ACL_TYPE_AFS 0x00000002 #define ACL_TYPE_CODA 0x00000003 #define ACL_TYPE_NTFS 0x00000004 #define ACL_TYPE_NWFS 0x00000005 /* * ae_perm フィールドに可能なフラグ */ #define ACL_EXECUTE 0x0001 #define ACL_WRITE 0x0002 #define ACL_READ 0x0004 #define ACL_PERM_NONE 0x0000 #define ACL_PERM_BITS (ACL_EXECUTE | ACL_WRITE | ACL_READ) #define ACL_POSIX1E_BITS (ACL_EXECUTE | ACL_WRITE | ACL_READ) /* * acl_get_entry() のための entry_id に可能な値 */ #define ACL_FIRST_ENTRY 0 #define ACL_NEXT_ENTRY 1 /* * ae_id フィールドの中の未定義の値 */ #define ACL_UNDEFINED_ID ((uid_t)-1) .Ed .Sh 関連項目 .Xr acl 3 , .Xr vaccess_acl_posix1e 9 , .Xr VFS 9 , .Xr vaccess 9 , .Xr VOP_ACLCHECK 9 , .Xr VOP_GETACL 9 , .Xr VOP_SETACL 9 .Sh 作者 このマニュアルページは .An Robert Watson が書きました。 diff --git a/ja_JP.eucJP/man/man9/malloc.9 b/ja_JP.eucJP/man/man9/malloc.9 index b22d299a2e..a964bd5b60 100644 --- a/ja_JP.eucJP/man/man9/malloc.9 +++ b/ja_JP.eucJP/man/man9/malloc.9 @@ -1,274 +1,274 @@ .\" Copyright (c) 1996 The NetBSD Foundation, Inc. .\" All rights reserved. .\" .\" This code is derived from software contributed to The NetBSD Foundation .\" by Paul Kranenburg. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the NetBSD .\" Foundation, Inc. and its contributors. .\" 4. Neither the name of The NetBSD Foundation nor the names of its .\" contributors may be used to endorse or promote products derived .\" from this software without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS .\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED .\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR .\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE .\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR .\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF .\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS .\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN .\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" .\" $NetBSD: malloc.9,v 1.3 1996/11/11 00:05:11 lukem Exp $ .\" %FreeBSD: src/share/man/man9/malloc.9,v 1.23 2002/03/18 10:52:09 ru Exp % ,\" $FreeBSD$ .\" .Dd June 16, 1996 .Dt MALLOC 9 .Os .Sh 名称 .Nm malloc , .Nm MALLOC , .Nm free , .Nm FREE .Nd カーネルメモリマネージメントルーチン .Sh 書式 .In sys/types.h .In sys/malloc.h .Ft void * .Fn malloc "unsigned long size" "struct malloc_type *type" "int flags" .Fn MALLOC "space" "cast" "unsigned long size" "struct malloc_type *type" "int flags" .Ft void .Fn free "void *addr" "struct malloc_type *type" .Fn FREE "void *addr" "struct malloc_type *type" .Ft void * .Fn realloc "void *addr" "unsigned long size" "struct malloc_type *type" "int flags" .Ft void * .Fn reallocf "void *addr" "unsigned long size" "struct malloc_type *type" "int flags" .Sh 解説 .Fn malloc 関数はカーネルアドレス空間の初期化されていないメモリを .Fa size で指定された大きさの 1 つのオブジェクトとして割り当てます。 .Pp .Fn free は .Fn malloc で先に割り当てられていた .Fa addr のアドレスのメモリを再使用するために解放します。 メモリは 0 にクリアされません。 .Fa addr が .Dv NULL の場合、 .Fn free は何もしません。 .Pp .Fn realloc 関数は、以前に割り当てられて .Fa addr で参照されるメモリの大きさを .Fa size バイトに変更します。 メモリの内容は、新サイズと旧サイズの小さい方までは、無変更となります。 戻り値は .Fa addr と違うかもしれないことに注意してください。 要求されたメモリが割り当て不能の場合、 .Dv NULL が返され、 .Fa addr で参照されるメモリは正当で無変更のままとなります。 .Fa addr が .Dv NULL の場合、 .Fn realloc 関数は指定された大きさの .Fn malloc と同等に振舞います。 .Pp .Fn reallocf 関数は .Fn realloc とまったく同じですが、 要求されたメモリを割り当て不能の場合に 渡されたポインタのメモリを解放する点が違います。 .Pp マクロ版の .Fn MALLOC は機能的には .Bd -literal -offset indent (space) = (cast)malloc((u_long)(size), type, flags) .Ed .Pp と同等で、 マクロ版 .Fn FREE は .Bd -literal -offset indent free((addr), type) .Ed .Pp と同等です。 標準Cライブラリの同義関数 .Pq Xr malloc 3 -とは異なり、カーネルバージョンは更に 2 つの引き数をとります。 -引き数 +とは異なり、カーネルバージョンは更に 2 つの引数をとります。 +引数 .Fa flags は .Fn malloc の操作上の特性を以下のようにみなします。 .Bl -tag -width indent .It Dv M_ZERO 割り当てられたメモリが全て 0 で満たされるようにします。 .It Dv M_NOWAIT リソースの不足のため直ちに要求を満たすことができない場合は、 .Fn malloc , .Fn realloc , および .Fn reallocf が .Dv NULL を返すようにします。 通常は、 他のプロセスによるリソースの解放を待つためにスリープ状態にされます。 このフラグがセットされていれば、 .Fn malloc はブロックせずに .Dv NULL を返します。 .Dv M_WAITOK が 0 に定義されていることに注意してください。 これはブロッキング操作がデフォルトだということです。 割り込みコンテキストでの動作時には .Dv M_NOWAIT が必要であることにも注意してください。 .It Dv M_WAITOK リソースを待つことが可能(OK)であることを示します。 都合の悪いことに 0 と定義されているので、直接この値に対して比較したり、 フラグとして論理積(AND)をとったりしないように注意されなければなりません。 デフォルトの操作はメモリの割り当てが成功するまでブロックします。 .Dv M_NOWAIT が指定されると .Fn malloc , .Fn realloc , .Fn reallocf は単に .Dv NULL を返すことが出来ます。 .It Dv M_USE_RESERVE 要求されたメモリを獲得するために、 システムがリザーブ領域を使ってよいことを示します。 このオプションは以前は M_KERNEL と呼ばれていましたが、 より明示的に改名されました。 このオプションは軽視されていて、カーネルから徐々に削除されています。 そのため、新たなプログラミングでは使用されない様にするべきです。 .El .Pp -引き数 +引数 .Fa type はメモリの利用方法の統計をとるためと、 簡単なサニティチェックのために使われています。 この統計は .Sq vmstat -m で調べることが出来ます。 .Pp .Fa type は .Fn MALLOC_DECLARE と .Fn MALLOC_DEFINE マクロを通じて .Va malloc_type_t typedef を使用して定義されます。 .Bd -literal -offset indent /* sys/something/foo_extern.h */ MALLOC_DECLARE(M_FOOBUF); /* sys/something/foo_main.c */ MALLOC_DEFINE(M_FOOBUF, "foobuffers", "Buffers to foo data into the ether"); /* sys/something/foo_subr.c */ \&... MALLOC(buf, struct foo_buf *, sizeof *buf, M_FOOBUF, M_NOWAIT); .Ed .Sh 戻り値 .Fn malloc , .Fn realloc , .Fn reallocf はすべてのタイプのオブジェクトの格納に適切なように整列された カーネル仮想アドレスを返すか、 または要求が満足できず (すなわち .Dv M_NOWAIT がセットされていることを意味します) に .Dv NULL を返します。 .Sh 実装に関する注 1 ページまでの要求に対し、 メモリアロケータは、2 の累乗の大きさの量を割り当てます。 より大きな要求に対しては、1 個以上のページが割り当てられます。 この動作に依存してはなりませんが、 この情報がメモリ使用効率の最適化に有用かもしれません。 .Sh 関連項目 .Xr vmstat 8 .Sh 診断 .Dv DIAGNOSTIC コンフィギュレーションオプションを付けてコンパイルされたカーネルは、 割り当てられた領域以外への書き込みや .Fn malloc 関数と .Fn free 関数の不均衡な呼び出しなどにより生じたメモリ不正の検出を試みます。 一貫性チェックの失敗はパニックまたはシステムコンソールメッセージを出力します。 .Bl -bullet -offset indent -compact .Pp .It panic: .Dq malloc: bogus type .It panic: .Dq malloc: allocation too large .It panic: .Dq malloc: wrong bucket .It panic: .Dq malloc: lost data .It panic: .Dq free: address 0x%x out of range .It panic: .Dq free: type %d out of range .It panic: .Dq free: unaligned addr Aq description of object .It panic: .Dq free: item modified .It panic: .Dq free: multiple free[s] .It .Dq Data modified on freelist: Aq description of object .El diff --git a/ja_JP.eucJP/man/man9/spl.9 b/ja_JP.eucJP/man/man9/spl.9 index 188fe0c4d5..be109c05ea 100644 --- a/ja_JP.eucJP/man/man9/spl.9 +++ b/ja_JP.eucJP/man/man9/spl.9 @@ -1,211 +1,211 @@ .\" .\" Copyright (c) 1996 Joerg Wunsch .\" .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" .\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR .\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES .\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. .\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT, .\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT .\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, .\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY .\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" .\" %FreeBSD: src/share/man/man9/spl.9,v 1.17 2002/07/01 22:08:43 imp Exp % .\" $FreeBSD$ .\" .Dd July 21, 1996 .Os .Dt SPL 9 .Sh 名称 .Nm splbio , .Nm splclock , .Nm splhigh , .Nm splimp , .Nm splnet , .Nm splsoftclock , .Nm splsofttty , .Nm splstatclock , .Nm spltty , .Nm splvm , .Nm spl0 , .Nm splx .Nd 割り込み優先度の操作 .Sh 書式 .In sys/types.h .In sys/systm.h .Ft intrmask_t .Fn splbio "void" .Ft intrmask_t .Fn splclock "void" .Ft intrmask_t .Fn splhigh "void" .Ft intrmask_t .Fn splimp "void" .Ft intrmask_t .Fn splnet "void" .Ft intrmask_t .Fn splsoftclock "void" .Ft intrmask_t .Fn splsofttty "void" .Ft intrmask_t .Fn splstatclock "void" .Ft intrmask_t .Fn spltty "void" .Ft void .Fn spl0 "void" .Ft void .Fn splx "intrmask_t ipl" .Sh 解説 .Bf -symbolic この API は推奨されていません。 データ構造を保護するためには、代わりに mutex を使用します。 詳細情報は .Xr mutex 9 を参照してください。 .Ef .Pp .Fn spl 関数ファミリは CPU の割り込み優先度の .Dq レベル を設定します。 これはブロックされた優先度レベルの割り込みハンドラの実行を抑制します。 割り込みハンドラによって調査あるいは修正されたであろうデータ領域を 調査あるいは修正するドライバの .Dq synchronous 部分(ユーザプロセスを代表して実行される部分)で使用されます。 .Pp 通常それぞれの割り込みを使用するドライバは、 config ファイルのキーワードによって 1 つの 割り込み優先度グループに割り当てられます。 例えば、 .Bd -literal -offset indent device foo0 at isa? port 0x0815 irq 12 tty .Ed .Pp は、割り込み 12 を .Dq tty 優先度グループに割り当てます。 システムは自動的に .Em xxx グループの割り込みを優先度が .Ns spl Ns Em xxx \&() 以上の時に呼ばれるように準備します。 .Pp .Fn splx 関数は割り込み優先度レベルを絶対的な数値に設定します。 これは別の割り込みレベル関数が返した値をローカルの変数に保存して、 後で元の優先度レベルに戻すために .Fn splx を使用する事を意図しています。 .Pp .Fn spl0 関数は全ての割り込みハンドラをブロックしない値に優先度を減少させます。 ただし、AST(非同期システムトラップ)はシステムが ユーザモードに戻るまでの間はブロックされます。 .Pp いろいろなデバイスドライバの割り込み優先度グループの伝統的な割り当ては、 おおよそ次のように分類できます。 .Bl -tag -width Fn .It Fn splnet ネットワークインタフェースドライバのソフトウェア部分。 .It Fn splimp -全てのネットワークインターフェイスドライバ。 +全てのネットワークインタフェースドライバ。 .It Fn splbio 全ての .Em バッファ入出力 (つまりディスクなど)のドライバ。 .It Fn spltty 基本的にはネットワーク以外の通信デバイスですが、 事実上はネットワークとディスク以外の全てのドライバ。 .El .Sh 戻り値 .Fn splx および .Fn spl0 以外の全ての関数は、操作前の優先度の値を返します。 .Sh 使用例 以下は、標準的な使用例です。 .Bd -literal struct foo_softc { ... int flags; #define FOO_ASLEEP 1 #define FOO_READY 2 } foo_softc[NFOO]; int foowrite(...) { struct foo_softc *sc; int s, error; ... s = spltty(); if (!(sc->flags & FOO_READY)) { /* 準備ができていません、待機しなければなりません */ sc->flags |= FOO_ASLEEP; error = tsleep(sc, PZERO, "foordy", 0); sc->flags &= ~FOO_ASLEEP; } sc->flags &= ~FOO_READY; splx(s); ... } void foointr(...) { struct foo_softc *sc; ... sc->flags |= FOO_READY; if (sc->flags & FOO_ASLEEP) /* 誰かが我々を待っています、起こしてください */ wakeup(sc); ... } .Ed 割り込みハンドラは .Em 絶対に 優先度レベルを減少させるべきではない、ということに注意してください。 自動的に、自分のレベルの割り込み優先度に増加させられます。 すなわち、同じグループの全ての割り込みはブロックされます。 .Sh 歴史 割り込み優先度レベルは早期のバージョンの .Ux で登場しました。 伝統的には名前ではなく数字が使われていて、そのレベルまでの全てを含んで (優先度 5 はレベル 5 までの全てをブロックします)いた事が知られています。 これは .Fx にはあてはまりません。 伝統的な名前 .Ql level はいまだに文字 .Ql l としてそれぞれの関数や変数の名前に反映されています。 しかし、実際にはもはやレベルではなく、 むしろ異なった(部分的に含まれた)関数群がシステムのある期間ブロックされます。 歴史的な番号による方法は単純で順番通りの 割り込み優先度レベルグループであるとみなす事ができます。 .Sh 作者 このマニュアルページは .An J\(:org Wunsch が書きました。