名前
uudeview -
バイナリファイル用の高性能なデコーダ
書式
uudeview [-i] [-d] [-f] [-o] [-b1] [-t] [(+e|-e)
extlist]
[-v] [-s] [-m] [-n] [-p path] [@file] file(s)
説明
uudeview
は、電子メールや Usenet
から受け取ったエンコードされた形式のファイルを
デコードする。標準付属の
uudecode(1)
に似ているが、これよりも快適かつ柔軟である。
uudeview
はエンコーディング方法として
uuencoding, xxencoding, Base64, BinHex
をサポートしており、分割ファイル(複数の部分に分けて送られたもの)を扱う
ことができ、さらに複数のファイルを同時に扱うこともできる。したがって、
デコードの手間を大きく省くことができる。ユーザは普通、デコードの準備を
するためにファイルを手で編集する必要はない。
uudeview
は起動されると、与えられたファイルを全てスキャンしてデコードすべきデー
タを探し、そのデータとデータに含まれるパートをソートし、うまくデコード
できそうなファイルの一覧をユーザに示す。ユーザはこの一覧からデコードす
るファイルを個別に選ぶ。
オプション
- -i
- 対話機能を無効にする。ファイルのスキャンとその結果のソートを行った後、
uudeview
はファイルをデコードするかどうかをユーザに問い合わせず、デコード可能な
ものを即座にバッチ処理でデコードする。
- -d
- uudeview を desperate
モードにする。このモードでは、不完全なファイルもデコード
の候補となる。この機能が有効なのは
50
個のパートに分かれた投稿の最後の
部分が欠けているような場合であるが、大抵の場合は、無理にデコードしたファ
イルは単に壊れているだけで利用はできないだろう。不完全なファイルがどの
程度使えるかはファイルの種類による。
- -f
- 高速モードでファイルをスキャンする。
uudeview
は各入力ファイルに多くとも
1
ファイルしか含まれていないものと想定する。
これは普通、ニューススプール内にあるファイルについては成り立つ。このオ
プションを指定すると、複数の記事に分かれた入力ファイルのデコードは
中断される
。また、データが正しいかどうかのチェックも一部が無効になるので、誤りが
あるファイルもおそらくデコードの候補として示される。デコードの時にエラー
メッセージを受け取ることもあるし、単に不正なファイルができることもある。
このような問題に遭いたくないなら
-f
オプションは使わないこと。
- -o
- デコード時に既存のファイルを上書きすることを許可する。デフォルトでは、
上書きするか、別の名前を付けるか、そのファイルを飛ばすかの問い合わせが
ユーザに対して行われる。
- -v
- 詳細表示を 無効に
する。通常、このプログラムは入力ファイルを読み込む際に何らかのステータ
スメッセージを表示する。これは問題が起きたときには非常に役に立つ。この
ようなメッセージが鬱陶しい場合にこのオプションを使うこと。
- -p パス
- デコードしたファイルを書き込むディレクトリを設定する。これは有効なパス
名でなければならず、そうでない場合はファイルをデコードしようとした時に
エラーとなる。デフォルト値は現在の作業ディレクトリである。
- +e 拡張子
- 指定された拡張子を持つファイルだけを選択してデコードする。他のファイル
は無視される。 +e
.gif.jpg を指定すると、GIF
ファイルと JPG
ファイルは全てデコードされるが、TIF
等はデコードされない。拡張子のリストでは大文字と小文字は区別されない。
- -e 拡張子
- 上記のオプションの反対の意味を持つ。
コマンドラインで
+e と -e
を混ぜて使っても、希望した結果は得られない
だろう。
- -b1
- このオプションは、サブジェクトからパート番号を取り出すという
uudeview
のポリシーを変更する。このオプションが必要となるのは稀であるが、
例えば複数に分割して投稿が行われた時のように、パート番号が
括弧 () や ブラケット []
内に書かれている場合だけは必要となる。デフォルトでは、
uudeview はまず 括弧 ()
内にある数字を使う。しかし、この番号が全体のファイル数
を示しており、パート番号はブラケット
[]
に書かれている場合には、このパ
ラメータを使って
uudeview
に他の数字を最初に読み込ませるようにすること。このオプションは、1
種類
のブラケットしか含まないファイルや、どちらの種類のブラケットも含まない
ファイルの展開には影響を与えない。必要ならば、このオプションは
-b[]
のように使うこともできる。
- -s
- 「賢くなくする(minus
smartness)」と読むこと。このオプションは、サブジェ
クト行からパート番号を自動検出する機能を無効にする。
uudeview
がサブジェクト行の正しい展開に失敗してパート番号の推定時にエラーを出力
し、パートの順番が狂う場合にはこのオプションを試すとよい。このオプショ
ンを使うと、パートは必ず順番通りに繋げられる(したがって、入力ファイル
ではパートを正しい順に並べなければならない)。また、このオプションを使
うと、プログラムは欠けているパートを検出することはできない。
注意:
この場合でも、きちんとした
MIME
ファイルに含まれている正しいパート番号は評価される。このオプションを
2
回指定すると、サブジェクトそのものも無視され、パートのグループ付けに
は使われない。パートを配送する一連のメッセージのサブジェクト行がそれぞ
れ異なる場合には、このオプションを使用すること。
- -m
- ファイルのモードを無視する。uuencode
や xxencode
されたファイルの begin
行には、元のファイルのパーミッションが書かれている。このオプショ
ンが与えられなければ、デコーダは元のパーミッションを復元しようとする。
このオプションを与えると、得られるパーミッションは
0666 からユーザの umask
を引いた値となる。
- -n
- プログレスバーを表示しない。uudeview
は通常、進行状況に合わせて
100%
まで伸びてゆく横棒を
ASCII
文字で表示するが、端末がこれを表示できるか
どうかのチェックは行わない。端末が表示できない場合や、プログレスバーを
目障りと感じた場合にはこのオプションを使うこと。
- -t
- プレーンテキストのメッセージを使う。通常、uudeview
はデコードの際には
エンコードされたデータだけを表示する。このオプションを設定すると、
MIME
メッセージに入っているテキストパートやエンコードされていないデータもデ
コード対象として示される。プレーンテキストのメッセージにはファイル名が
付けられていないことが多いので、これらには
4
桁の通し番号を使ったユニー
クな名前が付けられる。
- ファイル(複数可)
- エンコードされたファイルを探すためにスキャンするファイル。ハイフン
(´-´)を指定すれば、標準入力から読み込むこともできる。指定するファイ
ルの数はいくつでも良いが、通常はシェルがオプションの数を
128 個までに
制限している。ワイルドカードを使ってファイルのリストを作った場合には、
間違ってバイナリファイルをプログラムに入力しないこと。こうなった場合の
動作は未定義である。
- @ファイル
- 追加のオプションをファイルから
uudeview
に読み込ませる。このファイルでは
1 行に 1
つだけオプションを書かなけ
ればならない。このファイルはプログラムの終了時に
削除される
。この機能を使うとファイルを何個でも指定することができる。
find(1)
の機能と組み合わせれば、ディレクトリツリー全体(ニューススプールのディ
レクトリ等)を処理することができる。
環境変数 $UUDEVIEW
にオプションを指定することもできる。この値はコマン
ドラインのオプションを処理する前に読み込まれる。
デコード
入力ファイルを全てスキャンした後、それぞれのファイルの扱いについてユー
ザに問い合わせが行われる。当然ながら普通はデコードの実行と答えるのだが、
選択肢は他にもある。以下のコマンドを使用することができる(各コマンドは
1 文字である):
- d
- ファイルをデコードし、デコードしたファイルを指定された名前でディスクに
書き込む。
- y
- (d)
と同じ動作である。
- x
- このコマンドもファイルをデコードする。
- n
- このファイルをデコードしないで飛ばす。
- b
- 前のファイルに戻る。
- i
- ファイルに関する情報があれば、それを表示する。マルチパートの投稿に
0
番目のパートがあればそれを表示する。0
番目のパートがなければ、エンコー
ドされているデータまでにある最初のパートが表示される。
- e
- コマンドを実行する。どんなコマンドでも入力することができるが、この際に
は多分、現在のファイルが引き数として使われるだろう。コマンドライン中の
ドル記号 '$'
は全て、現在のファイルのファイル名に置き換えられる(正確に
は一時ファイルの名前)。この一時ファイルを使ってバックグラウンドプロセ
スを実行してはならない。なぜなら、入力ファイルが突然消えた場合にプログ
ラムの処理が混乱するからである。
- l
- ファイルをリスト表示する。このコマンドを使うのは、問い合わせ対象のファ
イルがテキストファイルの場合だけにすること。そうでない場合にはゴミが大
量にできるだけである。
- r
- 名前を変える。別の名前を選んで、そのファイルを新しい名前で保存すること
ができる。
- p
- デコードしたファイルを書き込むパスを設定する。このパスは、コマンドライ
ンオプションの -p
コマンドで設定することもできる。
- q
- 即座にプログラムを終了する。
- ?
- 以上のコマンド全ての簡単な説明を表示する。
コマンドを入力しないで、プロンプトでリターンキーだけを叩いた場合には、
デフォルトのコマンドであるファイルのデコードが実行される。
実行時のメッセージ
詳細表示モード(つまり、-v
オプションで詳細表示を無効にしていない場合)
では、進行状況メッセージが出力される。このメッセージはプログラムの実行
を追跡するのに非常に便利であり、これを理解できればファイルのデコードに
失敗した原因の追求に使うことができる。このセクションではメッセージの解
釈の仕方を説明する。プログラムを操作するだけならば、このセクションを理
解することはあまり重要でない。
最初は「ロード中」のメッセージである。これは文字列
"Loaded" で始まる。
それぞれの行は以下の要素を示さなくてはならない:
- 入力ファイル
- 最初の要素はソースファイルであり、ここからパートがロードされる。
1
つのファイルから多くのパートが検出されることもある。
- サブジェクト行
- 完全なサブジェクトがシングルクォートで括られた形で再現される。
- 識別子
- このプログラムは、同じファイルに属していると思われる記事をまとめるため、
サブジェクト行を利用してこのスレッドをユニークに識別する。このアルゴリ
ズムの結果はブレースで括って表示される。
- ファイル名
- サブジェクト行やデータ内でファイル名が検出されたかどうか(例えば、begin
行や Content-Type
情報の一部として検出される)。
- パート番号
- パート番号を表す。サブジェクト行から取り出されたり、きちんとした
MIME
形式のメッセージの場合には「パート」情報から取り出されたりする。
- Begin/End
- "begin" トークンや "end"
トークンが検出された場合、それがここで出力さ
れる。
- エンコーディング型
- このパート内でエンコードされたデータが検出された場合、"UUdata",
"Base64", "XXdata", "Binhex"
のいずれかが出力される。
スキャンが終わった後にはこれ以外のメッセージが出力される。記事のグルー
プそれぞれに対して 1
つの行が出力される。この行の内容は例で見る方が分
かりやすいだろう。以下に例を示す:
Found 'mailfile.gz' State 16 UUData Parts begin 1 2 3 4 5 end 6
OK
この行はファイル
mailfile.gz
が見つかったことを示す。ファイルは
uuencode
されており("UUData")、6
つ
のパートからなる。また、"begin"
トークンが最初のパートで見つかり、
"end" トークンが 6
番目のパートで見つかった。全て揃っているように見え
るので、このファイルには
"OK"
のタグが付けられる。
State
には以下に示す各種ビットが設定される。ビットの値は
OR
されることもあるだろう。
- 1
- 欠けているパートがある
- 2
- Begin が無い
- 4
- End が無い
- 8
- エンコードされているデータが見つからない
- 16
- ファイルは問題なしと思われる
- 32
- ファイルのデコード時にエラーが起きた
- 64
- ファイルがうまくデコードできた
注意
このプログラムは、標準入力から読み込みを行うときには端末の入力を受け取
ることができないので、この場合には対話機能は自動的に無効にされる。
MIME
形式のメッセージヘッダが検出されたときは、このプログラムはほぼ
MIME
準拠の動作を行う。
「 ほぼ
」というのは、規約ではファイルが複数のメッセージを含むことは認められて
いないけれど、 uudeview
はこの制限なしで動作するからである。実際には、コマンドラインオプション
-f
を用いて必ずこの状態になるようにすれば、このプログラムは
RFC1521 に完
全に準拠する。
(このオプションが設定されていても、正しい
MIME
マルチパートメッセージ
に含まれるパートは全て処理される。)
スキャンの処理部分は、MIME
メッセージの外部にある短い
Base64 データ(4
行以下)を無視することがよくある。この状態に対するチェックがいくつか
desperate
モードで行われるが、これを行うとエンコードされたデータを誤っ
て検出し、不正なファイルができることがある。
ファイルは最初は必ず一時ファイルにデコードされ、その後に最終的な場所に
コピーされる。これは、後になってからデコードできないことが分かるような
データで既存のファイルを誤って上書きすることを防ぐためである。したがっ
て、必要なサイズの 2
倍の空きスペースを予め確保すること。また、標準入
力から読み込みを行う時には、全てのデータは一時ファイルに書き込まれ、そ
の後にこのファイルに対して通常のスキャン処理が始められる。
Subject 行があれば、
uudeview
は必要な情報全てをこの行から取り出そうとする。Subject
行にゴミが入っ
ている場合や、プログラムがユニークな識別情報とパート番号を
Subject 行
から見つけられなかった場合でも、
uudeview
は別のヒューリスティクスを用いてファイルをデコードすることができるが、
この場合の結果は運任せである。
ただし、これが関係あるのはファイルが分割されている場合だけである。エン
コードされたファイルが全て
1
つのパートだけからなる場合には何も心配す
る必要はない。
このプログラムの名前を変えたり、コピーしたり、リンクをすることによって
uudecode
にした場合、このプログラムは標準の
uudecode
の高性能な代用プログラムとして動作し、同じコマンドラインオプションを受
け付ける。ただし、テストはまだ十分でない。
バグ
名前がハイフン('-')で始まるファイルを読み込むには、パス名(例えば
'./')
を前に付けること。
バグとして報告する前には、そのファイルが他の手段でデコードできることを
確かめること。作者は、全くのゴミのデコードに失敗したと後でわかるような
バグ報告は受け取りたくない。
バグを見つけたと思ったら、入力ファイル(できれば単に入れるだけでなく、
元のファイルに圧縮とエンコードを施すこと)とプログラムのメッセージのリ
スト(詳細表示モード)を
fp@informatik.uni-frankfurt.de
宛に送ること。
現在は BinHex
データに入っているチェックサムは無視される。
このプログラムは、分割されたマルチパートメッセージ(複数のメールに分割
された MIME
形式のマルチパートメッセージ)を完全に処理することができな
い。各パートが識別されて
1
つにまとめられ、これに含まれているマルチパー
トメッセージがプレーンテキストファイルに「デコード」されるが、このファ
イルを再び uudeview
に入力しなければならない。しかし、このようなメッセージは滅多にないので
心配する必要はない。