diff --git a/ja_JP.eucJP/man/man1/bsdtar.1 b/ja_JP.eucJP/man/man1/bsdtar.1 index f0ac6a8ed9..bc2448df4d 100644 --- a/ja_JP.eucJP/man/man1/bsdtar.1 +++ b/ja_JP.eucJP/man/man1/bsdtar.1 @@ -1,659 +1,668 @@ .\" Copyright (c) 2003 Tim Kientzle .\" 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/usr.bin/tar/bsdtar.1,v 1.20.2.2 2005/02/25 05:14:42 kientzle Exp % .\" .\" $FreeBSD$ .Dd April 13, 2004 .Dt BSDTAR 1 .Os .Sh 名称 .Nm tar .Nd テープアーカイブを操作する .Sh 書式 .Nm .Op Ar bundled-flags Ao args Ac .Op Ao Ar file Ac | Ao Ar pattern Ac ... .Nm .Brq Fl c .Op Ar options .Op Ar files | directories .Nm .Brq Fl r | Fl u .Fl f Ar archive-file .Op Ar options .Op Ar files | directories .Nm .Brq Fl t | Fl x .Op Ar options .Op Ar patterns .Sh 解説 .Nm はアーカイブファイルストリームの作成と操作をします。 .Pp 最初の書式フォームでは .Dq まとめ (bundled) オプション形式を表しています。 この使用法は、これまでの実装との互換性のために提供されています。 詳細は後述の「互換性」を参照してください。 .Pp その他の書式フォームが、好ましい使用法を表しています。 .Nm への最初のオプションは、次の一覧にあるモードの指示です: .Bl -tag -compact -width indent .It Fl c 指定されたアイテムを含んだ、新しいアーカイブを作成します。 .It Fl r .Fl c と似ていますが、新しいエントリはアーカイブに追加されます。 -なおこれは通常ファイルの非圧縮アーカイブに対してのみ動作します。 +なおこれは通常ファイルに保存された非圧縮アーカイブに対してのみ +動作することに注意してください。 .Fl f オプションが必要です。 .It Fl t 標準出力にアーカイブ内容のリストを出力します。 .It Fl u .Fl r と似ていますが、新しいエントリの変更時刻が、アーカイブ内の対応するエントリ のものよりも新しい場合のみ、追加されます。 -なおこれは通常ファイルの非圧縮アーカイブに対してのみ動作します。 +なおこれは通常ファイルに保存された非圧縮アーカイブに対してのみ +動作することに注意してください。 .Fl f オプションが必要です。 .It Fl x アーカイブからディスクに展開します。 -もし同名のファイルがアーカイブ内に 2 回以上現れた場合、それぞれのコピーが +もし同名のファイルがアーカイブ内に複数回現れた場合、それぞれのコピーが 展開され、後のものがそれ以前のコピーを上書き (置換) します。 .El .Pp .Fl c , .Fl r , .Fl u モードにおいて、指定されたファイルまたはディレクトリは、コマンドラインで 指定された順にアーカイブに追加されます。 デフォルトでは、各ディレクトリ内のファイルもアーカイブされます。 .Pp -展開またはリストモードにおいて、アーカイブをオープンする前に +展開またはリストモードでは、アーカイブをオープンする前に コマンドライン全体が読み込まれ、解析されます。 コマンドラインのパス名またはパターンは、アーカイブ内の処理対象となる アイテムを示します。 パターンはシェル形式のグロブパターンであり、XXXX に文書化されています。 .Sh オプション 明記していないオプションは、全ての操作モードに適用可能です。 .Bl -tag -width indent .It Cm @ Ns Pa archive (c および r モードのみ) 指定されたアーカイブがオープンされ、そのエントリが現在の アーカイブに追加されます。 簡単な例として、 .Dl Nm Fl c Fl f Pa - Pa newfile Cm @ Ns Pa original.tar ではファイル .Pa newfile と、 .Pa original.tar の全てのエントリを含む、新しいアーカイブを標準出力に書き出します。 対照的に、 .Dl Nm Fl c Fl f Pa - Pa newfile Pa original.tar では、二つのエントリのみの新しいアーカイブを作成します。 また、 .Dl Nm Fl czf Pa - Fl -format Cm pax Cm @ Ns Pa - では標準入力からアーカイブを読み込み (フォーマットは自動的に判別)、 gzip で圧縮した pax フォーマットアーカイブに変換して、標準出力に出力します。 このように、 .Nm -はアーカイブのフォーマットを別のものに変換する為に使うことが出来ます。 +はアーカイブのフォーマットを別のものに変換するために使用できます。 .It Fl b Ar blocksize テープドライブの I/O に対するブロックサイズを、512 バイトレコード単位で 指定します。 -一般に、本引数はテープドライブに読み書きする時、デフォルトブロックサイズで -ありごく一般的な 20 レコード (10240 バイト) を用いない場合のみに必要となります。 +一般に、本引数はテープドライブに読み書きする場合にのみ必要であり、 +たとえその場合であってもデフォルトのブロックサイズである +20 レコード (10240 バイト) はとても普遍的な値であるので、 +通常必要ありません。 .It Fl C Ar directory -c および r モードにおいて、続くファイルを追加する前に、ディレクトリを +c および r モードにおいては、続くファイルを追加する前に、ディレクトリを 変更します。 x モードにおいては、アーカイブをオープンした後、エントリをアーカイブから 展開する前にディレクトリを変更します。 .It Fl -check-links ( Fl W Cm check-links ) (c および r モードのみ) 各ファイルへのすべてのリンクがアーカイブされないなら、 警告メッセージを発行します。 .It Fl -exclude Ar pattern ( Fl W Cm exclude Ns = Ns Ar pattern ) 指定したパターンにマッチするファイルやディレクトリを、処理しません。 -なおこれはコマンドラインで指定したパターンやファイル名よりも優先します。 +なおこれはコマンドラインで指定したパターンやファイル名よりも +優先することに注意してください。 .It Fl -format Ar format ( Fl W Cm format Ns = Ns Ar format ) (c モードのみ) 作成するアーカイブのフォーマットを指定するのに用います。 サポートされるフォーマットには、 .Dq cpio , .Dq pax , .Dq shar , .Dq ustar があります。 また他のフォーマットもサポートされているかもしれません。 現在サポートされているフォーマットの詳細な情報については、 .Xr libarchive-formats 5 を参照してください。 .It Fl f Ar file -指定されたファイルを、読み書きするアーカイブにします。 +指定されたファイルに対してアーカイブを読んだり書いたりします。 ファイル名を .Pa - にすれば、標準入力または標準出力になります。 指定しない場合、デフォルトのテープデバイスが使用されます (FreeBSD の場合、デフォルトのテープデバイスは .Pa /dev/sa0 ) 。 .It Fl -fast-read ( Fl W Cm fast-read ) (x および t モードのみ) 各パターンまたはファイル名オペランドにマッチするエントリのうち、 最初のアーカイブエントリだけを展開またはリスト表示します。 各パターンまたはファイル名にマッチすれば、すぐに終了します。 同名のエントリが複数存在でき、また慣習として後のエントリがそれ以前のエントリを -上書きする為に、デフォルトではアーカイブは常に最後まで読み込まれます。 -本オプションは性能の最適化の為に提供されています。 +上書きするため、デフォルトではアーカイブは常に最後まで読み込まれます。 +本オプションは性能の最適化のために提供されています。 .It Fl H (c および r モードのみ) コマンドラインで指定されたシンボリックリンクを追跡します。 リンク自身ではなく、リンクの対象をアーカイブします。 .It Fl h (c および r モードのみ) .Fl L と同じ意味です。 .It Fl -include Ar pattern ( Fl W Cm include Ns = Ns Ar pattern ) 指定したパターンにマッチしたファイルまたはディレクトリのみ処理します。 なおこの指定よりも、 .Fl -exclude -による指定が優先します。 -これを明示しなければ、デフォルトで全てのエントリが処理されます。 +による除外指定が優先することに注意してください。 +これを明示しなければ、デフォルトでは全てのエントリが処理されます。 この .Fl -include オプションは、アーカイブをフィルタリングするのに特に有用です。 例として、次のコマンド .Dl Nm Fl c Fl f Pa new.tar Fl -include='*foo*' Cm @ Ns Pa old.tgz では、 .Pa old.tgz のエントリのうち、文字列 .Sq foo を含んでいるものだけを含む、新しいアーカイブ .Pa new.tar を作成します。 .It Fl j (c モードのみ) 作成するアーカイブを .Xr bzip2 1 で圧縮します。 展開またはリストモードでは、本オプションは無視されます。 なお他の .Nm tar 実装と異なり、本実装ではアーカイブを読み込む際には、bzip2 圧縮を -自動的に判別します。 +自動的に判別することに注意してください。 .It Fl k (x モードのみ) 既存のファイルを上書きしません。 -特に、アーカイブ内に 2 回以上現れるファイルであっても、後のコピーが +特に、アーカイブ内にあるファイルが複数回現れても、後のコピーが それ以前のコピーを上書きすることはしません。 .It Fl L (c および r モードのみ) 全てのシンボリックリンクを追跡します。 通常、シンボリックリンクはそのままアーカイブされます。 本オプションにより、リンクの対象が代わりにアーカイブされます。 .It Fl l .Ev POSIXLY_CORRECT が環境で指定されるなら、これは .Fl -check-links オプションのための同義語です。 さもなければ、エラーが表示されます。 GNU tar と互換性のある振舞いを希望するユーザは代わりに .Fl -one-file-system オプションを使用するべきです。 .It Fl m (x モードのみ) ファイル更新時刻を展開しません。 デフォルトでは、更新時刻はアーカイブに納められている時刻に設定されます。 .It Fl n (c, r, u モードのみ) ディレクトリ内のファイルを再帰的にアーカイブしません。 .It Fl -nodump ( Fl W Cm nodump ) (c および r モードのみ) -nodump ファイルフラグの立ったファイルをスキップします。 +nodump ファイルフラグを尊重して、このファイルをスキップします。 .It Fl O (x, t モードのみ) 展開 (-x) モードでは、ファイルはディスクに展開されずに標準出力に 書き込まれます。 リスト (-t) モードでは、ファイルリストは通常の標準出力でなく標準エラーに 書き込まれます。 .It Fl o (x モードのみ) -ユーザとグループを、アーカイブが指定したものではなく、 +ユーザとグループを、アーカイブ中で指定されたものではなく、 本プログラムを実行しているユーザのものを使用します。 なおこれは .Fl p -を指定しないと意味がありません。 -また本プログラムを root ユーザが実行している必要があります。 +を指定し、かつ本プログラムを root ユーザが実行していなければ +意味がないことに注意してください。 この場合、ファイルモードとフラグはアーカイブからリストアされますが、 -ACL や所有者の情報は破棄されます。 +アーカイブ中の ACL や所有者の情報は破棄されます。 .It Fl P パス名を保持します。 デフォルトでは、アーカイブの作成と展開の両方において、絶対パス名 (/ 文字で 始まっているもの) の最初のスラッシュは取り除かれます。 また .Nm は、パス名に .Pa .. -を含んでいたり、対象ディレクトリをシンボリックリンクで変更する -アーカイブエントリを展開するのを拒否します。 -本オプションはこの振舞いを抑制します。 +を含んでいたり、対象ディレクトリをシンボリックリンクで変更したりする +アーカイブエントリの展開を拒否します。 +本オプションはこれらの振舞いを抑制します。 .It Fl p (x モードのみ) ファイルパーミッションを保持します。 -アーカイブから各アイテムを展開する際、可能ならば、所有者、ファイルモード、 +アーカイブから各アイテムを展開する際、もしあれば、所有者、ファイルモード、 ファイルのフラグと ACL を含む、全てのパーミッションをリストアしようとします。 デフォルトでは、新規作成するファイルの所有者は .Nm を実行するユーザとなり、新規作成する通常ファイルに関してはファイルモードが -リストアされ、またこれら以外のタイプのエントリはデフォルトのパーミッションに +リストアされ、これら以外のタイプのエントリはデフォルトのパーミッションに なります。 もし .Nm を root が実行した場合、 .Fl o オプションを指定しない限り、デフォルトで所有者がリストアされます。 .It Fl T Ar filename (c モードのみ) アーカイブすべきファイル名を .Pa filename から読み込みます。 ファイル名は改行で区切られます。 特別な名前である .Dq -C により、カレントディレクトリをその次の行で指定されたディレクトリに変更します。 .It Fl U (x モードのみ) ファイルを作成する前に、いったん削除します。 -本オプション無しでは、 +本オプションなしでは、 .Nm は既存のファイルを上書きし、既存のハードリンクを保持します。 本オプションにより、既存のハードリンクは破棄され、同様に、 展開されるファイルの場所に影響を及ぼすシンボリックリンクも破棄されます。 .It Fl v 冗長な出力を表示します。 作成及び展開モードにおいて、 .Nm はアーカイブに書き込み、またはアーカイブから読み出した各ファイルの名前を +そのまま リスト表示します。 リストモードにおいて、 .Nm は .Xr ls 1 に似た出力を表示します。 .Fl v -オプションを追加することで、付加的な説明を表示します。 +オプションを追加することで、より詳細に表示します。 .It Fl W Ar longopt=value ロングオプション .Pf ( Fl - -が先行する) +が先頭につく) は、 .Xr getopt_long 3 関数が用意されているシステムでのみ、直接サポートされます。 この関数をサポートしないシステムでは、本 .Fl W -オプションを介して、ロングオプションを使うことが出来ます。 +オプションを介して、ロングオプションを使用できます。 .It Fl w あらゆる操作に対し、確認を求めます。 .It Fl X Ar filename 指定されたファイルから除外パターンのリストを読み込みます。 除外の取り扱いに関する情報については .Fl -exclude を参照してください。 .It Fl y (c モードのみ) 作成するアーカイブを .Xr bzip2 1 で圧縮します。 展開またはリストモードでは、本オプションは無視されます。 なお他の .Nm tar 実装と異なり、本実装ではアーカイブを読み込む際には、bzip2 圧縮を -自動的に判別します。 +自動的に判別することに注意してください。 .It Fl z (c モードのみ) 作成するアーカイブを .Xr gzip 1 で圧縮します。 展開またはリストモードでは、本オプションは無視されます。 なお他の .Nm tar 実装と異なり、本実装ではアーカイブを読み込む際には、gzip 圧縮を -自動的に判別します。 +自動的に判別することに注意してください。 .El .Sh 環境変数 次の環境変数が、 .Nm の実行に関係します: .Bl -tag -width ".Ev BLOCKSIZE" .It Ev LANG 使用するロケール。 詳細は .Xr environ 7 -を参照。 +を参照してください。 .It Ev POSIXLY_CORRECT この環境変数が定義されると、 .Fl l オプションは .St -p1003.1-96 に従って解釈されます。 .It Ev TAPE デフォルトテープデバイス。 .Fl f -オプションはこれを無視します。 +オプションはこれを上書きします。 .It Ev TZ 日付を表示する際に使用するタイムゾーン。 詳細は .Xr environ 7 -を参照。 +を参照してください。 .El .Sh 関連ファイル .Bl -tag -width ".Ev BLOCKSIZE" .It Pa /dev/sa0 .Ev TAPE 環境変数か .Fl f -オプションで無視されないなら、 +オプションで上書きされない限り、 デフォルトのテープデバイスです。 .El .Sh 終了ステータス .Ex -std .Sh 使用例 二つのファイル .Ar source.c と .Ar source.h を含む新しいアーカイブ .Ar file.tar を作成します: .Dl Nm Fl czf Pa file.tar Pa source.c Pa source.h .Pp アーカイブの詳細な内容一覧を表示します: .Dl Nm Fl tvf Pa file.tar .Pp デフォルトのテープドライブにあるアーカイブの、全てのエントリを展開します: .Dl Nm Fl x .Pp 作成モードにおいて、アーカイブされるファイルとディレクトリのリストには、 .Cm -C Ns Pa foo/baz -の形式でディレクトリの変更命令を取り込むことが出来ます。 +の形式でディレクトリの変更命令を取り込めます。 また .Cm @ Ns Pa archive-file -の形式でアーカイブのエントリを取り込むことも出来ます。 +の形式でアーカイブのエントリを取り込むこともできます。 例えば、次のコマンドライン .Dl Nm Fl c Fl f Pa new.tar Pa foo1 Cm @ Ns Pa old.tgz Cm -C Ns Pa /tmp Pa foo2 では、新しいアーカイブ .Pa new.tar を作成します。 .Nm はカレントディレクトリからファイル .Pa foo1 を読み込み、出力するアーカイブに追加します。 次に .Pa old.tgz の各エントリを読み込み、これらのエントリを、出力するアーカイブに追加します。 最後にディレクトリを .Pa /tmp に変更し、 .Pa foo2 を出力するアーカイブに追加します。 .Sh 互換性 まとめオプション形式は、これまでの実装との互換性のためにサポートされています。 これには、各文字がオプションである頭文字 (- 文字で始まらない) が存在します。 -引数は別々の単語で続きます。 -この引数の順序はまとめオプション文字内の、対応する頭文字の順序と一致している +引数は別々の単語として続きます。 +この引数の順序はまとめオプション文字内の、対応する文字の順序と一致している 必要があります。 例えば .Dl Nm Cm tbf 32 Pa file.tar では、三つのフラグ .Cm t , .Cm b , および .Cm f を指定しています。 .Cm b と .Cm f フラグは、共に引数が必要ですので、二つの追加アイテムがコマンドラインに 必要です。 .Ar 32 は .Cm b フラグに対する引数であり、また .Ar file.tar は .Cm f フラグに対する引数です。 .Pp モードオプションの c, r, t, u, x、およびオプションの -b, f, l, m, o, v, w は、SUSv2 に準じています。 +b, f, l, m, o, v, w は、SUSv2 に適合しています。 .Pp 移植性を最大限にするために、 .Nm tar を実行するスクリプトは、上記のまとめオプション形式を使うべきであり、 モードオプションは .Cm c , .Cm t , .Cm x に、またオプションは .Cm b , .Cm f , .Cm m , .Cm v , .Cm w -に制限するべきです。 +に限定するべきです。 .Pp getopt_long() をサポートするシステムでは、他の tar 実装との互換性を 増すために、ロングオプションが使用できます。 .Sh セキュリティ 確実なセキュリティは、 .Nm を含む沢山のアーカイブプログラムに共通の課題です。 -特に、細工されたアーカイブは +特に、注意深く細工されたアーカイブは .Nm に対して、対象とするディレクトリ以外の場所にファイルを展開するように -要求することが出来ます。 -これは不注意なユーザに対し、上書きするつもりの無いファイルを -上書きさせるのに使うことが潜在的に可能です。 +要求できます。 +これは不注意なユーザに対し、上書きするつもりのないファイルを +上書きさせられる可能性があります。 アーカイブをスーパユーザが展開している場合は、システム上の -あらゆるファイルが上書きされる潜在的な可能性があります。 +あらゆるファイルが上書きさせられる可能性があります。 これを引き起こす、三つの手段があります。 .Nm -はそれらに対する防御機構を備えていますが、情報通のユーザならば、 -それらについて知っておくべきでしょう: +はそれぞれに対する防御機構を備えていますが、情報通のユーザならば、 +それらの意味するところを知っておくべきでしょう: .Bl -bullet -width indent .It -アーカイブのエントリは、絶対パス名を持つことが出来ます。 +アーカイブのエントリは、絶対パス名を持つことができます。 デフォルトでは、 .Nm -はこの問題に対する防御策として、これをリストアする前にファイル名の先頭にある +はこの問題に対する防御策として、これらをリストアする前にファイル名の先頭にある .Pa / 文字を取り除きます。 .It アーカイブのエントリは、 .Pa .. -を含むパス名を持つことが出来ます。 +を含むパス名を持てます。 デフォルトでは、 .Nm はパス名に .Pa .. を含んでいるファイルを展開しません。 .It アーカイブのエントリでは、ファイルを別のディレクトリにリストアするように、 -シンボリックリンクを悪用することが出来ます。 -アーカイブは別のディレクトリを指すシンボリックリンクをリストアすることが出来、 +シンボリックリンクを悪用できます。 +アーカイブは別のディレクトリを指すシンボリックリンクをリストアすることができ、 このリンクを使ってファイルをそのディレクトリにリストアします。 -これを防ぐため、.Nm では毎回、展開されるパスにシンボリックリンクが +これを防ぐため、 +.Nm +では毎回、展開されるパスにシンボリックリンクが 含まれるかどうかを調べます。 もしパスの最後の要素が シンボリックリンクであれば、そのシンボリックリンクは削除され、 アーカイブの内容に置き換えられます。 .Fl U が指定されていれば、展開されるパスの中間に存在する シンボリックリンクも、すべて無条件に削除されます。 もし .Fl U も .Fl P も指定しなければ、 .Nm はこのようなエントリを展開するのを拒否します。 .El あなた自身を守るため、信用できない出処からのアーカイブには気をつけるべきです。 アーカイブを展開する前に、 .Dl Nm Fl tf Pa filename としてアーカイブの内容を調べるべきです。 .Nm -が既存のファイルを上書きしないことを保証するには +に .Fl k -オプションを使うべきですし、既存のファイルを消去させるには +オプションをつけて既存のファイルを上書きしないことを保証させるか、 .Fl U -オプションを使うべきです。 +オプションをつけて既存のファイルを削除させるべきです。 一般に、スーパユーザ権限にある時は、アーカイブを展開するべきではありません。 なお .Fl P オプションにより、 .Nm は上に述べたセキュリティチェックを行わないようになり、絶対パスや .Pa .. を含むファイル、及び他のディレクトリへのシンボリックリンクを -展開できるようになります。 +展開できるようになることに注意してください。 .Sh 関連項目 .Xr bzip2 1 , .Xr cpio 1 , .Xr gzip 1 , .Xr mt 1 , .Xr pax 1 , .Xr shar 1 , .Xr libarchive 3 , .Xr libarchive-formats 5 , .Xr tar 5 .Sh 規格 現在、tar コマンドに対する POSIX 標準はありません。 .St -p1003.1-96 にはありましたが、 .St -p1003.1-2001 -では無くなりました。 -本実装で使用できるオプションは、古い tar の POSIX 仕様、現在の -pax の POSIX 仕様はもちろん、現存するいくつかの tar 実装を調査して +ではなくなりました。 +本実装で使用できるオプションは、現存するいくつかの tar 実装と同様、 +tar の古い POSIX 仕様、pax の現在の POSIX 仕様を調査して 開発されました。 .Pp ustar と pax 間のファイルフォーマット変換については、pax コマンドの .St -p1003.1-2001 にて定義されています。 .Sh 歴史 .Nm tar -コマンドは Seventh Edition Unix から登場しました。 -他の多数の実装があり、その多くはファイルフォーマットを拡張しています。 +コマンドは Seventh Edition Unix で登場しました。 +他に多数の実装があり、その多くはファイルフォーマットを拡張しています。 John Gilmore によるパブリックドメイン実装の .Nm pdtar (1987 年 11 月頃) は多大な影響を及ぼし、GNU tar の元になりました。 -FreeBSD 1.0 より、GNU tar は FreeBSD 基本システムの tar として +FreeBSD が 1.0 より始まった時に、GNU tar は FreeBSD 基本システムの tar として 取り込まれました。 .Pp 本ソフトウェアは .Xr libarchive 3 ライブラリをベースにした、完全な再実装です。 .Sh バグ POSIX と GNU は .Fl l オプションの意味について強く意見を異にしています。 一方の振舞いを期待して他方の結果を得るといった災害の可能性があるため、 この実装では、 .Fl l オプションは故意に壊してあります。 .\" because of = 〜のために、〜のせいで .Pp .Fl C Pa dir -オプションは、歴代の実装とは異なっているかも知れません。 +オプションは、歴史的な実装とは異なっているでしょう。 .Pp 全てのアーカイブ出力は、出力を圧縮していても、正しいサイズのブロックで 書き出されます。 最後の出力ブロックがブロックサイズの大きさにパディングされるかどうかは、 フォーマットと出力デバイスによって変わります。 tar と cpio フォーマットにおいて、出力が標準出力、キャラクタ型デバイス、 もしくはテープドライブのようなブロック型デバイスの場合、 出力の最後のブロックはブロックサイズの大きさにパディングされます。 出力を通常ファイルに書き込む場合、最後のブロックはパディングされません。 .Xr gzip 1 や .Xr bzip2 1 を含む多数の圧縮ソフトウェアは、 .Nm で作成されたアーカイブを復元する時、このヌルパディングについて文句を言いますが 展開は正常に行えます。 .Pp 圧縮と復元機能は内部で実装されているので、 .Dl Nm Fl czf Pa - file により作成した圧縮出力と、 .Dl Nm Fl cf Pa - file | Nm gzip -により作成した圧縮出力には、些細ですが違いがあります。 +により作成した圧縮出力には、些細な違いがあるかもしれません。 .Pp デフォルトでは標準の I/O パスでアーカイブを読み書きするべきですが、 -伝統的に (および POSIX では) 他のものを要求します。 +伝統的に (および POSIX では) 他のものを規定しています。 .Pp .Cm r および .Cm u モードでは、アーカイブは非圧縮でディスク上に通常ファイルとして存在する 必要があります。 -他のアーカイブは +そうではないアーカイブは .Cm c モードと .Pa @archive-file -拡張を用いて更新することが出来ます。 +拡張を用いて更新できます。 .Pp .Pa @foo や .Pa -foo といった名前のファイルをアーカイブするには、それぞれ .Pa ./@foo や .Pa ./-foo という形式で指定する必要があります。 .Pp 作成モードにおいて、先頭にある .Pa ./ は常に削除されます。 先頭にある .Pa / は、 .Fl P オプションが指定されない限り、取り除かれます。 .Pp 作成及び展開における、ファイル選択のよりよいサポートが必要です。 .Pp マルチボリュームアーカイブ、および疎なファイルに対するサポートはまだありません。 .Pp -異なるアーカイブフォーマット (tar と cpio など) を +似ていないアーカイブフォーマット間 (tar と cpio など) で .Cm @ Ns Pa - により変換すると、ハードリンク情報が失われます -(これは異なるアーカイブフォーマットでハードリンク情報を格納していることからくる +(これは異なるアーカイブフォーマットでハードリンク情報を +互換性のない形で格納していることからくる 当然の結果です)。 .Pp 故意にドキュメント化していない、多くのショートオプションの代わりになる ロングオプションがあります。 diff --git a/ja_JP.eucJP/man/man1/find.1 b/ja_JP.eucJP/man/man1/find.1 index cdd5576b2a..12180024d3 100644 --- a/ja_JP.eucJP/man/man1/find.1 +++ b/ja_JP.eucJP/man/man1/find.1 @@ -1,937 +1,937 @@ .\" Copyright (c) 1990, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" This code is derived from software contributed to Berkeley by .\" the Institute of Electrical and Electronics Engineers, Inc. .\" .\" 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. .\" .\" @(#)find.1 8.7 (Berkeley) 5/9/95 .\" %FreeBSD: src/usr.bin/find/find.1,v 1.70.2.1 2005/02/26 13:44:04 brueffer Exp % .\" .\" $FreeBSD$ .Dd July 29, 2004 .Dt FIND 1 .Os .Sh 名称 .Nm find .Nd ディレクトリツリーを再帰的に下ってファイルを捜す .Sh 書式 .Nm .Op Fl H | Fl L | Fl P .Op Fl EXdsx .Op Fl f Ar pathname .Op Ar pathname ... .Ar expression .Sh 解説 .Nm ユーティリティは、 .Ar pathname に対してディレクトリツリーを再帰的に下って、 ツリー上の各ファイルについて .Ar expression (後に示す .Dq プライマリ と .Dq 演算子 から構成されます) で指定された処理を実行します。 .Pp オプションとしては以下のものがあります: .Bl -tag -width indent .It Fl E .Ic -regex および .Ic -iregex のオプションの後の正規表現を、 基本正規表現 (BRE) の代りに拡張 (最近の) 正規表現として解釈します。 .Xr re_format 7 マニュアルページは、両方のフォーマットを完全に解説しています。 .It Fl H コマンド行で指定したシンボリックリンクそれぞれに対する ファイル情報とファイルタイプ ( .Xr stat 2 参照) は、シンボリックリンク自体ではなく、 リンク先のファイルのものとなるようにします。 もしリンク先のファイルがなければ、 シンボリックリンク自体のものを使用します。 コマンド行で直接指定されたのではない シンボリックリンクのファイル情報は、 シンボリックリンク自体のものを使用します。 .It Fl L シンボリックリンクそれぞれに対する ファイル情報とファイルタイプ ( .Xr stat 2 参照) は、シンボリックリンク自体ではなく、 リンク先のファイルのものとなるようにします。 もしリンク先のファイルがなければ、 シンボリックリンク自体のものを使用します。 .Pp このオプションは、もはや推奨されない .Ic -follow プライマリと等価です。 .It Fl P シンボリックリンクそれぞれに対する ファイル情報とファイルタイプ ( .Xr stat 2 参照) は、シンボリックリンク自体のものとなるようにします。 これがデフォルトです。 .It Fl X .Xr xargs 1 と組み合わせた際に .Nm を安全に使えるようにします。 .Xr xargs 1 がデリミタ文字として扱う文字がファイル名に含まれる場合、 診断メッセージを標準エラー出力に表示して、 そのファイルをスキップします。 デリミタ文字は、 クォート .Pq Dq Li " ' " 、ダブルクォート .Pq Dq Li " \*q " 、バックスラッシュ .Pq Dq Li \e 、スペース、タブ、改行文字があります。 .Pp 効果的な代案として、 .Fl print0 プライマリを .Dq Nm xargs Fl 0 と共に使用することを検討すると良いかもしれません。 .It Fl d ファイルに対する処理順序を深さ優先の探索方式にします。 すなわち、ディレクトリ自体に 対する処理を行う前に、ディレクトリ内の個々のファイルに対して処理を 実行します。デフォルトでは、ディレクトリは最初に処理されます。 デフォルトの方式は幅優先探索方式では .Em ない ことに注意して下さい。 .Pp このオプションは .St -p1003.1-2001 の .Ic -depth プライマリと等価です。 .Fl d は、 .Nm を .Xr cpio 1 とともに使用する場合、 .Xr cpio 1 が通常でないパーミッションを持つディレクトリに存在する ファイルを処理する際に有益です。 このオプションにより、ファイルをディレクトリに置いている間は 書き込み許可が保持され、その後、最後にディレクトリのパーミッションが 設定されることが保証されます。 .It Fl f .Nm が探索するファイル階層を指定します。 ファイル階層は、本オプションの直後にオペランドとして続けて 指定することもできます。 .It Fl s .Nm がファイル階層を探索する際に、 辞書編集上の順に、すなわち各ディレクトリ内においてアルファベット順に、 辿らせるようにします。 注: .Ql find -s と .Ql "find | sort" とは異なった結果となる場合があります。 .It Fl x ディレクトリツリーを下って行くとき、下り始めのファイルが存在する デバイスのデバイス番号と異なるデバイス番号を持つディレクトリには 下らないようにします。 .Pp このオプションは、廃止された .Ic -xdev プライマリと同等のものです。 .El .Sh プライマリ .Bl -tag -width indent .It Ic -acl 他のオプションと組み合わせて、 拡張 ACL 属性を持つファイルの場所を示します。 これ以上の情報については .Xr acl 3 を参照してください。 .It Ic -amin Ar n 最後にファイルがアクセスされた時刻と、 .Nm を起動した時刻との差 (1 分単位で切り上げます) が .Ar n 分であれば、真とします。 .It Ic -anewer Ar file .Ic -neweram と同じです。 .It Ic -atime Ar n Ns Op Cm smhdw 単位を指定しない場合、 最後にファイルがアクセスされた時刻と、 .Nm を起動した時刻との差 (24 時間単位で切り上げます) が .Ar n 日であれば、真とします。 .Pp 単位を指定する場合、最後にファイルがアクセスされた時刻と、 .Nm を起動した時刻との差が正確に .Ar n 単位であれば、真とします。 可能な時間の単位は次の通りです: .Pp .Bl -tag -width indent -compact .It Cm s 秒 .It Cm m 分 (60 秒) .It Cm h 時間 (60 分) .It Cm d 日 (24 時間) .It Cm w 週 (7 日) .El .Pp いくつもの単位を組み合わせて 1 個の .Ic -atime 引数に使用可能であり、例えば .Dq Li "-atime -1h30m" とできます。 単位指定は、 .Cm + または .Cm - の修正子と組み合わせた場合のみ、おそらく有用でしょう。 .It Ic -cmin Ar n 最後にファイルのステータスが修正された時刻と、 .Nm を起動した時刻との差 (1 分単位で切り上げます) が .Ar n 分であれば、真とします。 .It Ic -cnewer Ar file .Ic -newercm と同じです。 .It Ic -ctime Ar n Ns Op Cm smhdw 単位を指定しない場合、最後にファイルのステータスが変更された時刻と、 .Nm を起動した時刻の差 (24 時間単位で切り上げます) が .Ar n 日であれば、真とします。 .Pp 単位を指定する場合、最後にファイルのステータスが変更された時刻と、 .Nm を起動した時刻との差が正確に .Ar n 単位であれば、真とします。 サポートされている時間の単位については、 .Ic -atime プライマリの記述を参照してください。 .It Ic -delete 見付けたファイルやディレクトリを消去します。常に真を返します。 現在の作業ディレクトリから .Nm は再帰的にディレクトリツリーを下ります。 セキュリティ上の理由から、 .Dq Pa \&. からの相対パス名に .Dq Pa / 文字を含むファイル名のファイルを 消去しようとはしません。 このオプションにより暗黙のうちに深さ優先の処理が指定されます。 .It Ic -depth 常に真です。 .Fl d オプションと同じです。 .It Ic -depth Ar n 探索の出発点からの深さが .Ar n である場合、真となります。 .It Ic -empty 現在のファイルまたはディレクトリが空の場合、真となります。 .It Ic -exec Ar utility Oo Ar argument ... Oc Li \&; .Ar utility で指定した名前のプログラムを実行し、終了コードが 0 の場合、真とします。 .Ar argument は、utility への引数として渡されます。 この指定は、最後に必ずセミコロン .Pq Dq Li \&; をつけてください。 .Nm をシェルから起動する場合、 そのシェルがセミコロンを制御オペレータと解釈する場合には、 セミコロンをクォートする必要があるかもしれません。 utility もしくは argument の指定 のなかで .Dq Li {} が使われていた場合は、その部分が、現在 .Nm が対象としているファイルのパス名に置き換えられます。 ただし、 .Ar utility が実行されるときのカレントディレクトリは、 .Nm が起動されたディレクトリのままです。 .Ar utility と .Ar arguments は、シェルのパターンと構造の更なる展開対象とはなりません。 .It Ic -exec Ar utility Oo Ar argument ... Oc Li {} + .Ic -exec と同じですが、各 .Ar utility の起動において .Dq Li {} はなるべく多くのパス名と置き換えられます。 この動作は .Xr xargs 1 のものに似ています。 .It Ic -execdir Ar utility Oo Ar argument ... Oc Li \&; .Ic -execdir プライマリは .Ic -exec プライマリと同様ですが、 .Ar utility が現在のファイルを持つディレクトリにおいて実行される点が異なります。 文字列 .Dq Li {} に対して置換されるファイル名は適切ではありません。 .It Ic -flags Oo Cm - Ns | Ns Cm + Oc Ns Ar flags , Ns Ar notflags フラグは、シンボル名 .Ns ( Xr chflags 1 参照) で指定します。 フラグの前に .Qq Li no を付けると .Ns ( Qq Li nodump は除きます)、 .Ar notflags と呼ばれます。 .Ar flags にあるフラグは設定されていることが検査され、 .Ar notflags にあるフラグは設定されていないことが検査されます。 これは、設定されているモードビットのみをユーザが指定可能な .Ic -perm とは異なることに注意してください。 .Pp フラグの前にダッシュ .Pq Dq Li - が付く場合、このプライマリは、ファイルのフラグビットのうち少なくとも .Ar flags 中の全ビットが設定されていて、 .Ar notflags 中のどのビットも設定されていない場合に真になります。 フラグの前にプラス .Pq Dq Li + が付く場合、このプライマリは、ファイルのフラグビットのうち .Ar flags のいずれかのビットが設定されているか、 .Ar notflags のいずれかのビットが設定されていない場合に真になります。 どちらでもない場合、このプライマリは、 .Ar flags のビットがファイルのフラグビットに完全に適合し、 .Ar flags のいずれもが .Ar notflags に適合しない場合に真になります。 .It Ic -fstype Ar type 対象ファイルが格納されているファイルシステムのタイプが、 .Ar type で指定されたものである場合に真となります。 .Xr sysctl 8 コマンドを使用して、 システム上で利用可能なファイルシステムタイプを調べることができます: .Pp .Dl "sysctl vfs" .Pp さらに、2 つの 擬似タイプ .Dq Li local と .Dq Li rdonly があります。 前者は、 .Nm を実行しているシステム上に物理的にマウントされているファイルシステムです。 後者は、読み取り専用でマウントされているファイルシステムです。 .It Ic -group Ar gname ファイルが .Ar gname で指定したグループに属している場合、真になります。 .Ar gname が数字で、そのようなグループ名がない場合は、 .Ar gname をグループ ID として扱います。 .It Ic -iname Ar pattern .Ic -name に似ていますが、大文字小文字を区別せずにマッチします。 .It Ic -inum Ar n ファイルの inode 番号が .Ar n なら、真になります。 .It Ic -ipath Ar pattern .Ic -path に似ていますが、大文字小文字を区別せずにマッチします。 .It Ic -iregex Ar pattern .Ic -regex に似ていますが、大文字小文字を区別せずにマッチします。 .It Ic -links Ar n ファイルのリンク数が .Ar n なら、真になります。 .It Ic -ls このプライマリは常に真になります。 対象となっているファイルの情報を標準出力に出力します。 出力する内容は inode 番号、 512 バイトブロックでのファイルの大きさ、 ファイルのパーミッション、ハードリンクの数、所有者、グループ、 バイトで表したファイルの大きさ、最後にファイルが修正された時刻、パス名です。 ファイルがブロック型もしくはキャラクタ型の特殊ファイルならば、 -バイトで表したファイルの大きさの代わりにメジャー番号とマイナー番号を +バイトで表したファイルの大きさの代わりにメジャー番号とマイナ番号を 出力します。 ファイルがシンボリックリンクならば、 .Dq Li -> の後にリンク先のファイルのパス名を表示します。 フォーマットは .Bk -words .Nm ls Fl dgils .Ek の出力結果と同じです。 .It Ic -maxdepth Ar n 常に真になります。 コマンド行引数の下、たかだか .Ar n ディレクトリレベルまで下ります。 .Ic -maxdepth プライマリが指定されている場合、(たとえ、通常なら評価されない場合でも) 式全体に適用されます。 .Ic -maxdepth Li 0 は、探索全体をコマンド行引数の範囲に制限します。 .It Ic -mindepth Ar n 常に真になります。 レベルが .Ar n 未満の場合、一切のテストとアクションは適用されません。 .Ic -mindepth プライマリが指定されている場合、(たとえ、通常なら評価されない場合でも) 式全体に適用されます。 .Ic -mindepth Li 1 は、コマンド行引数以外のすべてを処理します。 .It Ic -mmin Ar n 最後にファイルが修正された時刻と、 .Nm を起動した時刻との差 (1 分単位で切り上げます) が .Ar n 分であれば、真とします。 .It Ic -mnewer Ar file .Ic -newer と同じです。 .It Ic -mtime Ar n Ns Op Cm smhdw 単位を指定しない場合、最後にファイルが修正された時刻と、 .Nm を起動した時刻との差(24 時間単位で切り上げます)が .Ar n 日であれば、真とします。 .Pp 単位を指定する場合、最後にファイルが修正された時刻と、 .Nm を起動した時刻との差が正確に .Ar n 単位であれば、真とします。 サポートされている時間の単位については、 .Ic -atime プライマリの記述を参照してください。 .It Ic -name Ar pattern 対象ファイルのパス名の最後のファイル名部分が .Ar pattern で指定したものとマッチするかどうかを調べ、マッチした場合は真になります。 .Ar pattern としては、シェルで使われるパターンマッチ 指定 ( .Dq Li \&[ , .Dq Li \&] , .Dq Li * , .Dq Li \&? ) を使用することができます。 これらの文字は バックスラッシュ .Pq Dq Li \e を前において、パターンマッチ指定ではなく文字として 扱う事を明示することができます。 .It Ic -newer Ar file 対象ファイルの修正日付が、 .Ar file で指定したファイルのものより新しい場合は、真になります。 .It Ic -newer Ns Ar X Ns Ar Y Ar file 現在のファイルの最終アクセス時刻 .Ar ( X Ns = Ns Cm a ) ・ステータス修正時刻 .Ar ( X Ns = Ns Cm c ) ・内容修正時刻 .Ar ( X Ns = Ns Cm m ) が、 .Ar file の最終アクセス時刻 .Ar ( Y Ns = Ns Cm a ) ・ステータス修正時刻 .Ar ( Y Ns = Ns Cm c ) ・内容修正時刻 .Ar ( Y Ns = Ns Cm m ) より新しい場合は、真となります。 さらに .Ar Y Ns = Ns Cm t の場合、 .Ar file は代りに、 .Xr cvs 1 が理解する直接的な時刻指定として解釈されます。 .Ic -newermm は .Ic -newer と同じであることに注意してください。 .It Ic -nogroup 対象ファイルのグループが unknown の場合、真になります。 .It Ic -nouser 対象ファイルの所有者が unknown の場合、真になります。 .It Ic -ok Ar utility Oo Ar argument ... Oc Li \&; .Ic -ok プライマリは .Ic -exec とほぼ同じですが、 .Ar utility を実行するかどうかの確認をユーザに求め、端末にメッセージを出力します。 .Dq Li y 以外の返答をした場合は、 コマンドは実行されず、 .Ic -ok 式の値は偽になります。 .It Ic -okdir Ar utility Oo Ar argument ... Oc Li \&; .Ic -okdir プライマリは、 .Ic -execdir プライマリと同様ですが、 .Ic -ok プライマリのところで説明されたものと同じ例外事項が適用されます。 .It Ic -path Ar pattern 対象ファイルのパス名が、 .Ar pattern で指定したものとマッチするかどうかを調べ、 マッチした場合は真になります。 .Ar pattern としては、シェルで使われるパターンマッチ指定 .Dq ( Li \&[ , .Dq Li \&] , .Dq Li * , .Dq Li \&? ) を使用することができます。 これらの文字は バックスラッシュ .Pq Dq Li \e を前において、パターンマッチ指定ではなく文字として 明示的にマッチさせることができます。 スラッシュ .Pq Dq Li / は、通常文字として扱われますので、 明示的にマッチさせる必要はありません。 .It Ic -perm Oo Cm - Ns | Ns Cm + Oc Ns Ar mode ファイルのモードを、 .Ar mode と比較します。 .Ar mode は、シンボル 形式 ( .Xr chmod 1 参照) もしくは 8 進数形式で指定します。 .Ar mode がシンボル形式の場合は、 .Ar mode は 00000 から開始して、 プロセスのファイル生成マスクとは無関係に、 パーミッションのセットとクリアを行います。 .Ar mode が 8 進数形式の場合は、 ファイルのモードビットのうち、07777 .Pq Dv S_ISUID | S_ISGID | S_ISTXT | S_IRWXU | S_IRWXG | S_IRWXO の部分が比較対象になります。 .Ar mode の最初にダッシュ .Pq Dq Li - を指定した場合は、 .Ar mode でセットされているすべてのビットが ファイルのモードでもセットされていれば、このプライマリは真となります。 .Ar mode の最初にプラス .Pq Dq Li + を指定した場合は、 .Ar mode でセットされているビットのどれかがファイルのモードでもセットされていれば、 このプライマリは真となります。 どちらでもない場合、ファイルのモードと .Ar mode が完全に一致した場合にのみ真となります。 なお、 シンボル形式でモード指定をする場合は、最初の文字をダッシュ .Pq Dq Li - にできません。 .It Ic -print このプライマリは常に真になります。 対象となっているファイルのパス名を標準出力に出力して改行します。 .Ic -exec , -ls , -print0 , .Ic -ok のどのプライマリも指定されなかった場合は、 与えられた式 given expression は .Cm \&( Ar "given expression" Cm \&) Ic -print で置き換えられます。 .It Ic -print0 .Ic -print とほぼ同じですが、標準出力に対象となっているファイルのパス名を出力 したあと、改行ではなく、 .Tn ASCII NUL 文字 (文字コード 0) を出力します。 .It Ic -prune このプライマリは常に真になります。 対象となっているファイル配下のディレクトリに下りないようにします。 .Fl d オプションが指定されている場合は、 .Ic -prune プライマリの指定は無効になります。 .It Ic -regex Ar pattern ファイルのパス全体が、正規表現 .Ar pattern にマッチする場合、真になります。 ファイル名 .Dq Pa ./foo/xyzzy にマッチさせるには、 正規表現 .Dq Li ".*/[xyz]*" や .Dq Li ".*/foo/.*" が使えますが、 .Dq Li xyzzy や .Dq Li /foo/ は使えません。 .It Ic -size Ar n Ns Op Cm c ファイルサイズを 512 バイトのブロック単位で数えたとき (端数は切り上げ)、 .Ar n ブロックであれば真になります。 .Ar n のあとに .Cm c が指定されていた場合は、ファイルサイズが .Ar n バイト (文字) であれば真になります。 .It Ic -type Ar t ファイルタイプが .Ar t で指定されたタイプに一致すれば真になります。 タイプとして、次のような指定が可能です: .Pp .Bl -tag -width indent -compact .\" jpman project では special file を「特殊ファイル」と訳している。 .\" これにあわせて block special を「ブロックスペシャル」ではなく .\" 「ブロック特殊」とするのは違和感があるので、「ファイル」を補った。 .\" Kazuo Horikawa 1999/03/10 .It Cm b ブロック型特殊ファイル .It Cm c キャラクタ型特殊ファイル .It Cm d ディレクトリ .It Cm f 普通のファイル .It Cm l シンボリックリンク .It Cm p FIFO .It Cm s ソケット .El .It Ic -user Ar uname ファイルの所有者が、 .Ar uname で指定されたユーザと一致すれば真になります。 もし .Ar uname が数字で、そのようなユーザ名がなければ、 ユーザ ID が指定されたものとして扱います。 .El .Pp なお、数字を引数にとるプライマリは、 数字の前にプラス .Pq Dq Li + およびマイナス .Pq Dq Li - をつけることができます。 それぞれ .Dq n より大 および .Dq n より小 の意味になり、 .Dq 正確に n という意味ではなくなります。 .Sh 演算子 以下の演算子を使って、プライマリを組み合わせることができます。 演算子は優先度が下がる順番で示されています。 .Pp .Bl -tag -width "( expression )" -compact .It Cm \&( Ar expression Cm \&) もし、括弧内の .Ar expression が真なら、真になります。 .Pp .It Cm \&! Ar expression .It Cm -false Ar expression .It Cm -not Ar expression 単項否定演算子 .Pq Tn NOT です。 .Ar expression が偽なら、真となります。 .Pp .It Ar expression Cm -and Ar expression .It Ar expression expression .Cm -and 演算子は論理積 .Pq Tn AND です。 式 2 個を並置することが意味するところとして、 この演算子をわざわざ指定する必要はありません。 両方の式がともに真のとき、この式の評価が真になります。 最初の式が偽ならば、2 番目の式は評価されません。 .Pp .It Ar expression Cm -or Ar expression .Cm -or 演算子は論理和 .Pq Tn OR です。 最初の式が真か、2 番目の式が真であるとき、この式の評価が真になります。 最初の式が真ならば、2 番目の式は評価されません。 .El .Pp 演算子とプライマリのすべては .Nm の個別の引数として与える必要があります。 プライマリ自身が引数を取る場合、その引数も .Nm の個別の引数として与える必要があります。 .Sh 使用例 コマンドラインからのタイプ例です。 .Bl -tag -width indent .It Li "find / \e! -name \*q*.c\*q -print" ファイル名の終わりが .Pa .c でない全ファイルを表示します。 .It Li "find / -newer ttt -user wnj -print" .Pa ttt というファイルより新しく 所有者が .Dq wnj である全ファイルを表示します。 .It Li "find / \e! \e( -newer ttt -user wnj \e) -print" .Pa ttt というファイルより古く所有者が .Dq wnj であるという条件が成立しない、全ファイルを表示します。 .It Li "find / \e( -newer ttt -or -user wnj \e) -print" .Pa ttt というファイルより新しいか、 所有者が .Dq wnj である、全ファイルを表示します。 .It Li "find / -newerct '1 minute ago' -print" inode 修正時刻が現在から 1 分以内の全ファイルを表示します。 .It Li "find / -type f -exec echo {} \e;" ファイルすべてのリストを出力するために、 .Xr echo 1 コマンドを使います。 .It Li "find -L /usr/ports/packages -type l -delete" .Pa /usr/ports/packages にある壊れたシンボリックリンクのすべてを削除します。 .It Li "find /usr/src -name CVS -prune -o -depth +6 -print" 作業ディレクトリ .Pa /usr/src の中で、少なくとも 7 レベル以上の深さのファイルとディレクトリを 探索します。 .It Li "find /usr/src -name CVS -prune -o -mindepth 7 -print" これは 1 つ前の例と同等ではありません。 というのは、 .Ic -prune がレベル 7 以下では評価されないからです。 .El .Sh 互換性 .Ic -follow プライマリは廃止されました。 かわりに .Fl L オプションを使用して下さい。 詳しくは下記の .Sx 規格 セクションを参照して下さい。 .Sh 関連項目 .Xr chflags 1 , .Xr chmod 1 , .Xr cvs 1 , .Xr locate 1 , .Xr whereis 1 , .Xr which 1 , .Xr xargs 1 , .Xr stat 2 , .Xr acl 3 , .Xr fts 3 , .Xr getgrent 3 , .Xr getpwent 3 , .Xr strmode 3 , .Xr re_format 7 , .Xr symlink 7 .Sh 規格 .Nm ユーティリティの文法は .St -p1003.1-2001 の仕様で決められた文法のスーパセットです。 .Pp .Ic -H , .Ic -L を除く全 1 文字オプションと .\" .Ic -iname , -inum , -iregex , -print0 , -delete , -ls , .\" ja-groff-0.100_3 で整形できないためマクロ使用方法を変えています .Ic -iname , .Ic -inum , .Ic -print0 , .Ic -delete , .Ic -ls , .Ic -regex のプライマリは .St -p1003.1-2001 に対する拡張です。 .Pp 昔は .Fl d , L , x のオプションは それぞれ .Ic -depth , -follow , -xdev のプライマリを 用いて実装されていました。 これらのプライマリは常に真に評価されていました。 これらのプライマリは 探索が始まる前に効果を与える本当のグローバル変数であったので、 いくつかの合法的な expression が予期しない結果となりました。 一例として .Ic -print Cm -o Ic -depth の expression があります。 .Ic -print が常に真に評価されるため 標準の評価の順番では .Ic -depth は決して評価されないはずですが、 そうではありませんでした。 .Pp 演算子の .Cm -or は .Cm -o として実装されていました。 演算子の .Cm -and は .Cm -a として実装されていました。 .Pp 昔の実装では .Ic -exec と .Ic -ok のプライマリでは、 utility 名やその引数中において、 空白以外の文字が前後に続く .Dq Li {} を置き換えませんでした。 このバージョンでは utility 名やその引数のどの場所に .Dq Li {} が現れても 置き換えます。 .Pp .Fl E オプションは、 .Xr grep 1 および .Xr sed 1 の同等のオプションから着想を得て実装されました。 .Sh 歴史 .Nm コマンドは .At v1 ではじめて出現しました。 .Sh バグ .Nm によって使われる特殊文字は多くのシェルプログラムにとっても 特殊文字です。 特に .Dq Li * , .Dq Li \&[ , .Dq Li \&] , .Dq Li \&? , .Dq Li \&( , .Dq Li \&) , .Dq Li \&! , .Dq Li \e , .Dq Li \&; は、 シェルからエスケープされなくてはならないでしょう。 .Pp オプションとファイル名との間および ファイル名と .Ar expression との間を区切るデリミタが存在しませんので、 .Pa -xdev や .Pa \&! を指定することは難しいです。 この問題に対処するには、 .Fl f オプションを使うか、 .Xr getopt 3 で使われるオプション指定の終了記号 .Dq Fl Fl を使用します。 .Pp .Ic -delete プライマリは、ファイルシステムツリーの探索オプションを変更する 他のオプションとは十分には連係しません。 .Pp (上で記したように) .Ic -mindepth と .Ic -maxdepth プライマリは実際にはグローバルオプションです。 これらをオプションらしく見えるオプションと置き換えるべきでしょう。 diff --git a/ja_JP.eucJP/man/man1/fstat.1 b/ja_JP.eucJP/man/man1/fstat.1 index 92a9e06346..fd7fbef363 100644 --- a/ja_JP.eucJP/man/man1/fstat.1 +++ b/ja_JP.eucJP/man/man1/fstat.1 @@ -1,238 +1,238 @@ .\" Copyright (c) 1987, 1991, 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. .\" .\" @(#)fstat.1 8.3 (Berkeley) 2/25/94 .\" %FreeBSD: src/usr.bin/fstat/fstat.1,v 1.23.2.1 2005/03/17 13:26:06 phk Exp % .\" $FreeBSD$ .\" .Dd March 27, 2002 .Dt FSTAT 1 .Os .Sh 名称 .Nm fstat .Nd アクティブファイルを識別する .Sh 書式 .Nm .Op Fl fmnv .Op Fl M Ar core .Op Fl N Ar system .Op Fl p Ar pid .Op Fl u Ar user .Op Ar .Sh 解説 .Nm ユーティリティは、現在オープンされているファイルについての情報を表示します。 オープンされているファイルとは、プロセスによって明示的にオープンされている もの、ワーキングディレクトリ、ルートディレクトリ、jail ルートディレクトリ、 アクティブな実行可能テキストや、カーネルのトレースファイルなどを指します。 引数が何も与えられなければ、 .Nm はシステム中でオープンされているすべてのファイルについての情報を表示します。 .Pp 以下のオプションが利用可能です: .Bl -tag -width indent .It Fl f 表示する情報を、 .Ar filename で指定されたファイルと同じファイルシステム のものに制限します。引数が指定されていない場合は、カレントディレクトリ を含むファイルシステムのものに制限されます。たとえば、 .Pa /usr/src 以下のディレクトリでオープンされているすべてのファイルを見つけるには、 .Dq Li fstat -f /usr/src としてください。 .\" FreeBSD 2.1.0R 英語版マニュアルでは、以下で引数 core を明記していない .\" が、明らかにこれでも妥当だと考えられる。 .\" これ以降でも同様の部分がいくつか存在する。 -- jpman Sakai .\"(訳中)同様のこと確認しました。そのままにしてあります。 .\" 2.2.1R 対象(1997/05/17) Takeshi MUTOH .It Fl M Ar core 名前に関するリストから値を取り出す際、デフォルトの .Pa /dev/kmem のかわりに .Ar core を使います。 .It Fl N 指定された system から名前リストを取り出します。 デフォルトは、システムが起動してきたカーネルイメージから取り出します。 .It Fl m メモリマップされたファイルをリストに含めます。 更なる処理が必要であるため、通常はこれらは除外されています。 .It Fl n 数値フォーマットで表示を行います。マウントポイントの名前を表示する -かわりに、そのファイルシステムにおけるデバイス番号 (メジャー、マイナー) +かわりに、そのファイルシステムにおけるデバイス番号 (メジャー、マイナ) を表示します。特殊ファイルに関しては、 .Pa /dev の下のファイル名 は参照されず、特殊デバイスのデバイス番号が表示されます。また、 ファイルの属性も記号ではなく、8 進数で表示されます。 .It Fl p Ar pid 指定されたプロセス ID のプロセスによってオープンされているすべてのファイル の情報を表示します。 .It Fl u Ar user 指定されたユーザによってオープンされているすべてのファイル の情報を表示します。 .It Fl v 詳細報告モード。システムのデータ構造体を見つけるのに失敗した場合などに エラーメッセージを表示します (デフォルトでは無視します)。これらの 構造体の多くは、動的に生成されたり消去されたりするもので、 .Nm を実行中に 消えてしまう可能性があります。これは、 .Nm 実行中にも、システム の残りの部分が動いているためで、ごく普通のことですし、避けることはできません。 .It Ar 表示する情報を、指定されたファイル .Ar filename に限定します。 .El .Pp 以下のような項目が表示されます。 .Bl -tag -width MOUNT .It Li USER プロセスの所有者のユーザ名 (実効ユーザ ID のものが表示されます) .It Li CMD プロセスのコマンド名 .It Li PID プロセスID .It Li FD プロセスごとのオープンしているファイルのファイル番号、もしくは 以下の特別な名前のどれかです。 .Pp .Bd -literal -offset indent -compact jail - jail ルートディレクトリ mmap - メモリマップされたファイル root - ルートの inode text - 実行可能テキストの inode tr - カーネルトレースファイル wd - 現在のワーキングディレクトリ .Ed .Pp ファイル番号のあとにアスタリスク記号 ``*'' がある場合は、ファイルは inode ではなく、ソケットや .Tn FIFO であったり、そのファイルにエラーがあるのかもしれません。この 場合、残りの行は後ろのヘッダと一致しません。 -- 行のフォーマットは、 .Sx ソケット のところで説明します。 .It Li MOUNT .Fl n オプションが指定されていなければ、このヘッダが現れます。 マウントされているパス名は、ファイルが存在しているファイルシステムです。 .It Li DEV .Fl n が指定されると、このヘッダが現れます。ファイルが存在しているデバイス -のメジャー番号とマイナー番号です。 +のメジャー番号とマイナ番号です。 .It Li INUM ファイルの inode 番号。 .It Li MODE ファイルのモード。 .Fl n フラグが指定されない場合、モードは記号フォーマット .Xr ( strmode 3 を参照) を使用して表示されます。 そうでなければ、モードは 8 進数として表示されます。 .It Li SZ\&|DV ファイルがキャラクタデバイスファイルやブロックデバイスファイルでなけ れば、そのファイルのバイト数を表示します。デバイスファイルであって .Fl n が 指定されていなければ、その特殊ファイルの .Pa /dev における名前を表示します。 .Pa /dev になかったり、 .Fl n が指定されていたりする -と、スペシャルデバイスが参照するメジャー番号、マイナー番号を表示します。 +と、スペシャルデバイスが参照するメジャー番号、マイナ番号を表示します。 .It Li R/W このフィールドには、ファイルのアクセス属性が表示されます。 ``r'' の場合は、ファイルが読み込みのためにオープンされていることを意味します。 ``w'' の場合は、ファイルが書き込みのためにオープンされていることを意味します。 このフィールドは、ファイルシステムを読み込み専用状態に移行する際に、 それを妨げているプロセスを見つける場合に役に立ちます。 .It Li NAME .Ar filename が指定されていて、 .Fl f が指定されていなければ、この フィールドが表示され、指定されたファイルに関連する名前が表示されます。 普通、この名前は決まったものではありません。というのも、オープンされた ファイルから、ディレクトリ中のエントリへの逆のマッピングは存在しない からです。また、異なるディレクトリエントリが同じファイルを参照してい ることもある ( .Xr ln 1 を参照) ため、表示されている名前 は、プロセスがオープンした元のファイルの実際の名前と 異なっているかもしれません。 .El .Sh ソケット オープンしているファイルのフォーマットは、プロトコルのドメインに依存します。 最初のフィールドはドメイン名で、2 番目のフィールドは ソケットの型 (stream や dgramなど)、3 番目はソケットフラグのフィールド (16 進数) です。残りのフィールドはプロトコルに依存します。tcp の場合は、 tcpcb のアドレスですし、udp の場合は inpcb (ソケット pcb) のアドレスです。 UNIX ドメインソケットの場合はソケット pcb のアドレスと (もし接続すれば) 接続先 pcb のアドレスです。それ以外の場合はプロトコル番号とソケット自身 のアドレスが表示されます。 .Xr netstat 1 と重複しない範囲で、詳しく分析するのに十分な情報を表示しようとします。 .Pp たとえば、上で述べたアドレスは .Dq Li netstat -A コマンドで表示される tcp, udp, UNIX ドメインのそれぞれのアドレスです。ただし、パイプはソケットを用いて 実装されているので、パイプは接続先の UNIX ドメインストリームソケットとして 現れることに注意してください。単方向 UNIX ドメインソケットは、向き を持った矢印 (``<-'' か ``->'') として表示され、双方向 (全二重) UNIX ドメイン は二重矢印 (``<->'') として表示されます。 .Sh バグ .Nm はシステムのスナップショットをとるので、表示される情報は ほんのわずかな間しか正しくありません。 .Sh 関連項目 .Xr netstat 1 , .Xr nfsstat 1 , .Xr ps 1 , .Xr sockstat 1 , .Xr systat 1 , .Xr tcp 4 , .Xr unix 4 , .Xr iostat 8 , .Xr pstat 8 , .Xr vmstat 8 .Sh 歴史 .Nm コマンドは .Bx 4.3 tahoe から登場しました。 diff --git a/ja_JP.eucJP/man/man1/ls.1 b/ja_JP.eucJP/man/man1/ls.1 index a8036db66b..cd489e3e2d 100644 --- a/ja_JP.eucJP/man/man1/ls.1 +++ b/ja_JP.eucJP/man/man1/ls.1 @@ -1,635 +1,635 @@ .\" Copyright (c) 1980, 1990, 1991, 1993, 1994 .\" The Regents of the University of California. All rights reserved. .\" .\" This code is derived from software contributed to Berkeley by .\" the Institute of Electrical and Electronics Engineers, Inc. .\" .\" 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. .\" 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. .\" .\" @(#)ls.1 8.7 (Berkeley) 7/29/94 .\" %FreeBSD: src/bin/ls/ls.1,v 1.82.2.1 2005/01/18 10:51:41 joerg Exp % .\" .\" $FreeBSD$ .Dd January 11, 2005 .Dt LS 1 .Os .Sh 名称 .Nm ls .Nd ディレクトリの内容のリストを表示する .Sh 書式 .Nm .Op Fl ABCFGHLPRTWZabcdfghiklmnopqrstuwx1 .Op Ar .Sh 解説 .Nm は .Ar file で指定されたファイル名およびオプションの指定にしたがって、 ファイルに関する各種の情報を表示します。 なお、 .Ar file としてディレクトリが指定された場合は、そのディレクトリ配下のファイル に関する情報を表示します。 .Pp .Ar file が指定されなかった場合は、カレントディレクトリのファイルを表示します。 表示はファイル名のアルファベット順にソートされます。 ただし、 .Ar file としてディレクトリファイルとそれ以外のファイルを混在して指定した 場合は、ディレクトリ以外のファイルが先に表示され、その後 ディレクトリ配下のファイルが表示されます。 .Pp オプションとしては、以下のものがあります。 .Bl -tag -width indent .It Fl A .Pa \&. と .Pa .. を除く全てのエントリを表示します。 スーパユーザの場合は、通常このオプションがセットされています。 .It Fl B ファイル名中の非印字可能文字 ( .Xr ctype 3 と現在のロケール設定で定義されます) を強制的に .Li \e Ns Va xxx の形式で表示します。 .Va xxx は文字の数値であり 8 進数です。 .It Fl C マルチカラム形式で出力します。 端末への出力の場合は、これがデフォルトになります。 .It Fl F それぞれのパス名の最後に、ディレクトリならばスラッシュ .Pq Ql / 、実行可能ファイルならばアスタリスク .Pq Ql * 、シンボリックリンクならばアットマーク .Pq Ql @ 、ソケットファイルならば等号 .Pq Ql = 、ホワイトアウトならばパーセント文字 .Pq Ql % 、 .Tn FIFO ならば縦棒 .Pq Ql \&| をつけて表示します。 .It Fl G カラー化出力を有効にします。 本オプションは、環境変数 .Ev CLICOLOR を定義することと同等です (後述)。 .It Fl H コマンドラインのシンボリックリンクを追跡します。 .Fl F , .Fl d , .Fl l オプションのいずれも指定されなかった場合、 このオプションが仮定されます。 .It Fl L 引数がシンボリックリンクファイルの場合、リンクファイル自体ではなく、 リンク先のファイルやディレクトリを表示します。 このオプションは .Fl P オプションを打ち消します。 .It Fl P 引数がシンボリックリンクの場合、リンクが参照しているオブジェクトではなく リンク自身を表示します。 このオプションは .Fl H , .Fl L オプションを打ち消します。 .It Fl R サブディレクトリを再帰的に表示します。 .It Fl T .Fl l オプション (小文字の .Dq エル (L) ) と共に使用された場合、 ファイルの日付と時間に関する詳細情報 (月・日・時・分・秒・年) を表示します。 .It Fl W ディレクトリ走査時にホワイトアウトも表示します。 .It Fl Z 各ファイルの MAC ラベルを表示します。 .Xr maclabel 7 を参照してください。 .It Fl a ドット .Pq Pa \&. で始まるファイルも含めて表示します。 .It Fl b .Fl B と同様ですが、可能であれば .Tn C のエスケープコードを使用します。 .It Fl c ファイルソートや時刻出力の際、ファイルステータスの最終変更日付を使用します。 .It Fl d 引数がディレクトリの場合、ディレクトリそのものの情報について表示します (再帰的に表示しません)。 .It Fl f ソートせずに表示します .It Fl g このオプションは、 .Bx 4.3 との互換性のためにだけ利用すべきです。 これは、 ロングフォーマットオプション .Pq Fl l を使ってグループの名前を表示したい時に使います。 .It Fl h .Fl l オプションとともに使用した場合、次の単位サフィックスを使用します: バイト、キロバイト、メガバイト、ギガバイト、テラバイト、ペタバイト。 使用される大きさは基数 2 であり、数値の桁数が 4 以下になります。 .It Fl i 各ファイルについて、inode 番号を表示します。 .It Fl k .Fl s オプションとともに使用し、ファイルサイズを ブロック単位ではなく K バイト単位で表示します。 このオプションは環境変数 .Ev BLOCKSIZE に優先します。 .Fl k と .Fl h は排他であり、後に .Fl k を置くと前の .Fl h の効果を無効にします。 .It Fl l ( .Dq エル (L) の小文字)。 ファイルの詳細情報をロングフォーマットで表示します (下記参照)。 ロングフォーマットの前の行に、全ファイル のサイズの合計値 (ブロック数、この単位については .Fl s オプションを参照) を表示します。 .It Fl m ストリーム出力形式。 ファイルを、コンマで区切って、ページの横方向に表示します。 .It Fl n 長い .Pq Fl l 出力において、 ユーザとグループを名前に変換せずに、 ユーザとグループの ID を数値で表示します。 .It Fl o .Pq Fl l オプションによる詳細情報に、ファイルフラグも含めて表示します。 .It Fl p ファイルがディレクトリの場合、各ファイル名の後にスラッシュ .Pq Ql / を書きます。 .It Fl q ファイル名に表示できない文字が使われていたとき、 .Ql \&? として表示します。 端末に表示するときは、デフォルトでこの指定になります。 .It Fl r 辞書式順序で逆順または時刻の古い順にソートします。 .It Fl s 各ファイルがファイルシステム上で実際に占有している ブロック数 (512 バイト単位) を表示します。 ブロックの一部だけ占有しているものも整数値に切り上げられます。 表示の先頭行に、全ファイルのサイズの合計値 を表示します。 環境変数 .Ev BLOCKSIZE は単位サイズ 512 バイトに優先します。 .It Fl t ファイルをアルファベット順に表示する前に、ファイルの最終修正日時の順 (新しいものほど先にくる) にソートします。 .It Fl u .Pq Fl t オプションや .Pq Fl l オプションで、ファイルの最終修正日時の代わりに、ファイルの最終アクセス日時を 使用します。 .It Fl w 非印字可能文字をそのまま表示するよう強制します。 出力先が端末でない場合、これがデフォルトです。 .It Fl x .Fl C と同じですが、下方向ではなく横方向にエントリをソートして、 マルチカラム出力します。 .It Fl 1 (数字の .Dq 1 )。 1 行につき 1 エントリの形式で表示します。 端末への出力でない場合には、これがデフォルトです。 .El .Pp .Fl 1 , .Fl C , .Fl x , .Fl l オプションは、互いに他を上書きします。 最後に指定されたオプションが有効となります。 .Pp .Fl c と .Fl u オプションは、互いに他を上書きします。 最後に指定されたオプションが有効となります。 .Pp .Fl B , .Fl b , .Fl w , .Fl q オプションは互いに優先し合う関係にあります。 最後に指定されたものが印字不可文字の書式を決定します。 .Pp .Fl H , .Fl L , .Fl P オプションは互いに優先し合う関係にあります(部分的もしくは全体的)。 指定された順序で適用されます。 .Pp デフォルトでは .Nm は標準出力に 1 行 1 エントリずつ表示します。 ただし、出力先が端末である場合および .Fl C または .Fl x のオプションが指定された場合は別です。 .Pp .Fl i , .Fl s , .Fl l オプションが指定された場合、関連するファイルの情報は 1 個以上の空白 をあけて表示されます。 .Ss ロングフォーマット .Fl l オプションがつけられた場合、それぞれのファイルに対して以下に示す情報が 表示されます: ファイルモード・ リンク数・所有者名・所有グループ名・ MAC ラベル・ ファイルのバイト数・月の短縮形・最終更新が行なわれた際の日付・時・分・ パス名。 さらに、各ディレクトリに対して、 ディレクトリ内のファイル情報が表示される直前に、 ファイルサイズの合計値が 512 バイトブロック単位で表示されます。 .Pp ファイルの修正時刻が 6 ヶ月以上過去もしくは未来の場合、 最終修正年が時間と分のフィールドに表示されます。 .Pp 所有者または所有グループ名が不明の場合、 または .Fl n オプション指定時には、 ID 番号で表示されます。 .Pp ファイルがキャラクタ型もしくはブロック型の特殊ファイルである場合、 ファイルサイズフィールドには -ファイルのメジャー番号とマイナー番号が表示されます。 +ファイルのメジャー番号とマイナ番号が表示されます。 ファイルがシンボリックリンクファイルである場合、 リンク先ファイルのパス名が .Dq Li -> によって表示されます。 .Pp .Fl l オプションのもとで表示されるファイルモードは、エントリタイプと アクセス許可で成り立っています。 エントリタイプの文字はファイルのタイプを表しており、 各文字の意味は次のとおりです: .Pp .Bl -tag -width 4n -offset indent -compact .It Sy b ブロック型特殊ファイル .It Sy c キャラクタ型特殊ファイル .It Sy d ディレクトリ .It Sy l シンボリックリンクファイル .It Sy s ソケットファイル .It Sy p .Tn FIFO .It Sy \- 通常ファイル .El .Pp 次の 3 つのフィールドは、それぞれ 3 つの文字からなっています: 所有者に対するアクセス許可・ グループに属するユーザに対するアクセス許可・ 他のユーザに対するアクセス許可。 これらのフィールドはそれぞれ 3 つの文字からなっています: .Bl -enum -offset indent .It もし .Sy r ならば読みだし可能。 もし .Sy \- ならば読みだし不能。 .It もし .Sy w ならば書き込み可能。 もし .Sy \- ならば書き込み不能。 .It その他の場合: 以下のうち最初に該当するものが用いられる。 .Bl -tag -width 4n -offset indent .It Sy S 所有者に対するアクセス許可において、ファイルが実行可能ではなく、かつ、 実効ユーザ ID (set-user-ID) モードがセットされている場合。 所有グループに対するアクセス許可において、ファイルが実行可能ではなく、 かつ、実効グループ ID (set-group-ID) モードがセットされている場合。 .It Sy s 所有者に対するアクセス許可において、ファイルが実行可能で、かつ、 実効ユーザ ID モードがセットされている場合。 所有グループに対するアクセス許可の中で、ファイルが実行可能で、 かつ、実効グループ ID モードがセットされている場合。 .It Sy x ファイルが実効可能またはディレクトリが検索可能である場合。 .It Sy \- ファイルは、読み出し、書き込み、実行のいずれも許可されておらず、 実効ユーザ ID も実効グループ ID もスティッキビットも設定されていない場合 (以下参照)。 .El .Pp 次の2つは他のユーザに対するアクセス許可の 3 番目の文字に使用されます。 .Bl -tag -width 4n -offset indent .It Sy T スティッキビットがセットされている (モード .Li 1000 ) が、実行不能あるいは検索不能である場合 .Pf ( Xr chmod 1 または .Xr sticky 8 参照)。 .It Sy t スティッキビットがセットされており (モード .Li 1000 ) 、かつ、検索可能または実行可能である場合 .Pf ( Xr chmod 1 または .Xr sticky 8 参照)。 .El .El .Pp ファイルに ACL がある場合は次のフィールドは .Pq Ql + になり、無い場合は空白 .Pq Ql " " になります。 .Nm ユーティリティは、実際の ACL を表示しません。 .Xr getfacl 1 を使用してください。 .Sh 使用例 .Nm の出力を大きさ順に並べる方法を示します ( .Nm がこの機能のために専用の別オプションを必要としない理由も示します)。 .Pp .Dl "ls -l | sort -n +4" .Pp さらに、 .Xr sort 1 への .Fl r フラグを使用することにより、結果を大から小へ (逆順に) 並べられます。 .Sh 診断 .Ex -std .Sh 環境変数 以下の環境変数は .Nm の動作に影響を与えます: .Bl -tag -width ".Ev CLICOLOR_FORCE" .It Ev BLOCKSIZE ブロック数の表示を行う際、1 ブロックのサイズとして環境変数 .Ev BLOCKSIZE で指定された値が使用されます ( .Fl s オプション参照)。 .It Ev CLICOLOR .Tn ANSI カラーシーケンスを使用し、ファイルタイプを区別します。 後述の .Ev LSCOLORS を参照してください。 .Fl F で前述したもの加え、更なる属性 (setuid ビット設定等) もまた表示されます。 カラー化は、適切な .Xr termcap 5 ケーパビリティを持つ端末タイプに依存します。 デフォルトの .Dq Li cons25 コンソールは、適切なケーパビリティを持っていますが、例えば .Xr xterm 1 でカラー表示したい場合には .Ev TERM 変数を .Dq Li xterm-color に設定する必要があります。 他の端末タイプも同様の修正が必要かもしれません。 出力が端末に向けられていない場合、カラー化は黙って無効化されます。 ただし、 .Ev CLICOLOR_FORCE 変数が定義されている場合は例外です。 .It Ev CLICOLOR_FORCE 出力が端末に向けられていない場合、通常、カラーシーケンスは無効化されます。 本フラグを設定することで、この動作を変更可能です。 .Ev TERM 変数は、カラー出力可能な端末を参照することが必要です。 そうなっていない場合、どのカラーシーケンスを使用すべきか決定できません。 .It Ev COLUMNS ターミナルのカラム幅を指定します。 マルチカラム表示の際、 1 行あたりいくつのファイル名を表示できるかを算出するために参照されます ( .Fl C および .Fl x 参照)。 .It Ev LANG 長い .Fl l フォーマット出力における、日と月の順序を決定するために使用するロケールです。 詳細は .Xr environ 7 を参照してください。 .It Ev LSCOLORS 本変数の値は、 .Ev CLICOLOR によってカラー出力が有効であるときに、 どの色をどの属性に使用するかを指定します。 この文字列は書式 .Ar f Ns Ar b の結合であり、ここで .Ar f は前景色であり、 .Ar b は背景色です。 .Pp 色の指示は次の通りです: .Pp .Bl -tag -width 4n -offset indent -compact .It Sy a 黒 .It Sy b 赤 .It Sy c 緑 .It Sy d 茶 .It Sy e 青 .It Sy f マゼンタ .It Sy g シアン .It Sy h 明い灰 .It Sy A 太字の黒で、通常暗い灰に見えます .It Sy B 太字の赤 .It Sy C 太字の緑 .It Sy D 太字の茶で、通常黄色に見えます .It Sy E 太字の青 .It Sy F 太字のマゼンタ .It Sy G 太字のシアン .It Sy H 太字の明い灰で、明い白に見えます .It Sy x デフォルトの前景色と背景色 .El .Pp 以上が標準 .Tn ANSI カラーです。 実際の表示は、端末の色の扱いに依存して異なるでしょう。 .Pp 属性の順番は次の通りです: .Pp .Bl -enum -offset indent -compact .It ディレクトリ .It シンボリックリンク .It ソケット .It パイプ .It 実行形式 .It ブロックスペシャル .It キャラクタスペシャル .It setuid ビットが設定された実行形式 .It setgid ビットが設定された実行形式 .It 他者 (others) が書き込み可能なディレクトリであり、 スティッキビット付き。 .It 他者 (others) が書き込み可能なディレクトリであり、 スティッキビット無し。 .El .Pp デフォルトは .Qq "exfxcxdxbxegedabagacad" であり、 通常のディレクトリは前景色青でデフォルト背景色、 setuid 付き実行形式は前景色黒で背景色赤等です。 .It Ev LS_COLWIDTHS この変数が設定されている場合、 コロン区切りのリストで各フィールドの最小幅を指定しているものとみなされます。 適切でなかったり不十分だったりする幅は無視されます (よって 0 を指定すると、フィールド幅が動的に決まります)。 すべてのフィールドの幅を変えられるわけではありません。 フィールドの順序は次の通りです: inode・ブロック数・リンク数・ユーザ名・グループ名・フラグ・ファイルサイズ・ ファイル名。 .It Ev TERM .Ev CLICOLOR の機能は、端末タイプのカラーケーパビリティが必要です。 .It Ev TZ 日時を表示するときに使われるタイムゾーンを指定します。 詳細は .Xr environ 7 を参照してください。 .El .Sh 互換性 .St -p1003.2 互換とするため、 ロングフォーマット形式の出力には所有グループ名フィールドが自動的に 含められます。 .Sh 関連項目 .Xr chflags 1 , .Xr chmod 1 , .Xr getfacl 1 , .Xr sort 1 , .Xr xterm 1 , .Xr termcap 5 , .Xr maclabel 7 , .Xr symlink 7 , .Xr getfmac 8 , .Xr sticky 8 .Sh 規格 .Nm ユーティリティは .Fl g , .Fl n , .Fl o のオプション以外は、 .St -p1003.1-2001 に適合しています。 .Pp ACL サポートは .Tn IEEE Std\~1003.2c .Pq Dq Tn POSIX Ns .2c Draft\~17 (撤回されました) 互換です。 .Sh 歴史 .Nm コマンドは .At v1 から登場しました。 .Sh バグ 過去との互換性のために、多くのオプションの関係が複雑になっています。 diff --git a/ja_JP.eucJP/man/man1/rtld.1 b/ja_JP.eucJP/man/man1/rtld.1 index b17e375587..32db5be074 100644 --- a/ja_JP.eucJP/man/man1/rtld.1 +++ b/ja_JP.eucJP/man/man1/rtld.1 @@ -1,193 +1,193 @@ .\" Copyright (c) 1995 Paul Kranenburg .\" 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 acknowledgment: .\" This product includes software developed by Paul Kranenburg. .\" 3. The name of the author may not be used to endorse or promote products .\" derived from this software without specific prior written permission .\" .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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/libexec/rtld-elf/rtld.1,v 1.38.4.1 2005/02/27 20:47:20 mdodd Exp % .\" .\" $FreeBSD$ .Dd May 31, 2003 .Dt RTLD 1 .Os .Sh 名称 .Nm ld-elf.so.1 , .Nm ld.so , .Nm rtld .Nd 実行時リンクエディタ .Sh 解説 .Nm ユーティリティは自己完結した共有オブジェクトで、 実行時にプロセスのアドレス空間に共有オブジェクトを読み込んで 編集する機能を提供します。 一般には動的リンカという名前でも知られています。 動的リンクされたプログラムに含まれるデータ構造を使って どの共有ライブラリが必要なのかを決定し、 .Xr mmap 2 システムコールを使ってそれらを読み込みます。 .Pp 全ての共有ライブラリを読み込むことに成功すると、次に .Nm はメインプログラムおよび読み込んだ 全てのオブジェクトからの外部参照を解決します。 プログラム本体の実行が始まる前になんらかの設定をする機会を 共有オブジェクトに与えるために、 オブジェクトごとに初期化ルーチンを呼ぶ機構があります。 これは静的コンストラクタを含むような C++ ライブラリにとって有用です。 .Pp 実行されるプログラムが動的にリンクされている場合には、そのプログラムと一緒に .Nm ユーティリティ自体がカーネルによって読み込まれます。 そしてカーネルは動的リンカに制御を移します。 動的リンカがプログラムとそれに必要な共有オブジェクトの 読み込み、再配置、初期化を終えると、 プログラムのエントリポイントに制御を移します。 .Pp ファイルシステム中にある必要な共有オブジェクトを探索するために、 .Nm は .Xr ldconfig 8 ユーティリティによって用意される .Dq hints ファイルを使います。 .Pp .Nm ユーティリティは以下に挙げるような、 自身の動作を変えるために使用されるいくつかの環境変数を認識します: .Pp .Bl -tag -width ".Ev LD_LIBMAP_DISABLE" .It Ev LD_DUMP_REL_POST これが設定されていた場合、シンボル束縛と再配置の後に、 .Nm は全再配置を含む表を表示します。 .It Ev LD_DUMP_REL_PRE これが設定されていた場合、シンボル束縛と再配置の前に、 .Nm は全再配置を含む表を表示します。 .It Ev LD_LIBMAP -ライブラリー置換リストで、形式は +ライブラリ置換リストで、形式は .Xr libmap.conf 5 と同じです。 便利なように、空白と改行のかわりに .Ql = と .Ql \&, の文字を使うことができます。 この変数は .Xr libmap.conf 5 の後に解析され、このファイルで指定された項目を上書きします。 .It Ev LD_LIBMAP_DISABLE これが設定されていた場合、 .Xr libmap.conf 5 および .Ev LD_LIBMAP の使用を無効化します。 .It Ev LD_LIBRARY_PATH コロンで区切られたディレクトリのリストで、 共有ライブラリのデフォルトサーチパスを上書きします。 この環境変数は、 set-user-ID 及び set-group-ID されたプログラムにおいては無視されます。 .It Ev LD_PRELOAD 他の共有ライブラリより前にリンクされるべき共有ライブラリのリストで、 コロンか空白で区切られています。 もしディレクトリが指定されていないならば、 最初に .Ev LD_LIBRARY_PATH で指定されるディレクトリから、 続いて組み込みの標準ディレクトリ群から検索されます。 この環境変数は、 set-user-ID 及び set-group-ID されたプログラムにおいては無視されます。 .It Ev LD_BIND_NOW 空ではない文字列が設定されている場合には、 .Nm は、全ての外部関数呼び出しをプログラムの実行を始める前に再配置します。 通常、関数呼び出しの結合は遅延方式 (lazy binding) で行われます。 すなわち、関数呼び出しはそれぞれの関数が最初に呼ばれる時に結合されます。 .Ev LD_BIND_NOW はプログラムの起動時間を増加させますが、 実行時に思いもかけず関数が定義されていなかったという事件は避けられます。 .It Ev LD_TRACE_LOADED_OBJECTS 空ではない文字列が設定されている場合には、 .Nm は共有オブジェクトを読み込んで、全てのオブジェクトの絶対パス名を含む 概要を標準出力に表示した後に終了します。 .It Ev LD_TRACE_LOADED_OBJECTS_ALL 空ではない文字列に設定されている場合には、 どのオブジェクトがどのオブジェクトのロードの原因となったのかという まとめを .Nm が展開するようにさせます。 .It Ev LD_TRACE_LOADED_OBJECTS_FMT1 .It Ev LD_TRACE_LOADED_OBJECTS_FMT2 設定されている場合には、 これらの変数は トレース出力をカスタマイズするための .Xr printf 3 流フォーマット文字列として解釈されます。 .Xr ldd 1 の .Fl f オプションがこれらを使用するので、 .Xr ldd 1 をより便利にフィルタとして使うことができます。 以下の変換を使うことができます: .Bl -tag -width 4n .It Li %a メインプログラムの名前 (またの名を .Dq __progname ) 。 .It Li \&%A .Ev LD_TRACE_LOADED_OBJECTS_PROGNAME 環境変数の値。 .It Li %o ライブラリの名前。 .It Li %m ライブラリのメジャーバージョン番号。 .It Li %p .Nm rtld のライブラリ検索ルールで決定されるフルパス名。 .It Li %x ライブラリのロードアドレス。 .El .Pp さらに、 .Ql \en と .Ql \et が認識され、通常の意味をもちます。 .El .Sh 関連ファイル .Bl -tag -width ".Pa /var/run/ld-elf.so.hints" -compact .It Pa /var/run/ld-elf.so.hints .It Pa /etc/libmap.conf libmap の設定ファイル。 .El .Sh 関連項目 .Xr ld 1 , .Xr ldd 1 , .Xr elf 5 , .Xr libmap.conf 5 , .Xr ldconfig 8 diff --git a/ja_JP.eucJP/man/man1/tcpdump.1 b/ja_JP.eucJP/man/man1/tcpdump.1 index eceacc9f5d..240e55dce2 100644 --- a/ja_JP.eucJP/man/man1/tcpdump.1 +++ b/ja_JP.eucJP/man/man1/tcpdump.1 @@ -1,2216 +1,2216 @@ -.\" @(#) $Header: /home/ncvs/doc/ja_JP.eucJP/man/man1/tcpdump.1,v 1.23 2004-08-03 12:44:42 metal Exp $ (LBL) +.\" @(#) $Header: /home/ncvs/doc/ja_JP.eucJP/man/man1/tcpdump.1,v 1.24 2006-03-08 07:43:47 metal Exp $ (LBL) .\" .\" $NetBSD: tcpdump.8,v 1.9 2003/03/31 00:18:17 perry Exp $ .\" .\" Copyright (c) 1987, 1988, 1989, 1990, 1991, 1992, 1994, 1995, 1996, 1997 .\" The Regents of the University of California. All rights reserved. .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that: (1) source code distributions .\" retain the above copyright notice and this paragraph in its entirety, (2) .\" distributions including binary code include the above copyright notice and .\" this paragraph in its entirety in the documentation or other materials .\" provided with the distribution, and (3) all advertising materials mentioning .\" features or use of this software display the following acknowledgement: .\" ``This product includes software developed by the University of California, .\" Lawrence Berkeley Laboratory and its contributors.'' 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED .\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. .\" .\" %FreeBSD: src/contrib/tcpdump/tcpdump.1,v 1.13 2004/03/31 14:57:24 bms Exp % .\" .\" $FreeBSD$ .\" .\" .TH TCPDUMP 1 "7 January 2004" .SH 名称 tcpdump \- ネットワーク上のトラフィックデータのダンプ .SH 書式 .na .B tcpdump [ .B \-AdDeflLnNOpqRStuUvxX ] [ .B \-c .I count ] .br .ti +8 [ .B \-C .I file_size ] [ .B \-F .I file ] .br .ti +8 [ .B \-i .I interface ] [ .B \-m .I module ] [ .B \-r .I file ] .br .ti +8 [ .B \-s .I snaplen ] [ .B \-T .I type ] [ .B \-w .I file ] .br .ti +8 [ .B \-E .I spi@ipaddr algo:secret,... ] .br .ti +8 [ .B \-y .I datalinktype ] .ti +8 [ .B \-y .I datalinktype ] .ti +8 [ .I expression ] .br .ad .SH 解説 .LP \fItcpdump\fP は、オプションで指定されたネットワークインタフェース上で 取得可能なパケットのヘッダのうち \fIexpression\fP にマッチするものを出力 します。 パケットデータを後で分析するためファイルに保存するよう、 .B \-w フラグで実行することもできます。 また、 .B \-r フラグで、ネットワークインタフェースからのパケットではなく、 ファイルに保存されたパケットから読み込むことができます。 すべての場合に、 .I expression にマッチするパケットだけ、 .IR tcpdump によって処理されます。 .LP .I tcpdump は、 .B \-c フラグで実行しない場合、SIGINT シグナル ( 例えば、一般的な手法として 割り込み文字列である control-C の入力) か SIGTERM シグナル (一般的な手法として .BR kill (1) コマンド) によって割り込みがあるまで、パケットを捕捉し続けます。 .B \-c フラグで実行する場合は、 SIGINT シグナル や SIGTERM シグナルで割り込みされるか、 指定されたパケット数まで処理します。 .LP .I tcpdump がパケットの捕捉を終了したとき、以下の合計を 表示します。 .IP packets ``captured'' (これは .I tcpdump が受信し処理したパケット数です); .IP packets ``received by filter'' (この意味は、 .IR tcpdump を実行している OS に依存しますし、 おそらく OS のコンフィギュレーション方法にも依存するでしょう。 filter がコマンドラインで指定された場合、 ある OS では filter expression に一致したかどうかに関わらず、 また filter expression に一致したものであっても、 .I tcpdump が読み込み、処理したものであるかどうかに関わらずパケットを数えます。 別の OS では、filter expression に一致したパケットのみ数えますが、 .I tcpdump が読み込み、処理したものであるかどうかには関わりません。 また別の OS では、filter expression によって一致し、 .IR tcpdump によって処理されたパケットのみを数えます); .IP packets ``dropped by kernel'' (OS がアプリケーションにその情報を報告する場合には、 バッファスペースの不足により、 .I tcpdump が走っている OS の パケット捕捉制御機構から、落ちてしまったパケット の数です。 それ以外の場合には、0 が表示されます。) .LP (Mac OS X を含む) 大抵の BSD や Digital/True64 UNIX のような SIGINFO シグナルがサポートされているプラットホームでは、SIGINFO シグナル を受信したとき、それらの合計を表示して、パケットの捕捉を引き続き行います (SIGINFO シグナルは、例えば典型的には ``status'' 文字である control-T の 入力によって生成されます。 しかし Mac OS X などいくつかのプラットフォームでは、``status'' 文字は デフォルトでは設定されていませんので、これを使用するには .BR stty (1) によって設定する必要があります)。 .LP ネットワークインタフェースからパケットを読むには、 権限を必要とします。 .TP .B SunOS 3.x、4.x 上の NIT ないし BPF の場合: .I /dev/nit ないし .IR /dev/bpf* への読み込みアクセス権が必要です。 .TP .B Solaris 上の DLPI の場合: .IR /dev/le 等のネットワーク仮想デバイスへの読み書きアクセス権が必要です。 少なくとも Solaris のいくつかのバージョン上では、 .I tcpdump が promiscuous モードで捕捉するには、 この条件だけでは不十分です。 それらの Solaris のバージョンでは、root になる必要があります。 もしくは promiscuous モードで捕捉するには root に setuid されてインストールされている場合のみ .I tcpdump の実行が可能になります。 多くの (おそらくすべての) インタフェースにおいて、promiscuous モードで 捕捉しないと、送出されるパケットは見ることができないでしょう。 そのため、promiscuous モードで捕捉が行われない場合は、 あまり役に立たないであろうことに注意してください。 .TP .B HP-UX 上の DLPI の場合: 使用者が root であるか、 .I tcpdump が root に setuid されてインストールされている場合のみ実行可能です。 .TP .B IRIX 上の snoop の場合: 使用者が root であるか、 .I tcpdump が root に setuid されてインストールされている場合のみ実行可能です。 .TP .B Linux の場合: 使用者が root であるか、 .I tcpdump が root に setuid されてインストールされている場合のみ実行可能です (ただし、使用しているディストリビューションが、 CAP_NET_RAW などのケーパビリティビットをサポートするカーネルを持ち、 これらのケーパビリティビットを特定のアカウントに与えることができ、 そのユーザがログインした時の最初のプロセスにそのビットがセットされるような コードを持っている場合は、この限りではありません。 その際には、パケットを捕捉するためには CAP_NET_RAW が、そして例えば .B \-D フラグによってネットワークデバイスを列挙するためには CAP_NET_ADMIN が必要です)。 .TP .B ULTRIX および Digital UNIX/Tru64 UNIX の場合: どのユーザも .IR tcpdump を使用して、ネットワークトラフィックを捕捉できます。 しかしながら、捕捉を行うインタフェースに対して、スーパユーザが .IR pfconfig (8) を用いて promiscuous モードの操作を許可しない限り、 どのユーザも (スーパユーザでさえも)、そのインタフェースにおいて promiscuous モードで捕捉を行うことはできません。 また、捕捉を行うインタフェースに対して、スーパユーザが .IR pfconfig を用いて copy-all モードの操作を許可しない限り、 どのユーザも (スーパユーザでさえも)、そのインタフェースにおいて マシンが送受信するユニキャストトラフィックを捕捉することはできません。 したがって、あるインタフェースにおいて .I 有用な パケットの捕捉を行うには、promiscuous モードか copy-all モードの操作、 もしくは両モードの操作が、そのインタフェースにおいて 有効になっている必要があります。 .TP .B BSD の場合 (Mac OS X を含む): .IR /dev/bpf* への読み込みアクセス権が必要です。 ただし devfs を使用する BSD (Mac OS X も含まれる) では、 単にスーパユーザ権限を持つユーザが BPF デバイスの所有者やパーミッションを 設定するだけでは十分でないかも知れません。 なぜなら、システムが起動する度に毎回、所有者やパーミッションを 設定しなければならないからです。 起動時に設定する機能を備えた devfs を使っているシステムでは、 そのための設定も必要になるかも知れませんし、 その機能がないシステムでは、何らかの方法を使って、起動時にその設定が 行われるようにする必要があるでしょう。 .LP 保存されたパケットファイルを読むには、権限を必要としません。 .SH オプション .TP .B \-A 各々のパケット (からリンクレベルのヘッダを除いたもの) を ASCII で表示します。 Web ページを捕捉する場合に便利です。 .TP .B \-c \fIcount\fP で指定した数のパケットを受信した後に終了します。 .TP .B \-C 保存ファイルに raw パケットを書き込む前に、 現在のファイルが \fIfile_size\fP より大きいかどうか をチェックします。 もし大きいなら、現在の保存ファイルを閉じて新しいものを開きます。 付けられるファイル名は、最初の保存ファイルを除く 2 番目以降の保存ファイルから .B \-w フラグで指定されたファイル名の 後にそれぞれ番号がつきます。 その番号は、2 から始まり順に大きくなります。 \fIfile_size\fP の単位は 100 万バイト (1,000,000 バイト。1,048,576 バイトの ことではない) です。 .TP .B \-d 解釈されたパケットマッチングコードを読みやすい形に整形した後、 標準出力にダンプして停止します。 .TP .B \-dd .B C プログラムの断片の形でパケットマッチングコードをダンプします。 .TP .B \-ddd (先頭に個数を付加した) 10 進数の形でパケットマッチングコードをダンプします。 .TP .B \-D そのシステム上で利用可能で、 .I tcpdump がパケットを捕捉できるネットワークインタフェースのリストを出力します。 それぞれのネットワークインタフェースに対して、番号とインタフェース名、 そして可能であればそのインタフェースの説明を表示します。 ネットワークインタフェース名、および番号は、捕捉を行うインタフェースを .B \-i フラグで指定する際に使用できます。 .IP これは、インタフェースをリストするコマンドを持たない システムにおいて有用です (例えば、Windows システムや .BR "ifconfig \-a" を持たない UNIX システム)。 また番号は、Windows 2000 以降のシステムのように、インタフェース名が 何か複雑な文字列の場合に便利です。 .IP .I tcpdump が .B pcap_findalldevs() 関数を持たない古いバージョンの .I libpcap を使って構築された場合、 .B \-D フラグはサポートされません。 .TP .B \-e 各ダンプ行ごとに、リンクレベルのヘッダを出力します。 .TP .B \-E \fIspi@ipaddr algo:secret\fP を、\fIaddr\fP 宛でセキュリティパラメータ インデックスの値 \fIspi\fP を含む IPsec ESP パケットの解読に使用します。 この組み合わせを、コンマか改行で区切って繰り返し指定することができます。 .IP 今では IPv4 の ESP パケットに対する secret が設定できるようになりました。 .IP アルゴリズムは \fBdes-cbc\fP, \fB3des-cbc\fP, \fBblowfish-cbc\fP, \fBrc3-cbc\fP, \fBcast128-cbc\fP, \fBnone\fP のいずれかです。 デフォルトは \fBdes-cbc\fP です。 パケット解読能力は、 \fItcpdump\fP が暗号機能付きでコンパイルされた場合のみ存在します。 .IP \fIsecret\fP は、ESP 秘密鍵の ASCII テキストです。 0x で始まっている場合、16 進数値として読み込まれます。 .IP 本オプションは、RFC1827 ESP ではなく、RFC2406 ESP を仮定します。 本オプションは、デバッグ専用であり、 本当の「秘密」鍵に対する使用は勧められません。 IPsec 秘密鍵をコマンドラインに置くと、 .IR ps (1) 等によって他者に見えてしまいます。 .IP 上記の構文に加えて、tcpdump が指定されたファイルを読み込むのに \fIfile name\fP という構文が使用できます。 ファイルは、最初の ESP パケットを受信した際にオープンされます。 そのため、tcpdump に与えられているであろうすべての特別なパーミッションは、 それまでに破棄しておくべきでしょう。 .TP .B \-f 外部ホストの IPv4 アドレスについては、シンボルでなく数値で表示します (本オプションは、Sun の NIS サーバに重大な障害が発生するのを回避するこ とを意図しています。\(em 通常は、Sun の yp サーバは、ローカルに存在しない IP アドレスを永久に変換しつづけてハングします)。 .IP 外部ホストの IPv4 アドレスに対する検査は、捕捉を行っているインタフェースの IPv4 アドレスとネットマスクを用いて行われます。 もし、そのアドレス、またはネットマスクが無効だった場合、 このオプションは正しく動作しません。 これは、捕捉を行っているインタフェースにアドレス、もしくはネットマスクが 設定されていなかったり、または 2 つ以上のインタフェース上で捕捉を行える Linux の "any" インタフェースを使用している場合に起こります。 .TP .B \-F フィルタの表現として、\fIfile\fP に記述してある内容を用います。 コマンドラインで指定された追加表現は、無視されます。 .TP .B \-i \fIinterface\fP で指定されたインタフェースを監視します。 指定されない場合には、\fItcpdump\fP はシステムインタフェースリストの中で 最も小さい番号の稼働中のものを検索し、監視するインタフェースとして設定 します (ループバックインタフェースは検索しません)。 この動作は、最初にインタフェースが選択された時点で終了します。 .IP 2.2 以降のカーネルの Linux システムでは、 .I interface 引数 ``any'' を指定して全インタフェースからのパケットを捕捉可能です。 ``any'' デバイスでの捕捉は、promiscuous モードではないことに注意してください。 .IP .B \-D フラグがサポートされている場合、このフラグで表示されるインタフェース番号は .I interface 引数に使用できます。 .TP .B \-l 標準出力を行バッファリングにします。データを捕捉しつつ、 そのデータを見たい場合には、本オプションは有効です。例えば .br ``tcpdump\ \ \-l\ \ |\ \ tee dat'' や ``tcpdump\ \ \-l \ \ > dat\ \ &\ \ tail\ \ \-f\ \ dat'' のように使用します。 .TP .B \-L インタフェースの既知のデータリンクタイプを列挙し、終了します。 .TP .B \-m SMI MIB モジュールの定義を、ファイル \fImodule\fR からロードします。 複数の MIB モジュールを \fItcpdump\fP にロードするために、 複数回このオプションを使用することができます。 .TP .B \-n アドレス (IP アドレスやポート番号など) を名前に変換しません。 .TP .B \-N ホスト名のうち、ドメイン名の表示をしません。例えば、本オプションを 指定すると、``nic.ddn.mil'' とは表示されず、かわりに ``nic'' とだけ表示し ます。 .TP .B \-O パケットマッチングコードのオプティマイザを動かしません。本オプションは、 オプティマイザ中のバグを疑う場合にのみ有効なものです。 .TP .B \-p ネットワークインタフェースを、promiscuous mode に設定しません。 ネットワークインタフェースは、何らかの理由により promiscuous mode に設定 されることもあり得るということに注意してください。ゆえに `-p' オプションは、`ether host {local-hw-addr} or ether broadcast' の短縮形として使うことは出来ません。 .TP .B \-q 素早い (静かな?) 出力を行ないます。出力する行を短くするために、通常出力 されるプロトコル情報の一部は出力されません。 .TP .B \-R ESP/AH パケットが古い仕様 (RFC1825 から RFC1829) に基いているものと仮定します。 指定すると、\fItcpdump\fP はリレー防止フィールドを表示しません。 ESP/AH 仕様にはプロトコルバージョンフィールドがありませんので、 \fItcpdump\fP は ESP/AH プロトコルのバージョンを推定できません。 .TP .B \-r パケットを、\fIfile\fR で指定したファイル ( .B \-w オプションで作成されます) か ら読み込みます。\fIfile\fR として``-''が指定された場合は標準入力が用いら れます。 .TP .B \-S TCP シーケンス番号を相対番号ではなく、絶対番号で出力します。 .TP .B \-s デフォルトの 68 バイト (SunOS の NIT では最小値は実際には 96) ではなくて、 \fIsnaplen\fP だけのデータを各パケットから取得します。68 バイトという データ長は、IP, ICMP, TCP, UDP のパケットを取得する分には十分ですが、 ネームサーバや NFS のパケットについてはプロトコル情報が切り詰められるこ とがあります (これについては、以後の説明を参照して下さい)。 スナップショットが限られた量しかとれずに切り 詰められたパケットは、出力に ``[|\fIproto\fP]'' という文字列がいっしょ に表示されます。 \fIproto\fP は、切り詰めが行われたプロトコルレベルの名 前です。大きなスナップショットをとる場合には、それだけパケット処理の時 間がかかるということと、パケットバッファリング用のバッファの量が減ると いうことに注意してください。これにより、パケットが消失するかもしれませ ん。\fIsnaplen\fP の大きさを、必要なプロトコル情報を取得できる最小の値に とどめるようにしてください。 \fIsnaplen\fP を 0 に設定すると、 パケット全体の捕捉に必要な長さを使用することを意味します。 .TP .B \-T "\fIexpression\fP" により選択されたパケットを強制的に \fItype\fR で 指定されたタイプと解釈します。有効なタイプは、 \fBaodv\fR (アドホックオンデマンドディスタンスベクタープロトコル) \fBcnfp\fR (Cisco NetFlow プロトコル), \fBrpc\fR (リモートプロシージャコール) \fBrtp\fR (リアルタイムアプリケーションプロトコル) \fBrtcp\fR (リアルタイムアプリケーション制御プロトコル) \fBsnmp\fR (シンプルネットワークマネージメントプロトコル) \fBtftp\fR (トリビアルファイル転送プロトコル) \fBvat\fR (ビジュアルオーディオツール) \fBwb\fR (ディストリビューテッドホワイトボード) です。 .TP .B \-t 各ダンプ行のタイムスタンプを出力しません。 .TP .B \-tt 各ダンプ行毎にタイムスタンプを人間が読みやすい形に変換せずに出力します。 .TP .B \-ttt 直前のダンプ行と現在のダンプ行の差分 (マイクロ秒単位) を表示します。 .TP .B \-tttt 各ダンプ行で、デフォルト書式でタイムスタンプを表示し、その前に日付を付けます。 .TP .B \-u デコードされてない NFS 操作を出力します。 .TP .B \-U .B \-w オプションで保存される出力を、「パケットバッファ」モードにします。 つまり、出力バッファがいっぱいになった時のみ書き出すのではなく、 各パケットが保存される度に出力ファイルに書き出します。 .IP .I tcpdump が .B pcap_dump_flush() 関数を持たない古いバージョンの .I libpcap を使って構築された場合、 .B \-U フラグはサポートされません。 .TP .B \-v (少しではありますが) 出力情報を増やします。例えば、IP パケット中の TTL、識別、全長、IP パケット中のオプションが表示されます。 追加のパケットの完全性確認が有効になります。 これは例えば IP および ICMP のヘッダのチェックサムです。 .TP .B \-vv さらに多くの情報を出力します。例えば、NFS の返答パケットの追加 フィールドや完全にデコードされた SMB パケット を出力します。 .TP .B \-vvv もっと多くの情報を出力します。例えば、telnet \fBSB\fP ... \fBSE\fP オプションが完全に表示されます。 .B \-X 付きでは、telnet オプションが 16 進数で表示されます。 .TP .B \-w 受信した生パケットを、解析したり画面に出力したりせずに \fIfile\fR で指定 したファイルに出力します。本オプションを用いて取得したパケットは \-r オプションを用いることで情報を見ることができます。\fIfile\fR で指定す るファイル名が ``-'' の場合には、標準出力を用います。 .TP .B \-x リンクレベルヘッダを除いた各パケットの内容を 16 進数で出力します。 パケットサイズが .I snaplen バイトより小さい場合にはパケットの全部の内容を、それ以外の場合には、 .I snaplen バイト分のデータをパケットごとに出力します。 ここで出力されるのはリンク層のパケット全体であるため、 パディングするようなリンク層 (例えばイーサネット) の場合、 上位層のパケットが必要な長さよりも短かった時には パディングされたバイトも表示されることに注意してください。 .TP .B \-xx 各々のパケットを、リンクレベルのヘッダも .I 含めて 、16 進数で表示します。 .TP .B \-X 各々のパケット (からリンクレベルのヘッダを除いたもの) を、 16 進数と ASCII で表示します。 新規プロトコルを解析するのに非常に便利です。 .TP .B \-XX 各々のパケットを、リンクレベルのヘッダも .I 含めて 、16 進数と ASCII で表示します。 .TP .B \-y パケット捕捉中に使用するデータリンクタイプを \fIdatalinktype\fP に 設定します。 .IP "\fI expression\fP" .RS ダンプするパケットを選択します。\fIexpression\ が指定されない場合には、 ネットワーク上のすべてのパケットがダンプ対象になります。それ以外の場 合には、\fIexpression\fP の条件が真になるパケットのみダンプします。 .LP \fIexpression\fP は、1 つ以上の .I プリミティブ から成り立ちます。 プリミティブは通常 1 つ以上の限定子のついた .I id (名前もしくは番号) から成り立ちます。限定子は、3 種類あります。 .IP \fI型\fP 限定子は id 名や番号が参照するものの種類を指します。型には .BR host , .BR net , .B port があります。例えば、`host foo', `net 128.3', `port 20' のように用います。 型限定子が指定されない場合には、 .B host が指定されたものとみなされます。 .IP \fI方向\fP 限定子は、 パケットが .I id へ出ていく方向か、 .I id から来る方向か、 もしくはその両方かという、特定の転送方向を指定します。 指定可能な方向は、 .BR src , .BR dst , .BR "src or dst" , .BR "src and dst" の 4 つです。 例えば、`src foo', `dst net 128.3', `src or dst port ftp-data' のように 指定します。もし方向限定子が指定されない場合には、 .B "src or dst" が指定されたものとみなします。 SLIP や、``any'' や他のデバイスタイプを用いた Linux の ``cooked'' 捕捉モードのようなリンク層では、 必要な方向を指定するのに .B inbound や .B outbound 限定子を用いる事ができます。 .IP \fIプロトコル\fP 限定子は、特定のプロトコルに一致するパケットのみに制限します。 プロトコルとして指定可能なものは、 .BR ether , .BR fddi , .BR tr , .BR wlan , .BR ip , .BR ip6 , .BR arp , .BR rarp , .BR decnet , .BR lat , .BR sca , .BR moprc , .BR mopdl , .BR iso , .BR esis , .BR isis , .BR icmp , .BR icmp6 , .B tcp , .BR udp です。 例えば `ether src foo', `arp net 128.3', `tcp port 21' のように使用 します。もしプロトコル限定子が指定されない場合には、上記のプロトコルの うち、型に矛盾しないすべてのものが指定されたものとみなします。 例えば `src foo' は、`(ip or arp or rarp) src foo' (これが正しい形式でな い事を除いて) と、`net bar' は `(ip or arp or rarp) net bar' と同義であ り、また `port 53' は `(tcp or udp) port 53' と同義です。 .LP [`fddi' は実際には `ether' の別名になっています。解析ではこれらを「特定の ネットワークインタフェースで使われるデータリンクレベル」を意味するもの として同様に扱います。FDDI ヘッダはイーサネットに似た始点と終点 アドレスを含み、そしてしばしばイーサネットに似たパケット型を含むので、 イーサネットのフィールドと同じように FDDI のフィールドをフィルタリング できます。FDDI ヘッダは他のフィールドも含みますが、フィルタ表現の中で 明示的にそれらを指定することはできません。 .LP 同様に、`tr' と `wlan' は `ether' の別名です。 直前の段落における FDDI ヘッダに関する記述は、 Token Ring ヘッダや 802.11 無線 LAN ヘッダにも適用されます。 802.11 ヘッダでは、終点アドレスが DA フィールドで、始点アドレスが SA フィールドです。 BSSID, RA, TA フィールドは検査されません。] .LP 上記に追加して、いくつかの特別な「プリミティブ」キーワードがあります。 これらのキーワードは .BR gateway , .BR broadcast , .BR less , .B greater と算術演算表現 です。これらの後ろにパターンが続く事はありません。 プリミティブキーワードについては後述します。 .LP より複雑なフィルタの表現は、プリミティブの結合に .BR and , .BR or , .B not を用いることで実現されます。例えば、 `host foo and not port ftp and not port ftp-data' です。 タイプ量を少なくするために、同一の限定子リストは、省略することが可能です。 例えば、`tcp dst port ftp or ftp-data or domain' は、 `tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain' と同じ意味です。 .LP 許されるプリミティブは、以下の通りです。 .IP "\fBdst host \fIhost\fR" IPv4/v6 パケットの終点フィールドが \fIhost\fP で指定したものの場合に、 真となります。 \fIhost\fP は、ホスト名もしくは IP アドレスです。 .IP "\fBsrc host \fIhost\fR" IPv4/v6 パケットの始点フィールドが \fIhost\fP で指定したものの場合に、 真となります。 .IP "\fBhost \fIhost\fP IPv4/v6 パケットの始点フィールドもしくは終点フィールドが \fIhost\fP で指定したものの場合に、 真となります。 上記の host プリミティブの表現には、 \fBip\fP, \fBarp\fP, \fBrarp\fP, \fBip6\fP を 以下のように付加することが可能です。 .in +.5i .nf \fBip host \fIhost\fR .fi .in -.5i という表記は、 .in +.5i .nf \fBether proto \fI\\ip\fB and host \fIhost\fR .fi .in -.5i と同じ意味です。 \fIhost\fR が複数の IP アドレスを持つホスト名であった場合、それぞれのアドレス について照合を検査します。 .IP "\fBether dst \fIehost\fP イーサネットパケットの終点アドレスが \fIehost\fP だった場合に、真となります。 \fIehost\fP は、/etc/ethers に記述された名前もしくはイーサネットアドレスの値が用いられます (イーサネットアドレスの形式については、 .IR ethers (3N) を参照)。 .IP "\fBether src \fIehost\fP イーサネットパケットの始点アドレスが \fIehost\fP だった場合に、真となります。 .IP "\fBether host \fIehost\fP イーサネットパケットの始点アドレスもしくは終点アドレスが \fIehost\fP だった 場合に、真となります。 .IP "\fBgateway\fP \fIhost\fP パケットが \fIhost\fP で指定したアドレスのマシンをゲートウェイとしている場合に 真となります。言い替えると、始点もしくは終点のイーサネットアドレスが \fIhost\fP であり、始点と終点のどちらの IP アドレスも \fIhost\fP でない ということです。 \fIhost\fP マシンの host-name-to-IP-address (名前解決) 制御機構 (hosts ファイル、DNS、NIS など) とマシンの host-name-to-Ethernet-address (イーサネット アドレス解決) 制御機構 (/etc/ethers など) から見つけられる名前である必要があります。 (同様な記述は、 .in +.5i .nf \fBether host \fIehost \fBand not host \fIhost\fR .fi .in -.5i です。この場合 \fIhost / ehost\fP のどちらにも名前もしくは値を用いることが 可能になります。) この構文は、現在のところ、IPv6 が有効な構成では動作しません。 .IP "\fBdst net \fInet\fR" パケットの終点 IPv4/v6 アドレスが、 \fInet\fP で指定されたネットワークに属するものである場合に、 真となります。 \fInet\fP は、アドレス値もしくは /etc/networks で 定義されたネットワーク名のいずれかを指定可能です (詳しくは、\fInetworks(4)\fP を参照)。 .IP "\fBsrc net \fInet\fR" パケットの始点 IPv4/v6 アドレスが、 \fInet\fP で指定されたネットワークに属するものである場合に、真となります。 .IP "\fBnet \fInet\fR" 始点 IPv4/v6 アドレスもしくは終点 IPv4/v6 アドレスが \fInet\fP で指定された ネットワークに属するものである場合に、真となります。 .IP "\fBnet \fInet\fR \fBmask \fInetmask\fR" IP アドレスが、指定された \fInet\fR および \fInetmask\fR の値で決まる ネットワークに属するものである場合に、真となります。 \fBsrc\fR や \fBdst\fR を指定する事も可能です。 この構文は IPv6 \fInet\fR では正当でないことに注意してください。 .IP "\fBnet \fInet\fR/\fIlen\fR" IPv4/v6 アドレスが、指定された \fIlen\fR のビット長のネットマスクで \fInet\fR に属するネットワーク の場合に、真となります。 \fBsrc\fR や \fBdst\fR を指定する事も可能です。 .IP "\fBdst port \fIport\fR" パケットが ip/tcp, ip/udp, ip6/tcp, ip6/udp のいずれかであり、終点 ポート番号が \fIport\fP の場合に、真となります。 \fIport\fP で指定されるポート番号は、値もしくは /etc/services で定義 されているサービス名で指定可能です ( .IR tcp (4P) や .IR udp (4P) を参照)。 ポート番号がサービス名にて指定された場合、 ポート番号とプロトコルの両方がチェック 対象になります。ポート番号や、あいまいなサービス名が指定された場合には、 ポート番号のみがチェック対象となります(例えば、\fBdst port 513\fR は、 tcp/login と udp/who の両方を出力し、\fBport domain\fR は、tcp/domain と udp/domain の両方を出力します)。 .IP "\fBsrc port \fIport\fR" パケットが \fIport\fP で指定した始点ポート番号を保持している場合に 真となります。 .IP "\fBport \fIport\fR" パケットの始点ポート番号もしくは終点ポート番号が \fIport\fP の場合に、 真となります。 上記のポート番号の指定については、すべてキーワード \fBtcp\fP もし くは \fBudp\fP を用いて、ある程度候補を絞り込むことが可能です。例えば、 .in +.5i .nf \fBtcp src port \fIport\fR .fi .in -.5i と指定した場合には、tcp パケットのみが条件一致の評価対象となります。 .IP "\fBless \fIlength\fR" パケットが \fIlength\fP で指定した長さ以下の場合、真となります。 これは、 .in +.5i .nf \fBlen <= \fIlength\fR .fi .in -.5i の指定と等価です。 .IP "\fBgreater \fIlength\fR" パケットが \fIlength\fP で指定した長さ以上の場合、真となります。 これは、 .in +.5i .nf \fBlen >= \fIlength\fR .fi .in -.5i と等価です。 .IP "\fBip proto \fIprotocol\fR" パケットが \fIprotocol\fP で指定したプロトコル型の IP パケット ( 詳細は .IR ip (4P) を参照) の場合に、真となります。 \fIprotocol\fP は、数字もしくは \fIicmp\fP, \fIicmp6\fP, \fIigmp\fP, \fIigrp\fP, \fIpim\fP, \fIah\fP, \fIesp\fP, \fIvrrp\fP, \fIudp\fP, \fItcp\fP のいずれかの名前が指定可能です。\fItcp\fP, \fIudp\fP, \fIicmp\fP の 各識別子はキーワードでもであり、バックスラッシュ (\\)(C-shell では \\\\) を用 いてエスケープしなければならないことに注意してください。 このプリミティブはプロトコルヘッダチェーンを追跡しないことに注意してください。 .IP "\fBip6 proto \fIprotocol\fR" パケットがプロトコル型 \fIprotocol\fP の IPv6 パケットである場合に、 真となります。 このプリミティブはプロトコルヘッダチェーンを追跡しないことに注意してください。 .IP "\fBip6 protochain \fIprotocol\fR" パケットが IPv6 パケットであり、 プロトコルヘッダチェーン中にタイプ \fIprotocol\fR のプロトコルヘッダが 含まれるばあい に、真となります。 例えば .in +.5i .nf \fBip6 protochain 6\fR .fi .in -.5i は、TCP プロトコルヘッダがプロトコルヘッダチェーン中に含まれる 任意のパケットにマッチします。 パケット中には、IPv6 ヘッダと TCP ヘッダの間に、 例えば、認証ヘッダ、ルーティングヘッダ、ホップ毎のオプションヘッダが 含まれ得ます。 このプリミティブが出力する BPF コードは、 複雑であり \fItcpdump\fP 中の BPF 最適化コードでは最適化できません。 よって、この動作はいくぶん遅いです。 .IP "\fBip protochain \fIprotocol\fR" \fBip6 protochain \fIprotocol\fR と同様で、 IPv4 のものです。 .IP "\fBether broadcast\fR" パケットがイーサネットブロードキャストパケットの場合に、真となります。 \fIether\fP キーワードは、省略可能です。 .IP "\fBip broadcast\fR" パケットが IPv4 ブロードキャストパケットの場合に、真となります。 オール 1 とオール 0 の 2 つの形式のブロードキャストアドレスを検査し、 そして捕捉が行われているインタフェースのサブネットマスクを調べます。 .IP もし、そのネットマスクが無効だった場合、この検査は正しく動作しません。 これは、捕捉を行っているインタフェースにネットマスクが 設定されていなかったり、または 2 つ以上のインタフェース上で捕捉を行える Linux の "any" インタフェースを使用している場合に起こります。 .IP "\fBether multicast\fR" パケットがイーサネットマルチキャストパケットの場合に、真となります。 \fIether\fP キーワードは、省略可能です。 なお、この指定は、`\fBether[0] & 1 != 0\fP' の短縮系です。 .IP "\fBip multicast\fR" パケットが IP マルチキャストパケットの場合に、真となります。 .IP "\fBip6 multicast\fR" パケットが IPv6 マルチキャストパケットの場合に、真となります。 .IP "\fBether proto \fIprotocol\fR" パケットの ether 型が \fIprotocol\fR の場合に、真になります。 \fIprotocol\fP は、数字もしくは \fIip\fP, \fIip6\fP, \fIarp\fP, \fIrarp\fP, \fIatalk\fP, \fIaarp\fP, \fIdecnet\fP, \fIsca\fP, \fIlat\fP, \fImopdl\fP, \fImoprc\fP, \fIiso\fP, \fIstp\fP, \fIipx\fP, \fInetbeui\fP のいずれかの名前を指定可能です。 これらの識別子はキーワードでもあり、バックスラッシュ (\\) でエスケープし なければならないことに注意してください。 .IP [FDDI (例えば `\fBfddi protocol arp\fR') や Token Ring (例えば`\fBtr protocol arp\fR')、IEEE 802.11 無線 LAN (例えば `\fBwlan protocol arp\fR') の場合、これらのほとんどのプロトコルに対して、 プロトコルの識別は IEEE802.2 の論理リンク制御 (LLC) ヘッダによって行われます。 通常これは FDDI ヘッダや Token Ring ヘッダ、802.11 ヘッダの上位層にあります。 .IP FDDI, Token Ring, 802.11 のほとんどのプロトコル識別子に対して フィルタリングをかける場合、\fItcpdump\fR は、カプセル化イーサネットに対しては、 管理組織識別子 (OUI) 0x000000 を持つ、いわゆる SNAP フォーマットの LLC ヘッダのプロトコル ID のみをチェックします。 そのパケットが、0x000000 の OUI を持つ SNAP フォーマットであるかどうかは チェックしません。 例外は以下の通りです: .RS .TP \fBiso\fP \fItcpdump\fR は、LLC ヘッダの DSAP (Destination Service Access Point) フィールドと SSAP (Source Service Access Point) フィールドもチェックします。 .TP \fBstp\fP および \fInetbeui\fP \fItcpdump\fR は、LLC ヘッダの DSAP をチェックします。 .TP \fIatalk\fP \fItcpdump\fR は、0x080007 の OUI と Appletalk の etype を持つ SNAP フォーマットのパケットをチェックします。 .RE .IP イーサネットの場合、\fItcpdump\fR は、これらのプロトコルのほとんどに対して イーサネットタイプフィールドをチェックします。 例外は以下の通りです: .RS .TP \fBiso\fP, \fBsap\fP, \fBnetbeui\fP \fItcpdump\fR は、FDDI, Token Ring, 802.11 の場合と同様に、 802.3 フレームをチェックし、次に LLC ヘッダをチェックします。 .TP \fBatalk\fP \fItcpdump\fR は、FDDI, Token Ring, 802.11 の場合と同様に、 イーサネットフレーム内 の Appletalk etype および SNAP フォーマットパケットの両方に対してチェックします。 .TP \fBaarp\fP \fItcpdump\fR は、イーサネットフレームまたは 0x000000 の OUI を持つ 802.3 SNAP フレームに対し、Appletalk ARP etype をチェックします。 .TP \fBipx\fP イーサネットフレーム内の IPX etype、LLC ヘッダ内の IPX DSAP、 IPX の LLC ヘッダを持たない 802.3 カプセル化、 および SNAP フレーム内の IPX etype をチェックします。 .RE .IP "\fBdecnet src \fIhost\fR" DECNET パケットの始点アドレスが .IR host の場合に、真となります。これは ``10.123'' という形式のアドレスでも DECNET の ホスト名でも構いません。[DECNET のホスト名は DECNET を動かすように設定され た ULTRIXシステムのみでサポートされます。] .IP "\fBdecnet dst \fIhost\fR" DECNET パケットの終点アドレスが .IR host の場合に、真となります。 .IP "\fBdecnet host \fIhost\fR" DECNET パケットの始点あるいは終点アドレスが .IR host の場合に、真となります。 .IP "\fBifname \fIinterface\fR" パケットが、指定されたインタフェースから来たとログに記録されると、真となります (OpenBSD の .BR pf (4) によってログに記録されたパケットのみに適用されます)。 .IP "\fBon \fIinterface\fR" .B ifname 修飾子と同義です。 .IP "\fBrnr \fInum\fR" パケットが、指定された PF のルール番号にマッチしたとログに記録されると、 真となります。 (OpenBSD の .BR pf (4) によってログに記録されたパケットのみに適用されます)。 .IP "\fBrulenum \fInum\fR" .B rnr 修飾子と同義です。 .IP "\fBreason \fIcode\fR" パケットが、指定された PF の原因コードによってログに記録されると、真となります。 コードは次のようなものです: .BR match , .BR bad-offset , .BR fragment , .BR short , .BR normalize , .B memory (OpenBSD の .BR pf (4) によってログに記録されたパケットのみに適用されます)。 .IP "\fBrset \fIname\fR" パケットが、指定された PF のアンカルールセットのルールセット名に マッチしたとログに記録されると、真となります。 (OpenBSD の .BR pf (4) によってログに記録されたパケットのみに適用されます)。 .IP "\fBruleset \fIname\fR" .B rset 修飾子と同義です。 .IP "\fBsrnr \fInum\fR" パケットが、指定された PF のアンカルールセットのルール番号に マッチしたとログに記録されると、真となります。 (OpenBSD の .BR pf (4) によってログに記録されたパケットのみに適用されます)。 .IP "\fBsubrulenum \fInum\fR" .B srnr 修飾子と同義です。 .IP "\fBaction \fIact\fR" パケットが記録された時に、PF が指定された動作を行った場合、真となります。 動作とは、次のものです: .B pass , .B block (OpenBSD の .BR pf (4) によってログに記録されたパケットのみに適用されます)。 .IP "\fBip\fR, \fBip6\fR, \fBarp\fR, \fBrarp\fR, \fBatalk\fR, \fBaarp\fR, \fBdecnet\fR, \fBiso\fR, \fBstp\fR, \fBipx\fR, \fInetbeui\fP" これらは .in +.5i .nf \fBether proto \fIp\fR .fi .in -.5i の短縮形です。\fIp\fR の部分には、上記のいずれかのプロトコル名が入ります。 .IP "\fBlat\fR, \fBmoprc\fR, \fBmopdl\fR" これらは .in +.5i .nf \fBether proto \fIp\fR .fi .in -.5i の短縮形です。\fIp\fR の部分には、上記のいずれかのプロトコル名が入ります。 \fItcpdump\fP は今のところこれらのプロトコルを解釈できない事に注意して ください。 .IP "\fBvlan \fI[vlan_id]\fR" パケットが IEEE 802.1Q VLAN パケットの場合、真になります。 \fI[vlan_id]\fR が指定された場合、 パケットが指定された \fIvlan_id\fR を持つ場合のみ、真になります。 \fIexpression\fR 中の最初の \fBvlan\fR キーワードが、 パケットが VLAN パケットであることを仮定して、 残りの \fIexpression\fR のデコード用オフセットを変更してしまうことに 注意してください。 .IP "\fBtcp\fR, \fBudp\fR, \fBicmp\fR" これらは .in +.5i .nf \fBip proto \fIp\fR\fB or ip6 proto \fIp\fR .fi .in -.5i の短縮形です。\fIp\fR の部分には、上記のいずれかのプロトコル名が入ります。 .IP "\fBiso proto \fIprotocol\fR" パケットがプロトコル型 \fIprotocol\fP の OSI パケットの場合、真になります。 \fIprotocol\fP は数値もしくは \fIclnp\fP, \fIesis\fP, \fIisis\fP という名前のいずれかです。 .IP "\fBclnp\fR, \fBesis\fR, \fBisis\fR" これらは .in +.5i .nf \fBiso proto \fIp\fR .fi .in -.5i の短縮形です。\fIp\fR の部分には、上記のいずれかのプロトコル名が入ります。 .IP "\fBl1\fR, \fBl2\fR, \fBiih\fR, \fBlsp\fR, \fBsnp\fR, \fBcsnp\fR, \fBpsnp\fR" IS-IS PDU タイプの短縮形です。 .IP "\fBvpi\fP \fIn\fR パケットが Solaris 上の SunATM にとって、仮想パス識別子が .IR n の ATM パケットの場合、真となります。 .IP "\fBvci\fP \fIn\fR パケットが Solaris 上の SunATM にとって、仮想チャネル識別子が .IR n の ATM パケットの場合、真となります。 .IP \fBlane\fP パケットが Solaris 上の SunATM にとって、ATM パケットであり、 ATM LANE パケットであった場合、真となります。 \fIexpression\fR に \fBlane\fR キーワードがあると、 パケットが、イーサネットをエミュレートした LANE パケットか、 もしくは LANE LE 制御パケットであると仮定して、 残りの \fIexpression\fR に対して行われる検査が変更されることに 注意してください。 \fBlane\fR が指定されなければ、パケットが LLC カプセル化パケットであると 仮定して、検査が行われます。 .IP \fBllc\fP パケットが Solaris 上の SunATM にとって ATM パケットであり、 LLC カプセル化パケットの場合、真となります。 .IP \fBoamf4s\fP パケットが Solaris 上の SunATM にとって ATM パケットであり、 セグメント OAM F4 フローセル (VPI=0 & VCI=3) の場合、真となります。 .IP \fBoamf4e\fP パケットが Solaris 上の SunATM にとって ATM パケットであり、 エンド・トゥ・エンド OAM F4 フローセル (VPI=0 & VCI=4) の場合、真となります。 .IP \fBoamf4\fP パケットが Solaris 上の SunATM にとって ATM パケットであり、 セグメント もしくは エンド・トゥ・エンド OAM F4 フローセル (VPI=0 & (VCI=3 | VCI=4)) の場合、真となります。 .IP \fBoam\fP パケットが Solaris 上の SunATM にとって ATM パケットであり、 セグメント もしくは エンド・トゥ・エンド OAM F4 フローセル (VPI=0 & (VCI=3 | VCI=4)) の場合、真となります。 .IP \fBmetac\fP パケットが Solaris 上の SunATM にとって ATM パケットであり、 メタ・シグナリング・サーキット (VPI=0 & VCI=1) 上であった場合、真となります。 .IP \fBbcc\fP パケットが Solaris 上の SunATM にとって ATM パケットであり、 ブロードキャスト・シグナリング・サーキット (VPI=0 & VCI=2) 上であった場合、 真となります。 .IP \fBsc\fP パケットが Solaris 上の SunATM にとって ATM パケットであり、 シグナリング・サーキット (VPI=0 & VCI=5) 上であった場合、 真となります。 .IP \fBilmic\fP パケットが Solaris 上の SunATM にとって ATM パケットであり、 ILMI サーキット (VPI=0 & VCI=16) 上であった場合、 真となります。 .IP \fBconnectmsg\fP パケットが Solaris 上の SunATM にとって ATM パケットで、 シグナリング・サーキット上にあり、Q.2931 Setup, Call Proceeding, Connect, Connect Ack, Release, Release Done メッセージであった場合に、真となります。 .IP \fBmetaconnect\fP パケットが Solaris 上の SunATM にとって ATM パケットで、 メタ・シグナリング・サーキット上にあり、Q.2931 Setup, Call Proceeding, Connect, Connect Ack, Release, Release Done メッセージであった場合に、真となります。 .IP "\fIexpr relop expr\fR" \fIrelop\fRは、>, <, >=, <=, =, != のいずれかであり、\fIexpr\fR の部分に は、(標準 C 言語の構文で表現された) 整数定数や通常の二項演算子 [+, -, *, /, &, |, <<, >>]、length 演算子、そして特殊なパケットデータへのアクセス演算子などか らなる算術表現が入って、その関係が成立する場合に、真となります。 パケット内部のデータにアクセスするためには、以下の構文を用います。 .in +.5i .nf \fIproto\fB [ \fIexpr\fB : \fIsize\fB ]\fR .fi .in -.5i \fIproto\fRは、\fBether, fddi, tr, wlan, ppp, slip, link, ip, arp, rarp, tcp, udp, icmp, ip6\fR のいずれかであり、 インデックス操作を行うプロトコル層を指示します (\fBether, fddi, wlan, tr, ppp, slip, link\fR はすべて リンク層を指します)。 \fItcp, udp\fR および他の上位層プロトコル型は、 IPv4 のみに適用され、IPv6 には適用されないことに注意してください (これは将来修正されます)。 指示したプロトコル層からの相対バイトオフセットは、\fIexpr\fR で指定します。 \fIsize\fR は省略可能で、取得するフィールドのデータ長を表します。 データ長としては、1,2,4 のいずれかを指定することが可能であり、デフォルトでは 1 が指定されたものとみなされます。 キーワード \fBlen\fP で示されるデータ長演算子は、パケット長を与えます。 例えば、`\fBether[0] & 1 != 0\fP' は、全てのマルチキャストパケットを捕捉します。 `\fBip[0] & 0xf != 5\fP' という表現は、すべてのオプション付きIPパケットを捕捉す ることを意味します。`\fBip[6:2] & 0x1fff = 0\fP' という表現は、フラグメントのな いデータグラムパケット、もしくはフラグメント化されたデータグラムのうち 最初のフラグメントを捕捉します。 この検査は、\fBtcp\fP および \fBudp\fP のインデックス操作においては、暗黙のうち に適用されます。 例えば、\fBtcp[0]\fP は常に TCP \fIヘッダ\fPの先頭バイトを指し、 決して各フラグメントの先頭バイトを指すものではありません。 いくつかのオフセットとフィールド値は、数値ではなく 定数として表記できます。 次のプロトコルヘッダフィールドオフセットが利用可能です。 \fBicmptype\fP (ICMP タイプフィールド)、\fBicmpcode\fP (ICMP コードフィールド) および \fBtcpflags\fP (TCP フラグフィールド) 次の ICMP タイプフィールド値が利用可能です。 \fBicmp-echoreply\fP, \fBicmp-unreach\fP, \fBicmp-sourcequench\fP, \fBicmp-redirect\fP, \fBicmp-echo\fP, \fBicmp-routeradvert\fP, \fBicmp-routersolicit\fP, \fBicmp-timxceed\fP, \fBicmp-paramprob\fP, \fBicmp-tstamp\fP, \fBicmp-tstampreply\fP, \fBicmp-ireq\fP, \fBicmp-ireqreply\fP, \fBicmp-maskreq\fP, \fBicmp-maskreply\fP 次の TCP フラグフィールド値が利用可能です。 \fBtcp-fin\fP, \fBtcp-syn\fP, \fBtcp-rst\fP, \fBtcp-push\fP, \fBtcp-ack\fP, \fBtcp-urg\fP .LP プリミティブは、以下のように組み合わせることが可能です。 .IP 括弧で括られた一連のプリミティブや演算子 (括弧はシェルの特殊文字なのでエスケープする必要があります)。 .IP 否定 (`\fB!\fP' or `\fBnot\fP'). .IP 論理積 (`\fB&&\fP' or `\fBand\fP'). .IP 論理和 (`\fB||\fP' or `\fBor\fP'). .LP 否定は、最も高い演算優先度を持ちます。論理和と論理積は、同じ演算優先度を持ち、 左から右へ評価されます。論理積の場合には、単に識別子を並べるのではなく、 明示的に \fBand\fR を使用しなければならないことに注意して下さい。 .LP キーワードなしで識別子が与えられている場合には、最も最近用いられたキーワードが 付加されているものと仮定されます。 例えば、 .in +.5i .nf \fBnot host vs and ace\fR .fi .in -.5i は、 .in +.5i .nf \fBnot host vs and host ace\fR .fi .in -.5i の短縮形ですが、 .in +.5i .nf \fBnot ( host vs or ace )\fR .fi .in -.5i と混同してしまいがちなので気をつけましょう。 .LP 引数 expression は、単一の引数としても複数の引数としても、どちらか便利な 方で、\fItcpdump\fP に渡すことができます。 一般的に、引数がシェルのメタキャラクタを含む場合、その引数をクォート された単一の引数としてプログラムに渡す方が容易です。 複数の引数は、解析される前にスペースで連結されます。 .SH 使用例 .LP \fIsundown\fP に到達する、もしくはそこから送信されるパケットのすべてを 表示する場合には、以下のように実行します。 .RS .nf \fBtcpdump host sundown\fP .fi .RE .LP \fIhelios\fR と、\fIhot\fR もしくは \fIace\fR の間のトラフィックを表示する 場合には、以下のように実行します。 .RS .nf \fBtcpdump host helios and \\( hot or ace \\)\fP .fi .RE .LP \fIace\fR と、\fIhelios\fR 以外のホストとの間でやりとりされるすべての IP パケットを表示する場合には、以下のように実行します。 .RS .nf \fBtcpdump ip host ace and not helios\fP .fi .RE .LP ローカルなホストと Berkeley のホストとの間でやりとりされるすべての トラフィックを表示する場合には、以下のように実行します。 .RS .nf .B tcpdump net ucb-ether .fi .RE .LP インターネットゲートウェイ \fIsnup\fP を通過するすべての ftp トラフィックを表示する場合には、以下のように実行します (シェルが括弧を誤って解釈しないよう、フィルタを表現する引数がクォートさ れていることに注意して下さい)。 .RS .nf .B tcpdump 'gateway snup and (port ftp or ftp-data)' .fi .RE .LP 始点アドレスと終点アドレスの両方がローカルネットワーク内のホスト のものでないトラフィックについて表示する場合には、以下のように実行しま す (実行するホストが他のネットワークに対するゲートウェイの場合、そのホスト が属すローカルネットワークでは、このコマンドは成功しないでしょう)。 .RS .nf .B tcpdump ip and not net \fIlocalnet\fP .fi .RE .LP ローカルネットワーク外のホストとの通信において、TCP による各通信単位 のスタートパケットとエンドパケット (SYN と FIN パケット) を表示するには、以 下のように実行します。 .RS .nf .B tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net \fIlocalnet\fP' .fi .RE .LP ゲートウェイ \fIsnup\fP を中継される IP パケットのうち、576 バイトより大きいもの を表示するには、以下のように実行します。 .RS .nf .B tcpdump 'gateway snup and ip[2:2] > 576' .fi .RE .LP イーサネット上でブロードキャストもしくはマルチキャストを経由して送られる もの以外の IP ブロードキャストもしくはマルチキャストパケットを表示するには、 以下のように実行します。 .RS .nf .B tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224' .fi .RE .LP echo 要求/応答以外 (つまり ping パケット以外) の全ての ICMP パケットを 表示するには、以下のように実行します。 .RS .nf .B tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply' .fi .RE .SH 出力形式 .LP \fItcpdump\fP の出力は、プロトコル依存です。以下の説明では、簡単な パラメータの記述と、おおよそのフォーマットの説明を行ないます。 .de HD .sp 1.5 .B .. .HD リンクレベルヘッダ .LP もし '-e' オプションが指定されると、リンクレベルヘッダが出力されます。 イーサネットにおいては、始点と終点のアドレス、プロトコル、そして パケット長が出力されます。 .LP FDDI ネットワークにおいては、'-e' オプションが指定されると \fItcpdump\fP は、「フレーム制御」フィールド、発信元と終点アドレス、そしてパケット長を 出力します。「フレーム制御」フィールドはパケットの残りの部分の解釈を決定 します。(IP データグラムを含むような) 通常のパケットは `async' パケットで、 0 から 7 の間の優先順位を持ちます。例えば、`\fBasync4\fR' です。こうした パケットは IEEE802.2 の論理リンク制御 (LLC) パケットを含むと仮定されます。 LLC ヘッダは、それが ISO データグラムでない場合やいわゆる SNAP パケットのと きには出力されます。 .LP Token Ring ネットワークでは、'-e' オプションを指定すると、\fItcpdump\fP は、 アクセス制御」と「フレーム制御」のフィールド、 始点と終点のアドレス、パケット長を表示します。 FDDI ネットワークでは、パケットは LLC パケットを含むと仮定されます。 オプション '-e' の指定の有無にかかわらず、 始点経路制御されたパケットに対しては、始点経路制御情報が表示されます。 .LP 802.11 ネットワークでは、'-e' オプションが指定されると、 「フレーム制御」フィールド、802.11 ヘッダに含まれるすべてのアドレス、 そしてパケット長を出力します。 FDDI ネットワークと同様に、パケットには LLC パケットが含まれると仮定されます。 .LP \fI (注意: 以下の記述は、利用者が RFC1144 に記述されている SLIP 圧縮 アルゴリズムについての知識がある前提で書いています。)\fP .LP SLIP によるリンクにおいては、方向指示子 (``I'' が入力方向、``O'' が出力方向)、パケット型、そして圧縮情報が出力されます。 パケット型は、最初に出力されます。パケット型には \fIip\fP、\fIutcp\fP、そして \fIctcp\fP の 3 つがあります。 \fIip\fR 型パケットの場合、上記以上のリンク情報は表示されません。 TCP パケットの場合には、コネクション識別子がパケット型に続いて出力されます。 パケットが圧縮されている場合、符号化されたヘッダが出力されます。 特殊な場合は \fB*S+\fIn\fR や \fB*SA+\fIn\fR のように出力されます。ここ で \fIn\fR は、シーケンス番号 (もしくはシーケンス番号および ack) が変更された回 数です。特殊な場合でなければ、0 回以上の変更について出力されます。 変更は、U (緊急 (urgent) ポインタ)、W (ウィンドウ)、A (ack)、S (シーケンス番号)、 そして I (パケット ID) で示され、変動量 (+n or -n) もしくは新しい値 (=n) が続きます。 最後に、パケット内のデータの総量および圧縮ヘッダ長が出力されます。 .LP 例えば、以下の行は、出力方向の圧縮 TCP パケットを、暗黙のコネクション識別子 とともに表示しています。ack は 6 変わり、シーケンス番号は 49 変わり、パケット ID は 6 変わっています。3 バイトのデータと6 バイトの圧縮ヘッダが存在します。 .RS .nf \fBO ctcp * A+6 S+49 I+6 3 (6)\fP .fi .RE .HD ARP/RARP パケット .LP arp/rarp パケットの出力は、要求型とその引数を示してい ます。出力形式は、その出力のみで理解可能なように作られています。 以下に、ホスト \fIrtsg\fP からホスト \fIcsam\fP への `rlogin' 開始時の パケットの実例を示します。 .RS .nf .sp .5 \f(CWarp who-has csam tell rtsg arp reply csam is-at CSAM\fR .sp .5 .fi .RE 1行目は、ホスト rtsg が、ホスト csam のイーサネットアドレスを問い合わせる 目的で arp パケットを送信していることを意味します。ホスト csam は、自分自身 のイーサネットアドレスを返答しています (この例では、イーサネットアドレス は大文字で、インターネットアドレス部は小文字で表記しています)。 .LP \fItcpdump \-n\fP として起動した場合には、少し冗長になります。 .RS .nf .sp .5 \f(CWarp who-has 128.3.254.6 tell 128.3.254.68 arp reply 128.3.254.6 is-at 02:07:01:00:01:c4\fR .fi .RE .LP \fItcpdump \-e\fP として起動した場合には、最初のパケットはブロードキャスト パケットであり、次のパケットはポイントツーポイントのパケットであることが わかります。 .RS .nf .sp .5 \f(CWRTSG Broadcast 0806 64: arp who-has csam tell rtsg CSAM RTSG 0806 64: arp reply csam is-at CSAM\fP .sp .5 .fi .RE 最初のパケットについては、始点のイーサネットアドレスは RTSG であり、 終点はイーサネットブロードキャストアドレス、型フィールドには 16 進数の値 0806 (ETHER_ARP を意味します) が格納されており、総パケット長は 64 バイトである と表示しています。 .HD TCP パケット .LP \fI(注意:以下の記述は、RFC793 に記述されている TCP プロトコルについての知識 があることを前提に記述されています。この知識がない場合、本記述と \fItcpdump\fP のいずれもあなたには役に立たないでしょう。)\fP .LP TCP プロトコル行の一般的な形式は、以下の通りです。 .RS .nf .sp .5 \fIsrc > dst: flags data-seqno ack window urgent options\fP .sp .5 .fi .RE \fIsrc\fP と \fIdst\fP は、それぞれ始点と終点の IP アドレスとポート番号です。 \fIflags\fP の部分には、S (SYN), F (FIN), P (PUSH), R (RST), W (ECN CWR), E (ECN-Echo) の組み合わせ、もしくは単なる `.' (フラグなし) が入ります。 \fIdata-seqno\fP は、このパケット内のデータがシーケンス空間のどの部分に あたるかを示します (以下の例を参照して下さい)。 \fIack\fP は、本コネクション上を逆方向に次に流れるデータパケットの シーケンス番号です。 \fIwindow\fP は、本コネクションの逆方向のパケットを格納するバッファサイズ です。 \fIurg\fP は、パケット中に `urgent' (緊急) データが格納されていることを示しま す。 \fIoptions\fP は、例えば のように、アングルブラケット (大小記号) で 括られた tcp オプションです。 .LP \fIsrc、dst\fP、そして \fIflags\fP は、常に表示されます。他のフィールドは、 パケットの TCP ヘッダに依存し、表示できる場合だけ表示されます。 .LP 以下の例は、ホスト \fIrtsg\fP からホスト \fIcsam\fP への rlogin 開設時のシーケンスの一部です。 .RS .nf .sp .5 \s-2\f(CWrtsg.1023 > csam.login: S 768512:768512(0) win 4096 csam.login > rtsg.1023: S 947648:947648(0) ack 768513 win 4096 rtsg.1023 > csam.login: . ack 1 win 4096 rtsg.1023 > csam.login: P 1:2(1) ack 1 win 4096 csam.login > rtsg.1023: . ack 2 win 4096 rtsg.1023 > csam.login: P 2:21(19) ack 1 win 4096 csam.login > rtsg.1023: P 1:2(1) ack 21 win 4077 csam.login > rtsg.1023: P 2:3(1) ack 21 win 4077 urg 1 csam.login > rtsg.1023: P 3:4(1) ack 21 win 4077 urg 1\fR\s+2 .sp .5 .fi .RE 最初の行は、ホスト rtsg の TCP ポート 1023 番からホスト csam の \fIlogin\fP ポートに対してパケットを送信していることを意味します。\fBS\fP は、 パケットの \fISYN\fP フラグが設定されていることを意味します。 パケットのシーケンス番号は 768512 番であり、データは含みません。 (表記は `first:last(nbytes)' であり、これは「シーケンス番号 \fIfirst\fP か ら \fIlast\fP までの \fIlast\fP を含まない \fInbytes\fP のユーザデータという こと」を意味しています。) このパケット中に ack はなく、有効な受信ウィンドウの大きさは 4096 バイトで あり、1024 バイトの最大セグメントサイズ要求を行なうオプションが付加され ています。 .LP csam は、rtsg から送られたパケットと類似したパケットを送り返しますが、 rtsg の送った SYN に対する ack が含まれるところが異なり ます。続いて、rtsg は csam の SYN に対する ack を返します。 `.' は、S (SYN), F (FIN), P (PUSH), R (RST) のいずれのフラグも 立っていないことを意味します。 パケットはデータを含まないため、データシーケンス番号は入りません。 ack シーケンス番号が小さい整数 (1) であることに注意して下さい。 \fItcpdump\fP は、初めて TCP の「通信」を検出すると、パケットから取得した シーケンス番号を表示します。通信のその後のパケットについては、現在の パケットシーケンス番号と、この最初のシーケンス番号の間の差を表示します。 このことは、最初に取得した以降のシーケンス番号は、通信データストリーム の相対位置として解釈できることを意味します (最初の各方向のデータバイト は 1 です)。`-S' は、本機能を無効にし、元のシーケンス番号を表示します。 .LP 6 行目では、rtsg は csam に 19 バイトのデータを送信しています (rtsg \(-> csam の 方向の通信における、2 バイト目から 20 バイト目までのデータ)。PUSH フラグが このパケットでは設定されています。 7 行目では、csam は rtsg から 20 バイトまでのデータを受けとった旨の レスポンスを rtsg に返しています。csam の受信ウィンドウが19バイト小さくなっ たことから、これらのデータのほとんどは、ソケットバッファの中に存在する ことが分かります。 csam は、rtsg に 1 バイトのデータを送信しています。 8 行めと 9 行めでは、csam は緊急 (urgent) で PUSH フラグの設定された 2 バイトデータを送信しています。 .LP スナップショットが小さ過ぎて \fItcpdump\fP が TCP ヘッダ全体を捕えなかった場合、 可能な限りのヘッダを解釈し、``[|\fItcp\fP]'' を表示して 残りを解釈できなかったことを示します。 (短か過ぎるまたはヘッダを越えてしまうといった) 不正なオプションを ヘッダが持つ場合には、tcpdump は ``[\fIbad opt\fP]'' を表示して 残りのオプションを解釈しません (どこから開始したら良いのか分からないからです)。 ヘッダ長によりオプションが存在することが分かるが、 IP データグラム長がオプションがそこにあるために十分な長さではない場合に、 \fItcpdump\fP は ``[\fIbad hdr length\fP]'' を表示します。 .HD .B 特定フラグの組み合わせ (SYN-ACK, URG-ACK 等) による TCP パケットの捕捉 .PP TCP ヘッダの制御ビットセクションには、次の 8 ビットがあります: .IP .I CWR | ECE | URG | ACK | PSH | RST | SYN | FIN .PP TCP 接続の確立に使用されるパケットを見たいものとしましょう。 新規接続を初期化する時、 TCP は 3 ウェイハンドシェークプロトコルを使用することを思い出してください。 TCP 制御ビットに関する接続の順番は次のようになります。 .PP .RS 1) 呼び出し側が SYN を送信 .RE .RS 2) 受信者が SYN, ACK で応答 .RE .RS 3) 呼び出し側が ACK を送信 .RE .PP ここで、SYN ビットを持つパケットを捕捉したいとします (第 1 ステップ)。 ステップ 2 のパケット (SYN-ACK) は不要で、 最初の SYN だけが欲しいことに注意してください。 必要なのは、\fItcpdump\fP の正しいフィルタ式です。 .PP オプション無しの TCP ヘッダの構造を思い出してください: .PP .nf 0 15 31 ----------------------------------------------------------------- | 始点ポート | 終点ポート | ----------------------------------------------------------------- | シーケンス番号 | ----------------------------------------------------------------- | 確認応答番号 | ----------------------------------------------------------------- | HL | 予約 |C|E|U|A|P|R|S|F| ウィンドウサイズ | ----------------------------------------------------------------- | TCP チェックサム | 緊急ポインタ | ----------------------------------------------------------------- .fi .PP TCP ヘッダは、オプションが無ければ通常、20 オクテットのデータを持ちます。 図の最初の行はオクテット 0 から 3 を示し、 次の行はオクテット 4 から 7 を示す等となります。 .PP 0 から数え始めると、必要な TCP 制御ビットはオクテット 13 にあります: .PP .nf 0 7| 15| 23| 31 ----------------|---------------|---------------|---------------- | HL | 予約 |C|E|U|A|P|R|S|F| ウィンドウサイズ | ----------------|---------------|---------------|---------------- | |13 オクテット目| | | .fi .PP 第 13 オクテットをもっとよく見てみましょう: .PP .nf | | |---------------| |C|E|U|A|P|R|S|F| |---------------| |7 5 3 0| .fi .PP これらは我々が興味がある TCP 制御ビットです。 このオクテットのビットを、右から左へ、0 から 7 と番号付けします。 PSH ビットは第 3 ビットであり、URG ビットは第 5 ビットです。 .PP 最初の SYN だけを持つパケットが欲しいことに注意してください。 SYN ビットがセットされた TCP データグラムが到着すると、 第 13 オクテットになにが起きるか見てみましょう: .PP .nf |C|E|U|A|P|R|S|F| |---------------| |0 0 0 0 0 0 1 0| |---------------| |7 6 5 4 3 2 1 0| .fi .PP 制御ビットセクションを見ると、ビット番号 1 (SYN) のみがセットされています。 .PP オクテット番号 13 が、ネットワークバイト順で、 8 ビット符号無し整数と仮定します。 このオクテットの 2 進数値は .IP 00000010 .PP となり、10 進数での表現は次のようになります: .PP .nf 7 6 5 4 3 2 1 0 0*2 + 0*2 + 0*2 + 0*2 + 0*2 + 0*2 + 1*2 + 0*2 = 2 .fi .PP SYN のみセットされている場合について理解したので、これでほとんど終りです。 TCP ヘッダの第 13 オクテットの値は、 ネットワークバイト順の 8 ビット符号無し整数として解釈すると、 正確に 2 となります。 .PP この関係は次のように表現可能です: .RS .B tcp[13] == 2 .RE .PP この式を \fItcpdump\fP のフィルタとして使用し、 SYN パケットのみを持つパケットを捕捉可能です: .RS .B tcpdump -i xl0 tcp[13] == 2 .RE .PP この式は「TCP データグラムの第 13 オクテットは 10 進数 2 を持つ」 と言っており、まさに我々が望むものです。 .PP 次に、SYN パケットが必要であるが、ACK や他の TCP 制御ビットについては どうでも良い場合を考えます。 SYN-ACK が設定された TCP データグラムが到着した時に オクテット 13 がどうなっているかを見てみましょう: .PP .nf |C|E|U|A|P|R|S|F| |---------------| |0 0 0 1 0 0 1 0| |---------------| |7 6 5 4 3 2 1 0| .fi .PP 今度は、第 13 オクテットの第 1 ビットと第 4 ビットがセットされています。 第 13 オクテットの 2 進数値は .IP 00010010 .PP となり、10 進数では次のようになります: .PP .nf 7 6 5 4 3 2 1 0 0*2 + 0*2 + 0*2 + 1*2 + 0*2 + 0*2 + 1*2 + 0*2 = 18 .fi .PP 今度は、\fItcpdump\fP フィルタ式に 'tcp[13] == 18' を使用できません。 この式は、SYN-ACK がセットされているパケットのみを選択し、 SYN のみセットされているパケットを選択しないからです。 ACK や他の制御ビットがセットされていようといまいと構わないことを 思い出してください。 .PP この目的を達成するために、第 13 オクテットと他の値との論理 AND を取り、 SYN ビットを得ることが必要です。 我々が欲しいのはどんな場合でも SYN がセットされていれば良いので、 第 13 オクテットと SYN の 2 進数値との論理 AND を取ります: .PP .nf 00010010 SYN-ACK 00000010 SYN AND 00000010 (SYN が欲しい) AND 00000010 (SYN が欲しい) -------- -------- = 00000010 = 00000010 .fi .PP この AND 操作は、ACK や他の TCP プロトコルビットが セットされていようといまいと、結果は同じです。 AND 用の値の 10 進数表現と、この操作の結果の 10 進数値は、 共に 2 (2 進数値 00000010) であり、 SYN がセットされているパケットには次の関係が成立します: .IP ( ( 第 13 オクテットの値 ) AND ( 2 ) ) == ( 2 ) .PP ここで、\fItcpdump\fP フィルタ式は次のようになることが分かります: .RS .B tcpdump -i xl0 'tcp[13] & 2 == 2' .RE .PP シングルクォートもしくはバックスラッシュを使用して、AND (&') 特殊文字を シェルから隠す必要があることに注意してください。 .HD .B UDP パケット .LP UDP フォーマットは、以下の rwho パケットで例示します。 .RS .nf .sp .5 \f(CWactinide.who > broadcast.who: udp 84\fP .sp .5 .fi .RE これは、ホスト \fIactinide\fP の \fIwho\fP ポートが UDP データグラムを インターネットブロードキャストアドレスであるホスト \fIbroadcast\fP の \fIwho\fP ポートに対して送信していることを意味します。本パケットは、 84 バイトのユーザデータを含みます。 .LP いくつかの UDP サービスは(始点もしくは終点のポート番号から)種 類の判断が可能で、さらに上位レベルのプロトコル情報が出力されます。 ドメインネームサービス要求 (RFC1034/1035)、そして、Sun RPC 呼びだし (RFC1050) を用いた NFS サービスなどがこの条件に該当します。 .HD UDP ネームサーバ要求 .LP \fI(注意:以下の記述は、RFC1035 に記述されている ドメインサービスプロトコルの知識があることを前提に書かれています。もしこ れらの知識がない場合には、以下の記述は未知の言語で書かれているかのよう に見えるでしょう。)\fP .LP ネームサーバ要求は、以下のような表示になります。 .RS .nf .sp .5 \fIsrc > dst: id op? flags qtype qclass name (len)\fP .sp .5 \f(CWh2opolo.1538 > helios.domain: 3+ A? ucbvax.berkeley.edu. (37)\fR .sp .5 .fi .RE ホスト \fIh2opolo\fP は、\fIhelios\fP 上のドメインサーバに対して \fIucbvax.berkeley.edu\fP のホスト名に対応するアドレスレコード (qtype=A) を問い合わせています。 問い合わせの ID は `3' であり、`+' は\fI再帰要求\fPフラグが設定されて いることを意味します。問い合わせの長さは 37 バイトであり、この中に UDP および IP のプロトコルヘッダの長さは含みません。質問操作は普通の操作 (\fIQuery\fP) であり、op フィールドは省略されます。op が他のいずれかであった場合、 その op は `3' と `+' の間に表示されます。 これと同様に、qclass は普通のもの (\fIC_IN\fP) であり、省略されます。 他の qclass が入った場合、`A' の直後に表示されます。 .LP 少数の変則的なパケットは検査され、カギカッコで囲まれた付加 フィールドにその結果が表示されます。問い合わせに返答が あったとき、オーソリティレコードもしくは追加レコードのセクション .IR ancount , .IR nscount , .I arcount のいずれかが、`[\fIn\fPa]', `[\fIn\fPn]', `[\fIn\fPau]' のような形式で 表示されます。\fIn\fP は、それぞれの個数です。 応答ビットのいずれかが設定されている (AA, RA, rcode のいずれか) 場合、 もしくは「0 でなければならない」ビットが 2 バイト目と 3 バイト目に設定されてい る場合には、`[b2&3=\fIx\fP]' が出力されます。\fIx\fP は、ヘッダの 2 バイト 目および 3 バイト目の値を 16 進で表したものです。 .HD UDP ネームサーバ応答 .LP ネームサーバ応答の形式は、以下の通りです。 .RS .nf .sp .5 \fIsrc > dst: id op rcode flags a/n/au type class data (len)\fP .sp .5 \f(CWhelios.domain > h2opolo.1538: 3 3/3/7 A 128.32.137.3 (273) helios.domain > h2opolo.1537: 2 NXDomain* 0/1/0 (97)\fR .sp .5 .fi .RE 最初の例は、\fIh2opolo\fP からの質問 ID 3 の要求に対し、\fIhelios\fP が 3 つのアンサーレコード、3 つのネームサーバレコード、そして 7 つの 追加レコードを持っているパケットで返答しているというものです。 最初のアンサーレコードは、タイプ A (アドレス) であり、そのデータは IP アドレス 128.32.137.3 です。UDP と IP のヘッダを除いた総サイズは 273 バイトです。 A レコードのクラス (C_IN) と同様に, op (Query) および応答コード (NoError) は、省略されます。 .LP 2 つめの例は、\fIhelios\fP が質問 ID 2 の要求に対し、存在しない ドメイン (NXDomain) という返答コードとともに、0 個のアンサーレコード、1 つ のネームサーバレコード、そして 0 個のオーソリティレコードを含んだ レスポンスを返しています。`*' は、\fIauthoritative answer\fP ビットが設定され ていることを示します。 アンサーレコードがないため、型、クラス、データは出力されません。 .LP 出力される可能性のある他のフラグキャラクタは、`\-' (再帰利用,RA,が 設定されていない)および `|' (メッセージ切捨て, TC, が設定されている) です。 `question' セクションに含まれるエントリがちょうど 1 つでない場合には、 `[\fIn\fPq]' が出力されます。 .LP ネームサーバ要求および応答は、大きくなる傾向にあり、デフォルトの \fIsnaplen\fP の値である 68 バイトの長さは、パケットを捕捉してその内容を 表示するには十分でないかも知れないことに注意して下さい。 もしネームサーバトラフィックの調査を真剣に 行なおうとするならば、\fB\-s\fP オプションを用いて、\fIsnaplen\fP を増やし て下さい。自分の経験上、`\fB\-s 128\fP' で十分使い物になります。 .HD SMB/CIFS のデコード .LP 現在の \fItcpdump\fP は、UDP/137, UDP/138, TCP/139 上のデータ用に、 非常に多くの SMB/CIFS/NBT デコードを含みます。 IPX および NetBEUI SMB データの原始的なデコードも、 いくらかは実装されています。 デフォルトでは、最小限のデコードが行われ、 より詳細なデコードは -v を指定すると行われます。 -v を使用すると、単一の SMB パケットが 1 ページ以上を占めてしまいますので、 血まみれの詳細すべてが本当に欲しい場合のみに -v を使用すべきことを 注意してください。 UNICODE 文字列を含む SMB セッションをデコードする場合、 環境変数 USE_UNICODE を 1 に設定するとよいかもしれません。 UNICODE 文字列を自動検出するパッチを歓迎します。 SMB パケット書式の情報とすべてのフィールドの意味については、 www.cifs.org または好きな samba.org ミラーサイトの pub/samba/specs/ ディレクトリを見てください。 SMB パッチは Andrew Tridgell (tridge@samba.org) が書きました。 .HD NFS 要求と応答 .LP Sun NFS (Network File System) 要求および応答は、以下のように 表示されます。 .RS .nf .sp .5 \fIsrc.xid > dst.nfs: len op args\fP \fIsrc.nfs > dst.xid: reply stat len op results\fP .sp .5 \f(CW sushi.6709 > wrl.nfs: 112 readlink fh 21,24/10.73165 wrl.nfs > sushi.6709: reply ok 40 readlink "../var" sushi.201b > wrl.nfs: 144 lookup fh 9,74/4096.6878 "xcolors" wrl.nfs > sushi.201b: reply ok 128 lookup fh 9,74/4134.3150 \fR .sp .5 .fi .RE 最初の行では、ホスト \fIsushi\fP が ID\fI6709\fP のトランザクションを \fIwrl\fP に送信します (始点ホストに続く数字はトランザクション ID であり、始点ポート番号で\fIない\fPことに注意して下さい)。要求 サイズは、UDP および IP ヘッダのサイズを除いて 112 バイトです。操作は、 ファイルハンドル (\fIfh\fP) 21,24/10.731657119 に対する \fIreadlink\fP (シンボリックリンク読み込み) です。 (この例のように運が良ければ、ファイルハンドルはデバイスのメジャー、 -マイナー番号のペアと、それに続く inode 番号と世代番号と解釈することがで +マイナ番号のペアと、それに続く inode 番号と世代番号と解釈することがで きます。) \fIwrl\fP はリンクの内容とともに `ok' と返答しています。 .LP 3 行めでは、\fIsushi\fP は \fIwrl\fP に対し、ファイルハンドル 9,74/4096.6878 のディレクトリ中の `xcolors' ファイルの検索を要求していま す。出力されたデータは、操作の型に依存することに注意して下さい。本形式 は、NFS のプロトコル仕様とともに読めば、それ自身を見れば分かるよう に意図して作成されています。 .LP \-v (verbose, 冗長) フラグがある場合、追加情報が出力されます。 例えば .RS .nf .sp .5 \f(CW sushi.1372a > wrl.nfs: 148 read fh 21,11/12.195 8192 bytes @ 24576 wrl.nfs > sushi.1372a: reply ok 1472 read REG 100664 ids 417/0 sz 29388 \fP .sp .5 .fi .RE (\-v は IP ヘッダの TTL と ID と長さとフラグメンテーションフィールドも出力し ますが、この例では省略しています。) 最初の行では、\fIsushi\fP は \fIwrl\fP に対してファイル 21,11/12.195 のオフセット 24576 バイト目か ら 8192 バイトを読むように要求しています。\fIwrl\fP は `ok' と返答してい ます。2 行めに示したパケットは応答の最初のフラグメントなので、1472 バイトしかありません (その他のデータは継続するフラグメント中に続きます が、これらのフラグメントは NFS ヘッダも UDP ヘッダさえも持たないので、使わ れるフィルタリングの表現によっては出力されないでしょう)。\-v フラグがあ るのでいくつかのファイル属性 (ファイルデータに追加されて返されてくる) が 出力されます。それらはファイルの型 (普通のファイルなら ``REG'')、(8 進数 表現の) ファイルモード、uid と gid、そしてファイルの大きさです。 .LP \-v フラグが 2 回以上指定されると、さらに詳しい情報が出力されます。 .LP NFS 要求は非常に大きなデータになるため、\fIsnaplen\fP を大きくし ないと詳しい出力は得られません。NFS トラフィックを監視するには、 `\fB\-s 192\fP' と指定してみて下さい。 .LP NFS 応答パケットは RPC 操作であることを明示的には示しません。その代わ り、\fItcpdump\fP は「最近の」要求を追跡して、トランザクション ID を用い て応答と照合します。応答が対応する要求のすぐ後に続かないと、解 析することはできません。 .HD AFS の要求と応答 .LP Transarc AFS (Andrew File System) の要求と応答は次のように表示されます: .HD .RS .nf .sp .5 \fIsrc.sport > dst.dport: rx packet-type\fP \fIsrc.sport > dst.dport: rx packet-type service call call-name args\fP \fIsrc.sport > dst.dport: rx packet-type service reply call-name args\fP .sp .5 \f(CW elvis.7001 > pike.afsfs: rx data fs call rename old fid 536876964/1/1 ".newsrc.new" new fid 536876964/1/1 ".newsrc" pike.afsfs > elvis.7001: rx data fs reply rename \fR .sp .5 .fi .RE 最初の行では、ホスト elvis が RX パケットを pike に送っています。 これは、fs (ファイルサーバ) サービスへの RX データパケットであり、 RPC 呼び出しの開始です。 この RPC 呼び出しはリネーム (改名) であり、 古いディレクトリファイル ID 536876964/1/1 と古いファイル名 `.newsrc.new'、 新しいディレクトリファイル ID 536876964/1/1 と新しいファイル名 `.newsrc' で 呼び出しています。 ホスト pike は、RPC 応答をリネーム呼び出しに対して返します (データパケットであり、アボートパケットではないため、これは成功しました)。 .LP 一般的には、AFS RPC の RPC 呼び出し名だけは最低限デコードされます。 ほとんどの AFS RPC は、少なくともいくらかの引数がデコードされます (一般的には「興味のある」引数のみであり、興味についてはある定義によります)。 .LP 書式は、自明となることを意図していますが、 AFS および RX の動作に親しみのない方々にとっては有用ではないかもしれません。 .LP -v (冗長) フラグを 2 度指定すると、 確認応答パケットと追加のヘッダ情報を表示します。 これは、RX 呼び出し ID、呼び出し番号、シーケンス番号、 シリアル番号、RX パケットフラグといったものです。 .LP -v フラグを 2 度指定すると、追加情報が表示されます。 これは、RX 呼び出し ID、呼び出し番号、RX パケットフラグといったものです。 MTU ネゴシエーション情報も、RX 確認応答パケットから表示されます。 .LP -v フラグを 3 度指定すると、 セキュリティインデックスとサービス ID を表示します。 .LP アボートパケットに対しては、エラーコードが表示されます。 ただし、Ubik ビーコンパケットは例外です (Ubik プロトコルでは、アボートパケットは、肯定投票に使用されるからです)。 .LP AFS 要求は非常に大きく、 \fIsnaplen\fP を増やさなければ多くの引数が表示されないことに注意してください。 AFS トラフィックを見るには `\fB-s 256\fP' を試してみてください。 .LP AFS 応答パケットは、明示的には RPC 操作を識別しません。 代りに \fItcpdump\fP が「最近の」要求の追跡を行い、 応答に対応する要求のマッチングを、 呼び出し番号とサービス ID を使用して行います。 応答パケットが対応する要求パケットに近くないと、 パーズできないかもしれません。 .HD KIP AppleTalk (DDP in UDP) .LP UDP データグラムでカプセル化された AppleTalk DDP パケットは、カプセル化 を解かれ、DDP パケットとしてダンプされます (全ての UDP ヘッダ情報は破棄 されます)。 ファイル .I /etc/atalk.names が、AppleTalk ネットワークおよびノード番号を名前に変換するのに用い られます。 本ファイルの内容は、以下のように記述されます。 .RS .nf .sp .5 \fInumber name\fP \f(CW1.254 ether 16.1 icsd-net 1.254.110 ace\fR .sp .5 .fi .RE 最初の 2 行は、AppleTalk ネットワーク名を決めています。3 行めは、 特定のホストの名前を決めています (ホストは、3 オクテット目の有無で ネットワークと区別されます。ネットワーク番号は、2 オクテットの数字 から、ホスト番号は 3 オクテットの数字から構成される必要があります。) 数字と名前は、空白文字もしくはタブ文字で区切られます。この .I /etc/atalk.names ファイルは、空行もしくは、`#' 文字で始まるコメント行を含んでもかま いません。 .LP AppleTalk アドレスは、以下のように表示されます。 .RS .nf .sp .5 \fInet.host.port\fP \f(CW144.1.209.2 > icsd-net.112.220 office.2 > icsd-net.112.220 jssmag.149.235 > icsd-net.2\fR .sp .5 .fi .RE (もし、この .I /etc/atalk.names がないか、このファイルの中にホスト番号及びネットワーク番号のエントリが 存在しない場合には、アドレスは数字で表示されます。) 最初の例は、ネットワーク 144.1 の中のノード 209 の NBP (DDP port 2) が、ネットワーク icsd のノード 112 のホストの ポート 220 を開いている何者かにデータを送信しています。 次の行は、1 行めとほぼ同じ例ですが、始点のノード名が既知である (`office') ところが異なります。 3 行目の例は、ネットワーク jssmag のノード 149 のポート 235 から、icsd-net の NBP ポートにブロードキャストでデータ送信をしています (ブロードキャストアドレス (255) は、ホスト番号なしでネットワーク番号のみ が表示されているところでわかります。このことから、/etc/atalk.names では ノード名とネットワーク名を区別する方がよいことが分かります)。 .LP NBP (name binding protocol) および ATP (AppleTalk transaction protocol) パケットでは、その内容は解釈されます。 他のプロトコルは、プロトコル名 (もしくは、プロトコルが登録されていない場 合には、プロトコル番号) およびパケットサイズをダンプします。 \fBNBP パケット\fP は、以下のような形式で表示されます。 .RS .nf .sp .5 \s-2\f(CWicsd-net.112.220 > jssmag.2: nbp-lkup 190: "=:LaserWriter@*" jssmag.209.2 > icsd-net.112.220: nbp-reply 190: "RM1140:LaserWriter@*" 250 techpit.2 > icsd-net.112.220: nbp-reply 190: "techpit:LaserWriter@*" 186\fR\s+2 .sp .5 .fi .RE 最初の行は、レーザライタの名前検索要求であり、ネットワーク icsd のホスト 112 から送られ、ネットワーク jssmag へとブロードキャストされています。 検索のための nbp の ID は 190 です。 次の行は jssmag.209 からの、この要求の応答 (同じ ID を持つことに注意して下さ い) で、 ポート 250 に登録された RM1140 という名前のレーザライタがあると答 えています。 3 行めは、同じ要求に対する他のホストからの応答で、 ホスト techpit が、ポート 186 に登録されたレーザライタ "techpit" を持ってい ると答えています。 \fBATP パケット\fP の形式は、以下のように表示されます。 .RS .nf .sp .5 \s-2\f(CWjssmag.209.165 > helios.132: atp-req 12266<0-7> 0xae030001 helios.132 > jssmag.209.165: atp-resp 12266:0 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:1 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:2 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:3 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:4 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:5 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:6 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp*12266:7 (512) 0xae040000 jssmag.209.165 > helios.132: atp-req 12266<3,5> 0xae030001 helios.132 > jssmag.209.165: atp-resp 12266:3 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:5 (512) 0xae040000 jssmag.209.165 > helios.132: atp-rel 12266<0-7> 0xae030001 jssmag.209.133 > helios.132: atp-req* 12267<0-7> 0xae030002\fR\s+2 .sp .5 .fi .RE jssmag.209 は、ホスト helios に対し最大8個 ('<0-7>') までのパケットを 要求することで、トランザクション ID 12266 を開始します。行の最後の 16 進数は、 要求の中の「ユーザデータ」のフィールドの値です。 .LP helios は、8 つの 512 バイトのパケットで応答しています。トランザクション ID の後につづく「:数」は、パケットシーケンス番号を、括弧中の数値は ATP ヘッダ を除いたパケット中のデータ量を示しています。パケットシーケンス 7 のところ の `*' は、EOM ビットが設定されていることを示しています。 .LP jssmag.209 は、パケットシーケンス番号 3 と 5 のパケットの再送要求をしています。 helios はそれらを再送し、その後 jssmag.209 はトランザクションを解放します。 最後の行で、jssmag.209 は次の要求を開始します。この要求の表示 で付加されている `*' は、XO (`exactly once') が設定されていないことを示します。 .HD IP フラグメンテーション .LP フラグメントのあるインターネットデータグラムは、以下のように表示されます。 .RS .nf .sp .5 \fB(frag \fIid\fB:\fIsize\fB@\fIoffset\fB+)\fR \fB(frag \fIid\fB:\fIsize\fB@\fIoffset\fB)\fR .sp .5 .fi .RE (最初の形式では、まだフラグメントがあることを示し、2 番めの形式は、 これが最後のフラグメントであることを示しています。) .LP \fIid\fP は、フラグメント ID です。\fIsize\fP は、フラグメントサイズを バイト単位であらわしたものです。ただし IP ヘッダサイズは含みません。 \fIoffset\fP は、元のデータグラムでの本フラグメントのオフセットをバイト 単位であらわしたものです。 .LP フラグメント情報は、各フラグメントごとに表示されます。最初の フラグメントには、上位レベルのプロトコルヘッダが含まれるので、フラグ情 報がプロトコル情報の後に表示されます。2 つ目以降のフラグメントについて は、上位レベルのプロトコルヘッダを含まないので、フラグ情報は始点およ び終点アドレスの後ろに表示されます。 例えば、これは arizona.edu から lbl-rtsg.arpa への CSNET 接続での ftp の様子の一部分ですが、どうやら 576 バイト以上のデータグラムを扱えないよ うです。 .RS .nf .sp .5 \s-2\f(CWarizona.ftp-data > rtsg.1170: . 1024:1332(308) ack 1 win 4096 (frag 595a:328@0+) arizona > rtsg: (frag 595a:204@328) rtsg.1170 > arizona.ftp-data: . ack 1536 win 2560\fP\s+2 .sp .5 .fi .RE 注意すべきことがいくつかあります。まず最初に、2 行目は ポート番号を含みません。これは、TCP プロトコル情報は、最初のフラグメント に全て入っており、後のフラグメントを出力する時にはポート番号やシーケンス 番号を知る術がないからです。 次に、最初の行の TCP シーケンス情報は、パケットが 308 バイトのユーザデータ を持ってるかのように表示されますが、実際には 512 バイトのユーザデータを 持っています (308 バイトが最初のフラグ分で、204 バイトが 2 番目のフラグ分で す)。シーケンススペースの穴をさがしたり、パケットの ack の対応が正しい かをこのデータで見ようとしてはいけません。 .LP フラグメント不可フラグが設定されたパケットは、最後の部分に \fB(DF)\fP と 印が付けられます。 .HD タイムスタンプ .LP デフォルトでは、すべての出力行は最初にタイムスタンプが出力されます。 タイムスタンプは、以下の形式で、現在のクロックタイムを表示します .RS .nf \fIhh:mm:ss.frac\fP .fi .RE そして、クロックの精度は、カーネルクロックの精度に依存します。 タイムスタンプは、カーネルが最初にパケットを見つけた時間を反映します。 イーサネットインタフェースがケーブルからパケットを取り出してカーネルが 「新規パケット」割り込みを受け付けるまでのタイムラグなどは補正されません .SH 関連項目 bpf(4), pcap(3) .SH 作者 元々の作者は次の通りです: .LP Van Jacobson, Craig Leres and Steven McCanne, all of the Lawrence Berkeley National Laboratory, University of California, Berkeley, CA. .LP 現在は tcpdump.org で管理されています。 .LP 現在のバージョンは http で次のところから取得可能です: .LP .RS .I http://www.tcpdump.org/ .RE .LP 元々の配布は匿名 ftp で次のところから取得可能です: .RS .I ftp://ftp.ee.lbl.gov/tcpdump.tar.Z .RE .LP IPv6/IPsec サポートは WIDE/KAME プロジェクトが追加しました。 本プログラムは、特定の構成においては、 Eric Young の SSLeay ライブラリを使用します。 .SH バグ 問題、バグ、希望の機能拡張等については次のところに送ってください: .LP .RS tcpdump-workers@tcpdump.org .RE .LP ソースコードの寄贈等については次のところに送ってください: .LP .RS patches@tcpdump.org .RE .LP NIT では、外に出ていくトラフィックを観察できません。BPF ならできます。 後者を用いることを推奨します。 .LP 2.0[.x] カーネルの Linux システムにおいて: .IP ループバックデバイス上のパケットは 2 度観測されます。 .IP カーネル内でのパケットフィルタリングは不可能であり、 全パケットがカーネルからコピーされてユーザモードでフィルタされます。 .IP スナップショットの長さ部分ではなく、パケット全体が、 カーネルからコピーされます (2.0[.x] のパケット捕捉機構は、 パケットの一部をユーザランドへコピーするように依頼されると、 パケットの正しい長さを報告しません。 このため、ほとんどの IP パケットが .BR tcpdump でエラーとなってしまいます)。 .IP いくつかの PPP デバイス上での捕捉は、正しく動作しません。 .LP 2.2 以降のカーネルにアップグレードすることをお勧めします。 .LP IP フラグメントを再構成するか、もしくは少なくとも上位プロトコルの正し いデータサイズを計算するように設計しなおす必要があります。 .LP ネームサーバについての逆引きについては、正しくダンプされません。 実際の要求ではなく、(empty) クエスチョンセクションが、 アンサーセクションに出力されます。 逆引きについてはそれ自体がバグであると信じ、 \fItcpdump\fP ではなく逆引きを要求する プログラムを修正するべきと考える人達もいます。 .LP 夏時間との変更の時にパケットトレースを行うと、タイムスタンプは変更後の 時刻とはずれてしまいます (時間変化は無視されます)。 .LP Token Ring ヘッダ以外のフィールドに対するフィルタ式は、 始点経路制御された Token Ring パケットを正しく扱いません。 .LP 802.11 ヘッダ以外のフィールドに対するフィルタ式は、'To DS' と 'From DS' の 両方をもつ 802.11 データパケットを正しく扱いません。 .LP .BR "ip6 proto" はヘッダチェーンを追跡すべきですが、現在のところはそうなっていません。 このために .BR "ip6 protochain" が提供されています。 .LP 例えば \fBtcp[0]\fP といったトランスポート層ヘッダに対する演算は、 IPv6 パケットに対しては動作しません。 IPv4 パケットだけを見ます。 diff --git a/ja_JP.eucJP/man/man1/tcsh.1 b/ja_JP.eucJP/man/man1/tcsh.1 index 462874e14c..8dad64ede3 100644 --- a/ja_JP.eucJP/man/man1/tcsh.1 +++ b/ja_JP.eucJP/man/man1/tcsh.1 @@ -1,5841 +1,5841 @@ .\" 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 "19 May 2004" "Astron 6.13.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 (組み込みコマンド の解説を参照) を実行します。 .TP 8 .B yank-pop \fR(M-y) \fIyank\fR や他の \fIyank-pop\fR の直後に実行されると、 ヤンクされた文字列をキルリング中の 1 つ前の文字列に置き換えます。 これはキルリングを回転させる効果も持っており、この文字列は、 以降の \fIyank\fR コマンドによって、最も最近キルされた文字列として扱われます。 \fIyank-pop\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 ヒストリ参照に、イベント指定のない単語指示子があっても構いません。 その場合、直前のコマンドを参照します。 `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 BS2000 では、\fIbs2cmd\fR は下層の BS2000/OSD オペレーティングシステムの コマンドを実行します。 .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 についても参照してください。 .TP 8 .B alloc 動的に取得しているメモリのうちの使用量と空き容量を表示します。 何らかの引数を与えるとブロックサイズごとの使用中 / 空きブロックの数を 表示します。このコマンドの出力はシステムによって大きく異なります。 VAX 以外のシステムでは、異なるメモリ管理を行っているかもしれない からです。 .TP 8 .B bg \fR[\fB%\fIjob\fR ...] 指定したジョブ (引数がなければ現在のジョブ) をバックグラウンドに 移動します。もしそれらが停止していれば再開されます。\fIjob\fR は 以下の \fBJobs\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 bs2cmd \fIbs2000-command\fR (+) 実行するために、\fIbs2000-command\fR を BS2000 のコマンドインタプリタへ渡します。 インタラクティブではないコマンドのみを実行できます。 また /EXECUTE や /CALL-PROCEDURE のような 現在のプロセスイメージをオーバレイするようなコマンドは実行できません。 (BS2000 のみ) .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 .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 \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 .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) ピリオド、ハイフン、および アンダスコア (`.', `-', `_') を単語の区切り文字と みなし、ハイフンとアンダスコアを等価なものとみなします。 `igncase' に設定された場合、補完は大文字小文字を区別しません。 .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 されてしまうのを防ぐことができます。 歴史的に、無限ループを避けるため、 この設定は 26 回の連続した EOF の後に終了します。 数値 \fIn\fR を設定している場合には、 シェルは \fIn - 1\fR 回連続した \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' より小さい値を設定すると、 最近キルした文字列のみをシェルは保持します。 文字列は、\fIbackward-delete-word\fR、\fIkill-line\fR コマンドなどや \fIcopy-region-as-kill\fR コマンドのような、テキスト中の文字列を 削除 (キル) する編集コマンドによってキルリングに挿入されます。 \fIyank\fR 編集コマンドは、最も最近キルされた文字列を コマンドラインにヤンクし、\fIyank-pop\fR (\fBEditor commands\fR 参照) は、 それより以前にキルされた文字列をヤンクするのに使われます。 .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' に設定すると、シェルはパス名のように見える引数を 実際に展開して、シンボリックリンクを元に戻そうとします。 これは組み込みコマンドのみならず、すべてのコマンドに影響します。 残念ながら、これは認識しにくいファイル名 (たとえばコマンドオプションに埋めこまれたものなど) には動作しません。 クォートすれば展開は行われません。 たいていの場合はこの設定が便利ですが、 展開すべき引数を認識できないと、誤解や混乱の元になるかもしれません。 妥協案として、 `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, \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 までに制限されています。 .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.13.00 (Astron) 2004-05-19 に関するドキュメントです。 .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/man1/vacation.1 b/ja_JP.eucJP/man/man1/vacation.1 index 465251caf1..b1ca85ade6 100644 --- a/ja_JP.eucJP/man/man1/vacation.1 +++ b/ja_JP.eucJP/man/man1/vacation.1 @@ -1,294 +1,295 @@ .\" Copyright (c) 1999-2002 Sendmail, Inc. and its suppliers. .\" All rights reserved. .\" Copyright (c) 1985, 1987, 1990, 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" .\" By using this file, you agree to the terms and conditions set .\" forth in the LICENSE file which can be found at the top level of .\" the sendmail distribution. .\" -.\" $Id: vacation.1,v 1.21 2004-09-24 06:50:37 metal Exp $ +.\" $Id: vacation.1,v 1.22 2006-03-08 07:43:47 metal Exp $ .\" .\" $FreeBSD$ -.TH VACATION 1 "$Date: 2004-09-24 06:50:37 $" +.TH VACATION 1 "$Date: 2006-03-08 07:43:47 $" .SH 名称 .B vacation \- 電子メールの自動応答器 .SH 書式 .B vacation .RB [ \-a .IR alias ] .RB [ \-C .IR cffile ] .RB [ \-d ] .RB [ \-f .IR database ] .RB [ \-i ] .RB [ \-I ] .RB [ \-j ] .RB [ \-l ] .RB [ \-m .IR message ] .RB [ \-R .IR returnaddr ] .RB [ \-r .IR interval ] .RB [ \-s .IR address ] .RB [ \-t .IR time ] .RB [ \-U ] .RB [ \-x ] .RB [ \-z ] .I login .SH 解説 .B vacation は、メールの送信者に対して、あなたが現在メールを 読んでいない旨を通知するメッセージを返送します。 このメッセージは、デフォルトでは .IR ~/.vacation.msg です。 各送信者に対するメッセージ送信は、応答間隔中には 1 通しか実行されません (後述の .B \-r を参照してください)。 通常、 .I .forward ファイルの中で使われます。 例えば、あなたの .I .forward ファイルの中で次のように記述します。 .IP \eeric, "|/usr/bin/vacation -a allman eric" .PP これで、あなた自身 (ここではログイン名が eric であるとします) にメッセージを送るとともに、 ``eric'' もしくは ``allman'' に宛てられたメッセージに自動応答します。 .PP 以下のオプションを指定することができます。 .TP .BI \-a " alias" .I alias 宛てのメッセージをユーザのログイン名に送られたメールと同様に処理します。 .TP .BI \-C " cfpath" sendmail の設定ファイルのパス名を指定します。 .B \-U が指定された場合、本オプションは無視されます。 本オプションのデフォルトは、sendmail の標準の設定ファイルであり、 ほとんどのシステムでは /etc/mail/sendmail.cf です。 .TP .B \-d エラーおよびデバッグのメッセージを、syslog の代りに標準エラーへ送ります。 本オプションを使用しない場合、正しくない引数や存在しない .I login で .B vacation を呼び出す等の致命的なエラーは、 syslog(8) を使用して、システムログファイルへ記録します。 コマンドラインのみで使用してください。 .I .forward ファイルでは使用しないでください。 .TP .BI \-f " filename" データベース名として、 .I filename を .IR ~/.vacation.db または .IR ~/.vacation.{dir,pag} の代りに使用します。 .I filename が / で開始しない場合には、~ からの相対となります。 .TP .B \-i vacation データベースを初期化します。 これは、 .I .forward ファイルを変更する前に行なっておく必要があります。 コマンドラインのみで使用してください。 .I .forward ファイルでは使用しないでください。 .TP .B \-I .B \-i と同じです (後方互換性のためにあります)。 コマンドラインのみで使用してください。 .I .forward ファイルでは使用しないでください。 .TP .B \-j login がメッセージの宛先のリストにあるかどうかに関わらず メッセージに応答します。 これによって何が起こるかがわからないなら、このフラグは使用しないでください。 例えば、これによって .i vacation がメーリングリストのメッセージに返答し、 その結果あなたがそのメーリングリストから外されるかもしれません。 .TP .B \-l vacation データベースファイルの内容を列挙します。 この情報には、 アドレスと、それぞれのアドレスにおいて最後に自動応答した時刻を含みます。 コマンドラインのみで使用してください。 .I .forward ファイルでは使用しないでください。 .TP .BI \-m " filename" 送信されるメッセージを含むファイルとして、 .I filename を .IR ~/.vacation.msg の代りに使用します。 .I filename が / で開始しない場合には、~ からの相対となります。 .TP .BI \-R " returnaddr" 応答のエンベロープの送信者アドレスを設定します。 .TP .BI \-r " interval" 自動応答の間隔を .I interval 日に設定します。デフォルトは 1 週間です。間隔を ``0'' -に設定すると、全てのメッセージに対して自動応答を行ないます。 +または ``infinite'' -(実際には数字以外の文字ならなんでも) を設定すると、 +(実際には数字以外の文字ならなんでも)に設定すると、 同じ送信者には一度しか自動応答を行ないません。 .B \-r -オプションは、vacation データベース初期化時のみ使用してください (前述の +オプションは、vacation データベースが初期化されている時のみ使用してください +(前述の .B \-i を参照してください)。 .TP .BI \-s " address" 受け付けるメールの .I From 行にある送信者アドレスの代りに、 .I address を、vacation メッセージの受信者として使用します。 .TP .BI \-t " time" 無視されます。 Sun の vacation プログラムとの互換性のためだけに存在します。 .TP .B \-U パスワードファイル中の .I login の検索を試みないようにします。 オプション -f と -m を使用して、 データベースとメッセージファイルを指定することが必要です。 これらのオプションを使用する場合は普通、ホームディレクトリが無いからです。 .TP .B \-x 除外リストを標準入力から読み込みます (行毎に 1 アドレス)。 除外リストに含まれるアドレスから届くメールに対しては、 .BR vacation は返送しません。 除外リストの要素として ``@domain'' を指定することで、ドメイン全体を除外することも可能です。 コマンドラインのみで使用してください。 .I .forward ファイルでは使用しないでください。 .TP .B \-z vacation メッセージの送信者を、ユーザの代りに ``<>'' にします。 vacation メッセージの送信者を空の逆パスにすることは standards-track RFC は求めていませんので、RFC 違反となるかもしれません。 .PP .B vacation はメールの送信者を決定するために標準入力の 1 行目の UNIX ``From'' 行を読みます。この ``From'' 行は sendmail(8) が自動的に付加するものです。 .PP .I login (もしくは .B \-a オプションによって指定された .I alias ) がメールの ``To:'' もしくは ``Cc:'' ヘッダになければ、自動応答は送られません。また、 ``???-REQUEST'', ``???-RELAY'', ``???-OWNER'', ``OWNER-???'', ``Postmaster'', ``UUCP'', ``MAILER'', ``MAILER-DAEMON'' から (大文字、小文字は区別されません) のメールや、 ``Precedence: bulk'' や ``Precedence: junk'' の行がヘッダに含まれているメールに対しても自動応答は送られません。 あなたへのメールの送信者のアドレスは ホームディレクトリの -.I \&.vacation.db +.I .vacation.db +または +.I .vacation.{dir,pag} ファイル中で db(3) または dbm(3) を使用して管理されます。 .PP .B vacation -または -.I .vacation.{dir,pag} ではホームディレクトリに -.I .vacation.msg +.IR .vacation.msg ファイルを置くことによって、 あなたへのメールの送信者へのメッセージを指定します。 このファイルは (ヘッダを含む) 完全なメッセージでなければなりません。 以下に例を示します。 .IP .nf From: eric@CS.Berkeley.EDU (Eric Allman) Subject: I am on vacation Delivered-By-The-Graces-Of: The Vacation program Precedence: bulk わたしは 7 月 22 日まで休暇をとっています。緊急の場合は Keith Bostic に連絡願います。 --eric .fi .PP .B Vacation (訳註)返答メッセージに日本語を使う場合には、 漢字コードは JIS (ISO-2022-JP) でなければいけません。 .\" 上記(訳註)は日本語対応のために追加しました。 .\" 2.2.1-RELEASE 対象 .\" by mihara@prd.fc.nec.co.jp (Apr. 4, 1997) .SH 関連ファイル .TP 1.8i ~/.vacation.db db(3) 用のデフォルトのデータベースファイル .TP 1.8i ~/.vacation.{dir,pag} dbm(3) 用のデフォルトのデータベースファイル .TP ~/.vacation.msg デフォルトの送信メッセージ .SH 関連項目 sendmail(8), syslogd(8) .SH 歴史 .B vacation コマンドは 4.3BSD から登場しました。 diff --git a/ja_JP.eucJP/man/man2/kse.2 b/ja_JP.eucJP/man/man2/kse.2 index 8b9f4dfa98..6093672a95 100644 --- a/ja_JP.eucJP/man/man2/kse.2 +++ b/ja_JP.eucJP/man/man2/kse.2 @@ -1,714 +1,716 @@ .\" Copyright (c) 2002 Packet Design, LLC. .\" All rights reserved. .\" .\" Subject to the following obligations and disclaimer of warranty, .\" use and redistribution of this software, in source or object code .\" forms, with or without modifications are expressly permitted by .\" Packet Design; provided, however, that: .\" .\" (i) Any and all reproductions of the source or object code .\" must include the copyright notice above and the following .\" disclaimer of warranties; and .\" (ii) No rights are granted, in any manner or form, to use .\" Packet Design trademarks, including the mark "PACKET DESIGN" .\" on advertising, endorsements, or otherwise except as such .\" appears in the above copyright notice or in the software. .\" .\" THIS SOFTWARE IS BEING PROVIDED BY PACKET DESIGN "AS IS", AND .\" TO THE MAXIMUM EXTENT PERMITTED BY LAW, PACKET DESIGN MAKES NO .\" REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING .\" THIS SOFTWARE, INCLUDING WITHOUT LIMITATION, ANY AND ALL IMPLIED .\" WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, .\" OR NON-INFRINGEMENT. PACKET DESIGN DOES NOT WARRANT, GUARANTEE, .\" OR MAKE ANY REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS .\" OF THE USE OF THIS SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY, .\" RELIABILITY OR OTHERWISE. IN NO EVENT SHALL PACKET DESIGN BE .\" LIABLE FOR ANY DAMAGES RESULTING FROM OR ARISING OUT OF ANY USE .\" OF THIS SOFTWARE, INCLUDING WITHOUT LIMITATION, ANY DIRECT, .\" INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, PUNITIVE, OR CONSEQUENTIAL .\" DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF .\" USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER 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 PACKET DESIGN IS ADVISED OF .\" THE POSSIBILITY OF SUCH DAMAGE. .\" .\" %FreeBSD: src/lib/libc/sys/kse.2,v 1.13.2.2 2005/02/28 03:32:34 brueffer Exp % .\" .\" $FreeBSD$ .\" .Dd September 10, 2002 .Dt KSE 2 .Os .Sh 名称 .Nm kse .Nd ユーザスレッドのためのカーネルサポート .Sh ライブラリ .Lb libc .Sh 書式 .In sys/types.h .In sys/kse.h .Ft int .Fn kse_create "struct kse_mailbox *mbx" "int newgroup" .Ft int .Fn kse_exit void .Ft int .Fn kse_release "struct timespec *timeout" .Ft int .Fn kse_switchin "mcontext_t *mcp" "long val" "long *loc" .Ft int .Fn kse_thr_interrupt "struct kse_thr_mailbox *tmbx" .Ft int .Fn kse_wakeup "struct kse_mailbox *mbx" .Sh 解説 これらのシステムコールはマルチスレッド化されたプロセスのための カーネルサポートを実装しています。 .\" .Ss 概要 .\" -伝統的にユーザスレッディングは、次の 2 つの方法の 1 つで実装されてきました。 -全てのスレッドはユーザ空間で管理され、カーネルは全てのスレッディングを -認識しない方法 +伝統的にユーザスレッディングは、 +次の 2 つの方法のうちのどちらか一方で実装されてきました。 +まず全てのスレッドはユーザ空間で管理され、 +カーネルはスレッディングを全く認識しない方法 .Dq ( "N 対 1" としても知られています)。 -または、個々のスレッドのために共通のメモリ空間を分け合う -分離したプロセスを作成する方法 +そして、個々のスレッドに対して +共通のメモリ空間を共有する別々のプロセスが生成される方法 .Dq ( "N 対 N" としても知られています)。 これらのアプローチは長所と短所を持っています: .Bl -column "- システムコールのラッピング必須" "+ システムコールのラッピング不要" .It Sy "ユーザスレッディング カーネルスレッディング" .It "+ 軽量 - 重量" .It "+ ユーザ制御スケジューリング - カーネル制御スケジューリング" .It "- システムコールのラッピング必須 + システムコールのラッピング不要" .It "- マルチ CPU の有効活用不可 + マルチ CPU の有効活用可能" .El .Pp KSE システムはユーザスレッディングおよびカーネルスレッディングの両方の -長所を成し遂げる混成のアプローチです。 +長所を生かす複合型アプローチです。 KSE システムの根本的な哲学は、スケジューリングを決定するための -ユーザスレッディングライブラリの能力を全く取り除くことなく、 -ユーザスレッディングのためのカーネルサポートを与えることです。 -カーネルからユーザスレッドへの upcall 機構は、スケジューリングの決定が -必要とされるときにはいつでも、ユーザスレッディングライブラリに制御を -移すために使用されます。 -任意の数のユーザスレッドは、カーネルによって供給される固定数の仮想 CPU 上に -多重化されます。 +ユーザスレッディングライブラリの能力を全く減じることなく、 +ユーザスレッディングのためのカーネルサポートを実現することです。 +スケジューリングの決定が必要になった時に +ユーザスレッディングライブラリに制御を渡すために、 +カーネルからユーザスレッドへの upcall 機構を使用します。 +任意の数のユーザスレッドが、 +カーネルによって供給される固定数の仮想 CPU 上に多重化されます。 これは .Dq "N 対 M" スレッディング機構と考えることができます。 .Pp -このアプローチのいくつかの一般的な裏の意味は以下を含みます: +このアプローチが暗に意味する一般的な特性としては以下のものがあります: .Bl -bullet .It ユーザプロセスはマルチプロセッサマシン上で複数のスレッドを 同時に実行することが可能です。 -カーネルは、プロセス仮想 CPU がそれが望むようにスケジュールすることを -承諾します。これらは、実際の複数の CPU 上で同時に実行されることができます。 +カーネルは、プロセスに対して自由にスケジュールできる仮想 CPU 群を提供します。 +これらは、複数の実 CPU 上で同時に実行できます。 .It -スレッドがブロックされたときにユーザプロセスが他のスレッドをスケジュール -できるように、カーネル内でブロックする全ての操作は非同期になります。 +スレッドがブロックされた際にユーザプロセスが +他のスレッドをスケジュールできるよう、 +カーネル内でブロックする全ての操作は非同期になります。 .It -同じプロセス内の複数のスレッドスケジューラが可能で、それらは互いに独立して -操作することができます。 +同じプロセス内に複数のスレッドスケジューラが存在可能で、 +それらは互いに独立して動くことができます。 .El .\" .Ss 定義 .\" -KSE はユーザプロセスが実際に同時の複数の +KSE はユーザプロセスが複数の .Sy スレッド -の実行を可能にします。 -これらの幾つかは、その他のスレッドが実行中またはユーザ空間で -ブッロクされている間に、カーネルの中でブロックされることが可能です。 +を同時に実行できるようにします。 +スレッドのうちの幾つかは、 +その他のスレッドがユーザ空間で実行中またはブロックされている間であっても、 +カーネル内でブロックさせて構いません。 .Sy カーネルスケジューリングの実体 -(kernel scheduling entity, KSE) はスレッドの実行のためにプロセスに承諾された +(kernel scheduling entity, KSE) はスレッドの実行のためにプロセスに供された .Dq "仮想 CPU" です。 -現在実行されているスレッドは常に、厳密に 1 つのユーザ空間または -カーネルの中で動作しているどちらかの KSE に関連付けられています。 -その KSE はそのスレッドに +現在実行されているスレッドは、 +ユーザ空間またはカーネルのどちらで実行されていても、 +厳密に 1 つの KSE に常に関連付けられています。 +KSE はスレッドに .Sy 割り当てられている -と言われます。 +といえます。 .Pp -その KSE が関連付けられた +ある KSE が関連付けられた .Sy メールボックス -(下記参照) を持っていて、そのスレッドが関連付けられた +(下記参照) を持ち、そのスレッドが関連付けられた .Sy スレッドメールボックス -(これも下記参照) を持っていて、さらに以下のどれかが発生したときに、その KSE が +(これも下記参照) を持ち、さらに以下のどれかが発生したとき、その KSE は .Sy 割り当てられていない -状態になり、関連付けられたスレッドは停止されます: +状態になり、関連付けられたスレッドは中断されます: .Bl -bullet .It -そのスレッドがブロックを伴うシステムコールを実行する。 +そのスレッドがブロックを伴うシステムコールを実行した。 .It -スレッドが、カーネルがすぐには満たすことが可能ではない他の全ての要求を行う。 -例えばディスクからデータを読み出すために必要なメモリページに -アクセスすることでページフォルト発生させることです。 +スレッドがカーネルがすぐには満たすことができない要求を行った。 +例えばディスクからデータを読み出す必要があるメモリページにアクセスし +ページフォルトを起こした。 .It -カーネル内で先にブロックされていた他のスレッドが、カーネル内のその作業を -完了し (または +カーネル内で先にブロックされていた他のスレッドが、 +カーネル内の作業を完了し (または .Sy 割り込まれ ) -、ユーザ空間へ戻る準備ができ、さらに現在のスレッドがユーザ空間に -戻ろうとしている。 +ユーザ空間へ戻れるようになり、 +さらに現在のスレッドがユーザ空間に戻っている最中だった。 .It -シグナルがプロセスに配信され、この KSE がそのシグナルを配信するために -選択される。 +シグナルがプロセスに配信され、 +この KSE がそのシグナルを配信するために選択された。 .El .Pp -言い換えると、スケジューリングの決定が行われなければならなくなるとすぐに、 +言い換えると、スケジューリングの決定が行われようとするとき、 その KSE は割り当てられていない状態になります。 なぜならば、カーネルはそのプロセスの他のどの実行可能なスレッドを -スケジュールするべきかを推定しないからです。 +スケジュールするべきか推定しないからです。 割り当てられていない KSE は常に可能な限り早く、 -ユーザプロセスが次に利用するべき KSE をどのように決定するかを可能にする +ユーザプロセスがその KSE を次にどのように利用するかを決定できる .Sy upcall -機構 (下記に記述されています) を介してユーザ空間に戻ります。 -KSE は常に、割り当てが解除される前に、カーネル内で可能な限り多くの作業を -完了させます。 +機構 (後述) を介してユーザ空間に戻ります。 +KSE は常に、割り当てが解除される前に、 +カーネル内で可能な限り多くの作業を完了させます。 .Pp .Sy "KSE グループ" -は均等にスケジュールされ、その KSE グループに関連付けられた同一のスレッドの -プールへのアクセスを共有する KSE の集合です。 -KSE グループはカーネルスケジューリングの優先度が割り当てられることができる +は均等にスケジュールされ、 +その KSE グループに関連付けられた同一のスレッドプールへのアクセスを共有する +KSE の集合です。 +KSE グループはカーネルスケジューリングの優先度が割り当てられる 最小の実体です。 -プロセスのスケジューリングとアカウンティングのため、それぞれの KSE グループは -伝統的なスレッド化されていないプロセスと同様にカウントします。 +プロセスのスケジューリングとアカウンティングの目的には、 +それぞれの KSE グループは +伝統的なスレッド化されていないプロセスと同様にみなされます。 KSE グループの中の個々の KSE は実際上、見分けがつきません。 -また、KSE グループの中のあらゆる KSE は、その KSE グループに -関連付けられた (カーネル内の) あらゆる実行可能なスレッドに、 -カーネルによって割り当てられることができます。 -実際問題として、カーネルはキャッシュの動作を最適化するために、スレッドと -実際の CPU との密接な関係を保存しようと試みますが、 -これはユーザプロセスには不可視です。 -(密接な関係はまだ実装されていません) -.Pp -それぞれの KSE はユーザプロセスによって供給された唯一の +また、KSE グループの中のすべての KSE は、その KSE グループに +関連付けられた (カーネル内の) どの実行可能なスレッドに対してでも +カーネルによって割り当てられえます。 +実際問題として、カーネルはキャッシュの動作を最適化するために、 +スレッドと実際の CPU 群との密接な関係を保存しようと試みますが、 +これはユーザプロセスには不可視です +(密接な関係はまだ実装されていません)。 +.Pp +それぞれの KSE はユーザプロセスによって供給される独自の .Sy "KSE メールボックス" を持っています。 メールボックスは .Sy "upcall 関数" -へのポインタを含む制御構造体とユーザスタックで構成されています。 +へのポインタとユーザスタックを含む制御構造体で構成されています。 KSE は割り当てを解除されると必ずこの関数を実行します。 -カーネルはこの構造体を、実行可能になっているスレッド、およびそれぞれの -upcall の前に配信されたシグナルについての情報を更新します。 +カーネルはこの構造体の、実行可能になっているスレッド、およびそれぞれの +upcall の前に配信されていたシグナルについての情報を更新します。 upcall はクリティカルセクションの間は、ユーザスレッドの スケジューリングコードによって一時的にブロックされることがあります。 .Pp -同様にそれぞれのユーザスレッドは唯一の +同様にそれぞれのユーザスレッドは独自の .Sy "スレッドメールボックス" を持っています。 カーネルとユーザスレッドスケジューラが通信するときに、 -スレッドはこれらのメールボックスへのポインタを使用して参照されます。 +スレッドはこれらのメールボックスへのポインタを通して参照されます。 それぞれの KSE のメールボックスは、その KSE が現在実行している ユーザスレッドのメールボックスへのポインタを含んでいます。 このポインタはカーネル内でスレッドがブロックするときに、保存されます。 .Pp カーネル内でブロックされていたスレッドがユーザ空間に戻る準備ができたときには -必ず、そのスレッドは KSE グループの +そのスレッドは必ず、KSE グループの .Sy 完了した スレッドのリストに追加されます。 このリストはスレッドメールボックスのリンクされたリストとして、 -次の upcall でユーザコードに公開されます。 -.Pp -カーネルの中で同時にブロックされることができる KSE グループの中の +次の upcall でユーザコードに提示されます。 +.Pp +カーネル内で同時にブロックされる KSE グループ中の スレッド数には、カーネルに起因する制限があります (現在、この数はユーザには 不可視です)。 -この制限に達したときには、スレッドの 1 つが完了するまでの間 (または +この制限に達したとき、スレッドの 1 つが完了するまでの間 (または シグナルが配信されるまでの間)、upcall はブロックされ、 その KSE グループのための作業は何も実行されません。 .\" .Ss KSE の管理 .\" -マルチスレッド化するためには、プロセスは初めに +マルチスレッドで動くためには、プロセスは初めに .Fn kse_create を実行しなければなりません。 .Fn kse_create システムコールは新しい KSE を -作成します (本当に最初の実行を除く、下記を参照してください)。 +作成します (本当に最初の実行を除く、下記参照)。 その KSE は .Fa mbx によって指されるメールボックスと関連付けられます。 .Fa newgroup が 0 ではない場合には、その KSE を含む新しい KSE グループも作成されます。 そうでない場合には、その新しい KSE は現在の KSE グループに追加されます。 新しく作成される KSE は最初は割り当てられていません。 そのため、それらの KSE は直ちに upcall します。 .Pp それぞれのプロセスは初めは 1 つのユーザスレッドを -実行する 1 つの KSE グループの中の 1 つの KSE を持っています。 -その KSE は関連付けられたメールボックスを持っていないため、そのスレッドに -割り当てられたままでなければならず、upcall を全く実行しません。 -この結果は伝統的で、スレッド化されていない様式の操作です。 -そのため、特別な場合として、 +実行する 1 つの KSE グループの中に 1 つの KSE を持っています。 +その KSE は関連付けられたメールボックスを持っていないため、 +そのスレッドに割り当てられたままでなければならず、 +upcall を全く実行しません。 +この結果は伝統的で、スレッド化されていない形態での処理です。 +そのため、特別な場合として、この最初のスレッドによる .Fa newgroup -を 0 にしたこの最初のスレッドによる +が 0 である .Fn kse_create の最初の呼び出しは、新しい KSE を作成しません。 代わりに、単に現在の KSE を与えられた KSE メールボックスに関連付け、 -直ちに upcall しない結果となります。 -しかしながら、次にそのスレッドがブロックし、要求された条件になったときに、 -upcall がトリガされます。 +直後の upcall は起こしません。 +しかしながら、次にそのスレッドがブロックし必要とされる条件がそろったときには、 +upcall が引き起こされます。 .Pp カーネルは 1 つの KSE グループの中にシステムの物理的な CPU の数 (この数は .Xr sysctl 3 -変数の +変数 .Va hw.ncpu -として利用可能です) より多い KSE の存在を許可しません。 -CPU より多い KSE を持つことは、その追加の KSE が単に -その他の KSE と実 CPU へのアクセスを競合するだけであるため、 +として取得可能です) より多い KSE の存在を許可しません。 +CPU より多い数の KSE を持つことは、その追加の KSE が単に +その他の KSE と実 CPU 群へのアクセスを競合するだけであるため、 ユーザプロセスにとって全く価値を増やさないでしょう。 そのため、余分な KSE は常に脇に追いやられ、その結果アプリケーションは -まさにより少ない KSE を持っていることと同じになるでしょう。 -どんなに多くの任意のユーザスレッドが存在することになっても、 -利用可能な KSE へのアプリケーションのユーザスレッドの割り当てを取り扱う -ためのユーザスレッドスケジューラに渡ります。 +より少ない KSE を持っていることと全く同じになるでしょう。 +しかし、アプリケーションのユーザスレッドを利用可能な KSE へマッピングする +ユーザスレッドスケジューラの数までは、 +任意の数のユーザスレッドが存在しても構いません。 .Pp .Fn kse_exit -システムコールは、現在実行しているスレッドに割り当てられている KSE を -破壊させます。 -この KSE がこの KSE グループの中の最後の 1 つの場合には、その KSE グループに -関連付けられているスレッドがカーネル内でブロックされたまま残ってはなりません。 -このシステムコールはエラーが無い場合には、戻りません。 +システムコールは、現在実行しているスレッドに割り当てられている +KSE を破棄します。 +この KSE がこの KSE グループの中の最後の 1 つの場合には、 +その KSE グループに関連付けられているスレッドが、 +カーネル内でブロックされたまま残っていてはなりません。 +このシステムコールはエラーがない限り、戻りません。 .Pp 特別な場合として、最後に残っている KSE グループの中の最後に残っている KSE が -このシステムコールを実行する場合には、その KSE は破壊されません。 +このシステムコールを実行する場合には、その KSE は破棄されません。 代わりに、その KSE はそのメールボックスとの関連付けを失うだけで、 .Fn kse_exit は正常に戻ります。 -これはそのプロセスを元に、つまりスレッド化されていない状態に戻します。 +これはそのプロセスを元のスレッド化されていない状態に戻します。 .Pp .Fn kse_release -システムコールは、必要でなくなったときに、現在実行しているスレッドに -関連付けられている KSE を +システムコールは、現在実行しているスレッドに関連付けられている +KSE が必要でなくなったときに、 .Dq 一時保管 -するために使用されます。 -例えば、実行可能なユーザスレッドよりも利用可能な KSE の方が多いときです。 -そのスレッドは upcall に変化しますが、そのようにするための新しい理由が -発生するまでの間スケジュールされることはありません。 -例えば、以前にブロックされていたスレッドが実行可能になる、または -タイムアウトが発生するなどです。 -成功の場合には、 +するために使用します。 +例えば、実行可能なユーザスレッドよりも利用可能な KSE の方が多い場合です。 +そのスレッドは upcall へ転向しますが、 +新しくスケジュールする理由ができるまではそのようにされることはありません。 +例えば、以前にブロックされていたスレッドが実行可能になる、 +またはタイムアウトが発生するといった場合です。 +成功した場合には、 .Fn kse_release は呼び出し側に戻りません。 .Pp .Fn kse_switchin -システムコールは、新しいスレッドがそのスレッドのコンテキストに -切り替わるために、UTS によって使用されることが可能です。 +システムコールは、UTS (ユーザスレッドスケジューラ) が +スレッドのコンテキストを切り替える選択を新たにした際に使用できます。 .Fn kse_switchin の使用はマシンに依存します。 -あるプラットフォームでは新しいコンテキストに切り替わるためのシステムコールを -必要としません。 -一方、他のプラットフォームでは同様の場合に要求されます。 +あるプラットフォームでは新しいコンテキストへの切り替えにシステムコールを +必要としませんが、別のプラットフォームでは特にこの場面で要求されます。 .Pp .Fn kse_wakeup システムコールは .Fn kse_release の反対です。 .Fa mbx -によって指されているメールボックスに関連付けられた (一時保管された) KSE を -upcall にすることで起こします。 -その KSE がすでに他の理由で起こされていた場合には、このシステムコールは -何も起こりません。 +によって指されているメールボックスに関連付けられた (一時保管された) +KSE を起こして upcall させます。 +その KSE がすでに他の理由で起こされていた場合には、 +このシステムコールは何の効果もありません。 .Fa mbx -引数は -.Dq "現在の KSE グループの中の全ての KSE" -を指定するために +引数に .Dv NULL -にすることができます。 +を指定すると +.Dq "現在の KSE グループの中のどの KSE でもよい" +という指定になります。 .Pp .Fn kse_thr_interrupt -システムコールは、現在ブロックされているスレッドに -割り込むために使用されます。 -そのスレッドはカーネルの中でブロックされているか、 -KSE に割り当てられて (例えば、実行中) いなければなりません。 -そのスレッドはその後、割り込まれたという印を付けられます。 -スレッドが割り込みを発生させるシステムコールを実行するとできるだけ -早く (または、スレッドがカーネルの中ですでにブロックされてると直ちに)、 -カーネル操作が完了していないかもしれないのにもかかわらず、 +システムコールは、現在ブロックされているスレッドを一時停止させます。 +そのスレッドはカーネル内でブロックされているか、 +KSE に割り当てられて (つまり実行中) いるか、どちらかでなければなりません。 +その後、そのスレッドには割り込まれたという印が付けられます。 +スレッドが割り込み可能なステムコールを実行するとできるだけ早く +(または、スレッドがカーネル内ですでにブロックされてる場合には直ちに)、 +カーネル処理が完了していない可能性があるかにかかわらず そのスレッドは再度実行可能にされます。 -割り込まれたシステムコール上のこの効果は、すでにシグナルによって -割り込まれていた場合と同様です。 +割り込まれたシステムコール上でのこの効果は、 +すでにシグナルによって割り込まれていた場合と同様です。 通常、これは .Va errno に .Er EINTR -が設定されてエラーが返されたことを意味します。 +を設定してエラーを返したことを意味します。 .\" .Ss シグナル .\" .Pp -現在の実装は特別のシグナルスレッドを作成します。 +現在の実装は特別なシグナルスレッドを作成します。 プロセス内のカーネルスレッド (KSE) はすべてのシグナルをマスクし、 -シグナルスレッドだけがプロセスへ配信されるシグナルを待ちます。 +シグナルスレッドだけがプロセスへ配信されるシグナルを待ち受けます。 シグナルスレッドはユーザスレッドへのシグナルの -ディスパッチに対して責任があります。 +ディスパッチに対して責任を持ちます。 .\" responsible for = 《be 〜》〜に対して責任がある、〜に関与する .Pp この弱点は、多重スレッドが .Fn execve -システムコールを呼び出すなら、そのシグナルマスクとペンディングシグナルは -カーネルで利用可能でないかもしれないことです。 -それらはユーザランドで格納され、カーネルはどこでそれらが得られるか知りません。 +システムコールを呼び出した場合、そのシグナルマスクとペンディングシグナルは +カーネルで利用できないかもしれないことです。 +それらはユーザランドで格納され、 +カーネルはどこからそれを得ればよいかわかりません。 しかしながら、 .Tn POSIX -ではそれらは復元され、新しいプロセスに渡す必要があります。 +ではそれらを復元して、新しいプロセスに渡すことを求めています。 +スレッドが .Fn execve -呼び出しの前のスレッドのマスク設定は、 -古いプロセスがブロックされている状態かもしれない任意のペンディングシグナルを -カーネルに再配信されないとき、問題に近似しています。 -そして、新しいシグナルがマスクの設定と +を呼び出す前にマスクを行うだけでは、 +元のプロセスがブロックしていたペンディングシグナルを +カーネルに再び戻すことができず、またマスクを設定したあと .Fn execve -の間のプロセスに配信されるかもしれないウィンドウを許可します。 -.\" is only a close approximation to the problem の訳はあやしい +が呼ばれる間にプロセスにシグナルが配信されるウィンドウの発生を +許してしまうため、よく似た近似にしかなりません。 .Pp -当分、この問題は特別の組み合わせ -.Fn kse_thr_interrupt Ns / Ns Fn execve -モードを +今のところ、この問題は .Fn kse_thr_interrupt -システムコールに追加することによって解決されています。 -.\" For now = 差し当たり、当分は +システムコールに +.Fn kse_thr_interrupt Ns / Ns Fn execve +の特別な組み合わせモードを追加することにより解決されています。 .Fn kse_thr_interrupt -システムコールはサブコマンド +システムコールにはサブコマンド .Dv KSE_INTR_EXECVE があり、それは .Vt kse_execv_args -構造体を受け付けることができ、シグナルを調整して、次に不可分に -.Fn execve() -呼び出しに変換できます。 -.\" 原文: .Fn execve() は .Fn execve の誤り。 -追加のペンディングシグナルと正しいシグナルマスクは -このようにしてカーネルに渡すことができます。 +構造体を受け付けて、シグナルを調整した後に不可分に +.Fn execve +呼び出しへ変換できるようにします。 +.\" 原文: .Fn execve() は .Fn execve の誤り。HEAD, RELENG_6では修正済 +このようにして追加のペンディングシグナルと正しいシグナルマスクを +カーネルに渡すことができます。 .\" in this way = かくのごとく、こういう調子に、このような方法で、このように(して)、 スレッドライブラリは、 .Fn execve -スステムコールをくつがえして、それを -.Fn kse_intr_interrupt -呼び出しに変換し、多重スレッドを +システムコールを上書きし、多重スレッドが .Fn exec -を行なう前にペンディングシグナルと正しいシグナルマスクに -復元できるようにします。 -この問題の解決法は変更するかもしれません。 +を行う前にペンディングシグナルと正しいシグナルマスクを復元できるよう、 +.Fn kse_intr_interrupt +呼び出しに変換します。 +この問題の解決法は変更されるかもしれません。 .\" .Ss KSE メールボックス .\" それぞれの KSE は .In sys/kse.h -で定義されたユーザとカーネルの通信のための唯一のメールボックスがあります。 -そのフィールドのいくつかは次の通りです: +で定義されているユーザとカーネルの通信のために独自のメールボックスを持ちます。 +フィールドの一部は次の通りです: .Pp .Va km_version はこの構造体のバージョンを表し、 .Dv KSE_VER_0 -でなければなりません。 +と等しくなければなりません。 .Va km_udata -はカーネルによって無視される不透明なポインタです。 +はカーネルには無視される不透明なポインタです。 .Pp .Va km_func はその KSE の upcall 関数を指します。 -これは、その KSE が存在している間は有効であり続けなければならない +これは、その KSE の生存期間を通して有効であり続けなければならない .Va km_stack を使用して実行されます。 .Pp .Va km_curthread -は常に、もしあれば現在この KSE に割り当てられているスレッドを、または -そうでなければ +はもし現在この KSE に割り当てられているスレッドがあればそれを、 +なければ .Dv NULL を指しています。 -このフィールドは、カーネルとユーザプロセスの両方によって以下のように -更新されます。 +このフィールドは、 +カーネルとユーザプロセスの両方によって以下のように更新されます。 .Pp .Va km_curthread が .Dv NULL ではないときには、 それは現在実行中のスレッドのメールボックスを指しているものとみなされ、 -割り当て解除されることができます。 +割り当て解除可能です。 例えば、スレッドがカーネル内でブロックする場合です。 -それから、カーネルはブロックされたスレッドの +その後、カーネルはブロックされたスレッドの .Va km_curthread の内容を保存して .Va km_curthread を .Dv NULL に設定し、 .Fn km_func を実行するために upcall します。 .Pp .Va km_curthread が .Dv NULL のときには、カーネルはこの KSE の upcall を決して実行しません。 -言い換えると、KSE はたとえブロックしたとしても、そのスレッドに -割り当てられたままとなります。 -その KSE が間に入り込む upcall によって混乱するであろうクリティカルな +言いかえると、KSE はたとえブロックしたとしても、 +そのスレッドに割り当てられたままとなります。 +KSE が upcall が間にはいることによって混乱を起こすような危ない ユーザスレッドスケジューラのコードを実行している間、特に .Fn km_func それ自身を実行している間は、 .Va km_curthread は .Dv NULL でなければなりません。 .Pp -全ての upcall の中で +どのような upcall であれ、 .Fn km_func を実行する前に、カーネルは常に .Va km_curthread を .Dv NULL に設定します。 -一度、ユーザスレッドスケジューラが実行するべき新しいスレッドを選んだら、 -そのスレッドのメールボックスの +一度ユーザスレッドスケジューラが実行すべき新しいスレッドを選んだら、 .Va km_curthread -を指すようにし、upcall を再度有効化し、それからそのスレッドを再開するべきです。 +がそのスレッドのメールボックスを指すようにし、 +upcall を再度有効化し、それからそのスレッドを再開するべきです。 .Em 注意 : ユーザスレッドスケジューラによる .Va km_curthread の変更は、 -新しいスレッドのコンテキストのロードについて不可分でなければなりません。 -依然として有効な情報がそこから読み出されるべき時に、 +新しいスレッドのコンテキストのロードを不可分に行わなければなりません。 +依然として有効な情報がそこから読み出し可能なときに ブロッキング非同期操作によってスレッドのコンテキスト領域が -変更されるかもしれない状況を避けるためです。 +変更されえる状況を避けるためです。 .Pp .Va km_completed -は最近の upcall 以降にカーネル内での処理を終えたユーザスレッドの +は最後に実行された upcall 以降にカーネル内での処理を終えたユーザスレッドの リンクされたリストを指しています。 -そのユーザスレッドスケジューラは、これらのスレッドを -スケジューラが所有する実行可能キューに戻すべきです。 -upcall に帰着する (同期または非同期に) カーネル操作を -完了した KSE グループ内の各々のスレッドは、確実に 1 つの KSE の +ユーザスレッドスケジューラは、 +これらのスレッドをスケジューラが所有する実行可能キューに戻すべきです。 +upcall に帰着する (同期または非同期) カーネル操作を完了した +KSE グループ内の各々のスレッドは、確実に 1 つの KSE の .Va km_completed -にリンクされることが保証されます。 -しかしながら、そのグループの中のどの KSE かは不定です。 +にリンクされることが保証されますが、 +グループの中のどの KSE かは決まっていません。 その上、その完了はたった 1 つの upcall でしか報告されません。 .Pp .Va km_sigscaught -はその前のプロセス内の全ての KSE への upcall 以降に、 +にはその前のプロセス内の任意の KSE への upcall 以降に、 このプロセスによって捕まえられたシグナルのリストが含まれています。 -そのユーザプロセスの中に、 +ユーザプロセスの中に、 メールボックスに関連付けられた KSE が 1 つ以上存在する限りは、 -シグナルは伝統的な方法ではなくこの方法で配信されます。 -(これはまだ実装されておらず、変更されるかもしれません) +シグナルは伝統的な方法ではなくこの方法で配信されます +(これはまだ実装されておらず、変更されるかもしれません)。 .Pp .Va km_timeofday は、それぞれの upcall の前にカーネルによって現在のシステム時刻に設定されます。 .Pp .Va km_flags -は以下の全てのビット毎の OR を含むことができます: +は以下の任意のビットを OR して同時に含むことができます: .Bl -tag -width indent .It Dv KMF_NOUPCALL -upcalls が起きないようにブロックします。 +upcall が起きないようにブロックします。 スレッドは何らかのクリティカルセクション (危険域) にあります。 .It Dv KMF_NOCOMPLETED , KMF_DONE , KMF_BOUND このスレッドは、永久に KSE に結びつけられると考えられるべきで、 スレッド化されていないプロセスとそっくりに扱われます。 -.\" 原文: considerred は considered の誤り。 +.\" 原文: considerred は considered の誤り。Rev1.16 で修正済 .\" considered to be = 《be 〜》〜であると考えられている[目されている] .\" much like = そっくりの、酷似の -それはある意味では +それはある意味 .Dv KMF_NOUPCALL の .Dq 長期 -バージョンです。 +バージョンといえます。 .\" in some ways = ある点[意味]で(は)、いろいろな意味で、いくつかの点で .It Dv KMF_WAITSIGEVENT シグナル配信スレッドに必要な特性を実装します。 -.\" 原文: charactersitics は # characteristics の誤り。 +.\" 原文: charactersitics は # characteristics の誤り。Rev1.16 で修正済 .El .\" .Ss スレッドメールボックス .\" -それぞれのユーザスレッドはそれに関連付けられた +各ユーザスレッドは .In sys/kse.h -で定義された唯一の +で定義されている独自の .Vt "struct kse_thr_mailbox" -がなければなりません。 +に関連付けられている必要があります。 それは次のフィールドを含んでいます: .Pp .Va tm_udata -はカーネルによって無視された不明瞭なポインタです。 +はカーネルによって無視される不透明なポインタです。 .Pp .Va tm_context -はユーザ空間内でスレッドがブロックされた時に、そのスレッドのための -コンテキストを保存します。 +スレッドがはユーザ空間内でブロックされた時に、 +そのスレッドのためのコンテキストを保存します。 このフィールドは完了したスレッドが .Va km_completed を介してユーザスレッドスケジューラに戻る前に、カーネルによっても更新されます。 .Pp .Va tm_next -はカーネルの upcall により戻った時に、 +カーネルによって upcall を使って戻される時に、 .Va km_completed -スレッドにリンクします。 +のスレッドをリンクします。 このリストの最後は .Dv NULL -でマークされます。 +でマークされています。 .Pp .Va tm_uticks および .Va tm_sticks -はそれぞれ、ユーザモードおよびカーネルモードの実行のための時間カウンタです。 +はそれぞれ、ユーザモードおよびカーネルモードにおける実行の時間カウンタです。 これらのカウンタは統計クロック .Xr ( clocks 7 -を参照してください) の刻みをカウントします。 +参照) の刻みをカウントします。 カーネル内でいずれかのスレッドがアクティブに実行中の間は、対応する .Va tm_sticks カウンタがインクリメントされます。 -ユーザ空間でいずれかの KSE 実行中で、その KSE の +ユーザ空間でいずれかの KSE が実行中で、その KSE の .Va km_curthread ポインタが .Dv NULL と等しくない間は、対応する .Va tm_uticks カウンタがインクリメントされます。 .Pp .Va tm_flags は以下の全てのビット毎の OR を含むことができます: .Bl -tag -width indent .It Dv TMF_NOUPCALL .Dv KMF_NOUPCALL -と同様です。 +と似ています。 このフラグはクリティカルセクション (危険域) への upcall を禁止します。 -いくつかのアーキテクチャは、ある場所ともう片方でいくつかにあることを -必要とします。 +いくつかのアーキテクチャではこれが必要になるのは 1 ヶ所ですが、 +他のアーキテクチャではまた別の場所で必要とします。 .El .Sh 戻り値 -成功の場合には .Fn kse_create , .Fn kse_wakeup および .Fn kse_thr_interrupt -システムコールは 0 を返します。 -成功の場合には +システムコールは成功した場合 0 を返します。 .Fn kse_exit および .Fn kse_release -システムコールは戻りません。 +システムコールは成功した場合戻りません。 .Pp -エラーの場合には、これら全てのシステムコールは 0 ではない -エラーコードを返します。 +これら全てのシステムコールはエラーの場合には、 +0 ではないエラーコードを返します。 .Sh エラー .Fn kse_create システムコールは次の場合に失敗します: .Bl -tag -width Er .It Bq Er ENXIO 既に KSE グループの中にハードウェアプロセッサと同じ数の KSE が存在しています。 .It Bq Er EAGAIN -実行下の KSE グループのトータル数についてのシステムに課せられた制限を -超過します。 +実行中の合計 KSE グループ数に関するシステム上の制限値を超過します。 この制限は .Xr sysctl 3 MIB 変数 .Dv KERN_MAXPROC によって与えられます。 -(この制限はスーパユーザのためを除き、実際にはこれより 10 小さい値です) +(この制限はスーパユーザ以外の場合、実際にはこれより 10 小さい値です) .It Bq Er EAGAIN -ユーザがスーパユーザではなく、1 ユーザによる実行下の KSE グループの -トータル数についてのシステムに課せられた制限を超過します。 +ユーザがスーパユーザではなく、1 ユーザへの実行中の合計 KSE グループ数 +に関するシステム上の制限値を超過します。 この制限は .Xr sysctl 3 MIB 変数 .Dv KERN_MAXPROCPERUID によって与えられます。 .It Bq Er EAGAIN ユーザがスーパユーザではなく、 .Fa resource 引数 .Dv RLIMIT_NPROC に対応するソフトリソース制限を超過します .Xr ( getrlimit 2 -を参照してください)。 +参照)。 .It Bq Er EFAULT .Fa mbx 引数がプロセスのアドレス空間の有効ではない部分のアドレスを指しています。 .El .Pp .Fn kse_exit システムコールは次の場合に失敗します: .Bl -tag -width Er .It Bq Er EDEADLK 現在の KSE はその KSE グループ内の最後であり、 -カーネル内でブロックされたその KSE グループに関連付けられたスレッドが +その KSE グループに関連付けられたカーネル内でブロックされているスレッドが 依然として 1 つ以上存在しています。 .It Bq Er ESRCH 現在の KSE は関連付けられたメールボックスを持っていません。 -例えば、そのプロセスが伝統的なスレッド化されていないモードで、 -実行しています (この場合はプロセスを終了するために +つまり、そのプロセスは伝統的なスレッド化されていないモードで、 +動作しています (この場合はプロセスを終了するために .Xr _exit 2 を使用します)。 .El .Pp .Fn kse_release システムコールは次の場合に失敗します: .Bl -tag -width Er .It Bq Er ESRCH 現在の KSE は関連付けられたメールボックスを持っていません。 -例えば、そのプロセスが伝統的なスレッド化されていないモードで、 -実行しています。 +つまり、そのプロセスは伝統的なスレッド化されていないモードで +動作しています。 .El .Pp .Fn kse_wakeup システムコールは次の場合に失敗します: .Bl -tag -width Er .It Bq Er ESRCH .Fa mbx 引数が .Dv NULL ではなく、 .Fa mbx -によって指されるメールボックスそのメールボックスが、そのプロセス内の -いずれの KSE にも関連付けられていません。 +によって指されるメールボックスが、 +そのプロセス内のいずれの KSE にも関連付けられていません。 .It Bq Er ESRCH .Fa mbx 引数が .Dv NULL -で、現在の KSE が関連付けられたメールボックスを持っていません。 -例えば、そのプロセスが伝統的なスレッド化されていないモードで、 -実行しています。 +現在の KSE は関連付けられたメールボックスを持っていません。 +つまり、そのプロセスは伝統的なスレッド化されていないモードで、 +動作しています。 .El .Pp .Fn kse_thr_interrupt システムコールは次の場合に失敗します: .Bl -tag -width Er .It Bq Er ESRCH .Fa tmbx -に対応するスレッドが、現在プロセス内のいずれの KSE にも割り当てられていないか、 -カーネル内でブロックされています。 +に対応するスレッドが、現在プロセス内のいずれの KSE にも割り当てられても、 +カーネル内でブロックされてもいません。 .El .Sh 関連項目 .Xr rfork 2 , .Xr pthread 3 , .Xr ucontext 3 .Rs .%A "Thomas E. Anderson" .%A "Brian N. Bershad" .%A "Edward D. Lazowska" .%A "Henry M. Levy" .%J "ACM Transactions on Computer Systems" .%N Issue 1 .%V Volume 10 .%D February 1992 .%I ACM Press .%P pp. 53-79 .%T "Scheduler activations: effective kernel support for the user-level management of parallelism" .Re .Sh 歴史 KSE システムコール群は .Fx 5.0 ではじめて登場しました。 .Sh 作者 KSE は初めに .An -nosplit .An "Julian Elischer" Aq julian@FreeBSD.org が実装し、 .An "Jonathan Mini" Aq mini@FreeBSD.org , .An "Daniel Eischen" Aq deischen@FreeBSD.org および .An "David Xu" Aq davidxu@FreeBSD.org が追加の貢献をしました。 .Pp このマニュアルページは .An "Archie Cobbs" Aq archie@FreeBSD.org によって書かれました。 .Sh バグ -KSE のコードは開発中です。 +KSE のコードは現在も開発中です。 .\" .Ud . .\" .Ud マクロは日本語では実装されていません。(池内) diff --git a/ja_JP.eucJP/man/man2/recv.2 b/ja_JP.eucJP/man/man2/recv.2 index b661ae1eb0..cbf4d29053 100644 --- a/ja_JP.eucJP/man/man2/recv.2 +++ b/ja_JP.eucJP/man/man2/recv.2 @@ -1,318 +1,316 @@ .\" Copyright (c) 1983, 1990, 1991, 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. .\" .\" @(#)recv.2 8.3 (Berkeley) 2/21/94 .\" %FreeBSD: src/lib/libc/sys/recv.2,v 1.21.2.2 2005/02/28 03:32:34 brueffer Exp % .\" .\" $FreeBSD$ .Dd February 21, 1994 .Dt RECV 2 .Os .Sh 名称 .Nm recv , .Nm recvfrom , .Nm recvmsg .Nd ソケットからメッセージを受信する .Sh ライブラリ .Lb libc .Sh 書式 .In sys/types.h .In sys/socket.h .Ft ssize_t .Fn recv "int s" "void *buf" "size_t len" "int flags" .Ft ssize_t .Fn recvfrom "int s" "void * restrict buf" "size_t len" "int flags" "struct sockaddr * restrict from" "socklen_t * restrict fromlen" .Ft ssize_t .Fn recvmsg "int s" "struct msghdr *msg" "int flags" .Sh 解説 .Fn recvfrom と .Fn recvmsg システムコールは、ソケットからのメッセージを受信するのに使用されます。 ソケットが接続指向であるかどうかにかかわらず、ソケット上のデータを 受信するのに使用できます。 .Pp .Fa from が NULL ポインタでなく、ソケットが接続指向でない場合、 ここにはメッセージのソースアドレスが保存されます。 .Fa fromlen 引数は値と結果の引数であり、 .Fa from に対応するバッファのサイズに初期化され、 戻り時には保存されたアドレスの実際のサイズを示すように変更されます。 .Pp .Fn recv システムコールは、通常 .Em 接続された ソケット上だけで使用され .Pf ( Xr connect 2 を参照)、 .Fa from 引数に NULL ポインタを指定した .Fn recvfrom と同一です。 これは冗長なので、将来のリリースではサポートされない可能性があります。 .Pp これら 3 つのルーチンは正常に完了するとメッセージの長さを返します。 メッセージが長すぎて指定のバッファに収まらない場合、 メッセージを受信したソケットのタイプによっては 超過分のバイトが破棄されることがあります .Pf ( Xr socket 2 を参照)。 .Pp ソケットにメッセージが無い場合は、ソケットが非ブロッキング .Pf ( Xr fcntl 2 を参照) の場合を除き、呼び出しはメッセージが到着するのを待ちます。 ソケットが非ブロッキングの場合、値 -1 が返され、外部変数 .Va errno が .Er EAGAIN に設定されます。 通常、受信呼び出しは要求された量を受信するまで待たずに、 要求された量を上限として得られたデータを返します。 この動作は、 .Xr getsockopt 2 で解説されているソケットレベルのオプション .Dv SO_RCVLOWAT および .Dv SO_RCVTIMEO によって影響を受けます。 .Pp 次のデータがいつ到着するかを判定するには .Xr select 2 システムコールを使うことができます。 .Pp .Fn recv 関数への .Fa flags 引数は、次の値の 1 つまたは複数の論理和 .\".Em or Ap ing .Em ( or ) から成ります: .Bl -column ".Dv MSG_DONTWAIT" -offset indent .It Dv MSG_OOB Ta プロセス帯域外データ .It Dv MSG_PEEK Ta 着信メッセージの覗き見 (peek) .It Dv MSG_WAITALL Ta 要求の完全な実行、またはエラーを待つ .It Dv MSG_DONTWAIT Ta ブロックしない .El .Pp .Dv MSG_OOB フラグは帯域外データの受信を要求し、 通常のデータストリームからは受信しません。 急送データを通常のデータ待ち行列の先頭に配置するプロトコルもありますが、 このフラグはそのようなプロトコルでは使用できません。 .Dv MSG_PEEK フラグは受信待ち行列の先頭からデータを除去することなく、 そのデータを返します。 したがって、後続の受信呼び出しは同じデータを返します。 .Dv MSG_WAITALL フラグは要求が完全に満たされるまでブロックするように要求します。 しかし、シグナルが捕捉された場合、エラーまたは切断が発生した場合、 または受信する次のデータが返されたタイプと異なる 場合、呼び出しは要求されたより少ないデータを返す可能性があります。 .Dv MSG_DONTWAIT フラグは、フラグが指定されてなかったらブロックするような時に、 戻ることを要求します。 利用可能なデータが無い場合には、 .Va errno が .Er EAGAIN に設定されます。 このフラグは、厳格な .Tn ANSI または C99 のコンパイルモードでは利用できません。 .Pp .Fn recvmsg システムコールは、直接に指定される引数の数を最小にするために .Fa msghdr 構造体を使用します。 この構造体は .In sys/socket.h で定義されているように、次の形式になっています: .Pp .Bd -literal struct msghdr { caddr_t msg_name; /* アドレス (オプション) */ u_int msg_namelen; /* アドレスのサイズ */ struct iovec *msg_iov; /* スキャッタ / ギャザー配列 */ u_int msg_iovlen; /* msg_iov の要素数 */ caddr_t msg_control; /* 補助データ、後述 */ u_int msg_controllen; /* 補助データのバッファ長 */ int msg_flags; /* 受信されたメッセージ上のフラグ */ }; .Ed .Pp ここで .Fa msg_name と .Fa msg_namelen は、ソケットが接続されていない場合に、宛先アドレスを指定します。 名前を要求しない場合や必要でない場合、 .Fa msg_name は NULL ポインタとして指定できます。 .Fa msg_iov と .Fa msg_iovlen 引数は .Xr read 2 で説明されているようにスキャッタ / ギャザーの場所を記述します。 .Fa msg_control 引数は、長さが .Fa msg_controllen の、他のプロトコル制御に関連するメッセージまたはその他の 各種補助データ用のバッファを指しています。 メッセージは次の形式です: .Bd -literal struct cmsghdr { u_int cmsg_len; /* データバイトカウント、hdr を含む */ int cmsg_level; /* メッセージを生成したプロトコル */ int cmsg_type; /* プロトコルに固有のタイプ */ /* u_char cmsg_data[]; が後に続く */ }; .Pp .Ed たとえば、これを使用して XNS/SPP において データストリームの変化を知ることができます。 また、ISO において .Fn accept システムコールの直後に、データバッファを伴わずに .Fn recvmsg を要求して、 ユーザ接続要求データを得ることができるでしょう。 .Pp オープンファイル記述子はこれで .Dv AF_UNIX ドメインソケット用の補助データとして引き渡され、その際、 .Fa cmsg_level が .Dv SOL_SOCKET に設定され、 .Fa cmsg_type が .Dv SCM_RIGHTS に設定されます。 .Pp .Dv SCM_CREDS の .Fa cmsg_type を使用して、プロセスの認証情報を .Dv AF_UNIX ドメインソケット用の補助データとして 渡すこともできます。 このケースでは、 .Fa cmsg_data は、構造体 .Fa cmsgcred である必要があります。 これは次のように .In sys/socket.h 内で定義されています: .Pp .Bd -literal struct cmsgcred { pid_t cmcred_pid; /* 送信プロセスの PID */ uid_t cmcred_uid; /* 送信プロセスの実 UID */ uid_t cmcred_euid; /* 送信プロセスの実効 UID */ gid_t cmcred_gid; /* 送信プロセスの実 GID */ short cmcred_ngroups; /* グループの数 */ gid_t cmcred_groups[CMGROUP_MAX]; /* グループ */ }; .Ed .Pp カーネルは送信プロセスの認証情報を記入し、それを受信側へ配信します。 .Pp .Fa msg_flags フィールドは受信済みメッセージに従って戻り時に設定されます。 .Dv MSG_EOR は end-of-record、つまり返されたデータでレコードが 完結していることを示します (一般には、タイプ .Dv SOCK_SEQPACKET のソケットとともに使用されます)。 .Dv MSG_TRUNC は、提供されたバッファよりデータグラムが大きかったので、 データグラムの後ろの部分が切り捨てられたことを示します。 .Dv MSG_CTRUNC は、補助データ用のバッファ内の空間の不足のためにいくらかの制御データが 切り捨てられたことを示します。 .Dv MSG_OOB は、急送または帯域外データが受信されたことを示します。 .Sh 戻り値 これらの呼び出しは受信したバイト数を返し、エラーが起きた場合は -1 を返します。 .Sh エラー 呼び出しは次の場合に失敗します: .Bl -tag -width Er .It Bq Er EBADF 引数 .Fa s が有効な記述子ではありません。 .It Bq Er ENOTCONN ソケットは接続指向プロトコルと結び付けられていますが、接続されていません .Pf ( Xr connect 2 と .Xr accept 2 を参照)。 .It Bq Er ENOTSOCK 引数 .Fa s はソケットを参照していません。 .It Bq Er EMSGSIZE +接続中にオープンされている権利 (ファイル記述子) を .Fn recvmsg -システムコールは、接続時にデータをやりとりする権利 (ファイル記述子) -を受信するために使用されました。 -.\" rights (file descriptors) that were in flight の訳は良くわからない。 -しかしながら、受信プログラムには受け付けるための -空きファイル記述子スロットがありませんでした。 -この場合、記述子がクローズされ、 +システムコールを使用して受信しようとしました。 +しかし、受信側プログラムのにそれらを受け取るだけの +十分な空きファイル記述子スロットがありませんでした。 +この場合、該当する記述子はクローズされ、保留されているデータは別の .Fn recvmsg -への別の呼び出しによって、 -どんなペンディング (未解決) のデータも返すことができます。 +呼び出しで戻せます。 .It Bq Er EAGAIN ソケットが非ブロッキングとマークされているとき、 受信操作でブロックしました。 あるいは、受信タイムアウトが設定されていて、 データが受信される前にタイムアウトになりました。 .It Bq Er EINTR データが受信可能になる前に、受信がシグナルによって割込まれました。 .It Bq Er EFAULT 受信バッファポインタが、プロセスに割り当てられたアドレス空間の 範囲外を指しています。 .El .Sh 関連項目 .Xr fcntl 2 , .Xr getsockopt 2 , .Xr read 2 , .Xr select 2 , .Xr socket 2 .Sh 歴史 .Fn recv 関数は .Bx 4.2 で登場しました。 diff --git a/ja_JP.eucJP/man/man3/crypt.3 b/ja_JP.eucJP/man/man3/crypt.3 index 950368765d..f667a3d47e 100644 --- a/ja_JP.eucJP/man/man3/crypt.3 +++ b/ja_JP.eucJP/man/man3/crypt.3 @@ -1,307 +1,307 @@ .\" FreeSec: libcrypt for NetBSD .\" .\" Copyright (c) 1994 David Burren .\" 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. .\" 4. Neither the name of the author nor the names of other contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" 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/lib/libcrypt/crypt.3,v 1.6.2.12 2001/12/17 10:08:29 ru Exp % .\" $FreeBSD$ .\" .\" Manual page, using -mandoc macros .\" .Dd January 19, 1997 .Dt CRYPT 3 .Os .Sh 名称 .Nm crypt .Nd トラップドア暗号化 .Sh ライブラリ .Lb libcrypt .Sh 書式 .In unistd.h .Ft char * .Fn crypt "const char *key" "const char *salt" .Ft const char * .Fn crypt_get_format "void" .Ft int .Fn crypt_set_format "const char *string" .Sh 解説 .Fn crypt 関数は、パスワードのハッシュ化を行ない、キー検索の試みを 思いとどまらせるためのコードを付加します。 ハッシュ化には異なるアルゴリズムを使用することができます。 .\" .\" NOTICE: .\" If you add more algorithms, make sure to update this list .\" and the default used for the Traditional format, below. .\" 現在含まれるアルゴリズムは、 .Tn NBS .Tn Data Encryption Standard (DES) , .Tn MD5 , .Tn Blowfish です。 .Tn DES や .Tn Blowfish がインストールされているかどうか、また、 デフォルトを変更するために .Fn crypt_set_format がすでに呼び出されているかどうかにより、 使用されるアルゴリズムは salt (モジュール化暗号フォーマット (Modular Crypt Format (MCF)) に従います) のフォーマットに依存します。 .Pp .Nm の最初の引数はハッシュ化のためのデータ (通常はパスワードです) で、 ヌル文字で終了する文字列です。 2 番めの引数は salt で、次の 3 個のうちのいずれかの形式です。 .Pp .Bl -tag -width Traditional -compact -offset indent .It Extended アンダスコア .Pq Dq _ で始まる場合、鍵の解釈も salt の解釈もともに、次に概要を説明する .Tn DES 拡張形式を使用します。 .It Modular 文字列 .Dq $digit$ で始まる場合、次に概要を説明する モジュール化暗号フォーマット (MCF) を使用します。 .It Traditional 上のいずれにも該当しない場合、伝統的なフォーマット (Traditional Format) を想定し、文字列全体 (または最初の部分) を salt として使用します。 .El .Pp どのルーチンも計算に時間が掛かる設計になっています。 .Tn Pentium 166/MMX で簡単なテストをすると、 .Tn DES 暗号化では、1 CPU 秒当たり暗号化を約 2640 回行ない、 MD5 暗号化では、1 CPU 秒当たり暗号化を約 62 回行ないました。 .Ss DES 拡張形式: .Pp 鍵 .Ar key は 8 文字からなるグループに分割されます (最後のグループにはナルバイトが 詰められます)。 各キャラクタの下位 7 ビット (グループごとに 56 ビット) が、 次に説明するようにして、 .Tn DES キーを作るために用いられます。 最初のグループの 56 ビットは、 .Tn DES 鍵の初期値です。 その後のグループごとに、現在の .Tn DES 鍵それ自身とそのグループのビットを XOR することで暗号化し、次の .Tn DES 鍵とします。 .Pp salt は 9 キャラクタの配列であり、アンダスコアの後ろに 4 バイトの 反復回数と 4 バイトの salt からなります。 これらは印字可能文字でエンコードされます。 6 ビットごとに 1 文字を対応させ、最下位キャラクタを最初にして、 エンコードされます。 0 から 63 までの値は ``./0-9A-Za-z'' としてエンコードされます。 これにより .Fa count と .Fa salt のそれぞれに 24 ビットを使うことができます。 .Pp .Fa salt は .Tn DES アルゴリズムに対し、16777216 通りまたは 4096 通り (つまり、24 ビットまたは 12 ビット) 中の 1 通りという不規則性を導入します ( .Ar salt のビット .Em i が設定されている場合、 .Tn DES E-Box 出力中の ビット .Em i とビット .Em i+24 とが交換されます) 。 .Pp .Tn DES 鍵を使い、64ビットの定数に .Ar count 回 DES を繰り返し適用し暗号化します。 返される値は、 .Dv ヌル文字で終了する 文字列で、長さは 20 バイトまたは 13 バイト (にヌル文字が加わります) で、 .Ar salt の後に、エンコードされた 64 ビットの暗号化を続いたもので 構成されます。 .Ss モジュール化暗号: .Pp salt が文字列 .Fa $digit$ から始まる場合は、モジュール化暗号フォーマット (MCF) が使用されます。 .Fa digit は暗号化の際にどのアルゴリズムが使用されるかを表します。 その後ろのトークンが実際の salt として暗号化に用いられます。 salt の長さは 16 キャラクタに制限されています。 これは、返す出力の長さも _PASSWORD_LEN で制限されているからです。 salt はヌル文字かドル記号を末尾に置く必要があります。 ドル記号の後ろの文字はなんであれ無視されます。 .Pp 現在サポートするアルゴリズムは、 .Pp .Bl -enum -compact -offset indent .It MD5 .It Blowfish .El .Pp これ以外の暗号化フォーマットは容易に追加できます。 salt の例として次のものがあります。 .Bl -tag -offset indent .It Cm "$3$thesalt$rest" .El .Pp .Ss "Traditional" 暗号化: .Pp .\"X The algorithm used will depend upon whether 使用されるアルゴリズムは、 .Fn crypt_set_format .\"X has been called and whether a global default format has been specified. がすでに呼び出されているか否か、グローバルデフォルトフォーマットが すでに指定されているか否かに依存します。 .\"X Unless a global default has been specified or グローバルデフォルトがあらかじめ指定されているか、 .Fn crypt_set_format .\"X has set the format to something else, the built-in default format is .\"X used. で何か他のフォーマットを設定されているか、そのどちらでもない場合、 組み込みのデフォルトフォーマットが使用されます。 .\"X This is currently 現在のところ、これは、 .\"X .\" .\"X .\" NOTICE: Also make sure to update this .\"X .\" .\"X DES .\"X if it is available, or MD5 if not. DES が使えるなら DES に、そうでないなら MD5 になります。 .Pp .\"X How the salt is used will depend upon the algorithm for the hash. For .\"X best results, specify at least two characters of salt. salt をどのように用いるかはハッシュ化のアルゴリズムに依存します。 最高の結果を得るために、少なくとも 2 文字の salt を指定してください。 .Pp .Fn crypt_get_format .\"X function returns a constant string that represents the name of the .\"X algorithm currently used. 関数は現在使用しているアルゴリズムを表す定数文字列を返します。 有効な値は、 .\"X Valid values are .\"X .\" .\"X .\" NOTICE: Also make sure to update this, too, as well .\"X .\" .Ql des , .Ql blf , .Ql md5 です。 .Pp .Fn crypt_set_format 関数は指定する .Fa string に従い、デフォルトエンコードフォーマットを設定します。 .Pp グローバルデフォルトフォーマットは、 .Pa /etc/auth.conf ファイルで、 .Va crypt_default 属性を使い設定することができます。 .Sh 戻り値 .Fn crypt は、処理が成功した場合、暗号化された値を指すポインタを返します。 処理が失敗した場合、NULL を返します。 注意: これは通常の挙動ではありません。 AT&T の .Fn crypt は常に文字列を指すポインタを返します。 .Pp .Fn crypt_set_format .\"X will return 1 if the supplied encoding format was valid. は、与えられたエンコードフォーマットが正当であれば、1 を返します。 .\"X Otherwise, a value of 0 is returned. それ以外の場合、値 0 が返されます。 .Sh 関連項目 .Xr login 1 , .Xr passwd 1 , .Xr auth_getval 3 , .Xr cipher 3 , .Xr getpass 3 , .Xr auth.conf 5 , .Xr passwd 5 .Sh バグ .Fn crypt 関数は静的データへのポインタを返します。 そして、以後の .Fn crypt の呼び出しは同じデータを変更します。 .Fn crypt_set_format も同様に静的データを変更します。 .Sh 歴史 -ローターを採用した +ロータを採用した .Fn crypt 関数は、 .At v6 で登場しました。 現在のスタイルの .Fn crypt は、 .At v7 ではじめて登場しました。 .Pp .Tn DES セクションのコード (FreeSec 1.0) は、アメリカ合衆国のみで使える .Nx libcrypt 暗号化ライブラリに対して、そのような障害のない置き換えとして アメリカ合衆国の外で開発されました。 .Sh 作者 .An -nosplit 元は .An David Burren Aq davidb@werj.com.au によって書かれました。 その後の追加、更新は、 .An Poul-Henning Kamp , .An Mark R V Murray , .An Kris Kennaway , .An Brian Feldman , -.An Paul Herman +.An Paul Herman , .\"X and .An Niels Provos によって行なわれました。 diff --git a/ja_JP.eucJP/man/man3/intro.3 b/ja_JP.eucJP/man/man3/intro.3 index 20d22b587a..0761df87c0 100644 --- a/ja_JP.eucJP/man/man3/intro.3 +++ b/ja_JP.eucJP/man/man3/intro.3 @@ -1,162 +1,162 @@ .\" Copyright (c) 1980, 1991, 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. .\" .\" @(#)intro.3 8.1 (Berkeley) 6/5/93 .\" %FreeBSD: src/share/man/man3/intro.3,v 1.9.2.4 2001/08/17 13:08:36 ru Exp % .\" $FreeBSD$ .\" .Dd June 5, 1993 .Dt INTRO 3 .Os BSD 4 .Sh 名称 .Nm intro .Nd C ライブラリの手引 .Sh 解説 本節では C ライブラリ関数とエラー時の返却値、他の共通定義、そして設計 概念について概説します。これらの関数のほとんどが C ライブラリである .Em libc から利用可能です。 .\" (see .\" .Xr libc 3 ) . その他のライブラリ、例えば数学ライブラリである .Em libm 等を利用する場合には、コンパイル時にコンパイラの .Fl l オプションを付加して、その利用を指示する必要があります。 .\" .Pp .\" A subset of the .\" .Xr libc functions .\" are available from Fortran; .\" they are described separately in .\" .Xr intro 3f . .Pp 各種ライブラリ一覧 (括弧内はローダフラグ): .Bl -tag -width "libc (-lc)" .It Xr libc Pq Fl l Ns Ar c 標準 C ライブラリ関数。 .\" (See .\" .Xr libc 3 . ) C コンパイラ .Xr cc 1 を使うときは、ローダフラグ .Fl l Ns Ar c を指定する必要はありません。 .Xr libc の内部にはいくつかの `ライブラリ' または関数グループが含まれます。これらは、 .Tn 標準 I/O ルーチン、データベース・ルーチン、ビット・オペレータ、ストリング・ オペレータ、キャラクタ試験とキャラクタ・オペレータ、des 暗号ルーチン、 記憶割当、時間関数、信号処理他です。 .It Xr libcurses Pq Fl l Ns Ar curses Fl l Ns Ar termcap -2 次元非ビットマップ・ディスプレィ端末用の端末独立 +2 次元非ビットマップ・ディスプレイ端末用の端末独立 スクリーン管理ルーチン ( .Xr ncurses 3 を参照)。 .It Xr libcompat Pq Fl l Ns Ar compat 廃止されているが、 .Bx 4.3 との互換性の生成に使える関数。特に、ソース・コード の互換性確保のために、 .Bx の旧リリースで提供された各種のシステム・ コール・インタフェースが含まれています。これらのルーチンの使用は、 できるだけ避けるべきです。マニュアル・ページの互換性ルーチンの見出し項目に 使用すべき適切なインタフェースが表示されています。 .It Xr libkvm Pq Fl l Ns Ar kvm カーネル・メモリへのアクセスに使われる関数はこのライブラリにあります。 実行中のシステムとクラッシュ・ダンプの両方に使用できます ( .Xr kvm 3 を参照)。 .It Xr libl Pq Fl l Ns Ar l .Xr lex 1 用ライブラリ .\" .It Xr libln .It Xr libm Pq Fl l Ns Ar m 数学ライブラリ、 .Em libm。 数学ライブラリは Pascal コンパイラ .\" .Xr pc 1 が必要なときにロードされますが、 .Fl l Ns Ar m フラッグを要求する C コンパイラからは ロードされません ( .Xr math 3 を参照)。 .It Xr libmp Pq Fl l Ns Ar mp .\" .It Xr libom .\" Old math library. .\" .It Xr libplot Pq Fl l Ns Ar plot .\" Device independent plotting functions. .\" (See .\" .Xr plot 3 . ) .\" .It Xr libplotf77 Pq Fl l Ns Ar plotf77 .\" The device independent plotting functions for fortran. .\" (See .\" .Xr plot 3 . ) .\" .It Xr libresolv Pq Fl l Ns Ar resolv .\" Routines for network address resolution. .It Xr libtermcap Pq Fl l Ns Ar termcap 端末独立操作ライブラリ・パッケージ ( .Xr termcap 3 を参照 )。 .\" .It libvt0.a .It Xr liby Pq Fl l Ns Ar y .Xr yacc 1 用ライブラリ .El .Sh 関連ファイル .Bl -tag -width /usr/lib/libm_p.a -compact .It Pa /usr/lib/libc.a C ライブラリ .It Pa /usr/lib/libc_p.a プロファイリングにコンパイルされた C ライブラリ .It Pa /usr/lib/libm.a 数学ライブラリ .It Pa /usr/lib/libm_p.a プロファイリングにコンパイルされた数学ライブラリ .El .Sh 関連項目 .\" .Xr libc 3 , .Xr cc 1 , .Xr ld 1 , .Xr nm 1 , .Xr intro 2 , .Xr math 3 , .Xr stdio 3 .\" .Sh LIST OF FUNCTIONS .\" .Bl -column "strncasecmpxxx" "system" .\" .Sy Name Description .\" .El .Sh 歴史 .Nm マニュアルは .At v7 で取り入れられました。 diff --git a/ja_JP.eucJP/man/man3/pcap.3 b/ja_JP.eucJP/man/man3/pcap.3 index e583528346..60f0541496 100644 --- a/ja_JP.eucJP/man/man3/pcap.3 +++ b/ja_JP.eucJP/man/man3/pcap.3 @@ -1,339 +1,339 @@ .\" Copyright (c) 1994, 1996, 1997 .\" 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: (1) source code distributions .\" retain the above copyright notice and this paragraph in its entirety, (2) .\" distributions including binary code include the above copyright notice and .\" this paragraph in its entirety in the documentation or other materials .\" provided with the distribution, and (3) all advertising materials mentioning .\" features or use of this software display the following acknowledgement: .\" ``This product includes software developed by the University of California, .\" Lawrence Berkeley Laboratory and its contributors.'' 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED .\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. .\" -.\" $Id: pcap.3,v 1.2 2001-05-14 01:08:37 horikawa Exp $ +.\" $Id: pcap.3,v 1.3 2006-03-08 07:43:48 metal Exp $ .\" .\" $FreeBSD$ .TH PCAP 3 "24 June 1998" .SH 名称 pcap \- Packet Capture ライブラリ .SH 書式 .nf .ft B #include .ft .LP .ft B pcap_t *pcap_open_live(char *device, int snaplen, .ti +8 int promisc, int to_ms, char *ebuf) pcap_t *pcap_open_offline(char *fname, char *ebuf) pcap_dumper_t *pcap_dump_open(pcap_t *p, char *fname) .ft .LP .ft B char errbuf[PCAP_ERRBUF_SIZE]; char *pcap_lookupdev(char *errbuf) int pcap_lookupnet(char *device, bpf_u_int32 *netp, .ti +8 bpf_u_int32 *maskp, char *errbuf) .ft .LP .ft B int pcap_dispatch(pcap_t *p, int cnt, .ti +8 pcap_handler callback, u_char *user) int pcap_loop(pcap_t *p, int cnt, .ti +8 pcap_handler callback, u_char *user) void pcap_dump(u_char *user, struct pcap_pkthdr *h, .ti +8 u_char *sp) .ft .LP .ft B int pcap_compile(pcap_t *p, struct bpf_program *fp, .ti +8 char *str, int optimize, bpf_u_int32 netmask) int pcap_setfilter(pcap_t *p, struct bpf_program *fp) .ft .LP .ft B u_char *pcap_next(pcap_t *p, struct pcap_pkthdr *h) .ft .LP .ft B int pcap_datalink(pcap_t *p) int pcap_snapshot(pcap_t *p) int pcap_is_swapped(pcap_t *p) int pcap_major_version(pcap_t *p) int pcap_minor_version(pcap_t *p) int pcap_stats(pcap_t *p, struct pcap_stat *ps) FILE *pcap_file(pcap_t *p) int pcap_fileno(pcap_t *p) void pcap_perror(pcap_t *p, char *prefix) char *pcap_geterr(pcap_t *p) char *pcap_strerror(int error) .ft .LP .ft B void pcap_close(pcap_t *p) void pcap_dump_close(pcap_dumper_t *p) .ft .fi .SH 解説 Packet Capture ライブラリは、パケット獲得システムの高レベルなインタフェー スを提供します。このメカニズムでは、ネットワークのすべてのパケットに、 その他のホスト用であってもアクセスできます。 .SH ルーチン .B pcap_open_live() は、ネットワークのパケットを調べるためのパケット獲得記述子を取得するた めに用います。 .I device は、開くネットワークデバイスを指定するストリングです。 .I snaplen は、獲得する最大バイト数を指定します。 .I promisc は、インタフェースを無差別モードにするかどうかを指定します(このパラメー タが偽である場合でも、その他の理由でインタフェースが無差別モードになる ことがあります)。 .I to_ms は、読込みタイムアウトをミリ秒単位で指定します。 .I ebuf は、エラーテキストを戻すために使用するもので、 .B pcap_open_live() がエラーになり、 .BR NULL が戻された場合に設定されます。 .PP .B pcap_open_offline() は、読込み用の「保存ファイル」を開くために呼び出します。 .I fname は、開くファイルの名前を指定します。このファイルは、 .B tcpdump(1) と .B tcpslice(1) で使用するファイルと同じフォーマットになっています。エラーテキストが戻 される場合、 .BR stdin .I ebuf stdin.ebuf のシノニムで名前「-」が使用されます。これは、 .B pcap_open_offline() がエラーになり、 .BR NULL が戻される場合に設定されます。 .PP .B pcap_dump_open() は、書込み用の「保存ファイル」を開くために呼び出します。エラーが発生し た場合は、 .BR stdout .B NULL のシノニムで名前「-」が戻されます。 .I p は、 .B pcap_open_offline() か .B pcap_open_live() が戻す .I pcap 構造体です。 .I fname は、開くファイルの名前を指定します。 .B NULL が戻された場合は、 .B pcap_geterr() を使用してエラーテキストを入手できます。 .PP .B pcap_lookupdev() は、 .B pcap_open_live() と .B pcap_lookupnet() での使用に適したネットワークデバイスのポインタを戻します。エラーが発生 した場合は .B NULL が戻され、 .I errbuf に適切なエラーメッセージが入ります。 .PP .B pcap_lookupnet() は、ネットワークデバイス .BR device に関連するネットワーク番号とマスクを決めます。 .I netp と .I maskp は、 .I bpf_u_int32 ポインタです。エラーが発生した場合は \-1 が戻されます。この場合は .I errbuf に適切な エラーメッセージが入ります。 .PP .B pcap_dispatch() は、パケットの収集と処理に使用します。 .I cnt は、戻る前に処理するパケットの最大数を指定します。 .I cnt を \-1 にすると、1つのバッファで受け取ったすべてのパケットが処理されま す。 .I cnt を 0にすると、エラーが発生するか、 .B EOF に達するか、読込みタイムアウトになる(ライブ読込みを行ない、0以外の読込 みタイムアウトを指定している場合)までパケットが処理されます。 .I callback は、呼び出すルーチンを指定します。このルーチンの呼び出しに使用する引数 は、 .BR pcap_dispatch() から渡される .I u_char ポインタ、 .I pcap_pkthdr 構造体のポインタ(実際のネットワークヘッダとデータの前に置かれる)、パケッ トデータの .I u_char ポインタです。戻り値は、読み込まれたパケットの数です。「保存ファイル」 で .B EOF に達するとゼロが戻されます。エラーが発生した場合は \-1 が戻されます。 .B pcap_perror() か .BR pcap_geterr() を使用してエラーテキストを表示してください。 .PP .B pcap_dump() は、 .BR pcap_dump_open() で開いた「保存ファイル」にパケットを出力します。呼び出し引数が、 .BR pcap_dispatch() での使用に適していることに注意してください。 .PP .B pcap_compile() は、ストリング .I str をフィルタプログラムにコンパイルします。 .I program は、 .I bpf_program 構造体のポインタで、 .BR pcap_compile() によって値が入力されます。 .I optimize は、作成されたコードで最適化を実行するかどうかを制御します。 .I netmask は、ローカルネットのネットマスクを指定します。 .PP .B pcap_setfilter() は、フィルタプログラムを指定します。 .I fp は .I bpf_program 構造体の配列を指すポインタで、一般的には .BR pcap_compile() を呼び 出した結果になっています。エラーが発生した場合は \-1 が戻され、エラー が発生しなかった場合は 0が戻されます。 .PP .B pcap_loop() は、 .I cnt パケットが処理されるかエラーが発生するまでパケットの読込みが続くことを 除いて、 .B pcap_dispatch() と同じです。ライブ読込みタイムアウトが発生しても戻りません。 .B pcap_open_live() に 0以外の読込みタイムアウトを指定して .B pcap_dispatch() を呼び出すと、タイムアウトが発生した場合に届いたパケットの受信と処理が できます。 .I cnt に負の値を指定すると、 .B pcap_loop() は無限にループします(最低でもエラーが発生するまでループします)。 .PP .B pcap_next() は、次のパケットの .I u_char ポインタを戻します。 .PP .B pcap_datalink() は、 .BR DLT_EN10MB などのリンクレイヤタイプを戻します。 .PP .B pcap_snapshot() は、 .B pcap_open_live を呼び出した場合に指定されるスナップショットの長さを戻します。 .PP .B pcap_is_swapped() は、現在の「保存ファイル」が、現在のシステムとは異なるバイトオーダを使 用している場合に真を戻します。 .PP .B pcap_major_version() は、保存ファイルの書込みに使用した pcap のメジャーバージョン番号を戻します。 .PP .B pcap_minor_version() -は、保存ファイルの書込みに使用した pcap のマイナーバージョン番号を戻します。 +は、保存ファイルの書込みに使用した pcap のマイナバージョン番号を戻します。 .PP .B pcap_file() は「保存ファイル」の名前を戻します。 .PP .B int pcap_stats() は 0を戻し、 .B pcap_stat 構造体にデータを入力します。値は、実行の開始から呼び出しまでのパケット 統計を表します。エラーが発生した場合、または基礎となるパケット獲得でパ ケット統計がサポートされていない場合は \-1 が戻されます。 .B pcap_perror() か .B pcap_geterr() でエラーテキストを入手してください。 .PP .B pcap_fileno() は、「保存ファイル」のファイル記述子番号を戻します。 .PP .B pcap_perror() は、最後の pcap ライブラリエラーのテキストを .IR prefix に続けて .BR stderr に出力します。 .PP .B pcap_geterr() は、最後の pcap ライブラリエラーに関するエラーテキストを戻します。 .PP .B pcap_strerror() は、 .BR strerror(1) が使用できない場合に使用できます。 .PP .B pcap_close() は、 .I p に関連するファイルを閉じ、リソースの割り振りを解除します。 .PP .B pcap_dump_close() は「保存ファイル」を閉じます。 .SH 関連項目 tcpdump(1), tcpslice(1) .SH 作者 カリフォルニア大学バークレー校、Lawrence Berkeley National Laboratory の Van Jacobson、Craig Leres、Steven McCanne .LP 現行バージョンは、以下の匿名 ftp で使用できます。 .LP .RS .I ftp://ftp.ee.lbl.gov/libpcap.tar.Z .RE .SH バグ バグを発見した場合は、libpcap@ee.lbl.gov に報告してください。 diff --git a/ja_JP.eucJP/man/man3/strstr.3 b/ja_JP.eucJP/man/man3/strstr.3 index 0d6d0fbe01..69a303cf81 100644 --- a/ja_JP.eucJP/man/man3/strstr.3 +++ b/ja_JP.eucJP/man/man3/strstr.3 @@ -1,144 +1,143 @@ .\" Copyright (c) 1990, 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" This code is derived from software contributed to Berkeley by .\" Chris Torek and the American National Standards Committee X3, .\" on Information Processing Systems. .\" .\" 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. .\" .\" @(#)strstr.3 8.1 (Berkeley) 6/4/93 .\" %FreeBSD: src/lib/libc/string/strstr.3,v 1.3.2.5 2001/12/25 00:36:53 ache Exp % .\" .\" $FreeBSD$ .Dd October 11, 2001 .Dt STRSTR 3 .Os .Sh 名称 .Nm strstr , strcasestr , strnstr .Nd 文字列中の部分文字列の位置を探す .Sh ライブラリ .Lb libc .Sh 書式 .In string.h .Ft char * .Fn strstr "const char *big" "const char *little" .Ft char * .Fn strcasestr "const char *big" "const char *little" .Ft char * .Fn strnstr "const char *big" "const char *little" "size_t len" .Sh 解説 .Fn strstr 関数は、ヌル文字で終了する文字列 .Fa big 中で、 ヌル文字で終了する文字列 .Fa little が最初に出現する位置を探します。 .Pp .Fn strcasestr 関数は、 .Fn strstr と同様ですが、 -両方の文字列を -無視します。 +両方の文字列の大文字と小文字の違いを無視します。 .Pp .Fn strnstr 関数は、検索された .Fa len 文字より少ない文字列 .Fa big の中で、 ヌル文字で終了する文字列 .Fa little が最初に出現する位置を探します。 .Ql \e0 の後に現れる文字は、検索されません。 .Fn strnstr 関数は、 .Fx の特定の API なので、 移植に無関係なときだけ利用するようにしてください。 .Sh 戻り値 .Fa little が空の文字列のとき、 .Fa big を返し、 .Fa little に .Fa big がない場合は、NULL を返します。 それ以外のときは、 最初に出現した .Fa little の最初の文字へのポインタを返します。 .Sh 例 次の例は、 .Va largestring の .Qq Li Bar Baz 部分がポインタ .Va ptr にセットされます。 .Bd -literal -offset indent const char *largestring = "Foo Bar Baz"; const char *smallstring = "Bar"; char *ptr; ptr = strstr(largestring, smallstring); .Ed .Pp 次の例は、ポインタ .Va ptr に .Dv NULL がセットされます。これは .Va largestring の最初の 4 文字だけを検索するためです。 .Bd -literal -offset indent const char *largestring = "Foo Bar Baz"; const char *smallstring = "Bar"; char *ptr; ptr = strnstr(largestring, smallstring, 4); .Ed .Sh 関連項目 .Xr memchr 3 , .Xr strchr 3 , .Xr strcspn 3 , .Xr strpbrk 3 , .Xr strrchr 3 , .Xr strsep 3 , .Xr strspn 3 , .Xr strtok 3 .Sh 規格 .Fn strstr 関数は、 .St -isoC に適合しています。 diff --git a/ja_JP.eucJP/man/man3/sysctl.3 b/ja_JP.eucJP/man/man3/sysctl.3 index b0ccaecd99..a424691b81 100644 --- a/ja_JP.eucJP/man/man3/sysctl.3 +++ b/ja_JP.eucJP/man/man3/sysctl.3 @@ -1,955 +1,955 @@ .\" Copyright (c) 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. .\" .\" @(#)sysctl.3 8.4 (Berkeley) 5/9/95 .\" %FreeBSD: src/lib/libc/gen/sysctl.3,v 1.33.2.12 2001/12/14 18:33:51 ru Exp % .\" .\" $FreeBSD$ .Dd January 23, 2001 .Dt SYSCTL 3 .Os .Sh 名称 .Nm sysctl , .Nm sysctlbyname , .Nm sysctlnametomib .Nd システム情報を取得または設定 .Sh ライブラリ .Lb libc .Sh 書式 .In sys/types.h .In sys/sysctl.h .Ft int .Fn sysctl "int *name" "u_int namelen" "void *oldp" "size_t *oldlenp" "void *newp" "size_t newlen" .Ft int .Fn sysctlbyname "const char *name" "void *oldp" "size_t *oldlenp" "void *newp" "size_t newlen" .Ft int .Fn sysctlnametomib "const char *name" "int *mibp" "size_t *sizep" .Sh 解説 .Fn sysctl 関数はシステム情報を取り出し、該当する特権のあるプロセスが システム情報を設定できるようにします。 .Fn sysctl で利用できる情報は、整数、 ストリング、およびテーブルで構成されます。情報は、 .Xr sysctl 8 ユーティリティ を使用してコマンドインタフェースから取り出しおよび設定できます。 .Pp 以降で明確に記載した場合を除いて、 .Fn sysctl は、要求されたデータの一貫した スナップショットを返します。一貫性を保つために、メモリへの宛先バッファが ロックされるので、データはブロックなしにコピーできます。 .Fn sysctl の呼び出しはデッドロックを回避するためにシリアル化されています。 .Pp 状態は ``管理情報ベース'' (Management Information Base、MIB) スタイルの名前を使用して記述され、 .Fa name にリストされます。 .Fa name は長さが .Fa namelen の整数の配列です。 .Pp .Fn sysctlbyname 関数は、名前の ASCII 表現を受け入れ、整数の名前ベクトルを 内部的に検索します。それ以外は、標準の .Fn sysctl 関数と同じように機能します。 .Pp 情報は .Fa oldp で指定したバッファにコピーされます。バッファのサイズは、呼び 出しの前に .Fa oldlenp で指定した位置で与えられます。この位置は、呼び出しが 正常に完了した後およびエラーコード .Er ENOMEM で返った後にコピーされるデータの 量を与えます。利用できるデータの量が指定のバッファサイズより大きい場合、 呼び出しは、指定バッファにちょうど入る量のデータだけを与え、エラーコード .Er ENOMEM で返ります。古い値が不要な場合は、 .Fa oldp と .Fa oldlenp を NULL に 設定してください。 .Pp 利用できるデータのサイズを決定するには、 .Fa oldp に NULL パラメータを指定して .Fn sysctl を呼び出します。利用できるデータのサイズが、 .Fa oldlenp の指す位置に 返されます。操作によっては空間の量が頻繁に変化することがあります。 そのような操作の場合、システムは量を切り上げようとします。返されたサイズ が、その後まもなくデータを返す呼び出しに十分であるようにするためです。 .Pp 新しい値を設定するため、 .Fa newp は、長さが .Fa newlen のバッファを指すように 設定されます。このバッファから、要求された値が取得されます。新しい値が 設定されないと、 .Fa newp は NULL に設定され、 .Fa newlen は 0 に設定されます。 .Pp .Fn sysctlnametomib 関数は、ASCII 表現の名前を受け付け、 整数の名前ベクトルを検索し、 .Fa mibp で指される mib 配列中に、数値表現を格納して返します。 mib 配列中の要素数は、呼び出し前に .Fa sizep で指定された場所が与えます。 呼び出しが成功した後には、この場所には、コピーされた要素数が与えられます。 結果の .Fa mib と .Fa size は、後で .Fn sysctl 呼び出しに使用して、 要求した ASCII 名に関連付けられているデータを取得可能です。 同じ名前の変数を繰り返し要求するアプリケーションが使用することを、 このインタフェースは意図しています ( .Fn sysctl 関数は、 .Fn sysctlbyname 関数で実現される要求と同じことを、約 1/3 の時間で実行します)。 .Fn sysctlbyname 関数は、 mib の前置詞を取得してこれに最後の構成要素を付加するためにも有用です。 例えば、PID が 100 未満のプロセスのプロセス情報を取得するには、 次のようにします: .Pp .Bd -literal -offset indent -compact int i, mib[4]; size_t len; struct kinfo_proc kp; /* Fill out the first three components of the mib */ len = 4; sysctlnametomib("kern.proc.pid", mib, &len); /* Fetch and print entries for pid's < 100 */ for (i = 0; i < 100; i++) { mib[3] = i; len = sizeof(kp); if (sysctl(mib, 4, &kp, &len, NULL, 0) == -1) perror("sysctl"); else if (len > 0) printkproc(&kp); } .Ed .Pp 1 番上のレベルの名前は .Aq Pa sys/sysctl.h に CTL_ 接頭語付きで定義されます。 次のとおりです。次のレベルおよびそれ以下のレベルは、ここにリストする インクルードファイル内にあり、以降の個別のセクションで説明します。 .Pp .Bl -column CTLXMACHDEPXXX "Next level namesXXXXXX" -offset indent .It Sy "名前 次のレベル名 解説" .It "CTL\_DEBUG sys/sysctl.h デバッグ" .It "CTL\_VFS sys/mount.h ファイルシステム" .It "CTL\_HW sys/sysctl.h 一般的な CPU, I/O" .It "CTL\_KERN sys/sysctl.h カーネルの最高限界" .It "CTL\_MACHDEP sys/sysctl.h マシン依存" .It "CTL\_NET sys/socket.h ネットワーク" .It "CTL\_USER sys/sysctl.h ユーザレベル" .It "CTL\_VM vm/vm_param.h 仮想メモリ" .El .Pp たとえば、システムで許容されるプロセスの最大数を取り出す方法は 次のとおりです。 .Pp .Bd -literal -offset indent -compact int mib[2], maxproc; size_t len; mib[0] = CTL_KERN; mib[1] = KERN_MAXPROC; len = sizeof(maxproc); sysctl(mib, 2, &maxproc, &len, NULL, 0); .Ed .Pp システムユーティリティの標準検索パスを取り出す方法は次のとおりです。 .Pp .Bd -literal -offset indent -compact int mib[2]; size_t len; char *p; mib[0] = CTL_USER; mib[1] = USER_CS_PATH; sysctl(mib, 2, NULL, &len, NULL, 0); p = malloc(len); sysctl(mib, 2, p, &len, NULL, 0); .Ed .Ss CTL_DEBUG デバッグ変数はシステムごとにさまざまです。デバッグ変数を追加または 削除するとき、それを認識するように .Fn sysctl をコンパイルし直す必要はありません。実行のたびに、 .Fn sysctl が、カーネルからデバッグ変数の リストを取得し、その現在値を表示するからです。システムは 20 個の .Ns ( Va struct ctldebug ) 変数を定義します。これらは .Nm debug0 から .Nm debug19 という 名前になります。これらは別個の変数として宣言されるので、対応変数の位置で -個別に初期化できます。ローダーは、変数が複数の場所で初期化されたときは +個別に初期化できます。ローダは、変数が複数の場所で初期化されたときは エラーを出して、同じ変数が複数に使用されるのを回避します。たとえば、変数 .Nm dospecialcheck をデバッグ変数としてエクスポートする場合には、次の宣言が 使用できます。 .Bd -literal -offset indent -compact int dospecialcheck = 1; struct ctldebug debug5 = { "dospecialcheck", &dospecialcheck }; .Ed .Ss CTL_VFS 明瞭な第 2 レベルの名称 VFS_GENERIC は、すべてのファイルシステムに関する 一般情報を取得するのに使用します。これの第 3 レベルの識別子の 1 つは VFS_MAXTYPENUM で、最も大きいファイルシステムタイプの番号を与えます。別の 第 3 レベルの識別子は VFS_CONF で、第 4 レベルの識別子として与えられた ファイルシステムタイプに関する構成を返します ( 使用法の例は .Xr getvfsbyname 3 を参照 ) 。残りの第 2 レベルの識別子は、 .Xr statfs 2 呼び出しまたは VFS_CONF が 返すファイルシステムタイプ番号です。各ファイルシステムについて利用できる第 3 レベルの識別子は、そのファイルシステムのマウント引数構造を定義する ヘッダファイルで指定されます。 .Ss CTL_HW CTL_HW レベルに関して利用できるストリングと整数については以下で詳しく 説明します。変更可能性の列は、適切な特権のあるプロセスが値を 変更できるかどうかを示します。 .Bl -column "Second level nameXXXXXX" integerXXX -offset indent .It Sy "第 2 レベル名 タイプ 変更可能" .It "HW\_MACHINE ストリング いいえ" .It "HW\_MODEL ストリング いいえ" .It "HW\_NCPU 整数 いいえ" .It "HW\_BYTEORDER 整数 いいえ" .It "HW\_PHYSMEM 整数 いいえ" .It "HW\_USERMEM 整数 いいえ" .It "HW\_PAGESIZE 整数 いいえ" .It "HW\_FLOATINGPOINT 整数 いいえ" .It "HW\_MACHINE\_ARCH ストリング いいえ" .\".It "HW\_DISKNAMES 整数 いいえ" .\".It "HW\_DISKSTATS 整数 いいえ" .El .Pp .Bl -tag -width 6n .It Li HW_MACHINE マシンクラス .It Li HW_MODEL マシンモデル .It Li HW_NCPU CPU の数 .It Li HW_BYTEORDER バイト順 (4,321、または 1,234) .It Li HW_PHYSMEM 物理メモリのバイト .It Li HW_USERMEM カーネルでないメモリのバイト .It Li HW_PAGESIZE ソフトウェアのページサイズ .It Li HW_FLOATINGPOINT 浮動小数点サポートがハードウェアにある場合はゼロでない .It Li HW_MACHINE_ARCH マシンはアーキテクチャタイプに依存 .\".It Fa HW_DISKNAMES .\".It Fa HW_DISKSTATS .El .Ss CTL_KERN CTL_KERN レベルに関して利用できるストリングと整数の情報について以下に詳しく 説明します。変更可能性の列は、該当する特権のあるプロセスが値を 変更するかどうかを示します。現時点で利用できるデータのタイプは、 プロセス情報、システム vnode、開いたファイルのエントリ、 ルーティングテーブルのエントリ、仮想メモリ統計、負荷平均履歴、および クロックレート情報です。 .Pp .Bl -column "KERNXMAXFILESPERPROCXXX" "struct clockrateXXX" -offset indent .It Sy "第 2 レベル名 タイプ 変更可能" .It "KERN\_ARGMAX 整数 いいえ" .It "KERN\_BOOTFILE ストリング はい" .It "KERN\_BOOTTIME struct timeval いいえ" .It "KERN\_CLOCKRATE struct clockinfo いいえ" .It "KERN\_FILE struct file いいえ" .It "KERN\_HOSTID 整数 はい" .It "KERN\_HOSTNAME ストリング はい" .It "KERN\_JOB\_CONTROL 整数 いいえ" .It "KERN\_MAXFILES 整数 はい" .It "KERN\_MAXFILESPERPROC 整数 はい" .It "KERN\_MAXPROC 整数 いいえ" .It "KERN\_MAXPROCPERUID 整数 はい" .It "KERN\_MAXVNODES 整数 はい" .It "KERN\_NGROUPS 整数 いいえ" .It "KERN\_NISDOMAINNAME ストリング はい" .It "KERN\_OSRELDATE 整数 いいえ" .It "KERN\_OSRELEASE ストリング いいえ" .It "KERN\_OSREV 整数 いいえ" .It "KERN\_OSTYPE ストリング いいえ" .It "KERN\_POSIX1 整数 いいえ" .It "KERN\_PROC struct proc いいえ" .It "KERN\_PROF node 適用不可" .It "KERN\_QUANTUM 整数 はい" .It "KERN\_SAVED\_IDS 整数 いいえ" .It "KERN\_SECURELVL 整数 累乗のみ" .It "KERN\_UPDATEINTERVAL 整数 いいえ" .It "KERN\_VERSION ストリング いいえ" .It "KERN\_VNODE struct vnode いいえ" .El .Pp .Bl -tag -width 6n .It Li KERN_ARGMAX .Xr execve 2 への引数の最大バイト数 .It Li KERN_BOOTFILE カーネルがロードされた元のファイルの完全なパス名 .It Li KERN_BOOTTIME .Va struct timeval 構造が返されます。この構造には、システムが起動された時刻が 入れられます。 .It Li KERN_CLOCKRATE .Va struct clockinfo 構造が返されます。この構造には、クロック、統計クロック、 およびプロファイル化クロック頻度、マイクロ秒 /hz チック、およびねじれレート が入れられます。 .It Li KERN_FILE ファイルテーブル全体を返します。返されたデータは、 1 つの .Va struct filehead に .Va struct file の配列が続いたものになります。ファイルのサイズは、 システム内のそのようなオブジェクトの現在の数で決まります。 .It Li KERN_HOSTID ホスト ID を取得または設定します。 .It Li KERN_HOSTNAME ホスト名を取得または設定します。 .It Li KERN_JOB_CONTROL このシステムで情報制御が利用できる場合は 1 を返します。そうでない場合は 0 を返します。 .It Li KERN_MAXFILES システムで開けるファイルの最大数 .It Li KERN_MAXFILESPERPROC 1 つのプロセスについて開けるファイルの最大数。この制限が適用されるのは、 開くという要求があった時点で、ゼロでない有効な uid のあるプロセスだけです。 制限または有効な uid が変更されても、既に開かれているファイルは影響を受けません。 .It Li KERN_MAXPROC システム内で許される同時プロセスの最大数 .It Li KERN_MAXPROCPERUID 1 つの有効な uid についてシステムが許容する同時プロセスの最大数。この限界が 適用されるのは、フォーク要求の時点で、ゼロでない有効な uid のあるプロセス だけです。限界が変更されても、既に開始されているプロセスは影響を 受けません。 .It Li KERN_MAXVNODES システムで利用できる vnode の最大数 .It Li KERN_NGROUPS 補充グループの最大数 .It Li KERN_NISDOMAINNAME 現在の YP/NIS ドメインの名前 .It Li KERN_OSRELDATE システムのリリース日付。形式は YYYYMM (1996 年 1 月は 199601 と コード化されます )。 .It Li KERN_OSRELEASE システムリリースストリング .It Li KERN_OSREV システム改訂ストリング .It Li KERN_OSTYPE システムタイプストリング .It Li KERN_POSIX1 システムが準拠しようとしている .St -p1003.1 のバージョン .It Li KERN_PROC プロセステーブル全体またはそのサブセットを返します。 .Va struct kinfo_proc 構造の配列が返され、配列のサイズはシステム内のそのようなオブジェクトの 現在の数で決まります。第 3 レベルと第 4 レベルは次のとおりです。 .Bl -column "Third level nameXXXXXX" "Fourth level is:XXXXXX" -offset indent .It "第 3 レベル名 第 4 レベル名" .It "KERN\_PROC\_ALL なし" .It "KERN\_PROC\_PID プロセス ID" .It "KERN\_PROC\_PGRP プロセスグループ" .It "KERN\_PROC\_TTY tty デバイス" .It "KERN\_PROC\_UID ユーザ ID" .It "KERN\_PROC\_RUID リアルユーザ ID" .El .It Li KERN_PROF カーネルに関するプロファイル化情報を返します。カーネルをプロファイル化用に コンパイルしないと、 KERN_PROF 値を取り出そうとしても、 .Er ENOENT で処理は失敗します。ストリング用の第 3 レベル名および整数プロファイル化情報について 以下に詳しく説明します。 ( 変更可能性の列は、該当する特権のあるプロセスが値を 変更できるかどうかを示します。 .Bl -column "GPROFXGMONPARAMXXX" "struct gmonparamXXX" -offset indent .It Sy "第 3 レベル名 タイプ 変更可能" .It "GPROF\_STATE 整数 はい" .It "GPROF\_COUNT u_short[\|] はい" .It "GPROF\_FROMS u_short[\|] はい" .It "GPROF\_TOS struct tostruct はい" .It "GPROF\_GMONPARAM struct gmonparam いいえ" .El .Pp 変数は次のとおりです。 .Bl -tag -width 6n .It Li GPROF_STATE GMON_PROF_ON または GMON_PROF_OFF を返して、プロファイル化が 進行中であるか、または停止しているかを示します。 .It Li GPROF_COUNT 統計プログラムカウンタカウントの配列 .It Li GPROF_FROMS 呼び出し点のプログラムカウントでインデックス処理された配列 .It Li GPROF_TOS 呼び出しの宛先とそのカウントを記述する .Va struct tostruct の配列 .It Li GPROF_GMONPARAM 上記の配列のサイズを指定する構造 .El .It Li KERN_QUANTUM 他プロセスが実行待ち行列にいる場合において あるプロセスが取り上げられずに実行し続けられる最大期間を、 ミリ秒単位で示します。 .It Li KERN_SAVED_IDS 保存された set-group および保存された set-user ID が利用できる場合は 1 を 返します。 .It Li KERN_SECURELVL システムのセキュリティレベル。このレベルは、該当する特権のあるプロセス によって上げることができます。下げることはできません。 .It Li KERN_VERSION システムバージョンストリング .It Li KERN_VNODE vnode テーブル全体を返します。 vnode テーブルは必ずしもシステムの一貫した スナップショットではないことに注意してください。返されるデータは配列で 構成され、配列のサイズは、システム内のそのようなオブジェクトの現在の数で 決まります。配列の各要素に含まれるのは、 vnode のカーネルアドレス .Va struct vnode * に vnode 自体 .Va struct vnode が続いたものです。 .El .Ss CTL_MACHDEP 定義された変数の集合はアーキテクチャに依存します。次の変数が i386 アーキテクチャ用に定義されています。 .Bl -column "CONSOLE_DEVICEXXX" "struct bootinfoXXX" -offset indent .It Sy "第 2 レベル名 タイプ 変更可能" .It Li "CPU\_CONSDEV dev_t いいえ" .It Li "CPU\_ADJKERNTZ 整数 はい" .It Li "CPU\_DISRTCSET 整数 はい" .It Li "CPU\_BOOTINFO struct bootinfo いいえ" .It Li "CPU\_WALLCLOCK 整数 はい" .El .Ss CTL_NET CTL_NET レベルに利用できるストリングと整数については以下に詳しく 説明します。変更可能性の列は、該当する特権のあるプロセスが値を 変更できるかどうかを示します。 .Bl -column "Second level nameXXXXXX" "routing messagesXXX" -offset indent .It Sy "第 2 レベル名 タイプ 変更可能" .It "PF\_ROUTE ルーティングメッセージ いいえ" .It "PF\_INET IPv4 値 はい" .It "PF\_INET6 IPv6 値 はい" .El .Pp .Bl -tag -width 6n .It Li PF_ROUTE ルーティングテーブル全体またはそのサブセットを返します。データは、 ルーティングメッセージのシーケンスとして返されます ( ヘッダファイル、形式、 および意味については .Xr route 4 を参照 )。各メッセージの長さはメッセージヘッダ に組み込まれています。 .Pp 第 3 レベル名はプロトコル番号で、現時点では必ず 0 です。第 4 レベル名は アドレスファミリで、これを 0 に設定するとすべてのアドレスファミリを 選択できます。第 5 レベル名と第 6 レベル名は次のとおりです。 .Bl -column "Fifth level nameXXXXXX" "Sixth level is:XXX" -offset indent .It Sy "第 5 レベル名 第 6 レベル" .It "NET_RT_FLAGS rtflags" .It "NET_RT_DUMP なし" .It "NET_RT_IFLIST なし" .El .It Li PF_INET IPv4 (インターネットプロトコルバージョン 4) に関する各種のグローバルな情報を取得または 設定します。第 3 レベル名はプロトコルです。第 4 レベル名は変数名です。 現時点で定義されているプロトコルと名前は次のとおりです。 .Bl -column ProtocolXX VariableXX TypeXX ChangeableXX .It Sy "プロトコル 変数 タイプ 変更可能" .It "icmp bmcastecho 整数 はい" .It "icmp maskrepl 整数 はい" .It "ip forwarding 整数 はい" .It "ip redirect 整数 はい" .It "ip ttl 整数 はい" .It "udp checksum 整数 はい" .El .Pp 変数は次のとおりです。 .Bl -tag -width 6n .It Li icmp.bmcastecho ブロードキャストまたはマルチキャストのアドレスへの ICMP エコー要求が 応答される必要がある場合は 1 を返します。 .It Li icmp.maskrepl ICMP ネットワークマスク要求が応答される必要がある場合は 1 を返します。 .It Li ip.forwarding IP 転送がホストについて有効なときは 1 を返します。つまり、ホストがルータ として機能しているときです。 .It Li ip.redirect ICMP 再転送がホストによって送信できるときは 1 を返します。このオプション は、ホストが IP パケットをルーティングしていない場合は無視されます。また、 このオプションは通常、すべてのシステムで有効にしておく必要があります。 .It Li ip.ttl システムがソースになっている IP パケットの最大寿命 ( ホップ数 ) 値。この値は 通常のトランスポートプロトコルに適用されます。 ICMP にではありません。 .It Li udp.checksum UDP チェックサムが計算およびチェックされているときは 1 を返します。 UDP チェックサムを無効にすることは、強く非推奨です。 .Pp 変数 net.inet.*.ipsec については .Xr ipsec 4 を参照してください。 .El .It Li PF_INET6 IPv6 (インターネットプロトコルバージョン 6) に関する各種のグローバルな情報を取得または 設定します。 第 3 レベル名はプロトコルです。 第 4 レベル名は変数名です。 .Pp 変数 net.inet6.* については .Xr inet6 4 を参照してください。 変数 net.inet6.*.ipsec6 については .Xr ipsec 4 を参照してください。 .El .Ss CTL_USER CTL_USER レベルに利用できるストリングと整数について以下に詳しく説明します。 変更可能性の列は、該当する特権のあるプロセスが値を変更できるかどうかを 示します。 .Bl -column "USER_COLL_WEIGHTS_MAXXXX" "integerXXX" -offset indent .It Sy "第 2 レベル名 タイプ 変更可能" .It "USER\_BC\_BASE\_MAX 整数 いいえ" .It "USER\_BC\_DIM\_MAX 整数 いいえ" .It "USER\_BC\_SCALE\_MAX 整数 いいえ" .It "USER\_BC\_STRING\_MAX 整数 いいえ" .It "USER\_COLL\_WEIGHTS\_MAX 整数 いいえ" .It "USER\_CS\_PATH ストリング いいえ" .It "USER\_EXPR\_NEST\_MAX 整数 いいえ" .It "USER\_LINE\_MAX 整数 いいえ" .It "USER\_POSIX2\_CHAR\_TERM 整数 いいえ" .It "USER\_POSIX2\_C\_BIND 整数 いいえ" .It "USER\_POSIX2\_C\_DEV 整数 いいえ" .It "USER\_POSIX2\_FORT\_DEV 整数 いいえ" .It "USER\_POSIX2\_FORT\_RUN 整数 いいえ" .It "USER\_POSIX2\_LOCALEDEF 整数 いいえ" .It "USER\_POSIX2\_SW\_DEV 整数 いいえ" .It "USER\_POSIX2\_UPE 整数 いいえ" .It "USER\_POSIX2\_VERSION 整数 いいえ" .It "USER\_RE\_DUP\_MAX 整数 いいえ" .It "USER\_STREAM\_MAX 整数 いいえ" .It "USER\_TZNAME\_MAX 整数 いいえ" .El .Bl -tag -width 6 .Pp .It Li USER_BC_BASE_MAX .Xr bc 1 ユーティリティ内の最大 ibase/obase 値 .It Li USER_BC_DIM_MAX .Xr bc 1 ユーティリティ内の最大配列サイズ .It Li USER_BC_SCALE_MAX .Xr bc 1 ユーティリティ内の最大スケール値 .It Li USER_BC_STRING_MAX .Xr bc 1 ユーティリティ内の最大ストリング長 .It Li USER_COLL_WEIGHTS_MAX ロケール定義ファイル内の LC_COLLATE 順序キーワードのエントリに割り 当てできる重みの最大数 .It Li USER_CS_PATH すべての標準ユーティリティを検出する環境変数 .Ev PATH の値を返します。 .It Li USER_EXPR_NEST_MAX .Xr expr 1 ユーティリティによって、丸括弧内にネストできる式の最大数 .It Li USER_LINE_MAX テキスト処理ユーティリティ入力行の最大長 ( バイト単位 ) .It Li USER_POSIX2_CHAR_TERM .St -p1003.2 に記述されたすべての操作ができる少なくとも 1 つの端末タイプを システムがサポートする場合は 1 を返します。そうでない場合は 0 を返します。 .It Li USER_POSIX2_C_BIND システムの C 言語開発機能が、 C 言語バインディングオプションをサポートする 場合は 1 を返します。そうでない場合は 0 を返します。 .It Li USER_POSIX2_C_DEV システムが C 言語開発ユーティリティオプションをサポートする場合は 1 を 返します。そうでない場合は 0 を返します。 .It Li USER_POSIX2_FORT_DEV システムが FORTRAN 開発ユーティリティオプションをサポートする場合は 1 を 返します。そうでない場合は 0 を返します。 .It Li USER_POSIX2_FORT_RUN システムが FORTRAN ランタイムユーティリティオプションをサポートする場合は 1 を返します。そうでない場合は 0 を返します。 .It Li USER_POSIX2_LOCALEDEF システムがロケールの作成をサポートする場合は 1 を返します。そうでない場合は 0 を返します。 .It Li USER_POSIX2_SW_DEV システムがソフトウェア開発ユーティリティオプションをサポートする場合は 1 を 返します。そうでない場合は 0 を返します。 .It Li USER_POSIX2_UPE システムがユーザポータビリティ・ユーティリティオプションをサポートする 場合は 1 を返します。そうでない場合は 0 を返します。 .It Li USER_POSIX2_VERSION システムが準拠しようとしている .St -p1003.2 のバージョン .It Li USER_RE_DUP_MAX 間隔表記を使用しているときに、許容される正規表現の反復発生の最大数 .It Li USER_STREAM_MAX プロセスが同時に開いておけるストリームの最大数の最小 .It Li USER_TZNAME_MAX 時間帯の名前についてサポートされるタイプの最大数の最小 .El .Ss CTL_VM CTL_VM レベルで利用できるストリングと整数について以下で詳しく説明します。 変更可能性の列は、該当する特権のあるプロセスが値を変更できるかどうかを 示します。 .Bl -column "Second level nameXXXXXX" "struct loadavgXXX" -offset indent .It Sy "第 2 レベル名 タイプ 変更可能" .It "VM\_LOADAVG struct loadavg いいえ" .It "VM\_METER struct vmtotal いいえ" .It "VM\_PAGEOUT\_ALGORITHM 整数 はい" .It "VM\_SWAPPING\_ENABLED 整数 おそらく" .It "VM\_V\_CACHE\_MAX 整数 はい" .It "VM\_V\_CACHE\_MIN 整数 はい" .It "VM\_V\_FREE\_MIN 整数 はい" .It "VM\_V\_FREE\_RESERVED 整数 はい" .It "VM\_V\_FREE\_TARGET 整数 はい" .It "VM\_V\_INACTIVE\_TARGET 整数 はい" .It "VM\_V\_PAGEOUT\_FREE\_MIN 整数 はい" .El .Pp .Bl -tag -width 6n .It Li VM_LOADAVG 負荷平均履歴を返します。返されたデータは .Va struct loadavg で構成されます。 .It Li VM_METER システム全体に渡る仮想メモリ統計を返します。返されたデータは .Va struct vmtotal で構成されます。 .It Li VM_PAGEOUT_ALGORITHM 統計ベースの管理アルゴリズムが使用される場合は 0 です。 近 LRU ( near-LRU ) アルゴリズムが使用される場合は 1 です。 .It Li VM_SWAPPING_ENABLED プロセススワップが有効な場合は 1 です。無効な場合は 0 です。スワップを 無効にしてカーネルが構築された場合、この変数は永続的に 0 に設定されます。 .It Li VM_V_CACHE_MAX キャッシュ待ち行列の最大希望サイズ .It Li VM_V_CACHE_MIN キャッシュ待ち行列の最小希望サイズ。キャッシュ待ち行列のサイズがこの 値よりはるかに低いと、ページアウトデーモンが起動されます。 .It Li VM_V_FREE_MIN メモリを待っているプロセスが起動する前に、利用できるようになる必要のある メモリの最小量 ( キャッシュメモリ+空きメモリ )。 .It Li VM_V_FREE_RESERVED 空きページとキャッシュページがこの値より低いと、プロセスは ページアウトデーモンを起動し、メモリを待機します。 .It Li VM_V_FREE_TARGET ページアウトデーモンが維持しようとする空きメモリの合計量 ( キャッシュメモリを 含む )。 .It Li VM_V_INACTIVE_TARGET ページアウトデーモンが、実行されるときに、到達する必要のあるアクティブ でないページの希望数。アクティブでないページは、必要なときに、 プロセスアドレス内に素早く挿入できます。 .It Li VM_V_PAGEOUT_FREE_MIN 空きメモリとキャッシュメモリの量がこの値より低い場合、ページアウトデーモン はデッドロックを避けるために "メモリ維持モード" に入ります。 .El .Sh 戻り値 .Rv -std .Sh エラー 次のエラーが報告される可能性があります。 .Bl -tag -width Er .It Bq Er EFAULT バッファ .Fa name、 .Fa oldp、 .Fa newp、または長さポインタ .Fa oldlenp に無効な アドレスが含まれています。 .It Bq Er EINVAL .Fa name 配列が 2 未満であるか、または CTL_MAXNAME より大きくなっています。 .It Bq Er EINVAL NULL でない .Fa newp が指定され、 .Fa newlen 内の指定の長さが 大きすぎるかまたは小さすぎます。 .It Bq Er ENOMEM .Fa oldlenpis が指す長さが短すぎて、要求された値を保持できません。 .It Bq Er ENOTDIR .Fa name 配列が、端の名前ではなく、中間の名前を指定しています。 .It Bq Er EISDIR .Fa name 配列が端の名前を指定していますが、実際の名前は端ではありません。 .It Bq Er ENOENT .Fa name 配列が未知の値を指定しています。 .It Bq Er EPERM 読み取り専用値を設定しようとしました。 .It Bq Er EPERM 該当する特権のないプロセスが値を設定しようとしました。 .El .Sh ファイル .Bl -tag -width -compact .It Aq Pa sys/sysctl.h 1 番上のレベルの識別子の定義、 2 番めのレベルのカーネルおよび ハードウェア識別子、およびユーザレベル識別子 .It Aq Pa sys/socket.h 第 2 レベルのネットワーク識別子の定義 .It Aq Pa sys/gmon.h 第 3 レベルのプロファイル化識別子についての定義 .It Aq Pa vm/vm_param.h 第 2 レベルの仮想メモリ識別子についての定義 .It Aq Pa netinet/in.h 第 3 レベルの IPv4/IPv6 識別子と、 第 4 レベルの IPv4/IPv6 識別子についての定義 .It Aq Pa netinet/icmp_var.h 第 4 レベルの ICMP 識別子についての定義 .It Aq Pa netinet/icmp6.h 4 レベルの ICMPv6 識別子についての定義 .It Aq Pa netinet/udp_var.h 第 4 レベルの UDP 識別子についての定義 .El .Sh 関連項目 .Xr sysconf 3 , .Xr sysctl 8 .Sh 歴史 .Fn sysctl 関数は .Bx 4.4 で最初に取り入れられました。 diff --git a/ja_JP.eucJP/man/man3/syslog.3 b/ja_JP.eucJP/man/man3/syslog.3 index 7d86a10bf8..61abe6cbb0 100644 --- a/ja_JP.eucJP/man/man3/syslog.3 +++ b/ja_JP.eucJP/man/man3/syslog.3 @@ -1,292 +1,292 @@ .\" Copyright (c) 1985, 1991, 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. .\" .\" @(#)syslog.3 8.1 (Berkeley) 6/4/93 .\" $FreeBSD$ .\" %FreeBSD: src/lib/libc/gen/syslog.3,v 1.9.2.9 2001/12/14 18:33:51 ru Exp % .\" .Dd June 4, 1993 .Dt SYSLOG 3 .Os .Sh 名称 .Nm syslog , .Nm vsyslog , .Nm openlog , .Nm closelog , .Nm setlogmask .Nd システムログの制御 .Sh ライブラリ .Lb libc .Sh 書式 .In syslog.h .In varargs.h .Ft void .Fn syslog "int priority" "const char *message" "..." .Ft void .Fn vsyslog "int priority" "const char *message" "va_list args" .Ft void .Fn openlog "const char *ident" "int logopt" "int facility" .Ft void .Fn closelog void .Ft int .Fn setlogmask "int maskpri" .Sh 解説 .Fn syslog 関数は、システムのメッセージロガーにメッセージを書込みます。 そのメッセージは、次に状況に応じてシステムコンソール、ログファイル、 ログインしたユーザなどに書込まれたり、他のマシンに転送されます ( .Xr syslogd 8 参照) 。 .Pp メッセージは、 .Ql %m が現在のエラーメッセージにより置き換えられることを除けば、 .Xr printf 3 フォーマットストリングと同じものになります (グローバル変数 errno によって示されるものと同じ。 .Xr strerror 3 参照) 。 何もない場合は、末尾に改行が追加されます。 .Pp .Fn vsyslog 関数は、 .Xr stdarg 3 の可変長引数機能を使ってすでに引数が キャプチャされている場合の代替形式です。 .Pp メッセージには優先順位 ( .Fa priority ) のタグが付けられます。優先順位は、 .Fa facility と .Em level にコード化されます。 .Fa facility は、メッセージを作成する システムの一部を記述します。 .Em level は、順番になった (高い方から低い方へ) 次のような一覧から選択します: .Bl -tag -width LOG_AUTHPRIV .It Dv LOG_EMERG パニック状態。これは、通常は全ユーザに送信されます。 .It Dv LOG_ALERT 壊れたシステムデータベースのような、直ちに是正すべき状態。 .It Dv LOG_CRIT 危険な状態、例えばハードデバイスエラーなど。 .It Dv LOG_ERR エラー。 .It Dv LOG_WARNING 警告メッセージ。 .It Dv LOG_NOTICE エラー状態ではないが、特別に処理する必要性が考えられる状態。 .It Dv LOG_INFO インフォメーションメッセージ。 .It Dv LOG_DEBUG 通常はプログラムのデバッグの際にのみ使う情報が入った メッセージ。 .El .Pp .Fn openlog 関数は、 .Fn syslog および .Fn vsyslog により送られたメッセージに 対して、より特殊な処理を施すためのものです。パラメータ .Fa ident は、すべての メッセージの前に付加されるストリングです。 .Fa logopt 引数は、ログ作成オプション を指定するビットフィールドで、次に示す値の 1 つ以上を .Tn OR 操作することによって作成されます: .Bl -tag -width LOG_AUTHPRIV .It Dv LOG_CONS .Fn syslog がメッセージを .Xr syslogd 8 へ渡せない場合、 コンソール .Pq Dq Pa /dev/console にメッセージを書き込むことを試みます。 .It Dv LOG_NDELAY .Xr syslogd 8 への接続を直ちに開きます。通常は、最初の メッセージがログに書込まれるまでは開く操作を遅らせます。これは、 ファイル記述子を割り振る順番を管理する必要があるプログラムでは役に 立ちます。 .It Dv LOG_PERROR メッセージを、システムログと同時に標準エラー出力にも書込みます。 .It Dv LOG_PID 各メッセージとともにプロセス ID をログします。デーモンのインスタンス化を識別するために役に立ちます。 .El .Pp .Fa facility パラメータは、明示的なファシリティが コード化されていないすべてのメッセージに割り当てるデフォルトファシリティを コード化します: .Bl -tag -width LOG_AUTHPRIV .It Dv LOG_AUTH 権限付与システム: .Xr login 1 、 .Xr su 1 、 .Xr getty 8 、など。 .It Dv LOG_AUTHPRIV .Dv LOG_AUTH と同じですが、限定された個人だけが読める ファイルにログします。 .It Dv LOG_CONSOLE カーネルコンソール出力ドライバが、メッセージを .Pa /dev/console に書き込みます。 .It Dv LOG_CRON cron デーモン: .Xr cron 8 。 .It Dv LOG_DAEMON .Xr routed 8 のような、他のファシリティでは明示的に 用意されていないシステムデーモン。 .It Dv LOG_FTP ファイル転送プロトコルデーモン: .Xr ftpd 8 、 .Xr tftpd 8 。 .It Dv LOG_KERN カーネルにより生成されるメッセージ。これらは、どんな ユーザプロセスによっても生成できません。 .It Dv LOG_LPR -ラインプリンターのスプーリングシステム: +ラインプリンタのスプーリングシステム: .Xr lpr 1 、 .Xr lpc 8 、 .Xr lpd 8 、など。 .It Dv LOG_MAIL メールシステム。 .It Dv LOG_NEWS ネットワークニュースシステム。 .It Dv LOG_SECURITY セキュリティサブシステムです。 例えば .Xr ipfw 4 です。 .It Dv LOG_SYSLOG .Xr syslogd 8 により内部的に生成されたメッセージ。 .It Dv LOG_USER 任意のユーザプロセスにより生成されたメッセージ。何も 指定されていない場合は、これはデフォルトのファシリティ識別子になります。 .It Dv LOG_UUCP uucp システム。 .It Dv LOG_LOCAL0 ローカルの使用のために予約。 .Dv LOG_LOCAL1 から .Dv LOG_LOCAL7 までについても同じ。 .El .Pp .Fn closelog 関数は、ログファイルを閉じるために使うことができます。 .Pp .Fn setlogmask 関数は、ログ優先順位マスクを .Fa maskpri に設定し、以前のマスクを返します。 .Fa maskpri に設定されていない優先順位を持った .Fn syslog への呼び出しは拒絶されます。個別の優先順位 .Fa pri のためのマスクは、マクロ .Fn LOG_MASK pri によって計算されます。 .Fa toppri 自体を含む toppri までのすべての優先順位についてのマスクは、マクロ .Fn LOG_UPTO toppri によって与えられます。 デフォルトでは、すべての優先順位をログすることを許可します。 .Sh 戻り値 ルーチン .Fn closelog 、 .Fn openlog 、 .Fn syslog 、および .Fn vsyslog は、値を返しません。 .Pp ルーチン .Fn setlogmask は、常に前のログマスクレベルを返します。 .Sh 例 .Bd -literal -offset indent syslog(LOG_ALERT, "who: internal error 23"); openlog("ftpd", LOG_PID | LOG_NDELAY, LOG_FTP); setlogmask(LOG_UPTO(LOG_ERR)); syslog(LOG_INFO, "Connection from host %d", CallingHost); syslog(LOG_INFO|LOG_LOCAL2, "foobar error: %m"); .Ed .Sh 関連項目 .Xr logger 1 , .Xr syslogd 8 .Sh 歴史 これらの関数は .Bx 4.2 に現れました。 diff --git a/ja_JP.eucJP/man/man3/vgl.3 b/ja_JP.eucJP/man/man3/vgl.3 index 22e5388d33..23b60da91f 100644 --- a/ja_JP.eucJP/man/man3/vgl.3 +++ b/ja_JP.eucJP/man/man3/vgl.3 @@ -1,301 +1,301 @@ .\" Copyright (c) 1997 Sen Schmidt .\" 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, .\" in this position and unchanged. .\" 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. The name of the author may not be used to endorse or promote products .\" derived from this software withough specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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: vgl.3,v 1.4 2002-05-18 07:12:57 horikawa Exp $ +.\" $Id: vgl.3,v 1.5 2006-03-08 07:43:48 metal Exp $ .\" $FreeBSD$ .Dd August 13, 1997 .Dt VGL 3 .Os FreeBSD 3 .Sh 名称 .Nm vgl .Nd ビデオグラフィックスライブラリ関数 .Sh 書式 .Fd #include .Sh 解説 Libvgl は、コンソールドライバ (syscons) によりサポートされている グラフィックスモードにプログラマがアクセスできるようにするライブラリです。 このライブラリは実際のビデオハードウェアのプログラミングを行い、様々な グラフィックス操作を行うためのいくつかの簡単な機能を提供します。また、 FreeBSD における標準マウスシステムによるマウス機能 ( .Fn moused 参照 ) も サポートしており、これには現在作業中のグラフィックスイメージに マウスポインタをトランスペアレントに重ねあわせる機能も含まれています。この ライブラリは、別の仮想コンソールに切り替える前に現在のイメージをメモリに 保存し、ユーザが切り替えを元に戻したときにそれを復元することによって 画面切り替えを行います。これによって、複数のグラフィックスアプリケーション を異なる仮想コンソールの上で同時に使うことができます。 様々な機能を、以下に簡単に説明します: .Sh 作者 .An Sen Schmidt Aq sos@FreeBSD.org .Sh 関数 .Ft int .Fn VGLInit "int mode" ライブラリを初期化し、グラフィックモード .Em mode を設定します。 .Ft void .Fn VGLEnd "void" グラフィックモードを終了し、 .Fn VGLInit が呼び出される前にアクティブだった画面モードを復元します。 .Ft void .Fn VGLCheckSwitch "void" グラフィックスの出力がないままにプログラムの処理時間が長くなった 場合に、この関数を呼び出すとシステムが画面を切り替えることができる 場合があります。 .Ft int .Fn VGLTextSetFontFile "char *filename" char/string 関数に、組み込みフォントの代りにファイル .Em filename に入っているフォントを使うように指示します。 .Ft int .Fn VGLMouseInit "int mode" マウスを初期化します。引数が .Em VGL_MOUSESHOW である場合は、オプションの画面上マウスポインタを表示します。 .Ft void .Fn VGLMouseMode "int mode" 引数が .Em VGL_MOUSESHOW である場合はマウスポインタを表示し、引数が .Em VGL_MOUSEHIDE である場合はマウスポインタを非表示にします。 .Ft int .Fn VGLMouseStatus "int *x" "int *y" "char *buttons" 現在のマウスポインタの座標およびボタン状態を .Em x, y , buttons で返します。戻り値は、マウスポインタが現在画面に表示されているかいないかを 反映します。 .Ft void .Fn VGLMouseSetImage "VGLBitmap *AndMask" "VGLBitmap *OrMask" この関数を使えば、画面上のマウスポインタのイメージを変えることができます。 .Ft void .Fn VGLMouseSetStdImage "void" この関数は、マウスポインタを標準の矢印に戻します。 .Ft void .Fn VGLLine "VGLBitmap *object" "int x1" "int y1" "int x2" "int y2" "byte color" 座標 .Em x1, y1 から座標 .Em x2, y2 へ色が .Em color の直線を引きます。 .Ft void .Fn VGLBox "VGLBitmap *object" "int x1" "int y1" "int x2" "int y2" "byte color" 左上隅の座標 .Em x1, y1 、右下隅の座標 .Em x2, y2 の四角形を色 .Em color の線で描きます。 .Ft void .Fn VGLFilledBox "VGLBitmap *object" "int x1" "int y1" "int x2" "int y2" "byte color" 左上隅の座標 .Em x1, y1 、右下隅の座標 .Em x2, y2 の塗り潰し四角形を色 .Em color で描きます。 .Ft void .Fn VGLEllipse "VGLBitmap *object" "int xc" "int yc" "int a" "int b" "byte color" 中心が .Em xc, yc であり、幅 .Em a ピクセル、高さ .Em b ピクセルの楕円を色 .Em color の線で描きます。 .Ft void .Fn VGLFilledEllipse "VGLBitmap *object" "int xc" "int yc" "int a" "int b" "byte color" 中心が .Em xc, yc であり、幅 .Em a ピクセル、高さ .Em b ピクセルの塗り潰し楕円を色 .Em color で描きます。 .Ft int .Fn VGLBitmapCopy "VGLBitmap *src" "int srcx" "int srcy" "VGLBitmap *dst" "int dstx" "int dsty" "int width" "int hight" サイズが .Em width, height である長方形のピクセルを、ビットマップ .Em src の左上隅 ( .Em srcx, srcy ) からビットマップ .Em dst の座標 ( .Em dstx, dsty ) へコピーします。 .Ft void .Fn VGLBitmapPutChar "VGLBitmap *Object" "int x" "int y" "byte ch" "byte fgcol" "byte bgcol" "int fill" "int dir" キャラクタ .Em ch を位置 .Em x, y にフォアグラウンド色 .Em fgcol で書き込みます。 .Em fill が != 0 である場合はバックグラウンド色に色 .Em bgcol を使い、それ以外の場合はバックグラウンドは透明になります。キャラクタは引数 .Em dir によって指定される方向に描かれます。 .Ft void .Fn VGLBitmapString "VGLBitmap *Object" "int x" "int y" "char *str" "byte fgcol" "byte bgcol" "int fill" "int dir" 文字列 .Em str を位置 .Em x, y に色 .Em fgcol で書き込みます。 .Em fill が != 0 である場合はバックグラウンド色に色 .Em bgcol を使い、それ以外の場合はバックグラウンド は透明になります。文字列は引数 .Em dir によって指定される方向に描かれます。 .Ft void .Fn VGLClear "VGLBitmap *object" "byte color" ビットマップの全体を色 .Em color に塗り替えます。 .Ft void .Fn VGLSetPalette "byte *red" "byte *green" "byte *blue" この関数は使用するパレットを設定するもので、引数 .Em red, greenm, blue はそれぞれ 256 位置のバイト配列を指すものでなければなりません。 .Ft void .Fn VGLSetPaletteIndex "byte color" "byte red" "byte green" "byte blue" パレットインデックス .Em color を、指定された RGB 値に設定します。 .Ft void .Fn VGLSetBorder "byte color" 境界色を色 .Em color に設定します。 .Ft void .Fn VGLBlankDisplay "int blank" 引数 .Em blank -が != 0 である場合は、ディスプレーを空白表示にします。 +が != 0 である場合は、ディスプレイを空白表示にします。 これは、表示更新の間に画面を閉じて、処理が終ったときに初めてユーザが画面を 見られるようにするために使えます。 .Sh 歴史 .Nm ライブラリは .Fx 3.0 に現れました。 diff --git a/ja_JP.eucJP/man/man4/pcvt.4 b/ja_JP.eucJP/man/man4/pcvt.4 index 4d0c862f20..7c37d45c36 100644 --- a/ja_JP.eucJP/man/man4/pcvt.4 +++ b/ja_JP.eucJP/man/man4/pcvt.4 @@ -1,931 +1,931 @@ .\" .\" Copyright (c) 1992, 1995 Hellmuth Michaelis, Brian Dunford-Shore, .\" Joerg Wunsch and Holger Veit. .\" .\" 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 Hellmuth Michaelis, .\" Brian Dunford-Shore, Joerg Wunsch and Holger Veit. .\" 4. The name authors may not be used to endorse or promote products .\" derived from this software without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``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 AUTHORS 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. .\" .\" @(#)pcvt.4, 3.20, Last Edit-Date: [Sun Apr 2 18:23:39 1995] .\" $FreeBSD$ .\" %Id: pcvt.4,v 1.14.2.1 1999/02/07 05:43:14 yokota Exp % .\" .\" Man page pcvt(4) created after pcvt_ioctl.h on 13-Jan-93 .\" by Joerg Wunsch .\" .\" updated for rel 2.10 (-hm) .\" updated for rel 2.20 (-hm) .\" updated for rel 3.00 (-jw) .\" updated for final rel 3.00 (-hm) .\" removed references to 386BSD (-hm) .\" .\" WORD: virtual screen 仮想スクリーン .\" WORD: character set 文字集合 .Dd February 27, 1994 .Dt PCVT 4 i386 .Sh 名称 .Nm pcvt , .Nm vt .Nd PC コンソール仮想スクリーンシステム .Sh 書式 options .Do .Em PCVT_FREEBSD = version | .Em PCVT_NETBSD = version .Dc .br .Op options Dq Em PCVT_NSCREENS = number .br .Op options Dq Em PCVT_XXXX .Po .Sx 設定 の項目を参照してください。 .Pc .Pp .Cd "device vt0 at isa? tty" .Sh 説明 .Ss 概要 .Nm pcvt ドライバは、伝統的なコンソールドライバには無いいくつかの 機能を持った仮想スクリーンシステムを提供します。 複数の仮想スクリーンを扱えるほか、おそらく最も重要なものは 広範囲にわたる DEC VT-220 .if t \(tm .if n (TM) エミュレーションです。詳細は .Sx 特徴 の項目を参照してください。 .Pp .Nm pcvt ドライバを使用するには .Nm atkbd キーボードドライバがカーネルで設定されていることが必要です。 .Ss 特徴 .Bl -bullet .It ほぼ完全な DEC VT220 .if t \(tm .if n (TM) の機能 .Po VT320 .if t \(tm .if n (TM) へ移行中 .Pc 。 .It MDA/HGC/CGA/EGA および VGA のための完全に独立な仮想端末。 .It それぞれの仮想スクリーンに対する 25, 28, 35, 40, 43 あるいは 50x80 のスクリーン解像度。 .It 各国のキーボードをサポートするための、完全に再マップ可能なキーボード。 .It すべての VT220 文字集合に加え、ISO Latin-1 と DEC technical をサポート。 .It EGA/VGA 使用時における VT220 のダウンロード可能な文字集合の利用。 .It それぞれの仮想端末に対する VT220 ユーザ定義キー。 .It Hewlett-Packard のオプショナルなファンクションキーラベルのサポート。 .It ファンクションコードの表示機能。 .It MDA, CGA, EGA および VGA ディスプレイアダプタのサポート。 .It VGA チップセットにおける 132 カラムのサポート。 .It XFree86 バージョン 1.2 以上では pccons モデル、2.0 以上では syscons モデルを用いた X ウィンドウシステムのサポート .Po .Em PCVT_USL_VT_COMPAT が設定されていることが必要です .Pc 。 .El できないこと: .Bl -bullet .It 2 倍角文字は扱えません。 .It softscroll はありません。 .It 背景の反転はできません。 .It VT220 のプリンタ出力はサポートしません。 .It VT52 の機能のサポートは全くありません。 .It 8 ビットコントロールは使えません。 .It AT キーボード .Pq 84 キー に対しては、 .Pq 未だに 限定されたサポートしかありません。 .It お金を稼ぐのを助けることはできません... .El .Ss 設定 現在 .Nm pcvt コンソールドライバは、 Intel ベースの BSD オペレーティングシステムである .Tn NetBSD/i386 (リリース 0.9 以上) および .Tn FreeBSD (リリース 1.0-GAMMA 以上) で利用できます。 システムからの適切なサポートを得るために、 .Em PCVT_NETBSD または .Em PCVT_FREEBSD のうちどちらかのオプションをシステムの設定ファイルで 指定しなければなりません .Pq Xr config 8 を参照してください 。 さらに .Tn FreeBSD および .Tn NetBSD では、これらのオプションにオペレーティングシステムのバージョン番号を 設定する必要があります。 .Tn FreeBSD では、バージョン番号を 3 桁の数字で表現しなければなりません。 例えば、1.0 release .Pq 実際にはバージョン 1.0.2 を使っているなら、 .Em PCVT_FREEBSD = 102 のように定義しなければなりません。 .Em NetBSD では、NetBSD 0.9 の場合、このバージョン番号は 9 と表現されなければならず、 NetBSD-current (1.0 以前) の場合は 9 より大きい任意の値になります。 NetBSD 1.0の場合は ( .Tn FreeBSD と同様に) 100 を、NetBSD-current では 999 を使うことが推奨されます。 例えば .Nx 1.0 release の場合、 .Em PCVT_NETBSD = 100 と定義すべきです。 .Nm pcvt ドライバは、すべての人の要求を満足させるため、高度に設定可能であるように 設計されてきました。望ましい設定方法は、おそらくデフォルト値を 上書きするような形で、設定ファイルに適切な .Em options 行を書き込むことです。こうすることで、それぞれ異なる振る舞いをする ドライバを持つ別個のカーネルを 1 台のマシン上で コンパイルすることが可能です。 利用可能な設定オプションの通覧を次のリストに示します。 詳細はカーネルソースツリーの .Pa i386/isa/pcvt/pcvt_hdr.h を参照してください。 ノート: すべてのブール値オプションについて、次のような約束をします。 もしあるオプションが値なしで与えられた場合、1 という値 .Pq 有効 になります。 オプション値として 0 が与えられた場合、そのオプションは 無効になります。それ以外の値では 1 になります。 オプションが省略された場合、デフォルトの動作が仮定されます。 .Bl -tag -width indent -compact .It Em PCVT_NSCREENS 仮想スクリーンの数を定義します。 .br デフォルト: 8 .It Em PCVT_VT220KEYB 有効にすると、DEC VT200 (TM) に似たキーボードレイアウトが生成されます。 無効状態では、VT220 と HP の混成が使われます。完全な説明は、 .Nm pcvt のドキュメントディレクトリにある .Pa Keyboard.VT および .Pa Keyboard.HP というファイルを参照してください。 .br デフォルト: オフ .It Em PCVT_SCREENSAVER 内蔵スクリーンセーバの機能を有効にします。 .br デフォルト: オン .It Em PCVT_PRETTYSCRNS 有効状態では、星が点滅するスクリーンセーバが使われます。 無効にすると、スクリーンは単純に暗転します .Pq これは省電力モニタに対して有用でしょう 。 .br デフォルト: オン .It Em PCVT_CTRL_ALT_DEL 有効にすると、 .Aq Em Ctrl .Aq Em Alt .Aq Em Del というキーの組合わせで CPU をリセットします。 .br デフォルト: オフ .It Em PCVT_USEKBDSEC キーボードに対するセキュリティロックをオーバライドしません。 .br デフォルト: オン .It Em PCVT_24LINESDEF 有効にすると、オリジナルの DEC VT220 (TM) に対して互換性を 高める目的のためだけに、デフォルトの 25 行モードから 24 行モードにします。 .Po VT エミュレーションは 25 行で、HP エミュレーションは 28 行です .Pc したがって、特に変更をしなくても、それらの端末のための端末情報を利用する ことができるでしょう。これはスタートアップオプションであることに 注意してください。 .Xr scon 1 ユーティリティで 24 行モードと 25 行モードを 切り替えることができます。 .br デフォルト: オフ .It Em PCVT_EMU_MOUSE キーパッド経由で 3 ボタンマウスをエミュレートします。 ノートブックで XFree86 を使う時に便利です。後述の .Sx マウスエミュレーション の項目を参照してください。 .br デフォルト: オフ .It Em PCVT_META_ESC 有効にすると、 .Aq Em Alt キーと共に押されたキーは、 .Aq Em esc により構成されるシーケンスの後に、通常のキーコードを生成します。 無効状態では、通常のキーコードに .Em 0x80 を加算したものが送られます。 .br デフォルト: オフ .El 主にデバッグやハードウェアの問題に対処するために、さらにオプションが 用意されています。 .Pa i386/isa/pcvt/pcvt_hdr.h に説明があります。 .Ss 内部機能 .Nm pcvt ドライバに関連するデバイスノード上のオープンファイル記述子をともなって .Xr ioctl 2 システムコールを呼ぶことで、 以下に述べるような機能にアクセスすることができます。 それらを利用するためには、プログラムは次の行を含む必要があります: .Dl #include 以下に引用されたパラメータの定義は、このファイルの中に 見つけることができるでしょう。 .Em キーボードに関連する機能 基本的なキーボードのハードウェアに関係する機能が 3 つあります。 .Bl -tag -width 20n -offset indent -compact .It KBDRESET キーボードをリセットし、デフォルト値を設定します。 .It KBDGTPMAT 現在のキーリピートに関する値を取得します。パラメータは 値を格納する int 型変数へのポインタです。 .It KBDSTPMAT 現在のキーリピートに関する値を設定します。 パラメータは上のコマンドと同様です。 .El 適切な定数を表すシンボル値が利用できます。 キーリピート遅延時間の初期値を指定するのは、 250 ミリ秒を表す KBD_TPD250 から、1000 ミリ秒を表す KBD_TPD1000 までの 250 ミリ秒刻みの値です。 キーリピート速度は、 毎秒 30.0 文字を表す KBD_TPM300 から、 毎秒 2.0 文字を表す KBD_TPM20 までの値があります。 中間値は、毎秒 30.0, 26.7, 24.0, 21.8, 20.0, 18.5, 17.1, 16.0, 15.0, 13.3, 12.0, 10.9, 10.0, 9.2, 8.6, 8.0, 7.5, 6.7, 6.0, 5.5, 5.0, 4.6, 4.3, 4.0, 3.7, 3.3, 3.0, 2.7, 2.5, 2.3, 2.1, 2.0 文字が指定できます。 .Bl -tag -width 20n -offset indent -compact .It KBDGREPSW キーリピートスイッチの値を取得します。 .It KBDSREPSW キーリピートスイッチの値を設定します。 .El これらも値を格納する int 型変数へのポインタをパラメータとして 受け取り、ドライバ内部のキーリピートフラグを操作します。 可能な値は KBD_REPEATOFF あるいは KBD_REPEATON です。 .Bl -tag -width 20n -offset indent -compact .It KBDGLEDS LED の状態を取得します。 .It KBDSLEDS LED の状態を設定し、キーボードのインジケータを操作します。 ただし、ドライバが保持するキーのロック状態には影響しません。 .El 引数であるポインタの指す int 型変数は KBD_SCROLLLOCK, KBD_NUMLOCK, KBD_CAPSLOCK という値をとり、これらは論理和の組み合わせの形で使われるでしょう。 .Bl -tag -width 20n -offset indent -compact .It KBDGLOCK SCROLL,NUM,CAPS の状態を取得します。 .It KBDSLOCK SCROLL,NUM,CAPS および LED の状態を設定します。 .El これらも、ドライバが持つ LED フラグの状態を 設定したり取得したりするのと同じ方法で使われるべきです。 .Em キーボードの再マップ .Nm pcvt ドライバの重要な機能の一つとして、 内蔵のキー定義を再定義できる機能があります。 .Bl -tag -width 20n -offset indent -compact .It KBDGCKEY 現在のキーの値を取得します。 .It KBDSCKEY 新しいキー割り当て値を設定します。 .It KBDGOKEY オリジナルのキー割り当て値を取得します。 .El これらがその機能を構成します。これらは次に述べる .Em struct kbd_ovlkey へのポインタを引数として受け取ります。 加えて、次のような関数があります。 .Bl -tag -width 20n -offset indent -compact .It KBDRMKEY キー割り当てを解除します。対象となるキー番号を保持する int 型変数への ポインタを受け取ります。 .It KBDDEFAULT すべてのキー割り当てを解除します。 .El .Bd -literal struct kbd_ovlkey /* キーの完全な定義 */ { u_short keynum; /* キーそのもの */ u_short type; /* キーのタイプ。以下を参照。 */ u_char subu; /* サブタイプ。書き込み時には無視される。 */ char unshift[KBDMAXOVLKEYSIZE+1]; /* 非 shift 時に生成される文字列。 */ u_char subs; /* サブタイプ。書き込み時には無視される。 */ char shift[KBDMAXOVLKEYSIZE+1]; /* shift 時に生成される文字列。 */ u_char subc; /* サブタイプ。書き込み時には無視される。 */ char ctrl[KBDMAXOVLKEYSIZE+1]; /* control 時に生成される文字列。 */ u_char suba; /* サブタイプ。書き込み時には無視される。 */ char altgr[KBDMAXOVLKEYSIZE+1]; /* altgr 時に生成される文字列。 */ }; .Ed .Em type フィールドの適切な値は次の通りです。 .Bl -tag -width 20n -offset indent -compact .It KBD_NONE 機能なし。キーは無効。 .It KBD_SHIFT キーボードシフト。 .It KBD_META オルタネートシフト。ASCII コードの 8 ビット目をセット。 .It KBD_NUM 数字シフト。数字キーパッドモードおよびアプリケーションモード。 .It KBD_CTL コントロールコードの生成。 .It KBD_CAPS CAPS シフト。大文字小文字を入れ替える。 .It KBD_ASCII ASCII コードを生成するキー。 .It KBD_SCROLL 出力を停止する。 .It KBD_FUNC ファンクションキー。 .It KBD_KP キーパッドキー。 .It KBD_BREAK 無視される。 .It KBD_ALTGR AltGr 変換機能。 .It KBD_SHFTLOCK シフトロック。 .It KBD_CURSOR カーソルキー .It KBD_RETURN .Dq Return あるいは .Dq Enter キー。 .El .Em サブタイプ フィールドは次のうちの どれか 1 つの値を保持します。 .Bl -tag -width 20n -offset indent -compact .It KBD_SUBT_STR キーは文字列に結び付けられています。 .It KBD_SUBT_FNC キーは機能に結び付けられています。 .El .Em マウスエミュレーション マウスエミュレータは (もし設定されていれば) Mouse Systems プロトコルを使って 3 ボタンマウスの振りをします。 仮想スクリーンによって使われていない、最初の .Nm pcvt デバイスノードがマウスデバイスです。 例えば、デフォルト値である 8 つの仮想スクリーンの場合、 .Pa /dev/ttyv0 から .Pa /dev/ttyv7 までが仮想スクリーンを表わし、 .Pa /dev/ttyv8 がマウスエミュレータデバイスとなるでしょう。 マウスエミュレーションは .Aq Em NumLock キーを押すことによりオンになります。 マウスポインタは数字キーパッドにより、そのキーが示す方向へ動きます。 始めは 1 ステップずつ動き、調整可能な時間 .Pq デフォルトは 500 ミリ秒 の後、約 6 倍まで加速します。 マウスボタンは 3 つの通常のキーにより エミュレートされ、デフォルトではこれらは .Aq Em \&F1 , .Aq Em \&F2 , および .Aq Em \&F3 のファンクションキーに割り当てられています。 ここで 2 種類の動作が選択できます: 通常ボタンと、 .Dq stickey ボタンです。 通常ボタンは、期待通りの振舞いをします。 .Dq stickey ボタンは、最初の押下のときに、押されていることが 通知され、そのキーがもう一度押されるか、 他のボタンをエミュレートしているキーが押されるまで、 .Dq 押されたまま の状態になっています。ボタンの押下と離しは、PC 内蔵スピーカにより、それぞれ .Dq ピリッ とか .Dq ピロッ という音でユーザに通知されます。 次のコマンドにより、エミュレーションを制御します。 .Bl -tag -width 20n -offset indent -compact .It KBDMOUSEGET 現在の定義を取得します。 .It KBDMOUSESET 新しい定義を設定します。 .El どちらも .Li mousedefs 構造体へのポインタを ioctl 呼び出し時の 3 番目の引数として受け取ります: .Bd -literal struct mousedefs { int leftbutton; /* "左ボタン" のキーに対応する (PC) スキャンコード */ int middlebutton; /* "中ボタン" のキーに対応する (PC) スキャンコード */ int rightbutton; /* "右ボタン" のキーに対応する (PC) スキャンコード */ int stickybuttons; /* 真ならば "sticky" である。 */ int acceltime; /* マウスポインタが加速し始めるまでのマイクロ秒単位の時間 */ /* デフォルト値: scan(F1), scan(F2), scan(F3), 偽, 500000 */ }; .Ed .Em ダウンロード可能な文字集合のインタフェース EGA および VGA ビデオアダプタは、ダウンロード可能なソフトウェアフォントを 扱うことができます。どの IBM 互換 PC ビデオボードの .Sq ネイティブな文字集合 も、DEC 多国籍文字集合や ISO Latin-1 .Pq ISO 8859-1 の完全な表現は不可能なので、これは U**X 環境にとって有用です。 .Bl -tag -width 20n -offset indent -compact .It VGASETFONTATTR フォント属性を設定します。 .It VGAGETFONTATTR フォント属性を取得します。 .El これらはダウンロードフォントに関する情報を扱います。 .Em struct vgafontattr へのポインタを引数としてとります: .Bd -literal struct vgafontattr { int character_set; /* VGA 文字集合 */ int font_loaded; /* フォントがロードされているかされていないかのマーク */ int screen_size; /* スクリーン当たりの行数 */ int character_scanlines; /* 文字当たりのスキャンライン数 - 1 */ int screen_scanlines; /* スクリーン当たりのスキャンライン数 - 1 バイト */ }; .Ed それぞれのフォントのそれぞれの文字は、次の関数によりダウンロードされます。 .Bl -tag -width 20n -offset indent -compact .It VGALOADCHAR vga 文字をロードする。 .El .Em struct vgaloadchar へのポインタを引数としてとります: .Bd -literal struct vgaloadchar { int character_set; /* ロードする VGA 文字集合 */ int character; /* ロードする文字 */ int character_scanlines; /* 文字のスキャンライン数 */ u_char char_table[32]; /* VGA 文字の形のテーブル */ }; .Ed EGA あるいは VGA において、 .Em character_set フィールドは CH_SET0, CH_SET1, CH_SET2, CH_SET3 という値を とります。VGA では、最大 8 つのフォントをロードして持つことが できますので、CH_SET4, CH_SET5, CH_SET6, CH_SET7 という値も とることができます。 フォントサイズと、表示可能なスクリーンの .Pq 行単位の 高さの関係は、使われるビデオカードに依存することに注意してください: .Bd -literal スクリーンの大きさ (行の数) EGA VGA フォントサイズ 8 x 8 43 50 8 x 10 35 40 8 x 14 25 28 8 x 16 利用不可 25 .Ed .Em 一般的なスクリーン操作コマンド .Bl -tag -width 20n -offset indent -compact .It VGACURSOR カーソルの形を設定します。 .El 以下の構造体へのポインタを引数としてとります: .Bd -literal struct cursorshape { int screen_no; /* 設定するスクリーン番号。 */ /* -1 は現在のアクティブなスクリーン。 */ int start; /* トップスキャンライン。0 から 文字の高さ -1 の範囲 */ int end; /* エンドスキャンライン。0 から 文字の高さ -1 の範囲 */ }; .Ed .Bl -tag -width 20n -offset indent -compact .It VGASETSCREEN スクリーンの情報を設定します。 .It VGAGETSCREEN スクリーンの情報を取得します。 .El これらは、いくつかの一般的なドライバ内部変数へのインタフェースを提供します。 それらの内部変数は、スクリーンの振舞いを変更したり、 単にドライバをある一つのスクリーンへ強制的に切り替えたりするものです。 以下の構造体へのポインタを引数としてとります: .Bd -literal struct screeninfo { int adaptor_type; /* インストールされているビデオアダプタの */ /* タイプ。 */ /* 読み取り専用。書き込み時は (未だ!) 無 */ /* 視されます。 */ int totalfonts; /* ダウンロード可能なフォントの数。 */ /* 読み取り専用。書き込み時は無視されま */ /* す。 */ int totalscreens; /* 仮想スクリーンの数。 */ /* 読み取り専用。書き込み時は無視されま */ /* す。 */ int screen_no; /* 構造体の情報を取得したスクリーン番号。 */ /* 書き込み時に -1 ならば pure_vt_mode */ /* または/かつ screen_size を現在のスク */ /* リーンに適用し、それ以外ならば与えられ */ /* た screen_no のスクリーンに適用します。*/ int current_screen; /* 現在表示されているスクリーン番号。 */ /* 書き込み時に -1 ならば現在表示されてい */ /* るスクリーンをカレントスクリーンとし、 */ /* それ以外なら現在表示されているスクリー */ /* ンをパラメータのスクリーンに切り替えま */ /* す。 */ int pure_vt_mode; /* 純粋な VT モードか HP/VT モードかを表 */ /* すフラグ。 */ /* 書き込み時に -1 ならば変更しません。 */ int screen_size; /* スクリーンサイズ。 */ /* 書き込み時に -1 ならば変更しません。 */ int force_24lines; /* 純粋な VT220 のスクリーンサイズを得る */ /* ために 25 ライン VT モードか、 */ /* 28 ライン HP モードの場合に 24 ライン */ /* を強制します。 */ /* 書き込み時に -1 ならば変更ません。 */ int vga_family; /* adaptor_type が VGA ならば、読み取り後 */ /* チップセットファミリを反映しています。 */ /* 書き込み時には何も起こりません... */ int vga_type; /* adaptor_type が VGA ならば、読み取り後 */ /* チップセットを反映しています。 */ /* 書き込み時には何も起こりません... */ int vga_132; /* ドライバが 132 カラムをサポートしてい */ /* る場合、1 が設定されます。 */ /* 現在、書き込み時には無視されます。 */ }; .Ed .Em pure_vt_mode フィールドは、ファンクションキーラベルとステータスラインを伴う VTxxx と HP Mode の混成に対しては M_HPVT という値を取り、 ラベルを伴わない VTxxx シーケンスのみが認識されるものに対しては M_PUREVT を取ります。 .Bl -tag -width 20n -offset indent -compact .It VGASETCOLMS 現在のスクリーンに対してカラムの数を設定します。 .El これのパラメータは、80 あるいは 132 のどちらかの値を保持する int 型変数へのポインタです。 カラム数 132 がサポートされるのは VGA アダプタ使用時のみです。 サポートされないカラム数では ioctl は失敗し、 .Em errno .Pq Xr intro 2 を参照 に .Em EINVAL が設定されます。 .Em VGA カラーパレットインタフェース VGA アダプタにおいてのみ、出力にカラーパレットレジスタが存在します。 256 種類の内部カラーコードのそれぞれに対する 赤、緑、青の出力電圧を 保持し、0 から 63 までの値を取ります (63 はベースカラーについて もっとも明くなる値です)。 すなわち、これらのアダプタはそれぞれのカラーコードを、 262144 色の中から取り出した .Dq パレット の色へマップします。 .Bl -tag -width 20n -offset indent -compact .It VGAREADPEL VGA パレットエントリを読み取ります。 .It VGAWRITEPEL VGA パレットエントリに書き込みます。 .El これらのコマンドは、パレットレジスタに対するインタフェースを 確立します。引数は以下の構造体へのポインタです: .Bd -literal struct vgapel { unsigned idx; /* パレットへのインデックス。0 から 255 が有効。 */ unsigned r, g, b; /* RGB の値。VGA_PMASK (63) でマスクされる。 */ }; .Ed .Em ドライバの判別 .Bl -tag -width 20n -offset indent -compact .It VGAPCVTID 現在ドライバの中にコンパイルされているのが pcvt であるかどうかの -情報と、そのメジャーリビジョンおよびマイナーリビジョン番号を +情報と、そのメジャーリビジョンおよびマイナリビジョン番号を 返します。引数として以下の構造体へのポインタをとります: .El .Bd -literal struct pcvtid { #define PCVTIDNAMELN 16 /* ドライバ ID - 文字列の長さ */ char name[PCVTIDNAMELN]; /* ドライバの名前 == PCVTIDSTR */ #define PCVTIDNAME "pcvt" /* ドライバ ID - 文字列 */ int rmajor; /* メジャーリビジョン番号 */ #define PCVTIDMAJOR 3 - int rminor; /* マイナーリビジョン番号 */ + int rminor; /* マイナリビジョン番号 */ #define PCVTIDMINOR 00 }; .Ed .Bl -tag -width 20n -offset indent -compact .It VGAPCVTINFO 現在ドライバの中にコンパイルされているのが pcvt であるかどうかの 情報と、そのコンパイル時オプションを返します。 引数として以下の構造体へのポインタをとります: .El .Bd -literal struct pcvtinfo { u_int opsys; /* PCVT_xxx(x)BSD */ #define CONF_UNKNOWNOPSYS 0 #define CONF_386BSD 1 /* サポートされていません !!! */ #define CONF_NETBSD 2 #define CONF_FREEBSD 3 u_int opsysrel; /* NetBSD/FreeBSD に対するリリース */ u_int nscreens; /* PCVT_NSCREENS */ u_int scanset; /* PCVT_SCANSET */ u_int updatefast; /* PCVT_UPDATEFAST */ u_int updateslow; /* PCVT_UPDATESLOW */ u_int sysbeepf; /* PCVT_SYSBEEPF */ u_int pcburst; /* PCVT_PCBURST */ u_int kbd_fifo_sz; /* PCVT_KBD_FIFO_SZ */ /* 設定ブール値 */ u_long compile_opts; /* PCVT_xxxxxxxxxxxxxxx */ }; .Ed .Em スクリーンセーバ .Nm pcvt の設定によっては、シンプルなスクリーンセーバが利用できるかもしれません。 これは次のコマンドにより制御します。 .Bl -tag -width 20n -offset indent -compact .It VGASCREENSAVER スクリーンセーバのタイムアウトを秒単位で設定します。 0 はスクリーンセーバをオフにします。 .El これは整数へのポインタを引数としてとります。コマンドの名前とは関係なく、 .Xr config 8 の .Dq PCVT_SCREENSAVER オプションにより設定されていれば、 .Em どのような 種類のアダプタでも利用できます。 .Em USL スタイル VT のための互換コマンド この .Nm pcvt ドライバのリリース 3.00 では、仮想端末インタフェースを制御するのに使われる USL スタイルのコマンドのサブセットをサポートします。 この機能は、主に .Em XFree86 のリリース 2.0 以降で、X サーバが動いている時でも 仮想スクリーンを切り替えることができるようにと意図されています。 それらは、暗黙のセマンティクスに関して醜く .Pq つまり、Berkeley セマンティクスを破っています 、したがって一般的な利用については推奨されません。 それらのドキュメンテーションについては、 .Pa i386/include/pcvt_ioctl.h を参照してください。 .Sh ファイル .Bl -tag -width /usr/include/machine/pcvt_ioctl.h .It Pa /usr/include/machine/pcvt_ioctl.h .Xr ioctl 2 ファンクションコールのための定義。 .It Pa /dev/ttyv? .It Pa /dev/console .Nm pcvt ドライバへアクセスするためのデバイスノード。 .It Pa i386/isa/pcvt/pcvt_hdr.h .Pq カーネルソースツリーに対する相対パス .Nm pcvt を仕立てるための様々なコンパイル時オプションについて書かれています。 .Sh 歴史 .Nm pcvt ドライバは 386BSD リリース 0.1 のために開発され、提供されてきました。 リリース 3.00 から、NetBSD 0.9 に対する明示的なサポートが 提供されています。リリース 3.00 以降は、pcvt において 386BSD 0.1 向けの さらなる開発はないと予想され、実際、リリース 3.20 では 386BSD のサポートは打ち切られました。 .Sh 作者 .An Brian Dunford-Shore Aq brian@morpheus.wustl.edu および .br .if n Joerg Wunsch .if t J\(:org Wunsch .Aq joerg_wunsch@uriah.sax.de らの協力の下、 .br .An Hellmuth Michaelis Aq hm@hcshh.hcs.de によって書かれました。 .br このドライバは数人によってなされた成果を元にしています。 特に、 .An William Jolitz' と .An Don Ahn's Aq ljolitz@cardio.ucsf.edu による歴史的な .Xr pccons 4 の実装、および .An Holger Veit Aq veit@first.gmd.de によるキーボードマップのコードによっています。 .Sh 関連項目 .Xr intro 2 , .Xr ioctl 2 , .Xr atkbd 4 , .Xr keyboard 4 , .Xr screen 4 , .Xr config 8 , .Xr ispcvt 8 .Sh バグ もちろん存在します。最新のバグリストは、ドキュメントディレクトリの .Pa BugList ファイルを参照してください。 .Ss 検証済みのビデオボード .Bd -literal 製造者 チップセット モニタ 2theMax (?) ET4000 VGA Color Video7 Inc. Video 7 VGA Color Diamond Stealth VRAM S3 NEC 3FGx Trident TVGA 8800CS NEC 3D Data General C&T P82C604 VGA Color NoName Hercules W86855AF Mono Kyocera (Mainboard) WD90C11 Sony Color unknown ET3000 NEC 3D .Ed .Ss 検証済みのキーボード .Bd -literal 製造者 タイプ レイアウト Cherry MF II US Cherry/Tandon MF II German Hewlett-Packard MF II US Hewlett-Packard MF II German Tatung AT German .Ed 古い PC キーボードは全くサポートされておりません .Pq それらは 83 個のキーがあります 。 F9 から F12 までは機能の制御のためにエミュレータが必要としているので、 AT キーボード .Pq 84 個のキーとそれとは別の数字キーパッドがあり、F11 と F12 はありません に対するサポートは制限されています。 また現在のキーボードドライバの設計のゆえに ALtGr キーを持たない各国のキーボードに対する .Pq 完全な サポートはありません。 MF キーボードは、101 キーおよび 102 キーのバージョンに ついて完全にサポートされております。 diff --git a/ja_JP.eucJP/man/man4/ppi.4 b/ja_JP.eucJP/man/man4/ppi.4 index 846acdb884..dbae1078f9 100644 --- a/ja_JP.eucJP/man/man4/ppi.4 +++ b/ja_JP.eucJP/man/man4/ppi.4 @@ -1,109 +1,109 @@ .\" Copyright (c) 1997 .\" Michael Smith .\" .\" 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 as .\" the first lines of this file unmodified. .\" 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 ``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 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: ppi.4,v 1.1 1998/01/02 09:31:18 msmith Exp % .\" $FreeBSD$ .\" .Dd January 2, 1998 .Dt PPI 4 .Os FreeBSD .Sh 名称 .Nm ppi .Nd ppbus パラレル 'geek' ポートへのユーザ空間インタフェース .Sh 書式 .Cd "device ppi0 at ppbus?" .sp -マイナー番号: ユニット番号は ppbus 番号に直接対応する。 +マイナ番号: ユニット番号は ppbus 番号に直接対応する。 .Sh 解説 .Nm デバイスドライバはユーザアプリケーションが パラレルポートの状態を操作するための便利な手段を提供し、 .Pa /dev/io インタフェースを使うことに起因するセキュリティ問題を生じることなく、 容易に低速 I/O 操作ができるようにします。 .Sh プログラミングインタフェース .Pp .Fd #include .Fd #include .Pp .Nm インタフェースでのすべての I/O は .Fn ioctl 呼び出しを使うことによって行います。 各々のコマンドは 1 つの .Ty u_int8_t 引数をとり、1 バイトのデータを転送します。 以下のコマンドを使うことができます。 .Bl -tag -width 10 .It PPIGDATA, PPISDATA データレジスタの内容の読み出しと書き込みを行います。 .It PPIGSTATUS, PPISSTATUS ステータスレジスタの内容の読み出しと書き込みを行います。 .It PPIGCTRL, PPISCTRL 制御レジスタの内容の読み出しと書き込みを行います。 以下ではこのレジスタのビットに対応した定義を行っています。 制御レジスタのビットをセットすることは相当する出力を low にすることになります。 .Bl -tag -width 10 -compact .It STROBE .It AUTOFEED .It nINIT .It SELECTIN .It PCD .El .It PPIGEPP, PPISEPP EPP 制御レジスタの内容の読み出しと書き込みを行います。 .It PPIGECR, PPISECR ECP 制御レジスタの内容の読み出しと書き込みを行います。 .It PPIGFIFO, PPISFIFO ECP FIFO の読み書きをおこないます (8 ビット操作のみ)。 .El .Sh 使用例 データポートに値 0x5a を出力するために、 STROBE を low にした後 high に戻します。 次のコードを使うことができます。 .Bd -literal -compact int fd; u_int8_t val; val = 0x5a; ioctl(fd, PPISDATA, &val); ioctl(fd, PPIGCTRL, &val); val |= STROBE; ioctl(fd, PPISCTRL, &val); val &= ~STROBE; ioctl(fd, PPISCTRL, &val); .Ed .Sh バグ 出力信号がレジスタ値と逆になっているのは混乱を招きかねません。 .Pp .Fn ioctl インタフェースは低速であり、 複数の操作を連続して行うための方法が (まだ) ありません。 .Pp ユーザアプリケーションで必要なヘッダは 標準のシステムではインストールされません。 diff --git a/ja_JP.eucJP/man/man4/sa.4 b/ja_JP.eucJP/man/man4/sa.4 index bc81583cd2..93bd146814 100644 --- a/ja_JP.eucJP/man/man4/sa.4 +++ b/ja_JP.eucJP/man/man4/sa.4 @@ -1,215 +1,215 @@ .\" Copyright (c) 1996 .\" Julian Elischer . 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. .\" .\" %Id: sa.4,v 1.12.2.1 1999/02/05 08:33:15 mjacob Exp % .\" $FreeBSD$ .\" .Dd October 15, 1998 .Dt SA 4 .Os FreeBSD .Sh 名称 .Nm sa .Nd SCSI シーケンシャルアクセスデバイスドライバ .Sh 書式 .Cd device sa0 .Cd device sa1 at scbus0 target 4 lun 0 .Sh 解説 .Nm sa ドライバはサポートされている .Tn SCSI ホストアダプタを経由して、システムにアタッチされている シーケンシャルなアクセスクラスのすべての .Tn SCSI デバイスへのサポートを提供します。 シーケンシャルアクセスクラスはテープなどのリニアなアクセスデバイスです。 .Pp .Tn SCSI ホストアダプタは .Tn SCSI シーケンシャルアクセスデバイスが設定される前に 別にシステムに設定されていなければなりません。 .Sh マウントセッション .Nm ドライバは、テープがマウントされてからアンマウントされるまでの 期間として定義される .Dq Em マウントセッション の概念に基づいています。マウントセッションの間にセットされた 任意のパラメータは、そのセッションの残り期間あるいは テープが取り替えられるまで、有効になっています。 何からの方法でセッションをクローズすることで、 テープをアンマウントすることができます。 クローズする方法には次のようなものがあります。 .Bl -enum .It 以下に示すサブモード 00 にしたがい `巻戻しデバイス' をクローズする。例えば .Pa /dev/rsa0。 .It .Xr ioctl 2 の MTOFFL コマンドを使う。 .Xr mt 1 の .Sq Cm offline コマンドを利用することにより可能です。 .El .Pp テープデバイスは排他的にオープンされるデバイスであることに 注意すべきです。制御モードデバイスがオープンされている場合は例外で、 必要な時 (例えばパラメータをセットする時) に限り排他的な アクセスをする必要があります。 .Sh サブモード -マイナー番号のビット 0 とビット 1 は +マイナ番号のビット 0 とビット 1 は .Sq サブモード として解釈されます。 サブモードの違いは、デバイスがクローズされた時の挙動にあります: .Bl -tag -width XXXX .It 00 クローズされるとデバイスを巻戻します; もしテープに書き込まれていたら、 巻戻しが要求される前にファイルマークが書き込まれます。デバイスは アンマウントされます。 .It 01 クローズ後もテープがマウントされたままにします。 テープに書き込まれていたら、ファイルマークが書き込まれます。 それ以外にヘッドの移動は行なわれません。 さらに読み込んだり書き込んだりすると、最後に読み出された り、あるいはファイルマークが書き込まれた後から直接行なわれます。 .It 10 クローズされるとデバイスを巻き戻します。もしテープに書き込まれて いたら、巻き戻し要求の前にファイルマークが書き込まれます。 巻き戻しが完了すると、アンロードコマンドが発行されます。 デバイスはアンマウントされます。 .Sh ブロッキングモード .Tn SCSI テープは .Sq Em 可変 あるいは .Sq Em 固定 ブロックサイズモードで動くことができます。 ほとんどの .Tn QIC タイプのデバイスは固定ブロックサイズモードで動き、 ほとんどの 9 トラックテープと多くの新しいカートリッジフォーマットは 可変ブロックサイズを許容します。この二つの違いはつぎの通りです: .Bl -inset .It 可変ブロックサイズ: デバイスへの書き込み毎に、単一の論理レコードがテープに書き込まれます。 レコードの .Em 一部分 をテープから読み込んだり書き込んだりすることはできません (たとえ大きなブロックを要求して小さなレコードを読んでもです); 複数のブロックを読み込むこともできません。 すなわち、1 回の書き込みによるデータは 1 回で読み込まれます。 ブロックサイズは、デバイスすなわち .Tn SCSI アダプタとシステムがサポートしている任意の値です。 (大抵は 1 バイトから 64K バイトの間で、もっと大きくなる場合もあります。) .Pp テープから可変長のレコードやブロックを読み込む時、 ヘッドは最後に読み込まれたアイテムの直後にあり、 次のアイテムの直前にあると考えられます。もし次のアイテムがファイルマークで、 まだ読まれていなかったとすると、読み込みですぐにそのファイルマークに 当たり、ファイル終端 (end-of-file) の通知を受けます。 .It 固定ブロックサイズ: ユーザが書き込んだデータは固定サイズのブロックの連続としてテープに 渡されます。それはメモリ中で連続しているかもしれませんが、 独立したブロックの連続と考えられます。 ブロックサイズの正確な整数倍ではない量のデータを読み込む ことはできません。異なるレコード集合として、同じデータを読み込んだり 書き込んだりすることはできます。 言い換えると、一緒に書き込まれたブロックを別々に読み込むことが できますし、逆もまた可能です。 .Pp ファイルの中に残っているものより多いブロックが要求されると、ドライブは ファイルマークに遭遇するでしょう。返すべきデータが存在する ので (ファイルマークより前にレコードが存在する限り)、 そのデータは返され、読み込みは成功します。 次の読み込みは直ちに 0 を返します。 (上のように、もしファイルマークが読まれないと、非巻き戻しモードの場合は 次の読み込み処理へ残ります)。 .El .Sh ファイルマークの扱い ファイルマークは自動的に扱われます。ユーザがテープに書き込み、 最後に書き込んでから読み込みをしなかった場合、デバイスをクローズ する時にファイルマークがテープに書き込まれるでしょう。 書き込みの後に巻き戻し要求があると、ドライバはテープ上の最後のファイルが 書き込まれたと仮定し、テープに書き込まれた 2 つのファイルマークが存在 することを保証します。 これには例外があって、 ある種のテープは、実際には 2 つのファイルマークを書き込まず、 最後のファイルが読み込まれた時に `幻の' ファイルマークを報告するという 標準 (我々はこれに従いますが、どうしてそうするのか理解できません) が存在するようです。 それらのデバイスには、QIC ファミリが含まれます。 (このデバイスは固定ブロックデバイスと同じかも しれません。これはまだはっきりとしていませんが、現在ドライバは別の 振舞いとして扱っています。) .Sh IOCTL .Nm sa ドライバは .Xr mtio 4 のすべての ioctl をサポートしています。 .Sh ファイル .Bl -tag -width /dev/[n][e]rsa[0-9] -compact .It Pa /dev/[n][e]rsa[0-9] 一般的な形 : .It Pa /dev/rsa0 クローズ時に巻き戻し .It Pa /dev/nrsa0 クローズ時に巻き戻さない .It Pa /dev/erst0 クローズ時にイジェクトする (可能なら) .It Pa /dev/rsa0.ctl 制御モードデバイス (他のプログラムがそのデバイスにアクセスしている間に 状態を検査するなどのためのもの) .Sh バグ 古いデバイスを扱うために必要な多くのハックが欠けています。 多くの古い .Tn SCSI-1 デバイスは、このドライバでは正しく動かないでしょう。 .Pp 特別なデバイス名に結合された、高密度および圧縮モードのサポートを 加える必要があります。 .Pp パーティションの利用による高速なインデックシングのサポートがありません。 .Sh 診断 ありません。 .Sh 関連項目 .Xr mt 1 , .Xr scsi 4 , .Xr sa 9 .Sh 歴史 .Nm sa ドライバは .Tn CAM .Tn SCSI サブシステムのために Justin T. Gibbs と Kenneth Merry が書きました。 Julian Elischer が書き、 .Tn Mach 2.5 から移植した .Nm st デバイスドライバからはたくさんのアイディアを得ています。 .sp 現在、記録を所有しているのは、 テープドライバを破壊してきたあまりにも長い年月を 犠牲にしている Matthew Jacob です。 diff --git a/ja_JP.eucJP/man/man5/core.5 b/ja_JP.eucJP/man/man5/core.5 index 421b64c1f6..83f15b72c7 100644 --- a/ja_JP.eucJP/man/man5/core.5 +++ b/ja_JP.eucJP/man/man5/core.5 @@ -1,116 +1,116 @@ .\" Copyright (c) 1980, 1991, 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. .\" .\" @(#)core.5 8.3 (Berkeley) 12/11/93 .\" %FreeBSD: src/share/man/man5/core.5,v 1.17.4.1 2005/02/05 01:02:37 das Exp % .\" .\" $FreeBSD$ .\" .Dd January 9, 2002 .Dt CORE 5 .Os .Sh 名称 .Nm core .Nd メモリイメージのファイルフォーマット .Sh 書式 .In sys/param.h .Sh 解説 プロセスを異常終了させるシグナルのうちのいくつかは、 プロセスのメモリ内状態の記録をディスクに書き出させる効果もあります。 これにより、利用可能なデバッガのどれかを使用して後で検査を行うことが 可能です .Pf ( Xr sigaction 2 を参照してください)。 このメモリイメージは、デフォルトでは作業ディレクトリの .Nm プログラム名.core という名前のファイルに書かれます。 ただし、終了したプロセスがそのディレクトリに書きこみ権限を持ち、 発生した異常がシステムを破壊しないことが前提です。 (システムが破壊された場合には、 コアファイルを保存するかどうかの決定は不定です。 .Xr savecore 8 を参照してください。) .Pp コアファイルの最大サイズは .Xr setrlimit 2 により制限されます。 制限よりもサイズの大きなファイルは生成されません。 .Pp コアファイル名は .Xr sysctl 8 変数 .Va kern.corefile にて制御されます。 この変数の内容がコアイメージを格納するファイルの名前を示します。 このファイル名は絶対パスでも相対パスでもかまいません (後者の場合、コアイメージを生成するプログラムの現在のディレクトリ から解決されます)。 このファイル名テンプレート中にあるシーケンス .Em \&%N はいずれもプロセス名で置き換えられ、 .Em \&%P はプロセスの PID で置き換えられ、 .Em \&%U は UID で置き換えられます。 デフォルトの名前は .Em \&%N.core であり、伝統的な .Fx の振舞いとなります。 .Pp デフォルトでは、実ユーザまたは実効ユーザ、あるいは実グループ -または実行グループが変更されているプロセスはコアファイルを +または実効グループが変更されているプロセスはコアファイルを 生成しません。 この動作は .Xr sysctl 8 で .Va kern.sugid_coredump を 1 にすることによりコアダンプを生成するように変更できます。 .Sh 使用例 全コアイメージを、 .Pa /var/coredumps 以下のユーザごとのプライベート領域に格納するためには、 次のように .Xr sysctl 8 コマンドを使用します: .Pp .Dl sysctl kern.corefile="/var/coredumps/\&%U/\&%N.core" .Sh 関連項目 .Xr gdb 1 , .Xr kgdb 1 , .Xr setrlimit 2 , .Xr sigaction 2 , .Xr sysctl 8 .Sh 歴史 .Nm ファイルのフォーマットは .At v6 に登場しました。 diff --git a/ja_JP.eucJP/man/man5/link.5 b/ja_JP.eucJP/man/man5/link.5 index a48f94a330..7792c11ba3 100644 --- a/ja_JP.eucJP/man/man5/link.5 +++ b/ja_JP.eucJP/man/man5/link.5 @@ -1,610 +1,610 @@ .\" Copyright (c) 1993 Paul Kranenburg .\" 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 Paul Kranenburg. .\" 3. The name of the author may not be used to endorse or promote products .\" derived from this software without specific prior written permission .\" .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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/man5/link.5,v 1.28 2004/07/03 18:29:23 ru Exp % .\" .\" $FreeBSD$ .\" .Dd October 23, 1993 .Dt LINK 5 .Os .Sh 名称 .Nm link .Nd ダイナミックローダとリンクエディタインタフェース .Sh 書式 .In sys/types.h .In nlist.h .In link.h .Sh 解説 インクルードファイル .In link.h では、ダイナミックにリンクされたプログラムやライブラリに含まれる 数種の構造体が宣言されています。 その構造体は、リンクエディタとローダ機構のいくつかの構成要素間の インタフェースを定義します。 バイナリ中でのこれらの構造体のレイアウトは 多くの点で a.out 形式に類似しており、 シンボル定義 (付随する文字列テーブルを含む) や外部エンティティへの参照を 解決するのに必要なリロケーションレコードといった、 よく似た機能を提供します。 それに加え、ダイナミックロードとリンク処理に固有のいくつかのデータ構造も 記録しています。このようなデータ構造としては、 リンクエディット処理を完結するのに必要な他のオブジェクトへの参照や、 異なるプロセス間でコードページの共有を進めるための .Em 位置独立コード (Position Independent Code 略して PIC) を機能させるための 間接テーブルがあります。 ここで述べるデータ構造全体を .Em ランタイムリロケーションセクション (RRS) と呼び、ダイナミックにリンクされるプログラムや共有オブジェクトの 標準テキスト及びデータセグメントに埋め込まれます。 これは、既存の .Xr a.out 5 形式には RRS のための場所が他にないからです。 .Pp あるプログラムを実行可能とする処理が、 システムリソースの使用を最適化しつつ正しく完了するよう、 複数のユーティリティが協調して働きます。 コンパイラは PIC コードを出力し、 それから .Xr ld 1 によって共有ライブラリが作られます。 コンパイラはまた、初期化される各データアイテムのサイズ情報を アセンブラディレクティブ .size を用いて記録します。 PIC コードは、ある間接テーブルを通じてデータ変数にアクセスする点で 従来のコードと異なっています。 この表はグローバルオフセットテーブルと呼ばれ、 慣習によって、予約名 .Dv _GLOBAL_OFFSET_TABLE_ によってアクセス可能です。 ここで用いられるメカニズムの詳細は機種依存ですが、通常は そのマシンのレジスタ 1 本がこの用途に予約されます。 このような仕組みの背景にある合理性は、 実際のロードアドレスとは独立したコードを生成することです。 実行時には、アドレス空間において様々な共有オブジェクトがロードされるアドレス に応じて、グローバルオフセットテーブルに含まれる値のみ変更すればよいのです。 .Pp 同様に、大域的に定義された関数の呼び出しは、 コアイメージのデータセグメント中に置かれている プロシージャリンケージテーブル (PLT) を通じて間接的に行われます。 これもまた、実行時にテキストセグメントを修正せずに済ませるためのものです。 .Pp リンクエディタがグローバルオフセットテーブルとプロシージャリンケージテーブルを 配置するのは、 複数の PIC オブジェクトファイルを結合して プロセスのアドレス空間にマップするのに適した 1 つのイメージにする時です。 リンクエディタはまた、実行時のリンクエディタが必要とする全てのシンボルを集め、 それらをイメージのテキストとデータのビット列と共にストアします。 もう 1 つの予約シンボル .Em _DYNAMIC は、実行時のリンク構造が存在することを示すのに用いられます。 _DYNAMIC が 0 にリロケートされる場合は、実行時リンクエディタを起動する 必要はありません。 もし _DYNAMIC が非 0 なら、_DYNAMIC は、必要なリロケーション情報と シンボル情報の位置を引き出すことができるデータ構造を指しています。 これは特に、スタートアップモジュール .Em crt0 で利用されます。 慣習として、_DYNAMIC 構造体は、 それが属するイメージのデータセグメントの最初に置かれます。 .Sh データ構造 ダイナミックリンクと実行時リロケーションをサポートするデータ構造は、 それらの処理の適用対象イメージのテキスト及びデータセグメントの 両方の中にあります。 テキストセグメントにはシンボル記述や名前といった読み取り専用データが含まれ、 他方データセグメントにはリロケーション処理で更新する必要のあるテーブル類が 含まれます。 .Pp シンボル _DYNAMIC は .Fa _dynamic 構造体を参照します: .Bd -literal -offset indent struct _dynamic { int d_version; struct so_debug *d_debug; union { struct section_dispatch_table *d_sdt; } d_un; struct ld_entry *d_entry; }; .Ed .Bl -tag -width d_version .It Fa d_version このフィールドは異なったバージョンのダイナミックリンク実装用に 提供されています。 .Xr ld 1 及び .Xr ld.so 1 が理解する現在のバージョン番号は、 .Tn SunOS 4.x リリースで用いられている .Em LD_VERSION_SUN (3) と、 .Fx 1.1 以来使用されている .Em LD_VERSION_BSD (8) です。 .It Fa d_un .Em d_version に応じたデータ構造を参照します。 .It Fa so_debug このフィールドは、 共有オブジェクトのシンボルテーブルをアクセスするためのフックを デバッガに提供します。 この共有オブジェクトは、 実行時リンクエディタの処理の結果ロードされたものです。 .El .Pp .Fa section_dispatch_table 構造体がメインとなる .Dq ディスパッチャ テーブルであり、 イメージ内で様々なシンボル情報やリロケーション情報が置かれるセグメントへの オフセットを保持します。 .Bd -literal -offset indent struct section_dispatch_table { struct so_map *sdt_loaded; long sdt_sods; long sdt_filler1; long sdt_got; long sdt_plt; long sdt_rel; long sdt_hash; long sdt_nzlist; long sdt_filler2; long sdt_buckets; long sdt_strings; long sdt_str_sz; long sdt_text_sz; long sdt_plt_sz; }; .Ed .Pp .Bl -tag -width sdt_filler1 .It Fa sdt_loaded ロードされた最初のリンクマップ (後述) へのポインタ。 このフィールドは .Nm ld.so によって設定されます。 .It Fa sdt_sods .Em この オブジェクトが必要とする共有オブジェクト記述子の (リンク) リストの先頭。 .It Fa sdt_filler1 使用しないで下さい (SunOS では ライブラリの検索ルールを指定するのに使用されていました)。 .It Fa sdt_got このイメージ中でのグローバルオフセットテーブルの位置。 .It Fa sdt_plt このイメージ中でのプロシージャリンケージテーブルの位置。 .It Fa sdt_rel 実行時のリロケーションを指定する .Fa relocation_info 構造体 ( .Xr a.out 5 参照) の配列の位置。 .It Fa sdt_hash このオブジェクトのシンボルテーブルでシンボル検索を高速化するための ハッシュテーブルの位置。 .It Fa sdt_nzlist シンボルテーブルの位置。 .It Fa sdt_filler2 現在使用されていません。 .It Fa sdt_buckets .Fa sdt_hash 中のバケット数。 .It Fa sdt_strings .Fa sdt_nzlist に対応するシンボル文字列テーブルの位置。 .It Fa sdt_str_sz 文字列テーブルのサイズ。 .It Fa sdt_text_sz このオブジェクトのテキストセグメントのサイズ。 .It Fa sdt_plt_sz プロシージャリンケージテーブルのサイズ。 .El .Pp .Fa sod 構造体は、それを含むオブジェクトのリンクエディット処理を完了するのに 必要な共有オブジェクトを記述します。 そのようなオブジェクトのリスト ( .Fa sod_next で連結されます) は section_dispatch_table 構造体の .Fa sdt_sods によって指し示されます。 .Bd -literal -offset indent struct sod { long sod_name; u_int sod_library : 1, sod_reserved : 31; short sod_major; short sod_minor; long sod_next; }; .Ed .Pp .Bl -tag -width sod_library .It Fa sod_name このリンクオブジェクトを記述する文字列の、 テキストセグメントにおけるオフセット。 .It Fa sod_library もし設定されていれば、 .Fa sod_name は .Nm ld.so が検索することになるライブラリを指定します。 そのパス名は、あるディレクトリ群 ( .Xr ldconfig 8 参照) で .Em lib\&\&.so.n.m にマッチする共有オブジェクトを検索することで得られます。 もし設定されていなければ、 .Fa sod_name は希望する共有オブジェクトに対するフルパス名を指し示す必要があります。 .It Fa sod_major ロードすべき共有オブジェクトのメジャーバージョン番号を指定します。 .It Fa sod_minor -ロードすべき共有オブジェクトの希望するマイナーバージョン番号を指定します。 +ロードすべき共有オブジェクトの希望するマイナバージョン番号を指定します。 .El .Pp プロセスのアドレス空間にロードされる共有オブジェクト全てを追跡するために、 実行時リンクエディタは .Em リンクマップ と呼ばれる構造体のリストを管理しています。 これらの構造体は実行時にのみ用いられ、 実行可能ファイルや共有ライブラリのテキストあるいはデータセグメントには ありません。 .Bd -literal -offset indent struct so_map { caddr_t som_addr; char *som_path; struct so_map *som_next; struct sod *som_sod; caddr_t som_sodbase; u_int som_write : 1; struct _dynamic *som_dynamic; caddr_t som_spd; }; .Ed .Bl -tag -width som_dynamic .It Fa som_addr このリンクマップに対応する共有オブジェクトがロードされるアドレス。 .It Fa som_path ロードされるオブジェクトのフルパス名。 .It Fa som_next 次のリンクマップへのポインタ。 .It Fa som_sod この共有オブジェクトのロードをつかさどる .Fa sod 構造体。 .It Fa som_sodbase 最近のバージョンの実行時リンカでは捨てられています。 .It Fa som_write このオブジェクトのテキストセグメント (の一部分) が現在書き込み可能である 場合にセットされます。 .It Fa som_dynamic このオブジェクトの .Fa _dynamic 構造体へのポインタ。 .It Fa som_spd 実行時リンクエディタが管理するプライベートデータと連結するためのフック。 .El .Pp サイズ付きシンボル記述。 これは単に .Fa nlist 構造体にフィールド .Pq Fa nz_size を 1 つ追加したものです。 共有オブジェクトのデータセグメントにあるアイテムの サイズ情報を伝達するのに用いられます。 この構造体の配列は共有オブジェクトのテキストセグメントに存在し、 そのアドレスは .Fa section_dispatch_table の .Fa sdt_nzlist フィールドで指定されます。 .Bd -literal -offset indent struct nzlist { struct nlist nlist; u_long nz_size; #define nz_un nlist.n_un #define nz_strx nlist.n_un.n_strx #define nz_name nlist.n_un.n_name #define nz_type nlist.n_type #define nz_value nlist.n_value #define nz_desc nlist.n_desc #define nz_other nlist.n_other }; .Ed .Bl -tag -width nz_size .It Fa nlist ( .Xr nlist 3 参照)。 .It Fa nz_size このシンボルで表現されるデータのサイズ。 .El .Pp 実行時のリンクエディットで行われるシンボル検索を高速化するため、 共有オブジェクトのテキストセグメントにハッシュテーブルが含まれています。 .Fa section_dispatch_table の .Fa sdt_hash フィールドは .Fa rrs_hash 構造体を指し示します: .Bd -literal -offset indent struct rrs_hash { int rh_symbolnum; /* シンボル番号 */ int rh_next; /* 次のハッシュエントリ */ }; .Ed .Pp .Bl -tag -width rh_symbolnum .It Fa rh_symbolnum 共有オブジェクトのシンボルテーブル ( .Fa ld_symbols で与えられます) での当該シンボルのインデックス。 .It Fa rh_next 衝突が起きたとき、このフィールドはこのハッシュテーブルのバケットにおける 次のエントリのオフセットを保持します。 最終バケット要素の場合は 0 となります。 .El .Fa rt_symbol 構造体は、 実行時にアロケートされるコモン(commons)と 共有オブジェクトからコピーされるデータアイテムを 追跡するのに用いられます。 これらのアイテムはリンクリストで管理され、デバッガでの利用のために .Fa so_debug 構造体 (後述) 中の .Fa dd_cc フィールドによって公開されます。 .Bd -literal -offset indent struct rt_symbol { struct nzlist *rt_sp; struct rt_symbol *rt_next; struct rt_symbol *rt_link; caddr_t rt_srcaddr; struct so_map *rt_smp; }; .Ed .Pp .Bl -tag -width rt_scraddr .It Fa rt_sp シンボル記述。 .It Fa rt_next 次の rt_symbol の仮想アドレス。 .It Fa rt_link ハッシュバケットにおける次の要素。 .Nm ld.so の内部で用いられます。 .It Fa rt_srcaddr 共有オブジェクト中での初期化済データのソース位置。 .It Fa rt_smp この実行時シンボルが記述するデータの元のソースとなる共有オブジェクト。 .El .Pp .Fa so_debug 構造体は、 実行時リンクエディットの結果、当該プロセスのアドレス空間にロードされた あらゆる共有オブジェクトの情報を得るために、 デバッガによって利用されます。 実行時リンクエディタはプロセスの初期化処理の一部として実行されるため、 共有オブジェクトからシンボルにアクセスしようとするデバッガは、 crt0 からリンクエディタが呼ばれた後でのみそれが可能となります。 ダイナミックリンクされているバイナリは .Fa so_debug 構造体を持っています。この構造体の場所は .Fa _dynamic 中の .Fa d_debug フィールドで指示されます。 .Bd -literal -offset indent struct so_debug { int dd_version; int dd_in_debugger; int dd_sym_loaded; char *dd_bpt_addr; int dd_bpt_shadow; struct rt_symbol *dd_cc; }; .Ed .Pp .Bl -tag -width dd_in_debugger .It Fa dd_version このインタフェースのバージョン番号。 .It Fa dd_in_debugger 当該プログラムがデバッガの制御下にあることを実行時リンカに知らせるために デバッガによってセットされます。 .It Fa dd_sym_loaded 共有オブジェクトをロードすることで実行時リンカがシンボルを追加した場合、 実行時リンカによってセットされます。 .It Fa dd_bpt_addr デバッガに制御を移すために実行時リンカによってセットされる ブレークポイントアドレス。 このアドレスは、_main 呼び出しの前に、スタートアップモジュール .Pa crt0.o によってある適切な場所に決定されます。 .It Fa dd_bpt_shadow アドレス .Fa dd_bpt_addr にあった元の機械命令を保持します。 デバッガは、プログラム実行を再開する前にこの機械命令を元に戻すことに なっています。 .It Fa dd_cc デバッガが必要とする可能性のある、実行時にアロケートしたシンボルの リンクリストへのポインタ。 .El .Pp .Em ld_entry 構造体は .Nm ld.so 中のサービスルーチン一式を定義します。 .\" See .\" .Xr libdl.a .\" for more information. .Bd -literal -offset indent struct ld_entry { void *(*dlopen)(char *, int); int (*dlclose)(void *); void *(*dlsym)(void *, char *); char *(*dlerror)(void); }; .Ed .Pp .Fa crt_ldso 構造体は、crt0 中のスタートアップコードと .Nm ld.so との間のインタフェースを定義します。 .Bd -literal -offset indent struct crt_ldso { int crt_ba; int crt_dzfd; int crt_ldfd; struct _dynamic *crt_dp; char **crt_ep; caddr_t crt_bp; char *crt_prog; char *crt_ldso; struct ld_entry *crt_ldentry; }; #define CRT_VERSION_SUN 1 #define CRT_VERSION_BSD_2 2 #define CRT_VERSION_BSD_3 3 #define CRT_VERSION_BSD_4 4 .Ed .Bl -tag -width crt_dzfd .It Fa crt_ba crt0 によって .Nm ld.so がロードされた仮想アドレス。 .It Fa crt_dzfd SunOS では、このフィールドは .Dq Pa /dev/zero へのオープンされたファイル記述子を保持し、 0 クリアされたデマンドページを得ます。 .Fx ではこのフィールドは -1 を保持します。 .It Fa crt_ldfd .Nm ld.so をロードするために crt0 が用いる、オープンされたファイル記述子 を保持します。 .It Fa crt_dp main の .Fa _dynamic 構造体へのポインタ。 .It Fa crt_ep 環境文字列へのポインタ。 .It Fa crt_bp メインプログラムがデバッガで実行される場合、 実行時リンカがブレークポイントを置くアドレス。 .Fa so_debug を参照してください。 .It Fa crt_prog crt0 で決定されるメインプログラムの名前 (CRT_VERSION_BSD3 のみ)。 .It Fa crt_ldso crt0 でマップされる実行時リンカのパス (CRT_VERSION_BSD4 のみ)。 .El .Pp .Fa hints_header 構造体及び .Fa hints_bucket 構造体は、通常 .Dq Pa /var/run/ld.so.hints に置かれるライブラリヒントのレイアウトを定義します。 ライブラリヒントは、ファイルシステム中で共有オブジェクトイメージの在処を すばやく見つけるために .Nm ld.so によって利用されます。 ヒントファイルの構成は .Dq a.out とそれほど異なりません。つまりヒントファイルは、 固定長ハッシュバケットのオフセットとサイズを決定するためのヘッダと、 共通の文字列プールを持っています。 .Bd -literal -offset indent struct hints_header { long hh_magic; #define HH_MAGIC 011421044151 long hh_version; #define LD_HINTS_VERSION_1 1 long hh_hashtab; long hh_nbucket; long hh_strtab; long hh_strtab_sz; long hh_ehints; }; .Ed .Bl -tag -width hh_strtab_sz .It Fa hh_magic ヒントファイルのマジックナンバ。 .It Fa hh_version インタフェースのバージョン番号。 .It Fa hh_hashtab ハッシュテーブルのオフセット。 .It Fa hh_strtab 文字列テーブルのオフセット。 .It Fa hh_strtab_sz 文字列テーブルのサイズ。 .It Fa hh_ehints ヒントファイルで利用可能な最大オフセット。 .El .Pp .Bd -literal -offset indent /* * ヒントファイルのハッシュテーブル要素 */ struct hints_bucket { int hi_namex; int hi_pathx; int hi_dewey[MAXDEWEY]; int hi_ndewey; #define hi_major hi_dewey[0] #define hi_minor hi_dewey[1] int hi_next; }; .Ed .Bl -tag -width hi_ndewey .It Fa hi_namex ライブラリを指定する文字列のインデックス。 .It Fa hi_pathx ライブラリのフルパス名を表す文字列のインデックス。 .It Fa hi_dewey 共通ライブラリのバージョン番号。 .It Fa hi_ndewey .Fa hi_dewey 中の有効エントリ数。 .It Fa hi_next ハッシュ衝突の際の次のバケット。 .El .Sh 警告 現在のところ、共有ライブラリ生成をサポートしているのは (GNU) C コンパイラ のみです。他のプログラミング言語では利用できません。 diff --git a/ja_JP.eucJP/man/man7/security.7 b/ja_JP.eucJP/man/man7/security.7 index dd7613eab8..7719738112 100644 --- a/ja_JP.eucJP/man/man7/security.7 +++ b/ja_JP.eucJP/man/man7/security.7 @@ -1,900 +1,900 @@ .\" Copyright (C) 1998 Matthew Dillon. 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 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 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/man7/security.7,v 1.39 2004/08/07 04:40:20 imp Exp % .\" .\" $FreeBSD$ .Dd September 18, 1999 .Dt SECURITY 7 .Os .Sh 名称 .Nm security .Nd .Fx におけるセキュリティ入門 .Sh 解説 セキュリティは、システム管理者とともに始まり、システム管理者と ともに終る機能です。 .Bx マルチユーザシステムは、昔ながらのセキュリティをいくらかは備えて いますが、さらなるセキュリティ機構を組み込んで維持していくことで、ユーザを .Dq 正直に し続ける仕事は、システム管理者の最も大きな責務の一つでしょう。マシンは、 管理者が設定しただけのセキュリティしか示しません。セキュリティに関する 問題は、むしろ、便利さを求める人間との競合問題です。一般に、 .Ux システムは莫大な数のプロセスを同時に実行させることができ、 それも、サーバとして動作するものが多いのです。つまり、外部の何者かが 接続してきて、サーバプロセスと会話することができるということなのです。 昨日まで使われていたミニコンピュータやメインフレームは、今日では デスクトップコンピュータが取って代わり、しかも、それらはネットワークで結ばれて インターネットと接続されるようになりました。これにより、セキュリティは 昔と比べてはるかに大きな問題となっています。 .Pp セキュリティは、タマネギの階層のようなアプローチを通すと最もよく実装できます。 手短に言って、やりたいことは、便利さを損ねない程度にできるだけ多くの 階層を作り、システムに侵入されていないかを注意深く監視することです。 セキュリティの階層を作りすぎたくはありません。作りすぎると、侵入の 検出が妨げられることになるでしょう。どんなセキュリティ機構でも、 侵入の検出をすることが唯一とても重要なことなのですから。 例えば、システムの各バイナリに .Cm schg フラグ ( .Xr chflags 1 参照) を設定するのは大して意味がありません。 このフラグを設定すると、一時的にはバイナリを保護することができますが、 侵入してきた攻撃者が容易に検知可能な変更をすることを妨げてしまい、 結果として、マシンのセキュリティ機構が攻撃者を まったく検知できなくなってしまうからです。 .Pp システムセキュリティには、さまざまな形での攻撃に対処することも ついて回ります。攻撃には、root を破ろうとはしないが、システムを クラッシュさせたり、さもなければ、システムを使用不能にしたり しようとするものも含まれています。 セキュリティに関する問題は、いくつかのカテゴリに分類することができます。 .Bl -enum -offset indent .It サービス不能攻撃 (DoS) .It ユーザアカウントにかかる危険 .It アクセス可能なサーバを経由した root 権限にかかる危険 .It ユーザアカウントを通した root 権限にかかる危険 .It 裏口の作成 .El .Pp サービス不能攻撃とは、マシンから必要な資源を奪う行為です。 サービス不能攻撃は、普通は、そのマシンで実行されるサーバや ネットワークスタックを圧倒して、マシンをクラッシュさせたり、 さもなければマシンを使えなくしたりするような力任せの方法です。 サービス不能攻撃のいくつかは、 ネットワークスタックのバグを利用して、パケット一つでマシンを クラッシュさせようとします。後者は、 カーネルにバグ修正を施すことによってのみ修正することができます。 サーバプロセスに対する攻撃は、オプションを適切に指定して、 不利な状況にあるシステムにおいて、サーバプロセスが引き起こす負荷に限界を設けることで 修正することができます。これらに比べると、ネットワークへの力任せの攻撃への 対応はずっと難しくなります。たとえば、偽造パケットによる攻撃 .Pq spoof-packet attack は、インターネットからシステムを切り離す以外の方法で防ぐことは ほとんど不可能です。 それによって、マシンを落としてしまうことはできないかもしれませんが、 インターネット回線をいっぱいにしてしまうことはできます。 .Pp ユーザアカウントを危険に晒してしまう問題は、サービス不能攻撃よりもずっとよくある 問題です。このご時勢でも、自分たちのマシンで標準の .Xr telnetd 8 , .Xr rlogind 8 , .Xr rshd 8 , .Xr ftpd 8 サーバを実行させているシステム管理者は多いのです。これらの サーバは、デフォルトでは、暗号化されたコネクション上で動作していません。 その結果、抱えているユーザ数が標準くらいであれば、リモートログイン (そのシステムにログインするには最も普通で便利な方法です) しているユーザのうち一人以上は、パスワードを覗き見られて しまうでしょう。 システム管理者が注意深い人ならば、たとえログインが成功していたとしても、 リモートアクセスログを解析して、疑わしいソースアドレスを探すものです。 .Pp ひとたび攻撃者がユーザアカウントへのアクセス権を入手すると、攻撃者が root の権限を破る可能性があることを仮定するべきです。しかし、 セキュリティを十分維持し、手入れの行き届いたシステムにおいては、 あるユーザアカウントへのアクセスが可能となっても、攻撃者に必ずしも root へのアクセス権を与えるとは限らないのが現実です。この違いは重要です。 というのは、root へのアクセス権がなければ、一般的に、攻撃者は自分の 侵入の痕跡を隠蔽することができませんし、そのユーザのファイルを引っかき回したり、 マシンをクラッシュさせたりできるのがせいぜいです。 ユーザアカウントが危険に晒されるということは、たいへんよく起こることです。 なぜなら、ユーザは、システム管理者ほどには前もって注意を払わない 傾向があるからです。 .Pp システム管理者は、あるマシン上で root の権限を破る方法は、潜在的に 何通りもあるのだということを 心しておかねばなりません。攻撃者が root のパスワードを知ってしまうかも しれません。攻撃者が root の権限で実行されるサーバのバグを見つけ、 ネットワークからそのサーバへ接続して root の権限を破ることができるかも しれません。ひとたびユーザアカウントを破ると、ユーザアカウントから root の権限を破ることが可能であるというバグを持つ SUID-root プログラムの 存在を、攻撃者は知っているかもしれません。 あるマシン上で、攻撃者が root の権限を破る方法を知ったとすると、 攻撃者は、裏口を作る必要などないかもしれません。 発見され、ふさがれた root の穴の多くには、攻撃者が侵入した跡を消そうとして たくさん仕事した結果が含まれています。 そのためにこそ、多くの攻撃者は裏口を作るのです。この裏口は、攻撃者の 検出をするのに便利なやり方です。攻撃者に裏口を作らせないようにする ということは、セキュリティにとっては実際には良くないことかもしれません。 なぜなら、そうすることで、攻撃者が最初に侵入してくるために使用した セキュリティホールがふさがるわけではないからです。 .Pp セキュリティを改善する方法は、常に、 .Dq タマネギの皮剥き のように 複数の層のアプローチで実装されるべきです。これらは次のように分類できます。 .Bl -enum -offset indent .It root とスタッフのアカウントの安全性を高める。 .It root の安全性を高める \(em root 権限のサーバと SUID/SGID バイナリ。 .It ユーザアカウントの安全性を高める。 .It パスワードファイルの安全性を高める。 .It カーネルのコア、raw デバイス、ファイルシステムの安全性を高める。 .It システムに対して行なった、不適切な変更をすばやく検出する。 .It 偏執狂的方法。 .El .Sh root アカウントとスタッフアカウントの安全性を高める root のアカウントの安全性を確保しないうちからスタッフのアカウントの安全性を うんぬんしてもしかたがありません。ほとんどのシステムでは、root アカウントに 割り当てたパスワードが 1 つあります。まず最初にすべきことは、 このパスワードは .Em いつでも 危険に晒されていると仮定することです。 ここでは、root のパスワードを消すべきだと言っているのではありません。 パスワードは、マシンにコンソールからアクセスするのには、ほとんどいつでも 必要なものです。ここで言いたいのは、コンソール以外からは、おそらくは、 .Xr su 1 ユーティリティを用いてすらパスワードを使えるようにするべきではないと いうことです。 例えば、PTY が、 .Pa /etc/ttys ファイルで .Dq Li unsecure と指定されているかを確認してください。 そうすることで、 .Xr telnet 1 や .Xr rlogin 1 越しに root でログインできないようになります。 .Xr sshd 8 のような、別のログインサービスを使っている場合でも同様に、 直接 root へログインすることを許していないかどうか確認してください。 アクセスする手段、例えば .Xr ftp 1 のようなサービスが、たびたびクラックの手に落ちる ことを考えてみてください。root に直接ログインできるのは、システムコンソール を通したときのみにすべきです。 .Pp システム管理者として、自分は root になれるようにしておかねばならないの はもちろんですから、穴をいくつか空けておきます。しかし、それらの穴を 動作させるには、さらに追加のパスワード認証が必要であるようにして おきます。root でアクセス可能とする方法の一つとして、 適切なスタッフアカウントを ( .Pa /etc/group ) の .Dq Li wheel グループに加えることがあります。 .Li wheel グループに置かれたスタッフメンバには、 .Xr su 1 を使って root になることが許されます。パスワードエントリにおいて、 スタッフメンバを .Li wheel グループを置くことで、スタッフメンバに .Li wheel のアクセス権を与えてはいけません。スタッフメンバのアカウントは .Dq Li staff グループに置くべきです。そして .Pa /etc/group ファイルを通して .Li wheel グループに加えるべきです。 実際に root アクセスの必要な staff メンバのみ .Li wheel グループに置くように すべきです。Kerberos のような認証方法を使用する場合、root アカウントで .Pa .k5login ファイルを使って、誰も .Li wheel グループに置く必要なく root に .Xr ksu 1 を許すようにすることもできます。 このやり方はよりよい解決策なのかもしれません。なぜなら、 .Li wheel のメカニズム では、侵入者がパスワードファイルを手に入れ、staff アカウントのいずれか 1 つを破ることができると、root を破ることがまだできてしまうからです。 .Li wheel のメカニズムを用いる方が、何もしないよりは良いのですが、必ずしも 最も安全な選択肢とは限りません。 .Pp root アカウントの安全性を高める間接的な方法として、別のログインアクセス の方法を用いて、スタッフのアカウントの暗号化パスワードを\ * にして おくことで、スタッフのアカウントの安全性を高めるものがあります。この方法 だと、侵入者はパスワードファイルを盗むことができるかもしれませんが、 スタッフアカウントを破ることはできないでしょう。 また、たとえ root が暗号化パスワードをパスワードファイルに付けていたとしても、 root アカウントも破ることはできないでしょう (もちろん、コンソールへの root によるアクセスが限定されているものとします)。 スタッフメンバがスタッフアカウントでログインする際には、 .Xr kerberos 1 や .Xr ssh 1 のような、公開鍵 / 秘密鍵の鍵の組を使う 安全性の高いログインの仕組みを使います。Kerberos のような仕掛けを使う場合、 一般に、Kerberos サーバを実行するマシンと自分のデスクトップ ワークステーションとの安全性を確保しなければなりません。SSH で 公開鍵 / 秘密鍵の組を使う場合、一般に、ログイン .Em 元 マシン (通常は自分のワークステーション) の安全性を確保しなければなりません。ここで、 .Xr ssh-keygen 1 で公開鍵 / 秘密鍵の組を生成する際、鍵の組をパスワードで防御することにより、 鍵の組への防御層を追加することもできます。スタッフアカウントの パスワードを\ * で外すことができると、管理者自身が設定 した安全性の高い方法でしかスタッフメンバがログインできないことも保証 できます。こうして、多くの侵入者が使う重大なセキュリティの穴 (安全性の低い無関係なマシンからネットワークを覗き見る方法) を塞ぐようなセッションを提供する、安全性の高い暗号化されたコ ネクションを使うことを、スタッフメンバ全員に強制することができ るのです。 .Pp より間接的なセキュリティの仕組みでは、制限の強いサーバから制限の弱い サーバへログインすることを前提としています。例えば、メインマシンで、 様々な種類のサーバを実行させている場合、ワークステーションではそれらの サーバを実行させてはなりません。ワークステーションを十分に 安全にしておくためには、実行するサーバの数を、一つもサーバ が実行されていないというくらいにまでできる限り減らすべきです。 また、パスワードで保護されたスクリーンセーバを走らせておくべきです。 ワークステーションへの物理的アクセスが与えられたとすると、もちろん 言うまでもなく、攻撃者は管理者が設定したいかなる種類のセキュリティ をもうち破ることができるのです。これは、管理者として必ず考えておか ねばならない問題ですが、システム破りの大多数は、ネットワーク経由で リモートから、ワークステーションやサーバへの物理的アクセス手段を持 たない人々によって行われるという事実もまた、念頭に置いておく必要 があります。 .Pp Kerberos のような方法を使うことで、スタッフアカウントのパスワードの変更 もしくは停止を一箇所で行なうことと、スタッフメンバがアカウントを持つ すべてのマシンに即時にその効果を及ぼすことが可能となります。スタッフメンバの アカウントが危険に晒されたときに、すべてのマシンでスタッフメンバのパスワードを 即座に変更する能力を過小評価してはいけません。パスワードが分散されている状況では、 N 台のマシンでパスワードを変更すると、てんやわんやの事態を招く可能性が あります。Kerberos を使用すると、パスワードの再発行に制限 (re-passwording restriction) を課することもできます。この機能を使うことにより、 ある Kerberos チケットをしばらく経つとタイムアウトにすることが できるだけでなく、一定期間 (例えば、1 ヶ月に 1 回) 経つと、ユーザに新しいパスワードを選ぶように要求することもできます。 .Sh root の安全性を高める \(em root 権限のサーバと SUID/SGID バイナリ 用心深いシステム管理者は、自分に必要なサーバプロセスだけを過不足なく 実行させるものです。第三者製のサーバは、よくバグを持っていがちだと いうことに注意して下さい。例えば、古いバージョンの .Xr imapd 8 や .Xr popper 8 を実行させておくのは、全世界に共通の root の切符を与えてい るようなものです。 自分で注意深くチェックしていないサーバは、決して実行してはいけません。 root で実行させる必要のあるサーバはほとんどありません。 例えば、 .Xr talkd 8 , .Xr comsat 8 , .Xr fingerd 8 デーモンを、特別の「砂場 .Dq sandbox 」ユーザで実行させることができます。 .\"kuma hellofalot of trouble って何や? .\" hell of a lot of trouble みたいですね。;-) (金ん田 '99.02.11) 管理者が膨大な数の問題に直面していないのなら、この「砂場」は完璧では ありませんが、セキュリティに関するタマネギ的アプローチはここでも 成り立ちます。砂場で実行されているサーバプロセスを経由して侵入を 果たすことができたとしても、攻撃者はさらに砂場から外に脱出しなければ なりません。攻撃者が通過せねばならない層の数が増えれば増えるほど、 それだけ攻撃者が侵入に成功する確率が減ります。root の抜け穴は 歴史的に、基本システムサーバも含め、 root 権限で実行されるほとんどすべてのサーバプロセスで発見されています。 ユーザが .Xr sshd 8 経由でのみログインし、 .Xr telnetd 8 , .Xr rshd 8 , .Xr rlogind 8 経由でログインすることが決してないマシンを稼働させているのであれば、 それらのサービスを停止させて下さい。 .Pp .Fx では、今では .Xr talkd 8 , .Xr comsat 8 , .Xr fingerd 8 は砂場で実行させることが デフォルトになっています。次に砂場で実行させるべきプログラムの候補として、 .Xr named 8 があります。デフォルトの .Pa rc.conf ファイルには、 .Xr named 8 を砂場で実行する ために必要な引数がコメントアウトされた形式で含まれています。新しい システムをインストールしているか、それとも既存のシステムを アップグレードして使っているかに依存しますが、砂場として使用する 特別のユーザアカウントがインストールされていないかもしれません。 用心深いシステム管理者であれば、できるだけいつでも研究を怠らず、 サーバに砂場を仕込むものでしょう。 .Pp 通常、砂場で実行しないサーバが他にいくつかあります。 .Xr sendmail 8 , .Xr popper 8 , .Xr imapd 8 , .Xr ftpd 8 などです。これらのうちいくつかのサーバには代わりとなるも のがありますが、 代わりのものをインストールするには、それだけ多くの仕事が必要になるので、 結局これらを喜んで入れてしまいます (便利さという要素がまたも勝利を収めるわけです)。 これらのサーバは、root 権限で実行せねばならないかもしれません。 また、 これらのサーバ経由で生じる侵入 を検出するためには、他の仕組みに頼らなくてはならないかもしれません。 .Pp システムの root 権限の潜在的な穴で他に大きなものとして、システムに インストールされた SUID-root/SGID バイナリがあります。 これらのバイナリは、 .Xr rlogin 1 のように、 .Pa /bin , /sbin , /usr/bin , /usr/sbin に存在するものがほとんどです。 100% 安全なものは存在しないとはいえ、システムデフォルトの SUID/SGID バイナリは比較的安全といえます。それでもなお、root の穴が これらのバイナリにときおり発見されています。1998 年に Xlib で見つかった root の穴は、 .Xr xterm 1 (普通、SUID 設定されています) を攻撃可能にしていました。 安全である方がよいので、用心深いシステム管理者は残念に思いながらも、 スタッフのみが実行する必要がある SUID バイナリは、スタッフのみが アクセス可能な特別なグループに含めるように制限を加え、 誰も使わない SUID バイナリは .Pq Dq Li "chmod 000" を実行して片付けてしまうでしょう。 ディスプレイを持たないサーバは、一般的に .Xr xterm 1 のバイナリを必要としません。 SGID バイナリもほとんど同様の危険な存在になり得ます。 侵入者が kmem に SGID されたバイナリを破ることができた場合、 その侵入者は .Pa /dev/kmem を読み出すことができるようになります。 つまり、暗号化されたパスワードファイルを読み出すことができる ようになるので、パスワードを持つどのアカウントをも、 .Pq 潜在的な 危険に晒すことになります。 代わりに、 .Dq Li kmem グループを破った侵入者が PTY を通して送られたキーストロークを 監視できます。キーストロークには、安全な方法でログインするユーザが使っている PTY も含まれます。 .Dq Li tty グループを破った侵入者は、ほぼ任意のユーザの TTY へ 書き込みができます。ユーザが端末プログラムやキーボードをシミュレーション する機能を持ったエミュレータを使っている場合、侵入者は潜在的に、 結局そのユーザとして実行されるコマンドをユーザの端末にエコーさせる データストリームを生成できる可能性があります。 .Sh ユーザアカウントの安全性を高める ユーザアカウントは、普通、安全性を高めることが最も困難です。 スタッフに対して、アテナイのドラコのような厳格なアクセス制限を課し、 スタッフのパスワードを\ * で外すことができるとはいえ、管理者が持ちうる 一般ユーザすべてのアカウントに対して同じことはできないかもしれません。 管理者が十分に統率をとることができるなら、管理者は勝利し、ユーザの アカウントの安全を適切に確保できるかもしれません。それが できないならば、よりいっそう気を配って一般ユーザのアカウントを 監視するよりほかありません。一般ユーザアカウントに対し SSH や Kerberos を利用することには、システム管理がさらに増えたり テクニカルサポートが必要になるなどの問題があります。 それでも、暗号化パスワードファイルと比較するとはるかに良い解です。 .Sh パスワードファイルの安全性を高める できるだけ多くのパスワードを\ * で外し、それらのアカウントのアクセスには SSH や Kerberos を使うようにすることが、唯一の確実な方法です。たとえ暗号化 パスワードファイル .Pq Pa /etc/spwd.db が root でのみ読み出し可能だとしても、 侵入者がそのファイルの読み出しアクセス権限を得ることは可能かもしれません。 たとえ root の書き込み権限が得られないにしてもです。 .Pp セキュリティスクリプトは常にパスワードファイルの変更をチェックし、報告 するようにすべきです (後述の .Sx 「ファイルの完全性のチェック」 を参照して下さい)。 .Sh カーネルのコア、raw デバイス、ファイルシステムの安全性を高める root の権限を破ると、攻撃者は何でもできますが、 もっと簡便なこともいくつかあります。例えば、最近のカーネルは、 組み込みのパケット覗き見デバイス .Pq packet sniffing device ドライバを備えているものがほとんどです。 .Fx では .Xr bpf 4 デバイスと呼ばれています。侵入者は普通、危険に晒された マシンでパケット覗き見プログラムを実行させようと試みます。侵入者に わざわざそういう機能を提供する必要はないので、ほとんどのシステムで .Xr bpf 4 デバイスを組み込むべきではありません。 .Pp .Xr bpf 4 デバイスを外し、モジュールローダを無効にしても、 .Pa /dev/mem と .Pa /dev/kmem という悩みの種がまだ残っています。この問題に関しては、侵入者は raw デバイスに書き込むこともできます。 また、 .Xr kldload 8 という、別のカーネル機能があります。 やる気まんまんの侵入者は、KLD モジュールを使って 自分独自の .Xr bpf 4 もしくはその他覗き見デバイスを動作中のカーネルに インストールすることができます。 この問題を避けるため、システム管理者は カーネルをより高い安全レベル .Pq securelevel 、少なくとも安全レベル 1 で実行させる必要があります。 .Xr sysctl 8 を使って .Va kern.securelevel 変数に安全レベルを設定することが できます。ひとたび安全レベルに 1 を設定すると、 raw デバイスに対する書き込みアクセスは拒否され、例えば .Cm schg のような特別な .Xr chflags 1 フラグが効果を発揮します。これに加えて、 起動時において重要なバイナリ・ディレクトリ・スクリプトファイルなど、 安全レベルが設定されるまでの間に実行されるものすべてに対しても .Cm schg フラグを確実に on にしておく必要があります。この設定をやり過ぎても 構いませんが、より高い安全レベルで動作している場合、システムの アップグレードがはるかに困難になります。システムをより高い安全レベルで 実行させるようにするが、お天道さまの下にあるすべてのシステムファイルと ディレクトリに .Cm schg フラグを設定しないという妥協をする方法もあります。 もう一つの可能性としては、単純に .Pa / と .Pa /usr を読み込み専用でマウント することです。ここで特筆すべきことは、システムを守ろうとしてアテナイのドラコ のように厳しくしすぎると、侵入を検出するという非常に重要なことが できなくなってしまうということです。 .Sh ファイルの完全性のチェック: バイナリ、設定ファイルなど ことこの問題に至ると、システム管理者にできることは、 便利さという要素がその醜い頭を上げない程度に、 コアシステムの設定 / 制御ファイルを防御することだけです。 例えば、 .Pa / と .Pa /usr にある大部分のファイルに .Cm schg ビットを設定するために .Xr chflags 1 を使用するのは、おそらく逆効果でしょう。 なぜなら、そうすることでファイルは保護できますが、侵入を検出 する窓を閉ざしてしまうことにもなるからです。 セキュリティのタマネギの最後の層はおそらく最も重要なもの、すなわち検出です。 セキュリティの残りのものは、突然の侵入を検出できなければ、全然有用では ありません( あるいは、もっと悪ければ、間違った安全性に対する感覚を 植え付けてしまいます )。 タマネギの仕事の半分は、攻撃者を食い止めるのではなく、侵入を遅らせることにより、 攻撃中の攻撃者を捕まえる機会を検出層に与えることなのです。 .Pp 侵入を検出する最も良い方法は、変更されていたり、消えていたり、入れた覚えが ないのに入っているファイルを探すことです。 変更されたファイルを探すのに最も良い方法は、もう一つの ( しばしば中央に集められた ) アクセスが制限されたシステムから行なうものです。 さらに安全でアクセス制限されたシステム上でセキュリティ用スクリプトを書けば、 スクリプトは潜在的な攻撃者達からはほぼ見えなくなります。 これは重要なことです。 最大限に優位に立つために、一般的にビジネスで使う他のマシンへの重要な アクセスは、アクセスの制限されたマシンにやらせなくてはいけません。 普通は、他のマシンからアクセス制限されたマシンへ読み込み専用で NFS エクスポートしたり、アクセス制限されたマシンから他のマシンへ SSH を行なうために、SSH 鍵のペアを作ったりすることで行います。 ネットワークのトラフィックを別にして、NFS は最も可視性のない方法です。 事実上検出されない各クライアント上のファイルシステムを監視できるようになります。 アクセス制限されたサーバがスイッチを通してクライアントに接続する場合、 たいてい NFS がより良い選択肢です。アクセス制限されたサーバがハブを通したり、 いくつかのルーティング層を通したりしてクライアントに接続する場合、 NFS はあまりにも危険な方法かもしれず ( ネットワークの面で )、SSH の方が 認証の道筋は跡となって残りますが、それでもより良い方法かもしれません。 .Pp アクセス制限されたマシンに、少なくとも監視することを前提とした クライアントシステムへの読み込みアクセスをひとたび与えると、 実際に監視するためのスクリプトを書かなくてはいけません。 NFS マウントをすれば、 .Xr find 1 や .Xr md5 1 などの単純なシステムユーティリティでスクリプトを書くことができます。 少なくとも 1 日 1 回、クライアントのファイルを直接 .Xr md5 1 にかけ、さらにもっと頻繁に .Pa /etc および .Pa /usr/local/etc にあるようなコントロール用ファイルを試験するのが一番です。 試験ファイルは、アクセス制限されたマシンが適性であると知っている、基となる MD5 情報と比べて違いが見つかった場合、システム管理者に調べて欲しいと 訴えるようにするべきです。 優れたセキュリティ用スクリプトは、 .Pa / および .Pa /usr などのシステムパーティション上で不適当に SUID されたバイナリや、 新たに作成されたファイルや削除されたファイルもチェックするのでしょう。 .Pp NFS ではなく、SSH を使用する場合は、セキュリティ用スクリプトを書くのはずっと 難しいことです。スクリプトをクライアントから見えるようにし、 動かすためには、クライアントに対して .Xr scp 1 を必ず行わなくてはいけません。 そして、安全のため、スクリプトが使うバイナリ ( .Xr find 1 など ) を .Xr scp 1 する必要もあります。クライアントの .Xr sshd 8 デーモンはすでに危険に晒されているかもしれません。 以上のことから、安全でないリンク上の場合は SSH は必要かもしれませんが、 SSH を扱うのはとても大変なことです。 .Pp 優れたセキュリティ用スクリプトは、ユーザやスタッフメンバの アクセス設定ファイルもチェックするものです。 .Pa .rhosts , .shosts , .ssh/authorized_keys などがそれですが、MD5 のチェックの範囲外になってしまうかもしれません。 .Pp ユーザ用のディスク容量が非常に大きい場合は、パーティション上の各ファイルを 見て回るのに大変な時間がかかるかもしれません。この場合は、マウントフラグを 設定して、このパーティションに SUID されたバイナリやデバイスを置けないように するのが良い考えです。 .Cm nodev および .Cm nosuid オプション ( .Xr mount 8 参照) が調べたいものでしょう。私なら、ともかくも週に 1 度はファイルシステムを スキャンするでしょう。なぜなら、この層での目的は、侵入が意味があるかどうかに 関わらず、侵入を検出することだからです。 .Pp プロセスアカウンティング ( .Xr accton 8 参照) は、比較的オーバヘッドの低いオペレーティングシステムの機能で、 マシンに侵入されてしまった後の評価の仕組みとして使用することをお勧め します。 侵入を受けた後でも当該ファイルが無傷である場合に、 侵入者が実際にどのようにしてシステムに侵入したかを 追跡するのに特に有益です。 .Pp 最後に、セキュリティスクリプトはログファイルを処理するようにし、 ログファイル自体もできるだけ安全性の高い方法で .Sq リモート syslog は極めて有益になり得ます 生成するようにすべきです。侵入者は自分の侵入の痕跡を覆い隠そう としますし、また、ログファイルはシステム管理者が最初の侵入の時 刻と方法を追跡してゆくために極めて重要です。 ログファイルを永久に残しておくための 1 つの方法は、システムコンソールを シリアルポートにつないで走らせ、コンソールを監視している安全なマシンを通して 絶えず情報を集めることです。 .Sh 偏執狂的方法 多少偏執狂的になっても決して悪いことにはなりません。原則的に、 システム管理者は、便利さに影響を与えない範囲でいくつでもセキュリティ 機能を追加することができます。また、いくらか考慮した結果、便利さに 影響を与えるセキュリティ機能を追加することもできます。 もっと重要なことは、セキュリティ管理者は少々ごちゃごちゃに すべきだということです。 というのも、このマニュアルページに書かれている勧告をそのまま使用した場合は、 予想される攻撃者はやはりこのマニュアルを読んでいるわけですから、 防御策を漏らしてしまうことになるからです。 .Sh サービス不能攻撃 (DoS attack) についての特記事項 このセクションではサービス不能攻撃を扱います。サービス不能攻撃は、普通は、 パケット攻撃です。ネットワークを飽和させる最先端の偽造パケット .Pq spoofed packet 攻撃に対してシステム管理者が打てる手はそれほど多く ありませんが、一般的に、その種の攻撃によってサーバがダウン しないことを確実にすることで、被害をある限度に食い止める ことはできます。 .Bl -enum -offset indent .It サーバの fork の制限 .It 踏み台攻撃の制限 .Pq ICMP 応答攻撃、ping broadcast など .It カーネルの経路情報のキャッシュ .El .Pp 普通に見られるサービス不能攻撃に、fork するサーバプロセスに対する ものがあります。これは、サーバにプロセス・ファイル記述子・メモリを 食い尽くさせて、マシンを殺そうとするものです。 .Xr inetd 8 サーバには、この種の攻撃を制限するオプションがいくつかあります。マシンが ダウンすることを防止することは可能ですが、この種の攻撃によりサービスが 崩壊することを防止することは一般的に言ってできないことに注意する必要が あります。 .Xr inetd 8 のマニュアルページを注意深く読んで下さい。特に、 .Fl c , C , R オプションに注意して下さい。IP 偽造攻撃 (spoofed-IP attack) は .Xr inetd 8 の .Fl C オプションの裏をかけるので、一般にオプションを 組み合わせて使用するべきであることに注意して下さい。スタンドアロンサーバ の中には、自分自身で fork を制限するパラメータを持っているものがあります。 .Pp .Xr sendmail 8 デーモンには、 .Fl OMaxDaemonChildren オプションがあります。負荷には遅れがあるので、 .Xr sendmail 8 の負荷に限界を設けるオプションを使うよりも、 このオプションを使う方がまともに動作する可能性ははるかに高いです。 -sendmail の実行を開始する際に、 +.Xr sendmail 8 +の実行を開始する際に、 .Va MaxDaemonChildren パラメータを設定するべきです。その値は、 通常見込まれる負荷を扱える程度に十分高いが、 それだけの数の .Xr sendmail 8 を操作しようとすると マシンが卒倒してしまうほどには高くないような値に設定するべきです。 -.\" 翻訳の抜けがあるようだ .Xr sendmail 8 を .Dq キュー処理 モード .Pq Fl ODeliveryMode=queued で実行することや、デーモン .Pq Dq Nm sendmail Fl bd をキュー処理用プロセス .Pq Dq Nm sendmail Fl q15m と別に実行することも、用心深いことと言えます。それでもなおリアルタイムでの 配送を望むのであれば、 .Fl q1m のようにすることで、キュー処理をはるかに短い時間間隔で 行うことができます。いずれにしても、 .Va MaxDaemonChildren オプションに合理的な値を確実に指定して、 .Xr sendmail 8 がなだれをうって失敗することがないようにして下さい。 .Pp .Xr syslogd 8 デーモンは直接攻撃される可能性があるので、可能ならばいつでも .Fl s オプションを用いることを強く推奨します。これができないなら、 .Fl a オプションを使って下さい。 .Pp tcpwrapper の逆 identd などの接続返し (connect-back) を行うサービスに ついては十分注意を払うようにするべきです。これらは直接攻撃を受ける可能性が あります。こういう事情があるので、tcpwrapper の逆 ident 機能を使おうとは 思わないのが一般的です。 .Pp 境界ルータのところでファイアウォールを設けて、外部からのアクセスに対して 内部サービスを防御するという考えは実によいものです。この考えは、LAN の外部 からの飽和攻撃を防ぐことにあり、root ネットワークベースの root 権限への攻撃から内部サービスを防御することには、あまり考慮を払って いません。ファイアウォールは常に排他的に設定して下さい。つまり、 .\" .So 「ポート A, B, C, D と M から Z まで .Em 以外 のすべてにファイアウォールを設ける」 .\" .Sc というふうにです。 このようにすることで、 .Xr named 8 (ゾーンのプライマリである場合), .Xr talkd 8 , .Xr sendmail 8 など、インターネットにアクセスを提供するサービス として特に指定するもの以外の、小さい番号のポートすべてをファイアウォールで 防御することができます。ファイアウォールをこの他のやり方、つまり 包含的もしくは受容的なファイアウォールとして設定しようとする場合、 .Dq close することを忘れてしまうサービスがいくつか出てきたり、新しい内部サービスを 追加したのにファイアウォールの更新を忘れたりする可能性がよく出てきます。 ファイアウォール上の大きい番号のポートを開けておいて、小さい番号のポートを 危険に晒すことなく受容的な動作を許すことができます。 .Fx では、 .Va net.inet.ip.portrange への sysctl .Pq Dq Li "sysctl net.inet.ip.portrange" , をいろいろ使用することで、 動的バインドに使用されるポート番号の範囲を制御できることを記憶にとどめて おいて下さい。これによりファイアウォールの設定の複雑性を緩和できます。 私は、ファイアウォールに通常のfirst/last の範囲として、 4000 から 5000 を、 高位ポートの範囲として、49152 から 65535 を使用しています。そして、 (いくつかのインターネットアクセス可能なポートを ブロックから除外するのはもちろんですが) 4000 より下のすべてをブロックしています。 .Pp また別のありふれたサービス不能攻撃として、踏み台攻撃 (springboard attack) と呼ばれるものがあります。これは、サーバが自分自身、ローカルネットワーク、 そして他のマシンを過負荷に追い込むような応答を生成させる方法でサーバを 攻撃します。この種の攻撃の中で最もありふれたものは、ICMP PING BROADCAST 攻撃があります。攻撃者は、実際に攻撃したいマシンのアドレスをソース アドレスに設定した ping パケットを偽造して、対象の LAN の ブロードキャストアドレスに向けてパケットを送信します。境界にあるルータが ブロードキャストアドレスに対する ping パケットを握り潰すように設定されていない 場合、LANは、詐称されたソースアドレスに向けて応答パケットを生成するはめになり、犠牲となるマシンが飽和するところまで行ってしまいます。攻撃者が同じトリックを 異なるネットワーク上のいくつものブロードキャスト アドレスに対して同時に使用した場合、とくにひどいことになります。 これまでに、120 メガビット以上のブロードキャスト攻撃が観測されています。 2 番目の踏み台攻撃は、ICMP エラー報告の仕掛けを狙うものです。ICMP エラー 応答を生成するパケットを生成することにより、攻撃者はサーバの 受信ネットワークを飽和させることができ、同時に、サーバが送信 ネットワークを ICMP 応答で飽和させるようにすることができます。 .Vt mbuf を消費し尽くさせることにより、この種の攻撃でサーバを クラッシュさせることも可能です。サーバの ICMP 応答生成が速過ぎて、 ICMP 応答の送信が追い付かない場合、とくにひどいことになります。 .Fx カーネルには、この種の攻撃の効果を抑制する .Dv ICMP_BANDLIM と呼ばれる新しいコンパイルオプションがあります。 3つめの主要なクラスに属す踏み台攻撃は、UDP echo サービスのような、 ある種の内部 .Xr inetd 8 サービスに関連するものです。攻撃者は、単に ソースアドレスがサーバ A の echo ポートであり、ディスティネーション アドレスがサーバ B の echo ポートであるかのように UDP パケットを 偽造します。ここでサーバ A, B はともに自分の LAN に接続されています。 この 2 つのサーバは、この一つのパケットを両者の間で互いに相手に対して 打ち返しあいます。このようにしてパケットをいくつか注入するだけで、 攻撃者は両方のサーバと LAN を過負荷状態にすることができます。 同様の問題が内部 chargen ポートにも存在します。有能なシステム管理者は この手の .Xr inetd 8 内部テストサービスのすべてを無効にしておくものです。 .Pp 偽造パケット攻撃は、カーネルの経路情報キャッシュに過負荷を生じさせるために 用いられることもあります。 .Va net.inet.ip.rtexpire , net.inet.ip.rtminexpire , net.inet.ip.rtmaxcache の .Xr sysctl 8 パラメータを参照して下さい。でたらめなソース IP を用いた この偽造パケット攻撃により、カーネルは、一時的なキャッシュ経路を 経路情報テーブルに生成します。これは .Dq Li "netstat -rna | fgrep W3" . で見ることができます。これらの経路は、普通は 1600 秒程度でタイムアウトに なります。カーネルがキャッシュ経路テーブルが大きくなり過ぎたことを 検知すると、カーネルは動的に .Va rtexpire を減らしますが、 .Va rtminexpire より小さくなるようには決して減らしません。ここに問題が 2 つあります。 (1) 負荷の軽いサーバが突然攻撃された場合、カーネルが十分素早く反応 できないこと。(2) カーネルが攻撃に耐え生き延びられるほど十分 .Va rtminexpire が低く設定されていないこと。の 2 つです。 自分のサーバが T3 もしくはそれより 良質の回線でインターネットに接続されている場合、 .Xr sysctl 8 を用いて .Va rtexpire と .Va rtminexpire とを手動で上書きしておくことが思慮深いこと といえます。 (自分のマシンをクラッシュさせたくないのであれば :-)) どちらか一方でも 0 に は決してしないで下さい。両パラメータを 2 秒に設定すれば、 攻撃から経路情報テーブルを守るには十分でしょう。 .Sh Kerberos および SSH を用いたアクセスの問題 もしあなたが、Kerberos および SSH を使用したいのだとしたら、両者に関して 言っておく必要のある問題がいくつかあります。 Kerberos5 は大変優れた認証プロトコルですが、kerberos 化された .Xr telnet 1 や .Xr rlogin 1 は、バイナリストリームを扱うのに不向きになってしまうようなバグがあります。 さらに、デフォルトでは、Kerberos は .Fl x オプションを使わない限りセッションを暗号化してくれません。 SSH では、デフォルトですべてを暗号化してくれます。 .Pp SSH はあらゆる場面でとても良く働いてくれます。ただし、 暗号鍵を送ってしまう場合を除けばです。これはつまり、暗号鍵を持った安全な ワークステーションがあって、この暗号鍵で残りのシステムとアクセスできる ようになっている場合では、安全でないマシンへ .Xr ssh 1 を行なう時に暗号鍵が 見えてしまうということです。実際の鍵そのものが見えてしまうわけでは ありませんが、 .Xr ssh 1 は、login している間、配送用ポートを作ります。 攻撃者が安全でないマシンの root を破ると、攻撃者は、 このポートを使って暗号鍵を取得し、暗号鍵でロックの外れる他のマシンへの アクセスを得ます。 .Pp staff のログインには、Kerberos を組み合せた SSH を使用することを勧めます。 SSH は、Kerberos と一緒にコンパイルできます。こうすると、見えて しまうかもしれない SSH 鍵をあまりあてにしないで良いようになります。 また、それと同時に、Kerberos 経由でパスワードを保護することもできます。 SSH 鍵は、安全なマシンからの自動化されたタスク (Kerberos では不向きな ものなど ) 用のみに使用するべきです。また、SSH の設定で SSH 鍵を送らないようにするか、あるいは、 .Pa authorized_keys ファイル中で .Va from Ns = Ns Ar IP/DOMAIN オプションを使用して、特定のマシンからログインしてきたもののみに 有効になる鍵を SSH が生成できるようにすることも勧めます。 .Sh 関連項目 .Xr chflags 1 , .Xr find 1 , .Xr md5 1 , .Xr netstat 1 , .Xr openssl 1 , .Xr ssh 1 , .Xr xdm 1 , .Xr group 5 , .Xr ttys 5 , .Xr accton 8 , .Xr init 8 , .Xr sshd 8 , .Xr sysctl 8 , .Xr syslogd 8 , .Xr vipw 8 .Sh 歴史 .Nm マニュアルページは、もともと .An Matthew Dillon によって書かれ、 1998 年 12 月に .Fx 3.1 ではじめて登場しました。 .\" translated by Norihiro Kumagai, 98-12-29 diff --git a/ja_JP.eucJP/man/man8/lptcontrol.8 b/ja_JP.eucJP/man/man8/lptcontrol.8 index 3a2dc1b7f5..2b937d896f 100644 --- a/ja_JP.eucJP/man/man8/lptcontrol.8 +++ b/ja_JP.eucJP/man/man8/lptcontrol.8 @@ -1,86 +1,87 @@ .\" .\" lptcontrol - a utility for manipulating the lpt driver .\" .\" 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. .\" .\" %FreeBSD: src/usr.sbin/lptcontrol/lptcontrol.8,v 1.20.2.2 2005/02/27 15:40:17 brueffer Exp % .\" .\" $FreeBSD$ .Dd February 22, 2005 .Dt LPTCONTROL 8 .Os .Sh 名称 .Nm lptcontrol .Nd lpt プリンタドライバ操作ユーティリティ .Sh 書式 .Nm .Fl e | i | p | s .Op Fl d Ar control_device .Sh 解説 .Nm ユーティリティは、各 .Xr lpt 4 デバイスの割り込み駆動モード/拡張モード/標準モード/ ポーリングモードを設定するために用いられます。 プリンタがあるモードから別のモードへ切り替えられると、 その切り替えは次回デバイスがオープンされたときに有効になります。 .Pp 拡張モードとは、パラレルポートインタフェースがサポート可能な任意のものです。 ECP/ISA パラレルポートにおいては、FIFO+DMA または ECP でしょう。 .Pp 以下のコマンドラインオプションがサポートされています: .Bl -tag -width indent .It Fl e 拡張モードにします。 .It Fl i 割り込み駆動モードにします。 .It Fl p ポーリングモードにします。 .It Fl s 標準モードにします。 すなわち、拡張モードをオフにします。 .It Fl d Ar control_device .Ar control_device で指定されたプリンタ制御デバイスのモードを設定します。 .Ar control_device のデフォルト値は .Pa /dev/lpt0 です。 .El .Pp .Fl e , i , p , s のいずれか 1 つを必ず指定しなければなりません。 .Sh 関連ファイル .Bl -tag -width /sys/i386/conf/GENERIC -compact .It Pa /dev/lpt? プリンタデバイス。 .It Pa /dev/lpt?.ctl プリンタ制御デバイス。 .It Pa /sys/i386/conf/GENERIC カーネル設定ファイル。 .It Pa /boot/device.hints パラレルポートチップセットドライバ .Xr ppc 4 用のデバイスヒント。 .El .Sh バグ -制御デバイス名はオプションではなく、オプションの引数とすべきです。 -こうすれば、引数 1 つはデバイス名として扱われます。 +制御デバイスのデバイス名は、本来オプション引数で指定されるべきもの +だったのですが、オプションで指定するようになっています。 +そのためオプション引数が1個だった場合、それはデバイス名として解釈されます。 .Sh 関連項目 .Xr lpt 4 , .Xr ppc 4 , .Xr device.hints 5 .Sh 作者 .An Geoffrey M. Rehmet .Sh 歴史 .Nm ユーティリティは .Fx 1.1.5 ではじめて登場しました。 diff --git a/ja_JP.eucJP/man/man8/mknod.8 b/ja_JP.eucJP/man/man8/mknod.8 index c18da998c6..605d1b04af 100644 --- a/ja_JP.eucJP/man/man8/mknod.8 +++ b/ja_JP.eucJP/man/man8/mknod.8 @@ -1,151 +1,151 @@ .\" Copyright (c) 1980, 1991, 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. .\" 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. .\" .\" @(#)mknod.8 8.2 (Berkeley) 12/11/93 .\" %FreeBSD: src/sbin/mknod/mknod.8,v 1.29.2.1 2005/03/01 09:21:24 jkoshy Exp % .\" .\" $FreeBSD$ .\" .Dd March 1, 2005 .Dt MKNOD 8 .Os .Sh 名称 .Nm mknod .Nd 特殊ファイルを作成する .Sh 書式 .Nm .Ar name .Op Cm c | Cm b .Ar major minor .Op Ar owner : Ns Ar group .Sh 解説 .Bf -symbolic .Nm ユーティリティは最新の .Fx システムでは価値が低下しています。 .Ef .Pp .Nm ユーティリティはデバイス特殊ファイルを作成します。 手動でノードを作成するには、以下の 4 つの引数が必要です。 .Pp .Bl -tag -width indent .It Ar name デバイスファイル名です。 たとえば .Dq sd は SCSI ディスクで、 .Dq pty は疑似端末です。 .It Cm b | Cm c デバイスのタイプを指定します。 ブロック型のデバイスは、 .Cm b を指定します。 テープやディスク等がこれに該当しますが、 ブロック型特殊デバイス (cooked) とキャラクタ型特殊デバイス (raw) の 両方の特殊ファイルが必要です。 キャラクタ型のデバイスは、 .Cm c を指定します。 端末や疑似デバイス等がこれに該当します。 .It Ar major メジャーデバイス番号を指定します。 メジャーデバイス番号は、 どのデバイスドライバエントリを使用すべきをカーネルに示します。 メジャーデバイス番号とデバイスの対応を知るには、 .Pa /usr/src/sys/conf/majors を見てください。 .It Ar minor マイナデバイス番号を指定します。 マイナデバイス番号は、 デバイスのどのサブユニットが 特殊ファイルに対応するのかをカーネルに示します。 例えば、サブユニットは ファイルシステムのパーティションだったり端末ラインだったりします。 .It Ar owner : Ns Ar group .Ar owner .Ar group オペランドの組はオプションですが、 どちらかが指定された場合には両方の指定が必要です。 .Ar owner は数値のユーザ ID でもユーザ名でも良いです。 そのユーザ名が数値のユーザ ID にもある場合には、 オペランドはユーザ名として使用されます。 .Ar group は数値のグループ ID でもグループ名でも良いです。 ユーザ名と同様、 そのグループ名が数値のグループ ID にもある場合には、 オペランドはグループ名として使用されます。 .El .Pp メジャーデバイス番号およびマイナデバイス番号とも .Xr strtoul 3 が受け付ける任意の形式で指定可能です。 .Ql 0x で始めることにより 16 進数と、 .Ql 0 で始めることにより 8 進数であると解釈させる事が出来ます。 .Pp .Nm ユーティリティは、 .Xr devfs 5 マウントポイントの下で、ダミーの引数を使って呼び出すことで 削除されたデバイスノードを再作成するのに使えます。 例: .Pp .Dl "mknod cd0 c 0 0" .Pp ここで .Dq Li cd0 は削除されたデバイスノードの名前です。 .Sh 互換性 .Xr chown 8 のような機能は .Fx 固有です。 .Pp .Fx 4.0 -では、 -ブロックデバイスの価値が下がり、キャラクタデバイスが使われるようになりました。 +の時点でブロックデバイスは廃止され、その機能は +キャラクタデバイスに置き換えられました。 .Fx 5.0 では、デバイスノードはデバイスファイルシステム .Xr devfs 5 で管理されるので、 .Nm -ユーティリティは不必要になりました。 +ユーティリティは不要になりました。 .Sh 関連項目 .Xr mkfifo 1 , .Xr mknod 2 , .Xr devfs 5 , .Xr chown 8 .Sh 歴史 .Nm ユーティリティは .At v6 で登場しました。 diff --git a/ja_JP.eucJP/man/man8/moused.8 b/ja_JP.eucJP/man/man8/moused.8 index 519e3bfc7c..5e2edd397e 100644 --- a/ja_JP.eucJP/man/man8/moused.8 +++ b/ja_JP.eucJP/man/man8/moused.8 @@ -1,687 +1,686 @@ .\" Copyright (c) 1996 .\" Mike Pritchard . 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 Mike Pritchard. .\" 4. Neither the name of the author 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 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/usr.sbin/moused/moused.8,v 1.46.2.2 2005/02/27 15:40:17 brueffer Exp % .\" .\" $FreeBSD$ .Dd April 1, 2000 .Dt MOUSED 8 .Os .Sh 名称 .Nm moused .Nd マウスデータをコンソールドライバに渡す .Sh 書式 .Nm .Op Fl DPRacdfs .Op Fl I Ar file .Op Fl F Ar rate .Op Fl r Ar resolution .Op Fl S Ar baudrate .Op Fl V Op Fl U Ar distance .Op Fl a Ar X Ns Op , Ns Ar Y .Op Fl C Ar threshold .Op Fl m Ar N=M .Op Fl w Ar N .Op Fl z Ar target .Op Fl t Ar mousetype .Op Fl l Ar level .Op Fl 3 Op Fl E Ar timeout .Fl p Ar port .Pp .Nm .Op Fl Pd .Fl p Ar port .Fl i Ar info .Sh 解説 .Nm ユーティリティとコンソールドライバは協力し、 テキストコンソールやユーザプログラムにおけるマウス操作をサポートします。 マウスの仮想化とユーザプログラムへのマウスデータの提供は標準フォーマット にて行われます .Pf ( Xr sysmouse 4 を御覧ください)。 .Pp マウスデーモンはマウスデータの読みとりのために指定されたポートを監視し、 解釈したデータを ioctl を介してコンソールドライバに渡します。 マウスデーモンは、移動、ボタンの押し/離しイベント、 存在するならばローラやホイールの移動も報告します。 ローラ/ホイールの移動は ``Z'' 軸での移動として報告されます。 .Pp マウスポインタが .Xr vidcontrol 1 によって有効にされていれば、 コンソールドライバはマウスポインタをスクリーンに表示し、 カットとペーストの機能を提供します。 .Xr sysmouse 4 をユーザプログラムがオープンすると、コンソールドライバは マウスデータをこのデバイスに送るので、 ユーザプログラムはこのデータを使用できます。 .Pp マウスデーモンがシグナル .Dv SIGHUP を受けとると、マウスポートを再オープンし、自己を再初期化します。 システムがサスペンドされている間にマウスの挿抜を行なった場合に有用です。 .Pp 以下のオプションがあります: .Bl -tag -width indent .It Fl 3 2 ボタンマウスで 3 番目(中)のボタンをエミュレートします。 物理的なボタンで左と右のものを同時に押すとエミュレートされます。 .It Fl C Ar threshold ダブルクリック速度をボタンクリック間最大インターバルとしてミリ秒で指定します。 このオプションを指定しないと、デフォルト値は 500 ミリ秒が仮定されます。 このオプションは、 テキストモードコンソールのカットとペーストの操作においてのみ有効です。 .Xr sysmouse 4 を介してマウスデータを得るユーザプログラムは影響を受けません。 .It Fl D シリアルポートの DTR を下げます。 このオプションが有効なのは、 .Ar mousesystems がマウスプロトコルとして選択されている場合のみです。 .Ar mousesystems モードで 3 ボタンマウスを操作するためには、 DTR ラインを落とすことが必要かもしれません。 .It Fl E Ar timeout 第 3 ボタンエミュレーション (前述) が有効なとき、2 つのボタンが同時に押されたかを判定する前に .Nm ユーティリティは最長 .Ar timeout ミリ秒待ちます。 デフォルトのタイムアウトは 100 ミリ秒です。 .It Fl F Ar rate サポートされていれば、デバイスのレポート頻度(秒あたりの回数)を設定します。 .It Fl I Ar file .Nm ユーティリティのプロセス ID を、指定されたファイルに書きます。 このオプションを指定しないと、プロセス ID は .Pa /var/run/moused.pid に格納されます。 .It Fl P シリアルマウス識別時に、 プラグアンドプレイ COM デバイス列挙処理を開始しません。 .Fl i オプションと共にこのオプションが指定された場合、 .Nm ユーティリティはシリアルマウスに関する有用な情報を表示できません。 .It Fl R シリアルポートの RTS を下げます。 このオプションが有効なのは .Ar mousesystems がプロトコルタイプとして、後述する .Fl t オプションで指定されている場合のみです。 これは前記 .Fl D オプションと共によく使用されます。 .Ar mousesystems モードで 3 ボタンマウスを操作するためには、 RTS と DTR のラインを共に下げる必要があるかもしれません。 .It Fl S Ar baudrate シリアルポートの速度を指定します (1200 から 9600)。 全シリアルマウスがこのオプションをサポートするわけではありません。 .It Fl V ``仮想スクロール'' を有効にします。このオプションが設定されている場合、 -中マウスボタンを押していると、動きがスクロールと解釈されるようになります。 -.\" スクロールモードが有効になる前に +マウスの中ボタンを押し続けていると、動きがスクロールと解釈されるようになります。 スクロールモードを有効にするために マウスが動かなければならない距離を設定するには .Fl U -オプションを使って下さい。 +オプションを使います。 .It Fl a Ar X Ns Op , Ns Ar Y マウスの入力を加速または減速します。 線型加速のみです。 1.0 より小さい値は、しばらく減速します。 1.0 より大きい値は、加速します。 1 個の値だけを指定した場合、両方の座標軸での加速を設定します。 .It Fl c マウスによっては、中ボタンを押したイベントを、 左右ボタンが押されたかのようにレポートするものがあります。 このオプションはこれを扱うものです。 .It Fl d デバッグ用のメッセージを有効にします。 .It Fl f デーモンにならずに、フォアグラウンドプロセスとして実行します。 テストやデバッグに有用です。 .It Fl i Ar info 指定された情報を表示し終了します。 指定可能な情報を以下に示します: .Pp .Bl -tag -compact -width modelxxx .It Ar port ポート(デバイスファイル)名、例えば .Pa /dev/cuaa0 , .Pa /dev/mse0 , .Pa /dev/psm0 です。 .It Ar if インタフェースタイプ: serial, bus, inport, ps/2 です。 .It Ar type プロトコルタイプ。 .Fl t オプションの説明の後でリストされているものか、 ドライバが .Ar sysmouse データフォーマット標準をサポートする場合には .Ar sysmouse です。 .It Ar model マウスモデル。 .Nm ユーティリティは常にモデルを識別できるわけではありません。 .It Ar all 上記全部。 ポート、インタフェース、タイプ、モデルをこの順に一行に表示します。 .El .Pp .Nm ユーティリティは要求された情報を判別できない場合、 ``unknown'' か ``generic'' を表示します。 .It Fl l Ar level .Nm がどのレベルでマウスドライバを動作させるか指定します。 より詳しいことは .Xr psm 4 の .Sx 動作レベル を参照して下さい。 .It Fl m Ar N=M 物理ボタン .Ar M に論理ボタン .Ar N を割当てます。 このオプションは任意個数指定可能です。 複数の物理ボタンを単一の論理ボタンに割り当て可能です。 この場合、指定された物理ボタンのいずれかが押されている場合、 論理ボタンが押されていることになります。 \`=' の周りにスペースを入れてはなりません。 .It Fl p Ar port マウスと通信するためのポートとして .Ar port を使います。 .It Fl r Ar resolution デバイスの解像度を設定します; インチあたりのドット数または、 .Ar low , .Ar medium-low , .Ar medium-high , .Ar high のいずれかです。 全デバイスにてこのオプションがサポートされているわけではありません。 .It Fl s シリアルラインのために 9600 ボーを選びます。 全シリアルマウスがこのオプションをサポートしているわけではありません。 .It Fl t Ar type ポートに接続されているマウスのプロトコルタイプを指定します。 以下に列挙されるタイプを陽に指定するか、 .Ar auto を指定して .Nm ユーティリティに適切なプロトコルを自動選択させることができます。 コマンドラインにてこのオプションを指定しないと、 .Fl t Ar auto が仮定されます。 通常では、 .Nm -ユーティリティがプロトコルの自動検出ができない場合に必要です +ユーティリティがプロトコルの自動検出をできない場合に必要です .Pf ( Sx マウスデーモンの構成 ) を参照。 .Pp このオプションでプロトコルタイプを指定した場合、 前記 .Fl P オプションが暗示され、プラグアンドプレイ COM デバイス列挙処理が無効になります。 .Pp また、マウスを PS/2 マウスポートに接続している場合、 常に .Ar auto か .Ar ps/2 を選択すべきです。 これは、マウスのブランドやモデルとは関係ありません。 同様に、マウスをバスマウスポートに接続している場合、 .Ar auto か .Ar busmouse を選択してください。 これらのマウスではシリアルマウスプロトコルは動作しません。 .Pp USB マウスでは、プロトコルは .Ar auto であることが必要です。他のプロトコルは USB マウスで動作しません。 .Pp このオプションにおける有効なタイプを以下に列挙します。 .Pp シリアルマウス: .Bl -tag -compact -width mousesystemsxxx .It Ar microsoft Microsoft シリアルマウスプロトコル。 大抵の 2 ボタンマウスはこのプロトコルを使用します。 .It Ar intellimouse Microsoft IntelliMouse プロトコル。 Genius NetMouse, .Tn ASCII Mie Mouse, Logitech MouseMan+, FirstMouse+ もこのプロトコルを使用します。 他のローラ/ホイールを持つマウスもこのプロトコル互換でしょう。 .It Ar mousesystems MouseSystems の 5 バイトプロトコル。 3 ボタンマウスはこのプロトコルを使用するかもしれません。 .It Ar mmseries MM Series マウスプロトコル。 .It Ar logitech Logitech マウスプロトコル。 これは古い Logitech モデルであることに注意。 新しいモデルには .Ar mouseman もしくは .Ar intellimouse を指定します。 .It Ar mouseman Logitech MouseMan と TrackMan のプロトコル。 3 ボタンマウスによってはこのプロトコル互換かもしれません。 MouseMan+ と FirstMouse+ は、このプロトコルではなく、 .Ar intellimouse プロトコルを使用します .It Ar glidepoint ALPS GlidePoint プロトコル。 .It Ar thinkingmouse Kensington ThinkingMouse プロトコル。 .It Ar mmhitab Hitachi タブレットプロトコル。 .It Ar x10mouseremote X10 MouseRemote。 .It Ar kidspad Genius の Kidspad と Easypad のプロトコル。 .It Ar versapad Interlink VersaPad プロトコル。 .El .Pp バスおよび InPort マウス: .Bl -tag -compact -width mousesystemsxxx .It Ar busmouse バスおよび InPort マウスはこのプロトコルのみ使用可能であり、 バスおよび InPort マウスはブランドに依らずこのオプションを 指定する必要があります。 .El .Pp PS/2 マウス: .Bl -tag -compact -width mousesystemsxxx .It Ar ps/2 PS/2 マウスはこのプロトコルのみ使用可能であり、 PS/2 マウスはブランドに依らずこのオプションを 指定する必要があります。 .El .Pp USB マウスでは、 .Ar auto が使用可能な唯一のプロトコルであり、 ブランドにかかわらず USB マウスにはこれを指定すべきです。 .It Fl w Ar N 物理ボタン .Ar N が、ホイールモードボタンとして動作するようにします。 このボタンが押されている間、X 軸および Y 軸の移動は 0 と報告され、 Y 軸の移動は Z 軸の移動に割り付けられます。 後述する .Fl z オプションを使用することにより、 Z 軸の移動を更に仮想ボタンに割り付けることができます。 .It Fl z Ar target Z 軸(ローラ/ホイール)動作を別の軸や仮想ボタンに割り付けます。 有効な .Ar target は以下のいずれかです: .Bl -tag -compact -width x__ .It Ar x .It Ar y X または Y 軸の移動として、検知した Z 軸移動を報告します。 .It Ar N 仮想ボタン .Ar N および .Ar N+1 を押したイベントとして、検知した負/正の Z 軸移動をそれぞれ報告します。 物理ボタン .Ar N と .Ar N+1 が存在する必要はありません。 論理ボタンへの割り付けは Z 軸移動を仮想ボタンへ割り付けた後に行われます。 .It Ar N1 N2 仮想ボタン .Ar N1 および .Ar N2 を押したイベントとして、検知した負/正の Z 軸移動をそれぞれ報告します。 .It Ar N1 N2 N3 N4 2 個のホイールがあり 2 番目のホイールが水平スクロール動作を生成するために使用されるマウス、 およびユーザが加えた水平の力を検知するノブまたはスティック付きのマウスで 有用です。 .Pp 2 番目のホイールの動きは、負の向きが .Ar N3 にマップされ、正の向きが .Ar N4 にマップされます。 ボタン .Ar N3 および .Ar N4 がマウスに実在する場合、このアクションは検出されません。 .Pp 水平移動や 2 番目のローラ/ホイールの動きは常に検出されるわけではないことに 注意してください。 なぜなら、 これらをエンコードするための受け入れられた標準が無いように見えるからです。 .Pp また、水平方向において、左が負であると考えるマウスもいれば、 逆だと考えるマウスもいることにも注意してください。 更に、2 個のホイールが両方とも垂直に搭載されており、 一方の方向がもう一方の方向とはマッチしないものもあります。 .El .El .Ss マウスデーモンの構成 まず、使用予定マウスのインタフェースタイプを知ることが必要です。 これはマウスのコネクタを見れば分かります。 シリアルマウスは D-Sub の 9 ピンまたは 25 ピンのメスです。 バスおよび InPort のマウスは D-Sub 9 ピンのオスか丸い DIN 9 ピンコネクタです。 PS/2 マウスは小さくて丸い DIN 6 ピンコネクタです。 マウスによってはコネクタを別の形状に変換可能なコネクタが附属しています。 このようなアダプタを使用する場合には、 マウスから一番遠いコネクタの形状を見てください。 USB マウスは、平らな長方形のコネクタを持ちます。 .Pp 次に決めねばならないことは、インタフェースのために使用するポートです。 バス、InPort、PS/2 マウスでは、選択肢はありません: バスおよび InPort マウスは常に .Pa /dev/mse0 を使用し、 PS/2 マウスは常に .Pa /dev/psm0 を使用します。 シリアルマウスの場合、接続可能なポートが複数ありえます。 多くの人が組み込みのシリアルポート .Pa /dev/cuaa0 をマウスに割当てます。 複数の USB マウスをシステムまたは USB ハブに接続可能です。 それらは .Pa /dev/ums0 , /dev/ums1 のようにアクセス可能です。 .Pa シンボリックリンク .Pa /dev/mouse でマウスの実際のポートを指すようにして、 どのマウスポートか後で簡単に分かるようにするのが良いかもしれません。 .Pp 次に適切なマウスプロトコルを選択します。 .Nm ユーティリティはマウスタイプを自動決定可能かもしれません。 .Nm ユーティリティを .Fl i オプションを付けて実行し、表示を見ます。 コマンドがプロトコルタイプを識別した場合、あなたは何も調べる必要はありません。 プロトコルタイプを指定せずにデーモンを起動可能です .Pf ( Sx 使用例 ) を参照。 .Pp コマンドは、マウスドライバが .Ar sysmouse プロトコルをサポートする場合、 .Ar sysmouse と表示するかもしれません。 .Pp .Fl i オプションで表示される .Dv type と .Dv model は、対象のポインティングデバイスの製品名では必ずしもありませんが、 互換性のあるデバイスの名前でしょう。 .Pp .Fl i オプションがなにも表示しない場合、 .Nm ユーティリティに対して .Fl t オプションを使用し、プロトコルタイプを指定する必要があります。 予測して試行する必要があります。 以下に経験則を示します: .Pp .Bl -enum -compact -width 1.X .It バスおよび InPort マウスはブランドに依らず .Ar busmouse プロトコルを使用します .It PS/2 マウスはブランドに依らず .Ar ps/2 プロトコルを使用します .It USB マウスには .Ar auto プロトコルを指定する必要があります。 .It ほとんどの 2 ボタンシリアルマウスは .Ar microsoft プロトコルをサポートします。 .It 3 ボタンシリアルマウスは .Ar mousesystems プロトコルで動作するかもしれません。動作しない場合には、 三番目(中)ボタンが機能せずに .Ar microsoft プロトコルで動作するでしょう。 3 ボタンシリアルマウスは、期待通り三番目のボタンが動作しつつ .Ar mouseman プロトコルで動作するかもしれません。 .It 3 ボタンマウスには小さなスイッチが付いていて、 ``MS'' と ``PC'' または ``2'' と ``3'' とで選択できるようになっている かもしれません。 ``MS'' と ``2'' は通常 .Ar microsoft プロトコルを意味します。 ``PC'' と ``3'' は .Ar mousesystems プロトコルを選択します。 .It マウスにローラやホイールが付いている場合、 .Ar intellimouse プロトコル互換でしょう。 .El .Pp マウスのために選択したプロトコルタイプが正しいかどうかテストする目的で、 現在の仮想コンソールでマウスポインタを有効にします。 .Pp .Dl vidcontrol -m on .Pp マウスデーモンをフォアグラウンドで開始します。 .Pp .Dl moused -f -p Ar _selected_port_ -t Ar _selected_protocol_ .Pp マウスポインタがマウスの移動に伴い、 正しく移動することを確認してください。 そして、カットとペーストの機能を左、右、中のボタンを使用して確認してください。 ^C をタイプすると、コマンドは停止します。 .Ss 複数のマウス システムに接続したマウスと同じ数だけ、マウスデーモンを同時実行可能です; 一つのマウスデーモンが一つのマウスに対応します。 ラップトップコンピュータ組み込みの PS/2 ポインティングデバイスを移動中使用し、 オフィスではドッキングステーション接続のシリアルマウスを使用する 場合に有用です。 マウスデーモンを二つ実行し、アプリケーションプログラム (例えば .Tn "X\ Window System" ) に .Xr sysmouse 4 を使用させます。 するとアプリケーションプログラムは常に両マウスからマウスデータを受け取ります。 シリアルマウスが取り付けられていない場合、 対応するマウスデーモンは移動やボタン状態の変化を検出しませんので、 アプリケーションプログラムは PS/2 マウスのデーモンからのマウスデータ のみを使います。 一方この構成で両方のマウスを接続し同時に両方を動かした場合、 マウスの移動をすべて組み合わせたようにマウスポインタがスクリーン上を移動します。 .Sh 関連ファイル .Bl -tag -width /dev/consolectl -compact .It Pa /dev/consolectl コンソール制御デバイス .It Pa /dev/mse%d バスおよび InPort マウスのドライバ .It Pa /dev/psm%d PS/2 マウスドライバ .It Pa /dev/sysmouse 仮想化されたマウスドライバ .It Pa /dev/ttyv%d 仮想コンソール .It Pa /dev/ums%d USB マウスドライバ .It Pa /var/run/moused.pid 現在実行中の .Nm ユーティリティのプロセス ID .It Pa /var/run/MouseRemote X10 MouseRemote のイベントのための UNIX ドメインストリームソケット .El .Sh 使用例 .Dl moused -p /dev/cuaa0 -i type .Pp .Nm ユーティリティにシリアルポート .Pa /dev/cuaa0 に接続されたマウスのプロトコルタイプを識別させます。 成功すると、コマンドはタイプを表示しますが、 失敗すると ``unknown'' が表示されます。 .Pp .Dl moused -p /dev/cuaa0 .Dl vidcontrol -m on .Pp .Nm ユーティリティが指定されたポートのマウスプロトコルタイプを識別可能な場合、 .Fl t オプション無してデーモンを起動可能であり、 前記のようにマウスポインタをテキストコンソール上で有効にできます。 .Pp .Dl moused -p /dev/mouse -t microsoft .Dl vidcontrol -m on .Pp シリアルポート .Pa /dev/mouse に対してマウスデーモンを起動します。 プロトコルタイプは .Ar microsoft を .Fl t オプションにて陽に指定しています。 .Pp .Dl moused -p /dev/mouse -m 1=3 -m 3=1 .Pp 物理ボタン 3 (右ボタン) を論理ボタン 1 (論理的に左) に、 物理ボタン 1 (左ボタン) を論理ボタン 3 (論理的に右) に、 それぞれ割当てます。 左右のボタンを事実上交換します。 .Pp .Dl moused -p /dev/mouse -t intellimouse -z 4 .Pp Z 軸 (例えばマウスホイール) における負の移動をボタン 4 が押されたものとし、 Z 軸 (例えばマウスホイール) における正の移動をボタン 5 が押されたものとします。 .Sh 警告 .Nm ユーティリティは現在別のコンソールドライバ .Xr pcvt 4 では動作しません。 .Pp パッドデバイスの多くは、 ユーザがパッド表面を ``タップ'' した場合に最初の(左) ボタンが 押されたものとします。 また、ALPS GlidePoint および Interlink VersaPad のモデルによっては、 タップ動作を 4 番目のボタンのイベントとして扱います。 このようなモデルでは、オプション ``-m 1=4'' を使用して、 他のパッドデバイスと同様の効果を得られます。 .Pp 仮想コンソールでのカットとペーストの機能は、 マウスに 3 ボタンあることを仮定しています。 論理ボタン 1 (論理的に左) は、 コンソールのテキスト領域を選択してカットバッファにコピーします。 論理ボタン 3 (論理的に右) は、 選択された領域を拡張します。 論理ボタン 2 (論理的に中) は、 選択されたテキストをテキストカーソル位置にペーストします。 マウスに 2 つしかボタンが無い場合、中央の `ペースト' ボタン は使用できません。 ペースト機能を使用するためには、 .Fl 3 オプションを使用して中ボタンをエミュレートするか、 .Fl m オプションを ``-m 2=3'' のように使用して 物理右ボタンに論理中ボタンを割当てます。 .Sh 関連項目 .Xr kill 1 , .Xr vidcontrol 1 , .Xr keyboard 4 , .Xr mse 4 , .Xr pcvt 4 , .Xr psm 4 , .Xr screen 4 , .Xr sysmouse 4 , .Xr ums 4 .Sh 規格 .Nm ユーティリティは .Dq Plug and Play External COM Device Specification の一部を サポートし、PnP シリアルマウスをサポートします。 しかしながら、シリアルマウスごとに仕様充足の度合が異なりますので、 標準のバージョン 1.0 に完全に従ってはいません。 このように厳密さを欠いた方法でも、シリアルマウスの適切なプロトコルタイプ を常に決定できるわけではありません。 .Sh 作者 .An -nosplit .Nm ユーティリティは、 .An Michael Smith Aq msmith@FreeBSD.org によって書かれました。 このマニュアルページは .An Mike Pritchard Aq mpp@FreeBSD.org によって書かれました。 コマンドとマニュアルページを、 .An Kazutaka Yokota Aq yokota@FreeBSD.org が更新しました。 .Sh 歴史 .Nm ユーティリティは、 .Fx 2.2 ではじめて登場しました。 diff --git a/ja_JP.eucJP/man/man8/rc.subr.8 b/ja_JP.eucJP/man/man8/rc.subr.8 index 4b96907ebf..017bc3d1a7 100644 --- a/ja_JP.eucJP/man/man8/rc.subr.8 +++ b/ja_JP.eucJP/man/man8/rc.subr.8 @@ -1,783 +1,786 @@ .\" %NetBSD: rc.subr.8,v 1.12 2004/01/06 00:52:24 lukem Exp % .\" .\" Copyright (c) 2002-2004 The NetBSD Foundation, Inc. .\" All rights reserved. .\" .\" This code is derived from software contributed to The NetBSD Foundation .\" by Luke Mewburn. .\" .\" 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 FOUNDATION 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/man8/rc.subr.8,v 1.6 2004/07/09 10:08:03 ru Exp % .\" .\" $FreeBSD$ .Dd January 6, 2004 .Dt RC.SUBR 8 .Os .Sh 名称 .Nm rc.subr .Nd システムシェルスクリプトで使用する関数群 .Sh 書式 .Bl -item -compact .It .Ic .\& Pa /etc/rc.subr .Pp .It .Ic backup_file Ar action Ar file Ar current Ar backup .It .Ic checkyesno Ar var .It .Ic check_pidfile Ar pidfile Ar procname Op Ar interpreter .It .Ic check_process Ar procname Op Ar interpreter .It .Ic debug Ar message .It .Ic err Ar exitval Ar message .It .Ic force_depend Ar name .It .Ic info Ar message .It .Ic load_rc_config Ar command .It .Ic mount_critical_filesystems Ar type .It .Ic rc_usage Ar command ... .It .Ic reverse_list Ar item ... .It .Ic run_rc_command Ar argument .It .Ic run_rc_script Ar file Ar argument .It .Ic set_rcvar Op Ar base .It .Ic wait_for_pids Op Ar pid ... .It .Ic warn Ar message .El .Sh 解説 .Nm スクリプトは、 .Xr rc 8 -のような様々なスクリプトから利用される、一般的に使用する +のような様々なスクリプトから共通に利用される シェルスクリプト関数や変数定義を含んでいます。 また ports が要求する .Pa /usr/local/etc/rc.d 内のスクリプトも、やがては本スクリプトを使用するように 書き換えられるでしょう。 .Pp .Nm -の関数群は、大部分が +の関数群は大部分が .Nx -から取り込まれたものであり、またそれらは二つのプロジェクト間で同期できるように +から取り込まれたものであり、またそれらは二つのプロジェクト間で同期を +とり続けられるように 考えられています。 -そのことを考慮した、役に立ついくつかの変数定義があります: +これを念頭において、この点に関して助けとなる変数定義がいくつかあります: .Bl -tag -width 4n .It Va OSTYPE この値は .Qq Li FreeBSD か .Qq Li NetBSD のどちらかで、実行されている OS によります。 .It Va SYSCTL .Xr sysctl 8 コマンドのパス。 .It Va SYSCTL_N .Ar name Ns = Ns Ar value -ペアとしてではなく、 +のペアとしてではなく、 .Xr sysctl 8 -変数のみを表示する際の、パスと引数のリスト。 +値のみを表示する際の、パスと引数のリスト。 .It Va SYSCTL_W .Xr sysctl 8 -変数を設定または変更する際の、パスと引数。 +値を設定または変更する際の、パスと引数。 .El .Pp .Nm -関数群には、カレントシェルで +関数群は、カレントシェルで .Pa /etc/rc.subr -を読み込む事でアクセスできます。 +を読み込むことで利用できるようになります。 .Pp 以下のシェル関数が利用可能です: .Bl -tag -width 4n .It Ic backup_file Ar action file current backup .Ar file のバックアップコピーを .Ar current として作成します。 .Xr rc.conf 5 変数の .Va backup_uses_rcs が .Dq Li YES である場合、以前のバージョンの .Ar current は .Xr rcs 1 を使ってアーカイブします。 -そうでなければ、以前のバージョンの +そうでない場合の、以前のバージョンの .Ar current -は +を .Ar backup として保存します。 .Pp 引数 .Ar action は次のうちのどれかです: .Bl -tag -width ".Cm remove" .It Cm add .Ar file -はこのバックアップ機構によりすぐにバックアップされるか、もしくは再投入されます。 +はこのバックアップ機構により今後バックアップされるようになるか、 +あるいは再度追加されます。 .Ar current が作成され、必要なら、 .Xr rcs 1 ファイルが同様に作成されます。 .It Cm update .Ar file は変更されており、バックアップを取る必要があります。 .Ar current が存在するなら、 .Ar backup にコピーされるか、もしくは .Xr rcs 1 -にチェックされます (リポジトリファイルが古い場合)。 +にチェックインされます (リポジトリファイルが古い場合)。 その後に、 .Ar file が .Ar current にコピーされます。 .It Cm remove .Ar file -はこのバックアップ機構で管理される事はもうありません。 +はこのバックアップ機構で管理されなくなります。 .Xr rcs 1 が使われている場合は、空のファイルがチェックインされて .Ar current は削除されます。 -そうでなければ、 +そうでない場合は、 .Ar current は .Ar backup に移動します。 .El .It Ic checkyesno Ar var .Ar var の値が .Dq Li YES , .Dq Li TRUE , .Dq Li ON , .Ql 1 -ならば、 0 を返します。 +ならば、0 を返します。 .Ar var の値が .Dq Li NO , .Dq Li FALSE , .Dq Li OFF , .Ql 0 -ならば、 1 を返します。 +ならば、1 を返します。 これら以外の値ならば、 .Ar var が正しく設定されていないという警告を出します。 値は大文字 / 小文字を問いません。 .It Ic check_pidfile Ar pidfile procname Op Ar interpreter .Ar pidfile の最初の行の最初の語を解析して PID とし、この PID を持つプロセスが 実行されていて、最初の引数が .Ar procname -とマッチすることを確かめます。 -成功すればマッチした PID を出力し、そうでなければ何もしません。 +にマッチすることを確認します。 +成功すればマッチした PID を出力し、そうでない場合は何もしません。 .Ar interpreter -が与えられれば、 +が与えられた場合、 .Ar procname の最初の行を解析して、 .Pp .Dl "#! interpreter [...]" .Pp という形式であることを確かめます。 そして .Ar interpreter とオプション引数に .Ar procname を追加したものを、検索するプロセス文字列として使用します。 .It Ic check_process Ar procname Op Ar interpreter 最初の引数が .Ar procname -にマッチする、実行されている任意のプロセスの PID を出力します。 +にマッチする、実行されているすべてのプロセスの PID を出力します。 .Ar interpreter は .Ic check_pidfile と同様に扱われます。 .It Ic debug Ar message デバッグメッセージを .Va stderr に表示し、 .Xr logger 1 を使用してシステムログに記録をして、呼び出し元に戻ります。 このエラーメッセージは、スクリプト名 .Va ( $0 より), .Dq Li ": DEBUG: " , -及びこれに続く +およびこれに続く .Ar message で構成されます。 この関数はスクリプトのデバッグの手助けとして、開発者が使用することを 目的にしています。 これは .Xr rc.conf 5 変数の .Va rc_debug により、有効あるいは無効にすることができます。 .It Ic err Ar exitval message エラーメッセージを .Va stderr に表示し、 .Xr logger 1 を使用してシステムログに記録をして、終了値 .Ar exitval で -.Ic 終了します。 +.Ic 終了 +します。 このエラーメッセージは、スクリプト名 .Va ( $0 より), .Dq Li ": ERROR: " , -及びこれに続く +およびこれに続く .Ar message で構成されます。 .It Ic force_depend name 勧告メッセージを出力し、 .Ar name サービスを強制的に起動します。 引数 .Ar name は、通常 .Pa /etc/rc.d/name といったスクリプトのパスの .Xr basename 1 要素です。 スクリプトが何らかの原因で失敗した場合、警告を出力して戻り値 1 を返します。 成功した場合は、戻り値 0 を返します。 .It Ic info Ar message 情報メッセージを .Va stdout に表示し、 .Xr logger 1 を使用してシステムログに記録をします。 このメッセージは、スクリプト名 .Va ( $0 より), .Dq Li ": INFO: " , -及びこれに続く +およびこれに続く .Ar message で構成されます。 この情報出力の表示は .Xr rc.conf 5 変数の .Va rc_info により、有効あるいは無効にすることができます。 .It Ic load_rc_config Ar command .Ar command の設定ファイルを読み込みます。 最初に、 .Pa /etc/rc.conf がまだ読み込まれていなければ、読み込みます。 その後に、ファイル .Pa /etc/rc.conf.d/ Ns Ar command が存在すれば、これを読み込みます。 後者は呼び出しスクリプト側で指定した .Ic run_rc_command 引数を上書きする変数定義を含めることもできます。 これは管理者が任意の .Xr rc.d 8 -スクリプトを編集すること無く、その動作を上書きできる簡易な仕組みを提供します。 +スクリプトを編集することなく、その動作を上書きできる簡易な仕組みを提供します。 .It Ic mount_critical_filesystems Ar type .Xr rc.conf 5 変数の .Va critical_filesystems_ Ns Ar type で定義された重要なファイルシステムの一覧のうち、この時点でマウントされて いないものがあれば、マウントします。 .It Ic rc_usage Ar command ... .Va $0 -の使用方法を、有効な引数の一覧として、 +の使用方法を、有効な引数の一覧である .Ar command -をプレフィックスの +に .Sm off .Dq Bq Li fast | force | one .Sm on -と共に出力します。 +のプレフィックスをつけて出力します。 .It Ic reverse_list Ar item ... .Ar item のリストを逆順で出力します。 .It Ic run_rc_command Ar argument 各種のシェル変数の設定に基づいて、現在の .Xr rc.d 8 スクリプトの、 .Ar argument 処理を実行します。 .Ic run_rc_command はきわめて柔軟性があり、完全に機能する .Xr rc.d 8 スクリプトを小量のシェルコードで記述することができます。 .Pp .Ar argument はサポートされているコマンドから検索され、それは以下のうちのどれかです: .Bl -tag -width ".Cm restart" -offset indent .It Cm start サービスを起動します。 本コマンドは、 .Xr rc.conf 5 の指定によりサービスを起動するべきかをチェックします。 -またサービスが既に実行中で、そのために起動を拒否するかどうかもチェックします。 +またサービスが既に実行中であるかをチェックし、その場合は起動を拒否します。 標準の .Fx スクリプトにおいて、システムが直接マルチユーザモードで起動する場合は、 起動プロセスの高速化のために、後者のチェックは行われません。 .It Cm stop .Xr rc.conf 5 の指定によりサービスが起動していれば、サービスを停止します。 本コマンドはサービスが実行中かどうかをチェックし、そうでない場合、 その旨を表示します。 .It Cm restart .Cm stop の後に、 .Cm start を実行します。 デフォルトでは、 (もし実行中なら) プログラムのプロセス ID を表示します。 .It Cm rcvar -サービスの起動を制御するのに使用する +どの .Xr rc.conf 5 -変数を (もしあれば) 表示します。 +変数がサービスの起動を制御しているか、(もしあれば) 表示します。 .El .Pp .Va pidfile または .Va procname が設定されていれば、以下もサポートされています: .Bl -tag -width ".Cm restart" -offset indent .It Cm poll コマンドが終了するのを待ちます。 .It Cm status -プロセスのステータスを表示します。 +プロセスの状態を表示します。 .El .Pp 他にサポートされているコマンドは、オプション変数の .Va extra_commands に列挙されています。 .Pp .Ar argument はそれ自身の動作を変更する、以下のプレフィックスをつけることができます: .Bl -tag -width ".Li force" -offset indent .It Li fast 実行中のプロセスの有無をチェックしません。 .Va rc_fast Ns = Ns Li YES をセットします。 .It Li force .Va rcvar が .Dq Li YES にセットされているかどうかをチェックしません。 .Va rc_force Ns = Ns Li YES をセットします。 .Ar argument Ns Va _precmd -が非 0 を返しても無視します。 +が非 0 を返したり、 .Va required_* -テストのどれかが失敗しても無視します。 +テストのどれかが失敗したりしても無視します。 また終了ステータスとして常に 0 を返します。 .It Li one .Va rcvar が .Dq Li YES にセットされているかどうかをチェックしません。 しかし他の全ての前提チェックは行います。 .El .Pp .Ic run_rc_command はその動作を制御するために、以下のシェル変数を使用します。 特に明記が無いものは、オプションです。 .Bl -tag -width ".Va procname" -offset indent .It Va name このスクリプトの名称。 これはオプションではありません。 .It Va rcvar .Va rcvar の値は .Ic checkyesno によりチェックされ、この処理を実行するかどうかを判定します。 .It Va command コマンドのフルパス。 -サポートされる各キーワードに対して +サポートされている各キーワードに対して .Ar argument Ns Va _cmd が設定されている場合は、必要ありません。 .It Va command_args -オプション引数、及び / または +オプション引数、および / または .Va command に対するシェルディレクティブ。 .It Va command_interpreter .Va command は .Pp .Dl "#! command_interpreter [...]" という形式で起動されるので、 .Xr ps 1 コマンドの出力は .Pp .Dl "command_interpreter [...] command" .Pp のようになります。 -ですので、この文字列は実行中のコマンドの PID を検索するのに、 +ですので、実行中のコマンドの PID を検索するのに、 .Va command -の代わりに使用します。 +ではなくこの文字列を使用します。 .It Va extra_commands 特別にサポートするコマンド / キーワード / 引数。 .It Va pidfile PID ファイルのパス。 実行中のコマンドの PID を特定するのに使用します。 .Va pidfile -が設定された場合、 PID を検索するのには +が設定された場合、 PID を検索するには .Pp .Dl "check_pidfile $pidfile $procname" .Pp を使用します。 そうでなければ、 .Va command -が設定されている場合、 PID を検索するのには +が設定されている場合、 PID を検索するには .Pp .Dl "check_process $procname" .Pp を使用します。 .It Va procname -チェックする時のプロセス名。 -デフォルトは +チェックする対象プロセス名。 +デフォルトでは .Va command の値です。 .It Va required_dirs -デフォルトの start 処理を実行する前に、これに列挙されたディレクトリの +デフォルトの start 処理を実行する前に、これに列挙された各ディレクトリの 存在をチェックします。 .It Va required_files -デフォルトの start 処理を実行する前に、これに列挙されたファイルが -読み取り可能かをチェックします。 +デフォルトの start 処理を実行する前に、これに列挙された各ファイルが +読み取り可能かどうかをチェックします。 .It Va required_vars -デフォルトの start 処理を実行する前に、これに列挙された変数に対して +デフォルトの start 処理を実行する前に、これに列挙された各変数に対して .Ic checkyesno を適用します。 .It Va ${name}_chdir .Va ${name}_chroot が提供されない場合、 .Va command を実行する前に .Ic cd するディレクトリ。 .It Va ${name}_chroot .Va command を実行する前に .Xr chroot 8 するディレクトリ。 .Pa /usr がマウントされた後にのみサポートされています。 .It Va ${name}_flags .Va command の呼び出し時に適用する引数。 これは通常 .Xr rc.conf 5 で設定され、 .Xr rc.d 8 スクリプトで設定されるものではありません。 これを上書きするのに、環境変数の .Sq Ev flags を使うことができます。 .It Va ${name}_nice .Va command を実行する際の .Xr nice 1 レベル。 .Pa /usr がマウントされた後にのみサポートされています。 .It Va ${name}_user .Va command を実行する際のユーザ。 .Va ${name}_chroot が設定されている場合は .Xr chroot 8 を使用し、そうでなければ .Xr su 1 を使用します。 .Pa /usr がマウントされた後にのみサポートされています。 .It Va ${name}_group chroot 後に .Va command を実行する際のグループ。 .It Va ${name}_groups コンマで区切られたリストで、 chroot 後に .Va command を実行する際の補助グループ。 .It Ar argument Ns Va _cmd .Ar argument のデフォルト処理を上書きするシェルコマンド。 .It Ar argument Ns Va _precmd .Ar argument Ns Va _cmd を実行する直前、もしくは .Ar argument のデフォルト処理の直前に実行するシェルコマンド。 もしこれが非 0 の終了コードを返した場合、メイン処理は行われません。 デフォルト処理が実行されるならば、このチェックは .Va required_* チェックとプロセスの (非) 存在チェックの後に行われます。 .It Ar argument Ns Va _postcmd 実行された .Ar argument Ns Va _cmd 、もしくは .Ar argument のデフォルト処理が終了コード 0 を返した時に実行されるシェルコマンド。 .It Va sig_stop デフォルトの .Cm stop 処理において、プロセスを停止するのに送られるシグナル。 デフォルトは .Dv SIGTERM です。 .It Va sig_reload デフォルトの .Cm reload -処理において、プロセスを再読み込みさせるのに送られるシグナル。 +処理において、プロセスに再読み込みさせるのに送られるシグナル。 デフォルトは .Dv SIGHUP です。 .El .Pp .Ar argument で与えられた処理に対して、 .Ar argument Ns Va _cmd が定義されていなければ、デフォルト処理が .Ic run_rc_command によって与えられます: .Bl -tag -width ".Sy Argument" -offset indent .It Sy argument .Sy デフォルト処理 .It Cm start .Va command が実行されておらず、 .Ic checkyesno Va rcvar が成功すれば、 .Va command を起動します。 .It Cm stop .Ic check_pidfile または .Ic check_process (適切なほう) により .Va command の PID を特定し、それらの PID に対して .Ic kill Va sig_stop を実行し、そしてそれらの PID に対して .Ic wait_for_pids を実行します。 .It Cm reload .Cm stop と似ていますが、違うのは代わりに .Va sig_reload を使い、 .Ic wait_for_pids を実行しないことです。 .It Cm restart .Cm stop 処理を実行後に、 .Cm start 処理を実行します。 .It Cm status .Va command の PID を表示するか、もしくはスクリプト固有のステータス情報を表示します。 .It Cm poll .Va command が終了するのを待ちます。 .It Cm rcvar 使用される .Xr rc.conf 5 変数を (もしあれば) 表示します。 この処理は、対応する .Xr rc.conf 5 変数が .Dq Li NO に設定されていても動作します。 .El .Pp 以下の変数は、 .Ic run_rc_command が完了した後だけでなく、 .Ar ( argument Ns Va _cmd -のような) 処理でも参照できます: +のような) 処理でも同様に参照できます: .Bl -tag -width ".Va rc_flags" -offset indent .It Va rc_arg fast 及び force 処理が済んだ後の、 .Ic run_rc_command に与えられた引数。 .It Va rc_flags デフォルトのコマンド実行時のフラグ。 環境変数の .Sq Ev flags で上書きされない限り、デフォルトは .Va ${name}_flags です。 この変数は .Ar argument Ns Va _precmd 処理で変更することができます。 .It Va rc_pid .Va command の PID (もしあるならば)。 .It Va rc_fast .Dq Li fast プレフィックスが使われた場合、空ではありません。 .It Va rc_force .Dq Li force プレフィックスが使われた場合、空ではありません。 .El .It Ic run_rc_script Ar file argument スクリプト .Ar file を引数 .Ar argument で実行し、スクリプトからの戻り値を処理します。 .Pp .Ar file が実行される前に、多くのシェル変数が消去されます: .Bd -ragged -offset indent .Va name , .Va command , .Va command_args , .Va command_interpreter , .Va extra_commands , .Va pidfile , .Va rcvar , .Va required_dirs , .Va required_files , .Va required_vars , .Ar argument Ns Va _cmd , .Ar argument Ns Va _precmd . .Ar argument Ns Va _postcmd . .Ed .Pp .Ar file 起動時の動作は、以下のチェックに依るものになります: .Bl -enum .It .Ar file の名前が .Pa .sh で終わっていれば、カレントシェルに読み込まれます。 .It .Ar file がバックアップもしくは一時ファイルのようならば (例. サフィックスが .Pa ~ , # , .OLD , .orig である)、無視します。 .It .Ar file が実行可能でなければ、無視します。 .It .Xr rc.conf 5 変数の .Va rc_fast_and_loose が空ならば、 .Ar file をサブシェルで読み込みます。 そうでなければ、カレントシェルで .Ar file を読み込みます。 .El .It Ic set_rcvar Op Ar base サービスを起動させるために必要な変数名を設定します。 通常 .Fx では、デーモンの名称に文字列 .Dq Li "_enable" を後置した .Xr rc.conf 5 変数により、デーモンが制御されます。 これは .Nx には当てはまりません。 次のような行がスクリプト中にある場合、 .Pp .Dl "rcvar=`set_rcvar`" .Pp この関数は適切な .Xr rc.conf 5 -変数を作成するために、呼び出し側のスクリプトで定義されているべき変数 +ノブを作成するために、呼び出し側のスクリプトで定義されているべき変数 .Va $name の値を使用します。 引数 .Ar base が設定されている場合は、 .Va $name の代わりに .Ar base を使用します。 .It Ic wait_for_pids Op Ar pid ... 指定された全ての .Ar pid が消失するまで待ち、 2 秒ごとに残存している .Ar pid を出力します。 .It Ic warn Ar message 警告メッセージを .Va stderr に表示し、 .Xr logger 1 を使用してシステムログに記録をします。 この警告メッセージは、スクリプト名 .Va ( $0 より), .Dq Li ": WARNING: " , -及びこれに続く +およびこれに続く .Ar message で構成されます。 .El .Sh 関連ファイル .Bl -tag -width ".Pa /etc/rc.subr" -compact .It Pa /etc/rc.subr .Nm ファイルは .Pa /etc に存在します。 .El .Sh 関連項目 .Xr rc.conf 5 , .Xr rc 8 .Sh 歴史 .Nm スクリプトは .Nx 1.3 で登場しました。 .Xr rc.d 8 をサポートする関数は .Nx 1.5 で登場しました。 .Nm スクリプトは .Fx 5.0 ではじめて登場しました。 diff --git a/ja_JP.eucJP/man/man9/style.9 b/ja_JP.eucJP/man/man9/style.9 index 2f5ef914a9..977f4dd5d2 100644 --- a/ja_JP.eucJP/man/man9/style.9 +++ b/ja_JP.eucJP/man/man9/style.9 @@ -1,847 +1,846 @@ .\"- .\" Copyright (c) 1995-2005 The FreeBSD Project .\" 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 [your name] 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/style.9,v 1.110.2.1 2005/03/01 12:44:49 brueffer Exp % .\" $FreeBSD$ .\" .Dd December 7, 2001 .Dt STYLE 9 .Os .Sh 名称 .Nm style .Nd カーネルソースファイルのスタイルガイド .Sh 解説 このファイルは .Fx ソースツリーのカーネルソースに好ましいスタイルを明記しています。 これはユーザランドのコードスタイルの手引きでもあります。 例において、スタイル規則の多くを暗黙的に使用しています。 .Nm がこれらの事例について言及していないと決め付ける前に、 注意して例を確認してください。 .Nm はそのような事柄については記述していません。 .\" $ と FreeBSD を続けるとキーワード置換されるので、\& を挿入 .\" 2001/05/23 horikawa@jp.FreeBSD.org .Bd -literal /* * FreeBSD のためのスタイルガイドです。 * CSRG の KNF (Kernel Normal Form, カーネル標準書式) に基づいています。 * * @(#)style 1.14 (Berkeley) 4/28/95 * $\&FreeBSD: src/share/man/man9/style.9,v 1.110.2.1 2005/03/01 12:44:49 brueffer Exp $ */ /* * とても重要な 1 行のコメントはこのようにします。 */ /* 殆どの 1 行のコメントはこのようにします。 */ /* * 複数行にわたるコメントはこのようにします。実際の文章を書きます。実際の * 段落に見えるように埋めていきます。 */ .Ed .Pp 著作権のヘッダは複数行にわたるコメントであるべきで、 コメントの最初の行は次のように星 (アスタリスク) の後ろにダッシュ (-) を 付けます: .Bd -literal /*- * Copyright (c) 1984-2025 John Q. Public. All Rights Reserved. * * 長くて、退屈なライセンスはここに記述しますが、簡潔にするために * 編集しています */ .Ed .Pp 自動スクリプトは最初のカラムが .Dq Li "/*-" で始まるすべてのコメントを対照としてツリーからライセンス情報を集めます。 利用者がライセンスまたは著作権表示でもない最初のカラムで始まるコメントを 最初のカラムから始まるコメントでライセンスや著作権表示でないものを .Xr indent 1 に再整形させたくない場合は、 それらのコメントのダッシュを星に変えてください。 -最初のコメント以外のカラムで始まるコメントは +最初のカラム以外から始まるコメントは 決してライセンス声明とはみなしません。 -訳注: 行頭にないものはライセンス表明とみなしません。 .Pp 著作権ヘッダの後には空行を 1 行入れ、ソースファイルには .Va rcsid を付けます。 バージョン管理システムの ID タグは、ファイル中に 1 個のみあるべきです (このファイルでは違いますが)。 C/C++ ソースファイル以外はこの例に従いますが、 C/C++ ソースファイルは以降の例に従います。 外部から入手したファイルの すべての VCS (バージョン管理システム) リビジョン識別子は、 存在すれば維持します。 これには、ファイルの来歴を示す複数の ID も含みます。 一般的に、外来の ID またはその下部構造は編集しません。 さもなければ .Dq ( Li "#if defined(LIBC_SCCS)" のように) 囲まれていない場合には、全ての互換性のない小片を隠すため、および その ID をオブジェクトファイルから追い出しておくために、両方を .Dq Li "#if 0 ... #endif" の中に囲みます。 ファイルの名前が変更された場合には、外来の VCS ID の前に .Dq Li "From: " のみを追加します。 .Bd -literal #if 0 #ifndef lint static char sccsid[] = "@(#)style 1.14 (Berkeley) 4/28/95"; #endif /* not lint */ #endif #include __FBSDID("$\&FreeBSD: src/share/man/man9/style.9,v 1.110.2.1 2005/03/01 12:44:49 brueffer Exp $"); .Ed .Pp ヘッダファイルの前に、空行を 1 行付けます。 .Pp カーネルのインクルードファイル (すなわち、 .Pa sys/*.h ) が初めに来ます。 通常、 .In sys/types.h または .In sys/param.h のどちらかが必要ですが、 両方は必要ないでしょう。 .In sys/types.h は .In sys/cdefs.h をインクルードしており、 依存関係は問題ありません。 .Bd -literal #include /* 山括弧による非ローカルインクルード */ .Ed .Pp ネットワークプログラムである場合は、 次にネットワークインクルードファイルを置きます。 .Bd -literal #include #include #include #include #include .Ed .Pp カーネル用のファイルには、 .Pa /usr/include 中のファイルを使用しないでください。 .Pp それから空行を置き、 .Pa /usr/include のファイルを続けます。 .Pa /usr/include のファイルはアルファベット順にソートされているべきです。 .Bd -literal #include .Ed .Pp グローバルなパス名は .In paths.h で定義されています。 プログラムにローカルなパス名はローカルディレクトリの .Qq Pa pathnames.h に入れます。 .Bd -literal #include .Ed .Pp それから、空行があって、ユーザインクルードファイルが来ます。 .Bd -literal #include "pathnames.h" /* " " によるローカルインクルード */ .Ed .Pp アプリケーションインタフェースを実装している場合を除き、 実装の名前空間で .Ic #define したり名前を定義したりしてはいけません。 .Pp .Dq 安全でない マクロ (副作用を持っているもの) の名前と、 明らかな定数のマクロの名前はすべて大文字です。 式のように展開されるマクロは、単一のトークンにするか外側に括弧をつけます。 .Ic #define とマクロ名の間にタブ文字を 1 個入れます。 マクロがある関数のインライン展開である場合は、 関数名は全て小文字で、マクロはすべて大文字の同じ名前を持ちます。 .\" XXX 上記は名前が同じマクロを #undef すれば関数を使える .\" という ANSI のスタイルと衝突します。 .\" これは MALLOC() については言えないし、インライン関数を使う時の .\" 一般的なやりかたではありません。 バックスラッシュは右揃えします。 こうすると読みやすくなります。 マクロが複合文をカプセル化する場合には、それを .Ic do ループで囲みます。 これにより、 .Ic if 文で安全に使用できます。 最後の文の終端のセミコロンは、 マクロではなくマクロの実施時に付けられるべきです。 これにより、清書器やエディタで文法解析しやすくなります。 .Bd -literal #define MACRO(x, y) do { \e variable = (x) + (y); \e (y) += 2; \e } while (0) .Ed .Pp コードが .Ic #ifdef または .Ic #if を使用して条件付きでコンパイルされるときには、 どこで条件付きでコンパイルされるコードが終了するのかを 読む人が容易に識別することが可能にするために、それに続く適合する .Ic #endif または .Ic #else にコメントを追加しても構いません。 このコメントは (主観的に) 長い部分、20 行以上の部分、またはネストされた .Ic #ifdef の連続が読む人を混乱させるかもしれないとき、にのみ使用されるべきです。 たとえコンパイルされない領域が小さくなるかもしれないでも、 .Xr lint 1 の目的のために条件付きでコンパイルされない個所のために、 例外が作られても構いません。 そのコメントは .Ic #endif または .Ic #else から 1 つの空白によって分離されるべきです。 短い条件付きでコンパイルされる部分のために、 終わりのコメントを使用するべきではありません。 .Pp .Ic #endif のためのコメントは対応する .Ic #if または .Ic #ifdef で使用されている表現に合わせるべきです。 .Ic #else および .Ic #elif のためのコメントは先行する .Ic #if および/または .Ic #elif 文に使用されている表現の反対に合わせるべきです。 コメントの中では、補助表現 .Dq Li defined(FOO) は .Dq Li FOO と省略されます。 コメントの目的のためには、 .Dq Ic #ifndef Li FOO は .Dq Ic #if Li !defined(FOO) とみなされます。 .Bd -literal #ifdef KTRACE #include #endif #ifdef COMPAT_43 /* 大きな部分が、または他の条件付きのコードがここに */ #else /* !COMPAT_43 */ /* またはここに */ #endif /* COMPAT_43 */ #ifndef COMPAT_43 /* 更に別の大きな部分が、または他の条件付きのコードがここに */ #else /* COMPAT_43 */ /* またはここに */ #endif /* !COMPAT_43 */ .Ed .Pp このプロジェクトは、 .Vt u_intXX_t 形式の古い .Bx スタイルの整数識別子よりもむしろ、 .Vt uintXX_t 形式の .St -isoC-99 の符号なし整数識別子を使用するように、徐々に移行しています。 新しいコードは後者を使用するべきで、さらにその領域の他の主要な作業が完了し、 古い .Bx スタイルを好むための優先する理由がない場合には、古いコードは 新しい形式に変換されるべきです。 空白文字のコミットと同様に、 .Vt uintXX_t のみのコミットをするよう、考慮すべきです。 .Pp 列挙値は全て大文字を使用します。 .Bd -literal enum enumtype { ONE, TWO } et; .Ed .Pp 宣言の中では、型に関係付けられたトークンを除いて、 アスタリスクと隣接したトークンの間には空白文字を置きません。 (これらの識別子は基本の型の名前、型の修飾語句、および今宣言されようとしている もの以外の .Ic typedef 名です。) これらの識別子はアスタリスクから 1 つの空白で分離します。 .Pp 構造体の中で変数を宣言する時には、 使用順、サイズ順 (大きいものから小さなものへ)、 アルファベット順にソートして宣言します。 最初の区分は通常適用しませんが、例外があります。 各宣言は、それぞれ独立した行にて行います。 構造体の名前の位置を、あなたの判断で読み易いように、 タブ 1 個または 2 個を使用して揃えてください。 少なくとも 90% のメンバの名前を揃えるのに十分な場合には、 1 つだけのタブを使用するべきです。 非常に長い型の後の名前は、単一の空白で区切られるべきです。 .Pp 重要な構造体は、それが使用されるファイルの先頭で宣言されるか、 複数のソースファイルで使用される場合は別のヘッダファイルで宣言されるべきです。 構造体がヘッダファイルで宣言されている場合には、 それら構造体の使用は、宣言とは分けられるべきで、かつ .Ic extern であるべきです。 .Bd -literal struct foo { struct foo *next; /* 使用中の foo のリスト */ struct mumble amumble; /* mumble のコメント */ int bar; /* コメントを揃えます */ struct verylongtypename *baz; /* タブ 2 個には収まりません */ }; struct foo *foohead; /* グローバルな foo リストの先頭 */ .Ed .Pp 可能な時には必ず、あなた自身でリストを操作するのではなく、 .Xr queue 3 マクロを使用してください。 従って、前の例をより良く書くと次のようになります。 .Bd -literal #include struct foo { LIST_ENTRY(foo) link; /* foo リストにキューマクロを使用 */ struct mumble amumble; /* mumble のコメント */ int bar; /* コメントを揃えます */ struct verylongtypename *baz; /* タブ 2 個には収まりません */ }; LIST_HEAD(, foo) foohead; /* グローバルな foo リストの先頭 */ .Ed .Pp 構造体の型に typedef を使用する事は避けてください。 typedef は、その下位にある型を適切に隠さないので、問題となり得ます。 例えば、typedef が構造体そのものであるのか、構造体へのポインタであるのか、 あなたが知る必要があります。 更に、typedef は正確に 1 度だけ宣言しなければなりませんが、 不完全な構造体型は必要な回数だけ宣言可能です。 typedef はスタンドアロンなヘッダファイル中で使用することが困難です。 typedef を定義するヘッダは、この typedef を使用するヘッダの前に インクルードするか、この typedef を使用するヘッダによってインクルード する必要があります (これは名前空間の汚染となります)。 さもなければ、typedef を得るための裏口が必要となってしまいます。 .Pp 規約が .Ic typedef を要求する場合には、その名前を構造体タグに一致させます。 標準 C または .Tn POSIX によって明示されたものを除いては、 .Dq Li _t で終る typedef を避けてください。 .Bd -literal /* 構造体名と typedef を一致させます */ typedef struct bar { int level; } BAR; typedef int foo; /* これは foo です */ typedef const long baz; /* これは baz です */ .Ed .Pp 全ての関数はどこかでプロトタイプされます。 .Pp 私的な関数 (すなわち、他のどこでも使用されない関数など) の関数プロトタイプは、 最初のソースモジュールの先頭に置かれます。 単一のソースモジュールにローカルな関数は、 .Ic static で宣言されるべきです。 .Pp カーネルの別の部分から使用される関数は、 関連のあるインクルードファイルの中でプロトタイプされます。 関数プロトタイプは、異なる順序の使用を強制する理由がない場合には、 なるべくアルファベット順の論理的な順序で整列されるべきです。 .Pp 複数のモジュールでローカルに使用される関数は、 .Qq Pa extern.h 等の分離したヘッダファイルの中に置かれます。 .Pp .Dv __P マクロは使用しません。 .Pp ファイルの 50% かそれ以上を巻き込んだ修正の場合は、 一般にコードは .Dq 新しいコード とみなすことができます。 これは既存のコードの慣例を破り、 現在の .Nm ガイドラインを使用するのに十分です。 .Pp カーネルはパラメータの型に関連付けられた名前を持ちます。 例えば、カーネル内で次のように使用します: .Bd -literal void function(int fd); .Ed .Pp ユーザランドのアプリケーションに対して見えるヘッダファイルの中では、 可視のプロトタイプは、 型を伴った .Dq 保護された (アンダスコアで開始する) 名前を使用するか、 型だけで名前を使用しないかのどちらかが必要です。 保護された名前の使用がより望ましいです。 例えば、次のように使用します: .Bd -literal void function(int); .Ed .Pp または .Bd -literal void function(int _fd); .Ed .Pp プロトタイプは関数名の行揃えを行なうために、次のように タブの後に追加のスペース文字を置いても構いません: .Bd -literal static char *function(int _arg, const char *_arg2, struct foo *_arg3, struct bar *_arg4); static void usage(void); /* * 全ての主要なルーチンはそれが何をするのかを簡潔に記述した * コメントを持つべきです。 "main" ルーチンの前のコメントは * そのプログラムが何をするのかを記述するべきです。 */ int main(int argc, char *argv[]) { char *ep; long num; int ch; .Ed .Pp 一貫性のために、オプションの解析には .Xr getopt 3 が使用されるべきです。 .Xr getopt 3 呼び出しと .Ic switch 文では、オプションをソートすべきですが、 .Ic switch 文のカスケードの一部の場合は例外です。 .Ic switch 文のカスケード要素は .Li FALLTHROUGH コメントを持つべきです。 数値の引数は精度をチェックされるべきです。 到達できないコードは .Li NOTREACHED コメントを持つべきです。 .Bd -literal while ((ch = getopt(argc, argv, "abNn:")) != -1) switch (ch) { /* switch をインデント */ case 'a': /* case はインデントしない */ aflag = 1; /* FALLTHROUGH */ case 'b': bflag = 1; break; case 'N': Nflag = 1; break; case 'n': num = strtol(optarg, &ep, 10); if (num <= 0 || *ep != '\e0') { warnx("illegal number, -n argument -- %s", optarg); usage(); } break; case '?': default: usage(); /* NOTREACHED */ } argc -= optind; argv += optind; .Ed .Pp 予約語 .Pq Ic if , while , for , return , switch の後にスペースを入れます。 何も伴わないか、ただ 1 つの文を伴う制御文は、ブレース .Ql ( \&{ および .Ql \&} ) を使用しません。 1 つの文が 複数行である文の場合には、これは許されます。 無限ループは .Ic while ではなく .Ic for で行ないます。 .Bd -literal for (p = buf; *p != '\e0'; ++p) ; /* 何もなし */ for (;;) stmt; for (;;) { z = a + really + long + statement + that + needs + two + lines + gets + indented + four + spaces + on + the + second + and + subsequent + lines; } for (;;) { if (cond) stmt; } if (val != NULL) val = realloc(val, newsize); .Ed .Pp .Ic for ループの各部は空のまま残しても構いません。 異常に複雑なルーチンでない限りは、ブロックの中に宣言を置いてはなりません。 .Bd -literal for (; cnt < 15; cnt++) { stmt1; stmt2; } .Ed .Pp インデントは 8 文字のタブです。 第 2 レベルのインデントは 4 文字のスペースです。 長い分を折り返す必要がある場合、オペレータを行末に置きます。 .Bd -literal while (cnt < 20 && this_variable_name_is_too_long && ep != NULL) z = a + really + long + statement + that + needs + two + lines + gets + indented + four + spaces + on + the + second + and + subsequent + lines; .Ed .Pp 空白文字を行末に追加してはいけません。 また、インデントを形成するためには、タブとその後にスペースのみを使用します。 タブが生み出す以上のスペースや、タブの前のスペースは使用しません。 .Pp ブレースの終了と開始は .Ic else と同じ行に置かれます。 必要でないブレースは省いても構いません。 .Bd -literal if (test) stmt; else if (bar) { stmt; stmt; } else stmt; .Ed .Pp 関数名の後はスペースを空けません。 コンマの後にはスペースを持ちます。 .Ql \&( または .Ql \&[ の後ろまたは .Ql \&] または .Ql \&) の前にはスペースを空けません。 .Bd -literal error = function(a1, a2); if (error != 0) exit(error); .Ed .Pp 単項演算子はスペースを要求しませんが、二項演算子は要求します。 優先順位が要求する場合または文が括弧なしでは混乱する場合以外は、 括弧は使用しません。 他人はあなたよりも混乱しやすいかもしれないということを覚えておいてください。 あなたは以下を理解できますか? .Bd -literal a = b->c[0] + ~d == (e || f) || g && h ? i : j >> 1; k = !(l & FLAGS); .Ed .Pp 成功時には 0 で、または .Xr sysexits 3 にあらかじめ定義してある値で exit するべきです。 .Bd -literal exit(EX_OK); /* * "Exit 0 on success." (成功時は 0 で終了) * の様に分かりきったコメントは避けてください */ } .Ed .Pp 関数の型は、関数自身に先行する行にあるべきです。 関数の本体の開始のブレースは、単独で 1 行であるべきです。 .Bd -literal static char * function(int a1, int a2, float fl, int a4) { .Ed .Pp 関数の中で変数を宣言する時には、サイズ順に、次にアルファベット順に ソートして宣言します。 1 行に複数の宣言は可能です。 行が溢れる場合は、型の予約語を再度使用します。 .Pp 宣言時に変数を初期化することによってコードを 不明瞭にしない様に注意してください。 この機能は良く考えて使用してください。 初期化に関数呼び出しを使用しないでください。 .Bd -literal struct foo one, *two; double three; int *four, five; char *six, seven, eight, nine, ten, eleven, twelve; four = myfunction(); .Ed .Pp 他の関数の内部で関数を宣言しないでください。 ANSI C によると、このような宣言は、宣言のネスティングによらず、 ファイルスコープになります。 ローカルスコープに見えるものの中にファイルの宣言を隠すことは好ましくなく、 良いコンパイラは苦情を言います。 .Pp キャストと .Ic sizeof 演算子の後にはスペースを続けません。 この規則は .Xr indent 1 が理解しないことに注意してください。 .Ic sizeof は常に括弧をつけて書かれます。 冗長な括弧の規則は .Fn sizeof var の事例には適用されません。 .Pp .Dv NULL は、好まれるヌルポインタ定数です。 コンパイラが型を知っている文脈、例えば代入では、 .Vt ( "type *" ) Ns 0 または .Vt ( "type *" ) Ns Dv NULL の代わりに、 .Dv NULL を使用します。 他の文脈では、特に全ての関数の引数では、 .Vt ( "type *" ) Ns Dv NULL を使用します。 (関数のプロトタイプがスコープ外かもしれない場合に、 キャストはいろいろな引数にとって必須で、その他の引数にとっても必要です。) ポインタは .Dv NULL と比較します。 例えば、次のように使います: .Pp .Bd -literal (p = f()) == NULL .Ed .Pp 次のようには使いません: .Bd -literal !(p = f()) .Ed .Pp 真理値 (ブール値) ではない場合、テストには .Ic \&! を使用しないでください。 例えば、次のように使います: .Bd -literal if (*p == '\e0') .Ed .Pp 次のようには使いません: .Bd -literal if (!*p) .Ed .Pp .Vt "void *" を返すルーチンでは、 戻り値をどのポインタ型にもキャストしてはなりません。 .Pp .Ic return 文の値は括弧で囲まれているべきです。 .Pp .Xr err 3 または .Xr warn 3 を使用し、勝手に作らないでください。 .Bd -literal if ((four = malloc(sizeof(struct foo))) == NULL) err(1, (char *)NULL); if ((six = (int *)overflow()) == NULL) errx(1, "number overflowed"); return (eight); } .Ed .Pp 古いスタイルの関数宣言はこのようになっています: .Bd -literal static char * function(a1, a2, fl, a4) int a1, a2; /* int 型も宣言します、デフォルトにしないこと */ float fl; /* double と float の違いに気を付けてください */ int a4; /* 出てきた順に宣言します */ { .Ed .Pp あなたが明確に K&R との互換性を必要とする場合以外は、 ANSI の関数宣言を使用してください。 長いパラメータリストの折り返しには、 4 個の空白による通常のインデントを付けます。 .Pp 可変個数の引数はこのようにします: .Bd -literal #include void vaf(const char *fmt, ...) { va_list ap; va_start(ap, fmt); STUFF; va_end(ap); /* void 型の関数に return は不要です */ } static void usage() { /* 関数がローカル変数を持たない場合、空行をいれます */ .Ed .Pp .Xr fputs 3 , .Xr puts 3 , .Xr putchar 3 等ではなく、 .Xr printf 3 を使用してください。 これは速くて大抵はきれいで、言うまでもなくつまらないバグを避けます。 .Pp 使用法 (usage) の文はマニュアルページの .Sx SYNOPSIS (書式) の様であるべきです。 使用法の文は、次の構造であるべきです: .Bl -enum .It オペランドの無いオプションが、最初にアルファベット順に、 1 組の大括弧 .Ql ( \&[ と .Ql \&] ) でくくられます。 .It オプションとそのオペランドがこれもアルファベット順に続き、 それぞれのオプションとその引数を 1 組の大括弧でくくります。 .It 必須の引数 (もしあれば) が続き、 コマンドラインで指定されるべき順で一覧されます。 .It 最後に、 すべての任意の引数が指定されるべき順で、 すべて大括弧の中に一覧されます。 .El .Pp 縦棒 .Pq Ql \&| は、 .Dq 二者択一 のオプションまたは引数を分割し、 同時に使用するオプションと引数は、単一の大括弧でくくります。 .Bd -literal -offset 4n "usage: f [-aDde] [-b b_arg] [-m m_arg] req1 req2 [opt1 [opt2]]\en" "usage: f [-a | -b] [-c [-dEe] [-n number]]\en" .Ed .Bd -literal (void)fprintf(stderr, "usage: f [-ab]\en"); exit(EX_USAGE); } .Ed .Pp マニュアルページのオプション記述は、 純粋なアルファベット順であるべきであることに注意してください。 つまり、オプションが引数を取るか否かに関わらないということです。 アルファベット順は、前述の大文字小文字の順序を考慮に入れるべきです。 .Pp 新しい中心的なカーネルのコードは、適度に .Nm ガイドに従うべきです。 サードパーティが保守するモジュールやデバイスドライバのためのガイドラインは より緩やかですが、最低限内部的には彼らの一貫したスタイルであるべきです。 .Pp ソースリポジトリの文体の変更 (空白文字の変更を含む) は困難で、 正当な理由なしには避けるべきです。 リポジトリの中のおおよそ .Fx KNF .Nm に適合しているコードは、この適合から離れてはなりません。 .Pp 可能な時にはいつでも、 コードはコードチェッカ (例えば、 .Xr lint 1 または .Nm gcc Fl Wall ) を 通過し、発生する警告は最小限となるべきです。 .Sh 関連項目 .Xr indent 1 , .Xr lint 1 , .Xr err 3 , .Xr sysexits 3 , .Xr warn 3 , .Xr style.Makefile 5 .Sh 歴史 このページは .Bx 4.4 Lite2 リリースの .Pa src/admin/style/style ファイルに大きく基づいていて、 現在の実装と .Fx プロジェクトの要望を反映して、頻繁に更新しています。