OSDN Git Service

Convert release and draft pages to UTF-8.
[linuxjm/jm.git] / manual / mirrordir / release / man1 / mirrordir.1
1 .\" (c) 1998 by James R. Van Zandt <jrv@vanzandt.mv.com>    -*- nroff -*-
2 .\"
3 .\" Japanese Version Copyright (c) 2003 NAKANO Takeo all rights reserved.
4 .\" Translated Wed 29 Jan 2003 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
5 .\"
6 .TH mirrordir 1 "1998 November 1" "Linux"
7 .SH 名前
8 pslogin \- 強力なストリーム cipher 暗号化と diffie-hellman 鍵交換を用いた安全なリモート tcp ログイン
9 .PP
10 forward \- 任意の tcp ソケットを安全かつ暗号化されたチャネルにフォワードする
11 .PP
12 copydir, mirrordir \- 変更された最小の部分のみを用いて
13 (ローカル、FTP 経由、安全な tcp 接続経由で)
14 ディレクトリツリーをコピーまたはミラーする
15 .PP
16 recursdir \- ファイルの操作/検索や tar ファイル作成のために、ローカルまたはリモートのディレクトリを再帰的に探索する
17 .SH 書式
18 .B mirrordir
19 .br
20 [\fB-a\fP, \fB--access-times\fP]
21 .br
22 [\fB-m\fP, \fB--strict-mtimes\fP]
23 .br
24 [\fB--no-mtimes\fP]
25 .br
26 [\fB--ignore-size\fP]
27 .br
28 [\fB-A\fP, \fB--mtime-threshold\fP \fIext\fP]
29 .br
30 [\fB--time-offset\fP [[\fI+\fP]|\fI-\fP][\fIH\fP]\fIH\fP[\fI:MM\fP]]
31 .br
32 [\fB-A\fP, \fB--always-write\fP]
33 .br
34 [\fB-r\fP, \fB--restore-access\fP]
35 .br
36 [\fB--no-chown\fP]
37 .br
38 [\fB--no-chmod\fP]
39 .br
40 [\fB-D\fP, \fB--only-delete\fP]
41 .br
42 [\fB-b\fP, \fB-S\fP, \fB--backup-extension\fP, \fB--suffix\fP \fIext\fP]
43 .br
44 [\fB-N\fP, \fB--num-backups\fP \fInum\fP]
45 .br
46 [\fB-O\fP, \fB--backup-outdate\fP \fIsec\fP]
47 .br
48 [\fB-B\fP, \fB--block-size\fP \fIbytes\fP]
49 .br
50 [\fB-M\fP, \fB--max-bytes\fP \fInum\fP[\fBK\fP|\fBM\fP|\fBG\fP]]
51 .br
52 [\fB-s\fP, \fB--starting-file\fP \fIpath\fP]
53 .br
54 [\fB-i\fP, \fB--ignore-next-exclude\fP]
55 .br
56 [[\fB-i\fP] \fB-X\fP, \fB--exclude\fP \fIpath\fP] [[\fB-i\fP] \fB-X\fP, \fB--exclude\fP \fIpath\fP] ...
57 .br
58 [[\fB-i\fP] \fB-F\fP, \fB--exclude-from\fP \fIfile\fP] ...
59 .br
60 [[\fB-i\fP] \fB-G\fP, \fB--exclude-glob\fP \fIexpr\fP] [[\fB-i\fP] \fB-G\fP, \fB--exclude-glob\fP \fIexpr\fP] ...
61 .br
62 [[\fB-i\fP] \fB-R\fP, \fB--exclude-regexp\fP \fIexpr\fP] [[\fB-i\fP] \fB-R\fP, \fB--exclude-regexp\fP \fIexpr\fP] ...
63 .br
64 [\fB-C\fP, \fB--exclude-script\fP [\fIexpr\fP|\fIfile\fP]] [\fB-C\fP, \fB--exclude-script\fP [\fIexpr\fP|\fIfile\fP]] ...
65 .br
66 [\fB-h\fP, \fB--help\fP]
67 .br
68 [\fB-v\fP, \fB--verbose\fP] [\fB-v\fP, \fB--verbose\fP] ...
69 .br
70 [\fB-V\fP, \fB--version\fP]
71 .br
72 [\fB-k\fP, \fB--keep-files\fP]
73 .br
74 [\fB-l\fP, \fB--no-hard-links\fP]
75 .br
76 [\fB--follow-symlinks\fP]
77 .br
78 [\fB-L\fP, \fB--strict-locking\fP]
79 .br
80 [\fB-p\fP, \fB--password\fP \fIpassword\fP]
81 .br
82 [\fB-P\fP, \fB--password-exact\fP \fIpassword\fP]
83 .br
84 [\fB--test-login\fP]
85 .br
86 [\fB--no-warn-first-login\fP]
87 .br
88 [\fB--read-password-from-stdin\fP]
89 .br
90 [\fB--allow-empty-ftp-dirs\fP]
91 .br
92 [\fB--no-allow-empty-ftp-dirs\fP]
93 .br
94 [\fB--netrc\fP]
95 .br
96 [\fB--no-netrc\fP]
97 .br
98 [\fB--proxy-host\fP \fIhost\fP]
99 .br
100 [\fB--secure\fP]
101 .br
102 [\fB-z\fP, \fB--gzip\fP]
103 .br
104 [\fB--gzip-backups\fP]
105 .br
106 [\fB--case-insensitive\fP]
107 .br
108 [\fB--to-lower\fP]
109 .br
110 [\fB--to-upper\fP]
111 .br
112 [\fB--no-use-passive-connections\fP]
113 .br
114 [\fB-K\fP, \fB--key-size\fP \fIbits\fP]
115 .br
116 [\fB--download-scripts\fP]
117 .br
118 [\fB--tar-file\fP \fIfilename\fP]
119 .br
120 [\fB--tar-block-size\fP \fIN\fP]
121 .br
122 [\fB-t\fP, \fB--dry-run\fP, \fB--test-only\fP]
123 .br
124 [\fB--nice\fP \fInum\fP] \fIcontrol mirror\fP
125 .PP
126 .B mirrordir
127 [\fB-c\fP | \fB--copy-mode\fP | \fB--recurs-mode\fP ] 
128 -[\fBabBCdDFGhklMmNOopRrstvVX\fP] \fIsrc\fP [\fIsrc\fP ...] \fIdest\fP
129 .PP
130 .B copydir
131 -[\fBabBCdeFGhklMmNOopRrstvVX\fP] \fIsrc\fP [\fIsrc\fP ...] \fIdest\fP
132 .PP
133 .B recursdir
134 -[\fBabBCdeFGhklMmNOopRrstvVX\fP] \fIsrc\fP [\fIsrc\fP ...]
135 .PP
136 .B pslogin
137 [\fB--key-size\fP \fIbits\fP]
138 [\fBmc://\fP][\fIusername\fP\fB@\fP]\fIhostname\fP[\fB:\fP\fIportnumber\fP][\fB/\fP\fIpath\fP]
139 .PP
140 しかし通常は単に:
141 .br
142 .BR mirrordir " [" --exclude " \fIpath\fP] " "\fIcontrol mirror\fP"
143 .br
144 .B copydir
145 \fIsrc\fP [\fIsrc\fP ...] \fIdest\fP
146 .br
147 .B recursdir 
148 \fIsrc\fP [\fIsrc\fP ...] [\fB-C\fP \fIprogram\fP]
149 .br
150 .B pslogin
151 [\fIusername\fP\fB@\fP]\fIhostname\fP[\fB:\fP\fIportnumber\fP]
152 .SH 説明
153 .B mirrordir
154 はディレクトリを操作したりミラーする際に便利なユーティリティの集まりである。
155 .BR ssh (1)
156 の代替になるコマンド
157 .B pslogin
158 や、任意の TCP ソケット接続を暗号化された安全なチャネルにフォワードする
159 .BR forward (1)
160 も含まれている。
161 .PP
162 .B mirrordir
163 は 2 つのディレクトリ
164 .I control
165
166 .I mirror
167 との間で異なるファイルを、
168 .I control
169 から
170 .I mirror
171 へとコピーする。
172 .\"nakano control は訳者の判断で追加.
173 修正時刻 (modification time) またはサイズが異なるファイルがコピーされる。
174 ファイルの許可属性・所有者・修正時刻・アクセス時刻
175 (--access-time が用いられた場合のみ)・スティッキービット・
176 デバイスタイプが複製される。
177 シンボリックリンクはリンク先の解決をされずにそのままコピーされる。
178 シンボリックリンクの修正・アクセス時刻 (シンボリック自身のもので、
179 シンボリックが指すファイルのものではないことに注意) は保存\fIされない\fP。
180 ハードリンクされたファイルは単にコピーされる。
181 生成時刻は、私の知る限り Unix では設定できない。
182
183 .B mirrordir
184 は\fB危険な\fPコマンドである。
185 .I mirror
186 にあって
187 .I control
188 にないファイルやディレクトリは削除されるからである。もし
189 .I control
190 が完全に空の場合には、
191 .I mirror
192 のすべてのファイルやディレクトリが削除される。もし
193 .I mirror
194 が完全に空の場合には、
195 .I control
196 のすべてのファイルやディレクトリがコピーされる。
197
198 要するに
199 .B mirrordir
200
201 .I mirror
202 をディレクトリツリー
203 .I control
204 の完全なレプリカにし、またその際にあらゆるものを
205 (定期的バックアップという目的に合致するなら)
206 可能な限り複製しようとする。当然
207 .B mirrordir
208 はサブディレクトリの一番深いところまで降りていく。
209 ディレクトリミラーの際には、それに必要な最小の変更のみを調べ、
210 可能な限り効率的に動作しようとする。
211
212 アクセス時刻の複製は通常は必要なく、また不要な負荷を与えることになる。
213 よってこれはオプションになっている。
214
215 ディレクトリ
216 .I control
217 には、何の変化も与えない。--restore-access
218 が与えられると、アクセス時刻は読み込みのたびに、
219 元の時刻に再設定される。
220
221 --strict-locking オプションをオンにすると、
222 .I control
223 にあるコピー作業中のファイルは「共有読み込み (shared reading)」
224 にロックされる。これによって、
225 他のプロセスがそのファイルに頻繁に書き込みを行っている場合でも、
226 ファイルが不完全な状態や壊れた状態ではコピーされないことを保証する。
227
228 通常
229 .B mirrordir
230 は問題があっても中断せず、
231 問題の報告を stderr へのエラーメッセージとして行い、
232 動作を継続する。
233
234 ディレクトリ
235 .I mirror
236
237 .I dest
238 は (たとえ空であっても) 存在していなければならない。
239
240 ディレクトリのすべてのファイルを削除する前に、
241 .B mirrordir
242 は \fB*--keep-me\fP というファイル (ここで \fB*\fP は 0 または 1 つの文字)
243 をチェックする。
244 このファイルが存在すると、エラーメッセージを出して中断する。
245 よって再帰的に削除されてはまずいディレクトリがあったら、
246 それぞれにこのようなファイルを作っておけば良い。
247 .\"nakano かなり意訳。
248
249 .B copydir
250 は \fBmirrordir\fP \fI-ck --no-erase-directories\fP ...
251 と等価である (-c には -k が含まれるが)。よって
252 .B copydir
253 は厳密な意味での
254 .BR cp (1)
255 とよく似ているが、ファイル名は URL でも良く、
256 かつ古いファイルだけが置き換えられる。
257 ファイル転送には、ほとんどの場合
258 .B mirrordir
259 ではなく
260 .B copydir
261 を使うほうがよい。本当に消してよい場合に限り、
262 .B mirrordir
263 を使うようにすること。
264
265 .B recursdir
266 はまたもう一つのプログラムで、
267 コマンドライン上でディレクトリを降りてゆくだけで何も行わない。
268 これは \fBmirrordir\fP \fI--recures-mode\fP ...
269 と等価である。これは
270 .B -C
271 オプションが追加される前にできたプログラムで、より厳密な
272 .BR find (1)
273 として、あるいは見つかったすべてのファイルを
274 tar ファイルにパックする目的に、それぞれ利用できる。
275
276 .\"nakano envoke は evoke の typo かな?
277 .B pslogin
278 はさらにもう一つのプログラムで、
279 これまでに挙げた 3 つとはほとんど関係がない。
280 .B pslogin
281
282 .B secure-mcserv
283 を用いて安全なログインセッションを開始する。
284 これは \fBmirrordir\fP \fI--login-mode\fP \fI--secure\fP ...
285 と等価である。
286 .B pslogin
287
288 .B logindir
289 と呼ぶべきかもしれない。後述の
290 .B --login-mode
291 を参照のこと。
292
293 .B forward
294 はさらにもう一つのプログラムで、
295 最初の 3 つとはほとんど関係がない。
296 これは任意のサービスを安全なチャネルにフォワードできる。
297 詳細は
298 .BR forward (1)
299 を参照のこと。
300
301 このパッケージの重要な点は、
302 通常のファイル名に替えて URL を使える点にある。
303 よってファイルをネットワーク越しに操作できる。
304 現在サポートされている URL のタイプは、
305 \fBftp://\fP と \fBmc://\fP である
306 (\fBhttp://\fP はファイルシステムではないので、サポートされていない)。
307 \fBmc://\fP は \fBMidnight Commander\fP ファイルシステムで、
308 .B secure-mcserv
309 デーモンによってサービスされるものである。
310 これには、暗号化された、
311 強く安全なファイル転送およびログインを提供するという長所がある。
312
313 .B recursdir
314 コマンドと
315 .B copydir
316 コマンドには glob 表現も利用できる。
317 これらは再帰的に展開される。
318 .SH セキュリティと暗号化
319 .B mirrordir
320 は、強力なストリーム cipher 暗号化と、
321 何種類かの鍵サイズでの Diffie-Hellman 鍵交換をサポートしている。
322 安全な接続は
323 .B mc://
324 の接続で動作する。オプション
325 .BR --secure ", " --key-size ", " --download-scripts
326 を参照のこと。
327 デモは
328 .B 例
329 の節を、公開鍵・秘密鍵の置場所については
330 .B ファイル
331 の節を参照のこと。
332 .SH オプション
333 .TP 
334 .B --help
335 詳しいヘルプを出力して終了する。
336 .IP \fB--verbose\fP
337 .I mirror
338 に対してなされたファイル修正に関して、
339 詳しい出力をするよう指定する。
340 このオプションは複数個指定でき、
341 たくさん指定するほどより詳しく出力する。
342 出力は標準出力に書き出される。
343 .IP \fB--restore-access\fP
344 読み込むを行うごとに、
345 .I control
346 のアクセス時間を元に戻す。
347 .IP \fB--access-times\fP
348 .I control
349 のアクセス時刻も複製する。
350 .TP 
351 \fB--always-write\fP
352 同じに見えるかどうかに関らず、
353 すべてのファイルを書き変えるよう強制する。
354 .TP
355 \fB--recurs-mode\fP
356 これは
357 .B recursdir
358 ではデフォルトで有効になる。
359 指定したディレクトリを再帰的に読み、それらに対しては何も行わない。
360 このオプションは
361 ファイルを検索したり、
362 .B -C
363 と共に指定してシェルコマンドを実行したりするのに便利である。
364 なお C インタープリタでは
365 .BR system() ", " exec() ", " popen
366 関数が利用できる。
367 .TP
368 \fB--login-mode\fP
369 このオプションは
370 .B pslogin
371 ではデフォルトでセットされる。これは
372 .B secure-mcserv
373 をサーバに使う
374 .B rlogin
375 とだいたい同じになる。
376 .BR ssh (1)
377 の代わりに使えるような、安全な暗号化された接続を提供する。
378 .B pslogin
379 は暗黙のうちに
380 .B --secure
381 も指定する。このオプションを指定したり、
382 .B pslogin
383 を用いた場合は、コマンドラインにはパスを 1 つだけ指定しなければならない。
384 指定の形式は
385 [\fBmc://\fP][\fIusername\fP\fB@\fP]\fIhostname\fP[\fB:\fP\fIportnumber\fP][\fB/\fP\fIpath\fP]
386 である。
387 .sp
388 ログイン後直ちに、シェルプロンプトから \fBcd\fP \fI/path\fP
389 が実行される。
390 .B pslogin
391 は文字 \fB#\fP, \fB$\fP, \fB>\fP を調べ、
392 プロンプトが出たかどうか判断する。
393 これらが見つからないと、
394 .B pslogin
395 はずっと止まったままになる。この動作を避けるには、
396 .BI / path
397
398 .B /
399 とすれば良い。するとログインディレクトリに留まったままになる。
400 あるいはシェルプロンプトを変更して、これらの文字を含めるようにしてもよい。
401 .TP
402 \fB--copy-mode\fP
403 これは
404 .B copydir
405 ではデフォルトでセットされる。
406 コピー元・コピー先の各ファイルに対して
407 .BR cp (1)
408 と同じように振る舞う。このオプションを用いると、暗黙のうちに
409 .B --keep-files
410 を指定したことになる。
411 コピー先の既存のファイル・ディレクトリのうち、
412 コピー元と同じ名前を持つものはすべて上書きされるが、
413 これ以外の理由でファイルやディレクトリが削除されることはない。
414 コピー元には複数のファイルやディレクトリを指定できる。
415 コピー先のパスはディレクトリでなければならない。
416 .TP 
417 \fB--no-erase-directories\fP
418 このオプションを指定すると、
419 コピー先のディレクトリとコピー元のファイルがおなじ名前で、
420 かつそのディレクトリが空でない場合、
421 エラーメッセージを表示して終了する。これは
422 .B copydir
423 のデフォルトの動作である。
424 .TP 
425 \fB--erase-directories\fP
426 このオプションを指定すると、
427 コピー先のディレクトリとコピー元のファイルがおなじ名前の場合、
428 コピー先のディレクトリは再帰的に削除される。これは
429 .B mirrordir
430 のデフォルトの動作である。
431 .TP
432 \fB--allow-empty-ftp-dirs\fP
433 ftp サーバには、 . とか .. といったディレクトリを生成しないものがある。
434 そのような場合、ディレクトリへの読み取り許可がないように見えてしまう。
435 このオプションを用いると、この動作を変更し、
436 このような完全に空のディレクトリを単に空であるとみなしてエラーにしない。
437 \fBunable to open directory: *: Permission denied\fP
438 というエラーになった場合は、このオプションを試してみるとよい。
439 このオプションはデフォルトでは有効になっている (次項を参照のこと)。
440 .TP
441 \fB--no-allow-empty-ftp-dirs\fP
442 現在はディレクトリに cd してアクセス許可を調べるためにようになったので、
443 デフォルトの動作は空のディレクトリを許可するようにした。
444 .TP
445 \fB--only-delete\fP
446 \fImirror\fP に対して、利用しているディスクスペースを
447 増加させるような変更は一切行なわない。
448 これは容量の限られているドライブに対してバックアップを取る場合、
449 転送の最中に \fIcontrol\fP に \fImirror\fP を増加させてしまうような
450 変更がなされるときに便利である。
451 一度このオプションをつけて \fBmirrordir\fP を実行すれば、
452 次にこのオプションをつけて実行したときには、
453 利用できる領域を越えないことが通常は保証される。
454 .TP
455 \fB-i\fP, \fB--ignore-next-exclude\fP
456 このオプションを指定すると、次の --exclude- タイプのオプションは、
457 対象ファイルが mirror ディレクトリにあろうと無かろうと、
458 それらを完全に無視することになる。
459 これは後述する
460 .B --exclude-script
461 オプションで \fBIGNORE\fP が返った場合と同じ効果を持つ。
462 これは特定のファイルを決して変更しないようにするのに利用できる。
463 例えば
464 .I /etc/named.boot
465 を決して変更したくない場合には、
466 .B mirrordir /mnt/1 /mnt/2 -i --exclude /mnt/1/etc/named.boot
467 とすればよい。mirror ディレクトリではなく、
468 control ディレクトリのフルパスで指定することに注意。
469 .B --exclude /mnt/2/etc/named.boot
470 では動作しない。
471 後者では、ファイルを削除したくない場合には
472 そのファイルが control ディレクトリに存在しなければならない
473 (たとえサイズ 0 であっても) という馬鹿げた動作となる。
474 .TP
475 \fB--exclude\fP \fIpath\fP
476 ファイルまたはディレクトリ
477 .I path
478 を除外する。コマンドラインにたくさんの exclude パスを指定すると、
479 動作が遅くなってしまう。除外されたパスは、
480 mirror ツリーに存在する場合は削除される
481 (そのディレクトリまたはファイルが存在していない場合と同様である)。
482 これらのファイルを削除せずに無視して保持しておきたい場合は、
483 --ignore オプションを用いること。
484
485 除外するファイルが長いリストになる場合は、
486 .B --exclude-from
487 オプションを利用すること。
488 .TP
489 \fB--exclude-glob\fP \fIglob\fP
490 glob 形式の表現
491 .I glob
492 にマッチするファイルするディレクトリを除外する。
493 ファイルへのマッチではフルパスを用いない。
494 シェルにおいては、glob 表現を適切な引用符で括り、
495 解釈されないようにする必要がある。
496 .TP
497 \fB--exclude-regexp\fP \fIregex\fP
498 フルパス名が
499 .I regex
500 にマッチするファイルやディレクトリを除外する。
501 シェルにおいては、正規表現を適切な引用符で括り、
502 解釈されないようにする必要がある。
503 .TP
504 \fB--exclude-script\fP [\fIexpr\fP|\fIfile\fP]
505 .RS
506 各ファイルに対する処理を行なう前に、スクリプト \fIexpr\fP を実行する。
507 このスクリプトは
508 C 言語スタイルの文ブロックからなり、\`\fBreturn\fP \fIexpression\fP;\'
509 で終了する。
510 .I expression
511 の値は
512 .BR INCLUDE ,
513 .BR EXCLUDE ,
514 .BR UNKNOWN
515 .B IGNORE
516 (上述の \fB-ifP を見よ)
517 のいずれかであり、そのファイルに対して成すべき動作を示す。
518 .I expr
519 にセミコロン (;) が含まれていない場合は、
520 これはファイル名とみなされ、そのファイルがロードされる。
521 それ以外の場合は、テキストは高速化のために
522 逆ポーランド形式にコンパイルされる。
523 このオプションは複数指定でき、
524 その場合スクリプトは
525 .B UNKNOWN
526 以外の値が返るまで、順に実行される。
527 .B UNKNOWN
528 が返った場合は、コマンドラインにあるその他の
529 .B --exclude-
530 形式のオプションが効力を持つ。
531 .PP
532 インタープリタがおかしなエラーを報告したり、
533 セグメンテーションフォールトを起こした場合は、
534 その原因となったスクリプトを私に送ってほしい。
535 .PP
536 このスクリプト言語自体は、C プログラミング言語のサブセットである。
537 例えば以下のようなものは正しいスクリプトである。
538 .PP
539 .nf
540 /* PATH はファイルのフルパス名で、DIR は末尾に
541    スラッシュ (/) の無いディレクトリ、CWD は
542    カレントワーキングディレクトリ、dpath() は
543    フォワードスラッシュ (/) の個数-1 を返す。*/
544 if (depth (DIR) - depth (CWD) > 3) {
545     printf ("%s: excluded\\n", PATH);
546     return EXCLUDE;
547 } else
548     return INCLUDE;
549 .fi
550 .PP
551 このスクリプト言語は代入演算子をサポートしない。
552 したがってユーザ定義変数をサポートしない。
553 .PP
554 以下の定義済みマクロを利用できる。
555 マクロの展開は、ディレクトリにもファイルと等しく同じように適用される。
556 .TP
557 \fBFILE\fP
558 現在のファイル (パス無し)
559 .TP
560 \fBNAME\fP
561 パス・拡張子の無いファイル名。末尾にドット (.) は付かない。
562 .TP
563 \fBEXTENSION\fP
564 ファイルの拡張子。先頭にドット (.) は付かない。
565 .TP
566 \fBDIR\fP
567 ファイル名の無いディレクトリ。末尾にスラッシュ (/) は付かない。
568 .TP
569 \fBPATH\fP
570 フルパスのファイル名
571 .TP
572 \fBCWD\fP
573 カレントワーキングディレクトリ
574 .TP
575 \fBTIME\fP
576 現在時刻 (秒単位)
577 .PP
578 C のすべての論理演算子・算術演算子・ビット演算子がサポートされている。
579 すなわち \fB(\fP
580 \fB)\fP
581 \fB>=\fP
582 \fB<=\fP 
583 \fB>\fP
584 \fB<\fP
585 \fB!=\fP
586 \fB==\fP
587 \fB&&\fP
588 \fB||\fP
589 \fB!\fP
590 \fB-\fP
591 \fB+\fP
592 \fB*\fP
593 \fB/\fP
594 \fB%\fP
595 \fB&\fP
596 \fB^\fP で、これらは全て C のものと同じ意味を持つ。
597 .PP
598 さらに以下に示すマクロも利用できる。
599 各々は整数 (C での \fBlong int\fP 型) を返す。
600 これらはそのファイルに対する \fBlstat\fP
601 (または \fB--follow-symlinks\fP が用いられている場合は \fBstat\fP)
602 を基にしている。詳しい説明は
603 .BR stat (2)
604 を参照のこと。
605 .PP
606 \fBstat.st_dev\fP - デバイス
607 .br
608 \fBstat.st_ino\fP - i-ノード
609 .br
610 \fBstat.st_mode \fP - 許可属性 (permission)
611 .br
612 \fBstat.st_nlink\fP - ハードリンクの数
613 .br
614 \fBstat.st_uid\fP - 所有者のユーザ id
615 .br
616 \fBstat.st_gid\fP - 所有者のグループ id
617 .br
618 \fBstat.st_rdev \fP - デバイスタイプ
619 .br
620 \fBstat.st_size \fP - ファイルサイズ (バイト単位)
621 .br
622 \fBstat.st_blksize\fP - ファイルシステム I/O のブロックサイズ
623 .br
624 \fBstat.st_blocks\fP - アロケート済みのブロック数
625 .\"nakaon allocated の typo?
626 .br
627 \fBstat.st_atime\fP - 最後にアクセスされた時刻 (秒単位)
628 .br
629 \fBstat.st_mtime\fP - 最後に変更された時刻 (行単位)
630 .br
631 \fBstat.st_ctime\fP - 作成された時刻
632 .PP
633 以下の関数はブール値を返す。
634 .TP
635 \fBstrncmp\fP(\fIstring1\fP, \fIstring2\fP, \fIinteger\fP);
636 string1 が string2 より小さい場合は 0 以下の整数を、
637 マッチする場合は 0 を、
638 大きい場合は 0 以上の整数を返す。
639 .TP
640 \fBglob\fP(\fIglob\fP, \fIstring\fP);
641 .I string
642 が glob 表現
643 .I glob
644 にマッチする場合は 0 を返す。
645 下層の実装における効率を良くしたい場合は、
646 あなたが書くコードでの glob 表現をひとつに限ってみること。
647 .TP
648 \fBregexp\fP(\fIregexp\fP, \fIstring\fP);
649 .I string
650 が正規表現
651 .I regexp
652 にマッチする場合は 0 を返す。
653 下層の実装における効率を良くしたい場合は、
654 あなたが書くコードでの正規表現をひとつに限ってみること。
655 .TP
656 \fBstrstr\fP(\fIstring1\fP, \fIstring2\fP);
657 .I string1
658 の長さの範囲に最初に現れる
659 .I string2
660 の位置を返す。現れない場合は 0 を返す。
661 .PP
662 以下の関数もブール値を返す。これらは
663 .BR stat (2)
664 で説明されているマクロに対応している。
665 これらは、指定された条件が真の場合に非ゼロの値を返す。
666 .PP
667 \fBS_ISLNK\fP(\fIinteger\fP); - ファイルはシンボリックリンク
668 .br
669 \fBS_ISREG\fP(\fIinteger\fP); - ファイルは通常のファイル
670 .br
671 \fBS_ISDIR\fP(\fIinteger\fP); - ファイルはディレクトリ
672 .br
673 \fBS_ISCHR\fP(\fIinteger\fP); - ファイルはキャラクタデバイス
674 .br
675 \fBS_ISBLK\fP(\fIinteger\fP); - ファイルはブロックデバイス
676 .br
677 \fBS_ISFIFO\fP(\fIinteger\fP); - ファイルは fifo
678 .br
679 \fBS_ISSOCK\fP(\fIinteger\fP); - ファイルはソケット
680 .PP
681 以下の関数は文字列を操作する。
682 .TP
683 \fBstrcat\fP(\fIstring1\fP, \fIstring2\fP);
684 .I string1
685
686 .I string2
687 を連結して返す。
688 .B +
689 演算子も文字列を連結することに注意。
690 .TP
691 \fBdepth\fP(\fIstring\fP);
692 .I string
693 に現れるフォワードスラッシュ (/) の個数から 1 を引いたものを返す。
694 .TP
695 \fBprintf\fP(\fIformat\fP, ...);
696 .BR printf (3)
697 のように動作する。ただし重要な例外がある:
698 .B long int
699 のフォーマット指定以外は使ってはならない。
700 これ以外の指定を行なったときの変換結果は未定義である。
701 例えば、\fB"%d"\fP ではなく \fB"%ld"\fP を用いること。
702 結果は標準出力に表示される。
703 .PP
704 以下の関数はシステムコールを実行する。
705 .TP
706 \fBsystem\fP(\fIcommand\fP);
707 .B /bin/sh -c
708 .I command
709 を実行する。しかし C 言語のものとは異なり、
710 コマンドの終了コードを返す。
711 つまり、一行だけのシェルスクリプト
712 .I command
713 を実行する。
714 .TP
715 \fBexec\fP(\fIargv0\fP, \fIargv1\fP, ...);
716 プロセス
717 .I argv0
718 を引数
719 .I argv1...
720 で実行する。
721 .I argv0
722 フルパスで指定しなければならない。
723 これは \fBsh\fP を経由しないので \fBsystem\fP より速い。
724 .TP
725 \fBpopen\fP([\fIstring\fP, ] \fIshell_command\fP);
726 .B system
727 と似ているが、
728 .I shell_command
729 の出力を文字列として返す。
730 .I string
731 が与えられている場合には、その文字列を
732 .I shell_command
733 の標準入力に与え、成功したら 0 を返す。
734 .PP
735 以下の整数定数も利用可能で、stat.h で定義されているマクロ
736 (説明は
737 .BR stat (2)
738 にある) に対応する。
739 .PP
740 \fBS_IFMT S_IFSOCK S_IFLNK S_IFREG S_IFBLK S_IFDIR S_IFCHR S_IFIFO
741 S_ISUID S_ISGID S_ISVTX S_IRWXU S_IRUSR S_IWUSR S_IXUSR S_IRWXG
742 S_IRGRP S_IWGRP S_IXGRP S_IRWXO S_IROTH S_IWOTH S_IXOTH\fP
743 .PP
744 以下の定数のひとつを
745 .B return
746 文を用いて返し、呼出し元に意図を伝える必要がある。
747 何も返さない場合は、返り値は
748 .B UNKNOWN
749 であるとみなされる。
750 .TP
751 \fBUNKNOWN\fP
752 どうすべきか分からない。引き続き他の
753 .B --exclude-
754 タイプのオプションを実行する。
755 .TP
756 \fBINCLUDE\fP
757 そのファイルを処理に含める。
758 .TP
759 \fBIGNORE\fP
760 そのファイルが mirror ディレクトリにあろうと無かろうと、
761 何も行なわない。
762 .TP
763 \fBEXCLUDE\fP
764 そのファイルが control ディレクトリに存在しないものとみなす。
765 よって mirror ディレクトリからは削除される
766 (これは
767 .B --keep-files
768 オプションよりも優先される)。
769 .PP
770 以下は C のようなフロー制御を行なう。
771 .PP
772 以下の
773 .B if
774 文は
775 .I integer
776 が真 (つまり非ゼロ)
777 ならば
778 .IR statement1 ,
779 .I statement2
780 などを実行し、
781 それ以外の場合は
782 .IR statementA ,
783 .I statementB
784 などを実行する。
785 .\"nakano 原文 1,2 は typo。
786 .B else
787 {...} の部分は省略可能である。
788 .PP
789 .nf
790     \fBif\fP (\fIinteger\fP) {
791         \fIstatement1\fP;
792         \fIstatement2\fP;
793         \.
794         \.
795         \.
796     } \fBelse\fP {
797         \fIstatementA\fP;
798         \fIstatementB\fP;
799         \.
800         \.
801         \.
802     }
803 .fi
804 .PP
805 .B return
806 文は
807 .B mirrordir
808 に値を返し、スクリプトを終了させる。
809 .PP
810 .nf
811     \fBreturn\fP \fIexpression\fP;
812 .fi
813 .PP
814 .B exit
815 関数は、
816 .B mirrordir
817 を指定した終了コードで終了させる。
818 .PP
819 .nf
820     \fBexit\fP(\fIinteger\fP);
821 .fi
822 .PP
823 通常 C スクリプトは、特定のファイルを除外するために用いる。
824 これはスクリプト言語の実装としてはやりすぎで、
825 機能のすべてを一般用途向けに書いたわけではない。
826 典型的なスクリプトは、例えばデバイスファイルを除外する、
827 という程度のことに留まるだろう。
828 .PP
829 .nf
830 if (S_ISSOCK(stat.st_mode) || S_ISFIFO(stat.st_mode)
831          || S_ISBLK(stat.st_mode) || S_ISCHR(stat.st_mode)) {
832     return EXCLUDE;
833 } else
834     return INCLUDE;
835 .fi
836 .PP
837 .B --recurs-mode
838 オプションとともに用いれば、
839 C スクリプトはファイルを検索するためにも利用できる
840 .RB ( recursdir
841 コマンドと同じ):
842 .PP
843 .nf
844 /* core ファイルを全て削除する */
845 /* この例は \fB例\fP セクションに移動した。 */
846 .fi
847 .RE
848 .PP
849 .TP
850 \fB--exclude-from\fP \fIfile\fP
851 ファイル
852 .I file
853 に書かれているリストに含まれるパスを除外する。
854 空行とコメント行 (行頭の文字が # の行) は無視される。
855 このファイルのリストはソートされ二分木探索されるので、
856 たくさんのファイル名を除外したい場合には、
857 ここにそれらのファイルを書く方が性能は良くなる。
858 このオプションは複数指定でき、複数個のファイルを指定できる。
859 .BR バグ:
860 .I file
861 の最後に与えたパスは、改行で終らなければならない。
862 .TP
863 \fB--backup-extension\fP \fIlevel\fP
864 ファイルを削除したり置き換えたりする前に、
865 それらのファイルのバックアップを作る。
866 .I extension
867 は C 形式のフォーマット文字列で、例えば .ORIG.%d
868 (% へのシェル代入に注意) のようにする。
869 .I level
870 は保存しておくリビジョンの最大数。
871 .I extension
872 がファイル名に追加され、古いファイルほど大きな番号を持つ。
873 .TP
874 \fB--backup-outdate \fIsec\fP
875 .I sec
876 秒よりも古いバックアップファイルを削除する。
877 .TP
878 \fB--nice\fP \fInum\fP 
879 時々スリープして、他のプロセスに対して行儀良く振る舞う。
880 --nice を指定すると、プロセスはアクティブであった時間の
881 .I num
882 倍の時間スリープする。したがって 1 を指定すると
883 (非常におおざっぱに言えば) コピーに要する時間は 2 倍になり、
884 3 を指定すれば 4 倍になる。
885 これは定期的なバックアップを、
886 CPU 負荷を小さくして行ないたい場合に利用するとよい。
887 システムによっては --nice は利用できないかもしれない。
888 .TP
889 \fB--no-chmod\fP
890 .\"nakano than は then の typo
891 通常はファイルの許可属性設定が行なわれる。
892 アクセス権限が制限されていて、許可属性を変更できない場合は、
893 このオプションを指定すれば許可属性設定を無効にできる。
894 .TP
895 \fB--no-chown\fP
896 .\"nakano than は then の typo
897 通常はファイルの所有権設定が行なわれる。
898 アクセス権限が制限されていて、所有者を変更できない場合は、
899 このオプションを指定すれば所有権設定を無効にできる。
900 .TP
901 \fB--mtime-threshold\fP \fIsec\fP
902 mtime の違いがこの値よりも小さい場合には、
903 ファイルは上書きされない。ftp サイトをミラーした場合、
904 そのミラー中の mtime は分の単位の精度しか持たないので、
905 これを nfs ミラーしようとするとすべてのファイルがコピーされる。
906 これを直すには --mtime-threshold 60 を用いればよい。
907 .TP
908 \fB--time-offset\fP [[\fI+\fP]|\fI-\fP][\fIH\fP]\fIH\fP[\fI:MM\fP]
909 vfs な (つまり ローカルでない) ディレクトリの時刻オフセットを設定する。
910 例えば私は New York より 8 時間東にいるので、
911 New York からミラーする場合には
912 .B --time-offset -8:00
913 を使っている。
914 .TP
915 \fB--test-only, --dry-run\fP
916 実際には変更を行なわない。
917 --verbose と共に用いると、
918 どのような変更がなされるかを表示できる。
919 これはディレクトリ間の比較をするのにも効果的な方法である。
920 \fIこれはテストされていない。
921 すなわち、このオプションが\fB本当に\fI変更をしないかどうかは、
922 私は保証できない。\fP
923 .TP
924 \fB--skip-symlinks\fP
925 シンボリックリンクは、読み込まれなかったかのように扱われる。
926 よってそれらが mirror ディレクトリにあると、削除される。
927 .TP
928 \fB--keep-files\fP
929 ファイルが
930 .I control
931 に無い場合でも、そのファイルを
932 .I mirror
933 から削除しない。こうすると
934 .B mirrordir
935 はある意味
936 .BR cp (1)
937 のようになる。
938 .TP
939 \fB--no-hard-links\fP
940 このオプションが指定されない限り、
941 .B mirrordir
942 はハードリンク属性を正しくミラーする。
943 指定されると、ハードリンクは通常ファイルのようにコピーされる。
944 .TP
945 \fB--follow-symlinks\fP
946 このオプションが指定されなければ、
947 .B mirrordir
948 はシンボリックリンクを適切にミラーする。
949 指定されると、シンボリックリンクは通常ファイルとしてコピーされる。
950 Debian ツリーをミラーするときに便利である。
951 注意してほしいのは、
952 シンボリックリンクは control と mirror の両方で解決される、
953 という点である。
954 依ってシンボリックリンクが mirror ディレクトリに存在していると、
955 それらはそのままシンボリックリンクのまま残る。
956 .B --follow-symlinks
957 を指定すると、暗黙のうちに
958 .B --no-hard-links
959 も指定したことになる。
960 .TP
961 \fB--strict-locking\fP
962 ファイルを読み込むとき、共有読み込みのロックを作成する。
963 これはファイルコピーの事故を予防する。
964 特にメールディレクトリに対して有効である
965 (メールプログラムは
966 .B mirrordir
967 がファイルを読み込もうとしているときに、
968 同時にそれらに書き込みを行なおうとするかもしれない)。
969 このオプションは仮想ファイルシステムに対しては効力を持たない。
970 .TP
971 .BR "--max-bytes " [[ \fInum\fP [  k | M | G ]] "" | \fInum\fP ]
972 このバイト数を越えると `filled up all blocks - first file/dir not mirrored:
973 \fIpath\fP' というメッセージが標準出力に表示される。
974 残りのファイルは \fImirror\fP から削除されるが、
975 これはリストされた順序で行なわれる。よって
976 .B mirrordir
977 が走り続けていると、アーカイブの大きさが \fInum\fP を越えることがある。
978 この偶発分のゆとりをとって、
979 \fInum\fP は利用できるスペースより小さくしておくこと。
980 またファイルシステムによっては、
981 完全にいっぱいになる前に `No space left on device'
982 というメッセージを出すことがある。
983 .B mirrordir
984 には \fB--starting-file\fP \fIpath\fP オプションがあり、
985 これを用いると別のデバイスで作業を継続できる。
986 こうすれば、複数のデバイスに対して
987 .B mirrordir
988 を用いたバックアップができる。
989 .I num
990 には
991 .BR k ,
992 .BR M ,
993 .B G
994 (大文字小文字を区別する) のいずれかを後置でき、
995 それぞれキロバイト、メガバイト、ギガバイトを指定する。
996 どれかひとつのファイルがこの数値よりも大きいと、
997 エラーメッセージが表示される。
998 .B --block-size
999 も参照のこと。
1000 .TP
1001 .BR "--password " \fIpassword\fP
1002 FTP 接続・mc:// 接続に対するパスワードを設定する。
1003 匿名接続の場合のパスワードは、
1004 デフォルトで「ログイン名@ローカルマシン名」になっている。
1005 それ以外のログインパスワードは、プロンプトが出て尋ねられる。
1006 いつもの警告だが、
1007 パスワードをスクリプトに含めるのはセキュリティ上のリスクがある。
1008 パスワードは
1009 .B "~/.netrc"
1010 ファイルに入れ、
1011 .B --no-netrc
1012 オプションを指定しないかたちの方がずっと良い。
1013 詳細は
1014 .B man ftp
1015 を見よ。
1016 .TP
1017 \fB--password-exact\fP \fIpassword\fP]
1018 匿名パスワードの前に \fB-\fP を前置しない。
1019 ftp の匿名パスワードでは、通常パスワード文字列の前に
1020 \fB-\fP が置かれる。私は
1021 Midnight Commander vfs がなぜこのようにしていたのか知らないが、
1022 あるユーザがこの問題に突き当たったので、
1023 このオプションを設け、パスワードを
1024 .I password
1025 に指定した通りに送れるようにしている。
1026 .TP
1027 \fB--test-login\fP
1028 .B --login-mode
1029
1030 .B pslogin
1031 を用いるとき、非対話的なアクセスをテストしてみたいことがあるだろう
1032 (例えばシェルスクリプトで用いたいときなど)。
1033 これを行なうには、
1034 .B pslogin
1035 をこのオプションとともに実行し、終了ステータスを見ればよい。
1036 .B secure-mcserv
1037 は、ユーザがパスワードサーバにログインできるかどうかを調べるために、
1038 これを用いている。
1039 .TP
1040 \fB--no-warn-first-login\fP
1041 あるマシンに対して最初に安全な接続を試みた時は、
1042 公開鍵がローカルマシンに存在しない。
1043 よって「間に人」攻撃に対して無防備である。
1044 この内容に関する警告が表示され、
1045 ユーザにプロンプトが出され、継続したいかどうか尋ねられる。
1046 このオプションはこの警告を出さないようにし、
1047 一切を無視して先に進む。
1048 .TP
1049 \fB--read-password-from-stdin\fP
1050 パスワードをコマンドラインから指定するのではなく、
1051 標準入力から与える。
1052 これは見えないパスワードをタイプ入力するのと同じではない。
1053 こちらは端末が無い場合にでも使える。
1054 これは他のプログラムから、例えば
1055 .BR popen (3)
1056 などを用いて利用する場合に都合が良い。
1057 .B secure-mcserv
1058 は、ユーザがパスワードサーバにログインできるかどうかを調べるために、
1059 これを用いている。
1060 .TP
1061 .BR "--netrc"
1062 .B ~/.netrc
1063 をスキャンする。デフォルトでこのオプションは on になっている。
1064 .TP
1065 .BR "--no-netrc"
1066 .B ~/.netrc
1067 ファイルの読み込みを行なわない。
1068 .TP
1069 \fB--proxy-host\fP \fIhost\fP
1070 ftp ダウンロードのプロキシを設定する。
1071 これがどのように動作するのか、
1072 あるいは実際に動作するかどうかは私にはわからない。
1073 プロキシのサポートについては
1074 .BR mc (1)
1075 にあたってほしい。
1076 .TP
1077 .BR "--secure"
1078 (\fIこの機能はβ段階である\fP) 私は
1079 .B mirrordir
1080 用に安全なソケット層を実装した。これはこのオプションで有効となり、
1081 .B secure-mcserv
1082 の接続 (すなわち \fBmc://\fP 形式の URL) に適用される。
1083 安全なソケットのライブラリは
1084 .B libdiffie.a
1085 とヘッダファイル
1086 .B diffie-socket.h
1087 からなる。
1088 .B sys/socket.h
1089 の後に
1090 .B diffie-socket.h
1091 をインクルードし、そのプログラムを際コンパイルすれば、
1092 通常のソケットが全て安全なソケットになる
1093 (これは Unix のソケットコールを用いる、あらゆるプログラムに当てはまるが、
1094 しかしテストはされていない)。
1095 これをサポートする最初のサービスは
1096 .B secure-mcserv
1097 で、デフォルトでコンパイルされ、インストールされる。
1098 よって、リモートのホストも
1099 .B secure-mcserv
1100 を走らせていれば、
1101 \fBmc://\fP ファイルシステムは
1102 .B --secure
1103 オプションで利用できる (\fBsecure-mcserv -h\fP とすればヘルプが表示される)。
1104 .B --secure
1105 は、DES などのブロック cipher よりずっと安全で高速なストリーム cipher を、
1106 公開鍵サーバ認証 (Diffie-Hellman 及び p-NEW スキーム) の
1107 離散対数鍵交換で用いている。
1108 .\"nakano この辺おかしいかもしれない。
1109 詳細はソース配布の
1110 .B diffie-socket.h
1111 を見てほしい。デフォルトの鍵のサイズは 512 ビットである。
1112 .I gcc
1113 を用いている場合は、
1114 .B mirrordir
1115 のコンパイル時に
1116 .B -O3 -fomit-frame-pointer -s -Wall
1117 オプションをつけると、鍵生成が高速化される。
1118 .TP
1119 .BR "--key-size " \fIbits\fP
1120 デフォルトの鍵サイズは 512 ビットである。
1121 サイズを変更するには素数を生成して fileld.c に書き込まなければならないので、
1122 field.c にリストされているサイズだけがサポートされており、
1123 .\"nakano primes はミスだろう。
1124 現時点ではこれは 512, 768, 1024, 1536 である。
1125 遅い計算機を用いている場合には、中程度のセキュリティとなる 768 を奨める。
1126 それ以外なら、長い目で見れば 1536 も非合理で偏執的な値、というわけでもない。
1127 巨大企業・良くつないでくるハッカー・政府などがあなたの接続を
1128 盗聴している心配がなければ、512 でも構わないだろう。
1129 ストリーム cipher は \fBbits\fP/2 の長さを持つので、クラックされる確率は、
1130 宝くじを換金しているあいだに隕石にぶち当たる確率よりは低い。
1131 ただしある人間が接続を盗聴し、長い間出力をとり続ければ、
1132 破ることは不可能ではない。
1133 20 年も経てば、1536 ビットの鍵も小さいと考えられるかもしれない。
1134 また (ここで用いられている) 離散対数問題は、
1135 素因数分解よりも解くのが難しいと考えられているので、
1136 鍵は RSA よりも実効的にやや大きいことになる。
1137 これは私の (どちらかというと無学な) 意見である。
1138 .TP
1139 \fB--download-scripts\fP
1140 .B mirrordir
1141 には 2 つの版、\fIInternational\fP 版と \fIUS\fP 版がある
1142 .RB ( --version
1143 を見よ)。\fIUS\fP 版は暗号化に類するコードを一切含んでいない。
1144 その代わり、必要なアルゴリズムを (\fB南アフリカ\fP にある)
1145 .B encrypt.obsidian.co.za
1146 からダウンロードするようになっている。
1147 これらは高速かつネイティブな、C 形式のインタープリタ言語で書かれている。
1148 これらは 4 つのスクリプトからなる。それぞれ、
1149 Diffie-Hellman 鍵交換サーバ、Diffie-Hellman 鍵交換クライアント、
1150 ストリーム cipher の初期化、実際にストリーム cipher を用いた暗号化、
1151 のためのものである。
1152 .B mirrordir
1153 は、あなたがセキュリティ機能を用いようとすると、
1154 自動的にこれらのスクリプトをダウンロードする。しかしこの
1155 .B --download-script
1156 オプションを用いると、いつでもダウンロードを実行できる。
1157 \fIInternational\fP 版にはストリーム cipher が組み込まれていて、
1158 2 つのスクリプトだけを用いるが、
1159 これらは配布に含まれているのでダウンロードの必要はない。
1160 Diffie-Hellman 交換をスクリプトで用いても、速度的な劣化は生じない。
1161 しかし暗号化に関しては、
1162 スクリプトと組み込みの間の違いが結構大きいかもしれない。
1163 .TP
1164 \fB--version\fP
1165 バージョン番号と、
1166 この
1167 .B mirrordir
1168
1169 .I International
1170 版か
1171 .I US
1172 版かを表示する。
1173 .B --download-scripts
1174 を見よ。
1175 .TP
1176 \fB-z\fP, \fB--gzip\fP
1177 .B mc://
1178 接続で圧縮を有効にする。
1179 実際には符号化よりも低いレベルにある圧縮ソケット層を呼出す。
1180 圧縮は
1181 .BR gzip (1)
1182
1183 .B libz
1184 ライブラリを用いて行なう。圧縮の程度は、
1185 転送時間を最小化するように動的に設定される。
1186 高速なイーサネット接続なら無圧縮にまで低くなりうるし、
1187 モデム経由の遅い接続では最大圧縮にまで高くなる。
1188 このアルゴリズムは、TCP の write コールが、
1189 同量のデータを
1190 .I deflate
1191 する (つまり圧縮する) 時間の 2〜5 % の範囲になるように、
1192 圧縮レベルを調整する。
1193 .TP
1194 \fB--gzip-backups\fP
1195 バックアップは通常は単にファイルのコピーである。
1196 このオプションを指定すると各ファイルは圧縮され、
1197 .B .gz
1198 がデフォルトの拡張子として付加される。
1199 バックアップの拡張として、あなたが自分で
1200 .B --backup-extension
1201 の指定を行なった場合は、その末尾が
1202 .B .gz
1203 で終らないと、比較が正しく動作しない。
1204 .TP
1205 \fB--case-insensitive\fP, \fB--for-Robert-Seese\fP
1206 ファイル名やリンク名の比較に、大文字小文字の違いを無視する。
1207 これは、特定の頭の悪い OS と通信するときに便利だろう。
1208 このオプションがすべての状況で正しく動作するかどうかは、あまり自信が無い。
1209 .TP
1210 \fB--to-lower\fP
1211 .TP
1212 \fB--to-upper\fP
1213 すべての新しいファイル名を大文字または小文字に変換する。
1214 .B --case-insensitive
1215 と共に用いると、新しいファイルを作成する場合にのみ適用される。
1216 .B --case-insensitive
1217 なしで指定すると、既存かどうかに関らす、
1218 すべてのファイルが大文字・小文字に変換される。
1219 このときの方法は非効率的なもので、
1220 古いファイルを一度消してから、新しいファイルを再度コピーする。
1221 これは、特定の頭の悪い OS と通信するときに便利だろう。
1222 このオプションがすべての状況で正しく動作するかどうかは、あまり自信が無い。
1223 .TP
1224 \fB--no-use-passive-connections\fP
1225 .B could not setup passive mode
1226 というエラーメッセージを受け取った場合、
1227 このオプションを有効にする必要があると考えられる。
1228 私は `passive' の意味するところを完全には理解していないので、
1229 私には聞かないでほしい。
1230 .TP
1231 \fB--tar-file\fP \fIfilename\fP
1232 これは
1233 .B recursdir
1234 と共にのみ用いる。tar アーカイブを GNU
1235 .BR tar (1)
1236 と同じフォーマットで作成し、
1237 .I filename
1238 に保存する。先頭の特殊なプレフィックスと末尾のスラッシュは削除される。
1239 すなわち
1240 .I http://machine/dir/file
1241
1242 .I dir/file
1243 になる。ファイル名の先頭文字が | の場合、
1244 テキストの残りは出力がパイプされるコマンドとみなされる。
1245 よって gzip 圧縮アーカイブは、例えば以下のようにすれば作成できる。
1246 .br
1247 recursdir ftp://machine/dir --tar-file '| gzip -d > foo.tar.gz'
1248 .TP
1249 \fB--tar-block-size\fP \fIN\fP
1250 tar 出力のブロックサイズを 512 * \fIN\fP にする。
1251 これはデータをアーカイブに書き込むときの単位である。
1252 デフォルトは 20。
1253 これはブロックデバイスに書き込むときに限って意味を持つ。
1254 これを
1255 .B --block-size
1256 と混同しないこと。
1257 .TP
1258 .BR "--block-size " \fIbytes\fP
1259 デフォルトのブロックサイズは 1024 バイトである。
1260 消費されるブロックの総数を計算する際、
1261 ファイルサイズは隣接するブロック末尾に切り上げられる。
1262 実際のブロックサイズがこの値よりも大きいと、
1263 書き込み時に実際に利用されるブロック数よりも、
1264 計算値が小さくなる可能性がある。
1265 よって
1266 .B --max-bytes
1267 オプションを用いるときには、実際のブロックサイズと同じ、
1268 またはより大きな値を指定することがとても大切である。
1269 .TP
1270 .BR --strict-mtimes
1271 通常ファイルをコピーする場合、
1272 .B mirrordir
1273 は通常 mirror のファイルが
1274 control のファイルよりも「古い」場合に限って上書きコピーを行なう。
1275 このオプションを用いると、
1276 ファイル間に修正時刻の「何らかの」差異があれば、コピーを行なう。
1277 .TP
1278 \fB--no-mtimes\fP
1279 サイズが違う場合に限ってコピーする。
1280 ファイルの修正時刻は無視する。
1281 .TP
1282 \fB--ignore-size\fP
1283 ファイルのコピーを mtime に基づいて行ない、
1284 サイズの違いは無視する。
1285 .TP 
1286 .BR "--starting-file " \fIpath\fP
1287 .I path
1288 はファイルまたはディレクトリ。
1289 .I path
1290 が読まれるまでは、ファイルやディレクトリは除外ファイル
1291 (つまり
1292 .I mirror
1293 にある場合は削除される) のように扱われる。
1294 .I path
1295 を含むディレクトリは、存在していなければ作成される。
1296 .I path
1297 が読み込まれると、ファイルやディレクトリは通常にミラーされる。
1298 .I path
1299 そのものもミラーされる。
1300 .I path
1301 またはそのサブディレクトリが存在していない場合は、
1302 .\"nakano path がなくてサブディレクトリがある場合ってあるの?
1303 .B mirrordir
1304 は直ちに終了する。
1305 これは
1306 .B mirrordir
1307 が作業前に終了する唯一の場合である。
1308 これは
1309 .I path
1310 が見つからない場合に、ファイルシステム全体が削除されるのを防ぐためである。
1311 .SH FTP のサポート
1312 ftp 転送が、
1313 Midnight Commander の仮想ファイルシステム
1314 (Virtual File System: \fBVFS\fP) を利用する形でサポートされている。
1315 要するにつまり、URL もローカルディレクトリと同じようにサポートされている。
1316 以下に例を示そう。
1317 .nf
1318     mirrordir --verbose \\ 
1319         ftp://lava.obsidian.co.za/pub/mirrordir \\ 
1320             /home/mirrordir
1321 .fi
1322 あるいは
1323 .nf
1324     mirrordir --verbose /home/mirrordir \\ 
1325         ftp://psheer@lava.obsidian.co.za/home/ftp/pub/mirrordir
1326 .fi
1327 も動作する。ただし後者ではまずパスワードを尋ねられる。
1328 ftp サーバに「アップロード」を行う場合は、
1329 --strict-mtimes オプションは on にすべきでない。
1330 ftp では修正時刻の設定はできないので、
1331 すべてがコピーされてしまう。
1332 .PP
1333 (--verbose を設定すれば)
1334 .B mirrordir
1335 が繰り返し ftp
1336 で修正時刻とアクセス時刻をセットしようとしていることに気づくだろう。
1337 用いている VFS のタイプにおける制限をユーザに知らせるために、
1338 これらのメッセージは残しておくつもりである。
1339 これらの試行は、明らかな性能の劣化としては現われない。
1340 しかしこのプロトコルを用いたアップロードの性能が悪い場合は、代わりに
1341 .B mc://
1342 を用いてみるといいだろう。
1343 なおダウンロードは常にアップロードよりも高速である。
1344 .PP
1345 一般に cron ジョブでは ftp アップロードを用いるべきではない。
1346 またディレクトリの同期を取る目的にも向いていない。
1347 ディレクトリを同期したい場合は、反対側からのダウンロードを用いること。
1348 アップロードは一回きりのアップロードにしか有用でない。
1349 .SH 例
1350 ここでは
1351 .B mirrordir
1352 を用いて行える、ちょっと気の効いた作業を紹介する。
1353 .TP
1354 .B ミニマリスト的コピー
1355 .RS
1356 ソースツリーが 2 つあり、
1357 古い版をパッチを適用するために保管しておきたいとする。
1358 これには
1359 .B mkdir tree.OLD
1360 して、
1361 .PP
1362 .nf
1363     \fB  mirrordir -v tree tree.OLD\fP
1364 .fi
1365 .PP
1366 するだけでよい。
1367 もう一度
1368 .B mirrordir
1369 を実行すれば、最小限の変更のみ (つまり更新されたファイルのみ)
1370 がコピーされる (実は
1371 .BR cp (1)
1372 も同じことをする)。
1373 .RE
1374 .TP
1375 .B システムバックアップ
1376 .RS
1377 システムによっては、
1378 定期的なバックアップをテープアーカイブに行っていることがある。
1379 また RAID デバイスを用いて、
1380 あるパーティションと同一のコピーを恒常的に保持しているシステムもあるだろう。
1381 .B mirrordir
1382 はさらに別の選択肢を提供する。
1383 システムに 2 台のドライブを装備する。ひとつは普段用いるもの、
1384 もう一つはバックアップするためのものである。
1385 そして
1386 .B mirrordir
1387
1388 .BR cron (8)
1389 のテーブルに追加するのだ。
1390 変更されたファイルのバックアップには、様々なオプションが利用できる。
1391 バックアップディレクトリはユーザから読み取り可能にしておき、
1392 各人のバックアップファイルを閲覧できるようにしておくといいだろう。
1393 特定のファイルの古いバージョンを取り戻したいユーザは、
1394 バックアップから入手できるようになる。
1395 .B mirrordir
1396 は変更されたファイルの最小限だけを処理するので、非常に高速である。
1397 一日に何回も実行したり、あるいは --nice オプションを付けて
1398 途切れることなく実行させることさえ可能である。
1399
1400 マシンが壊れたときに対する備えをさらに強固にしたければ、
1401 FTP を用いてリモートマシンにバックアップを行うこともできる。
1402 .RE
1403 .TP
1404 .B 2 台のマシンを毎時バックアップする
1405 .RS
1406 .B dar2
1407 というマシン上で、私は次のような cron ジョブを 6 時間ごとに実行している。
1408 .PP
1409 .nf
1410 #!/bin/sh
1411
1412 # (this is just in case of any bugs I don't know about,
1413 # but I don't think it is necessary)
1414 killall -9 tee
1415 killall mirrordir >& /dev/null
1416 sleep 2
1417 killall -9 mirrordir >& /dev/null
1418
1419 (                                                               \\
1420 date                                                        ;   \\
1421 echo "mirrordir says (if it said nothing it is bad):"       ;   \\
1422     mirrordir mc://dar1:12346/ -p abcdefg /mnt/dar1/            \\
1423     -i --exclude-regexp '^mc://dar1:12346/var/lock/subsys/atd'  \\
1424     --exclude-regexp '^mc://dar1:12346/proc/'                   \\
1425     --exclude-regexp '^mc://dar1:12346/mnt/[^/]*/.*$'           \\
1426     -i --exclude-regexp '^mc://dar1:12346/boot/'                \\
1427     -i --exclude-regexp '^mc://dar1:12346/etc/lilo.conf'        \\
1428     -C                                                          \\
1429 \'
1430 if (S_ISDIR (stat.st_mode)) {
1431     if (!regexp ("^mc://dar1:12346/[^/]*$", PATH))
1432         printf ("Backing up: %s\n", PATH);
1433 }
1434 \'                                                   ;           \\
1435 date                                                ;           \\
1436 echo "Done"                                         ;           \\
1437 ) 2>&1                                                          \\
1438 | tee --ignore-interrupts --append /var/log/mirrordir.log       \\
1439 | mail -s 'dar1 backup results' psheer@obsidian.co.za
1440 .fi
1441 .PP
1442 .RE
1443 .TP
1444 .B 安全な転送とログイン
1445 .RS
1446 .B turing.co.uk
1447 において以下のコマンドを実行しておく
1448 .br
1449 .nf
1450     \fBsecure-mcserv -p 12345 -d\fP
1451 .fi
1452 .br
1453 どこか外部のマシンから
1454 .br
1455 .nf
1456     \fBcopydir --secure -K 512 -z \\ 
1457     mc://alan@turing.co.uk:12345/usr/src/linux/.config .\fP
1458 .fi
1459 .br
1460 とすれば、512 ビットの鍵を用いた安全なファイルコピー (圧縮つき) ができる。
1461 また
1462 .br
1463 .nf
1464     \fBpslogin mc://alan@turing.co.uk:12345/\fP
1465 .fi
1466 .br
1467 とすれば、このマシンに安全にログインできる。
1468 .br
1469 .RE
1470 .TP
1471 .B FTP サイトのミラー
1472 .RS
1473 ftp サイトでは ls の -R オプションが禁止されていることが多いので、
1474 従来用いられてきた
1475 .B mirror (1)
1476 は失敗することがあった。
1477 .B mirrordir
1478 にはこの制限はない。
1479 .PP
1480 .nf
1481     \fBmirrordir -v ftp://metalab.unc.edu/pub /home/ftp/pub\fP
1482 .fi
1483 .PP
1484 .RE
1485 .TP
1486 .B FTP 転送
1487 .RS
1488 よくある FTP 転送は、--copy-mode オプションを用いた
1489 一行のコマンドで簡単に実現できる。
1490 複数のファイルをどちら向きにも、
1491 また別々の ftp サイトにすら (間接的にではあるが)、
1492 .BR cp (1)
1493 のようにコピーできる。
1494 .br
1495 .nf
1496     \fBcopydir -v mirrordir-0.9.15.tar.gz \\ 
1497     mirrordir.lsm ftp://metalab.unc.edu/incoming/Linux\fP
1498 .fi
1499 とすると
1500 .B mirrordir
1501 を sunsite にアップロードする。
1502 .LP
1503 anonymous でない ftp 転送のパスワードは、標準的な ftp の慣習に従って
1504 .B "~/.netrc"
1505 ファイルに置き、--netrc オプションを用いるのがよい。
1506 あるいは
1507 .B ftp://myname@machine/
1508 を用いてもかまわない。
1509 .RE
1510 .TP
1511 .B ファイル探索
1512 \fBrecursdir / -C\fP 
1513 .br
1514 .B 'if (!glob ("*.c", FILE)) printf ("%s\\\\n", PATH);'
1515 .br
1516 とするとシステムにあるすべての C ファイルを表示する。
1517 .br
1518 \fBrecursdir / -C\fP 
1519 .br
1520 .B 'if (S_ISCHR(stat.st_mode)) printf ("%s\\\\n", PATH);'
1521 .br
1522 とすればシステムにあるすべてのキャラクタデバイスを表示する。
1523 .TP
1524 .B FTP サイトをテープにバックアップする
1525 .RS
1526 リモートサイトをテープにバックアップするには
1527 .br
1528 .nf
1529     \fBrecursdir ftp://user@remote.machine/ \\ 
1530     --exclude-regexp '//[^/]*/proc/' --tar-file /dev/mt\fP 
1531 .fi
1532 とすればよい。
1533 .br
1534 .RE
1535 .TP
1536 .B core ファイルの削除
1537 .RS
1538 これはシステムからすべての core ファイルを削除する:
1539 .PP
1540 .nf
1541 recursdir / -C \'
1542 long l;
1543 if (strncmp (PATH, "/proc", 5)) {
1544     if (S_ISREG (stat.st_mode) && !strcmp ("core", FILE)) {
1545         if (strstr (popen ("file " + PATH), "ELF 32-bit LSB core")) {
1546             l = l + stat.st_size;
1547             printf ("removing: %s, cumu. total = %ldkB\\n", PATH, l >> 10);
1548             exec ("rm", "-f", PATH);    /* could also use system() */
1549         }
1550     }
1551 }
1552 \'
1553 .fi
1554 .PP
1555 .RE
1556 .SH 環境変数
1557 .TP
1558 .B TMPDIR
1559 一時的なファイルを保管させたいディレクトリ。
1560 ftp ファイルシステムは、
1561 まずファイルをこの一時ディレクトリにダウンロードし、
1562 正しい場所にそのファイルをコピーする。後述の \fBバグ\fP を参照のこと。
1563
1564 TMPDIR が指定されないと、
1565 デフォルトでは現在進行中のファイルがあるディレクトリに保存される。
1566 .SH 返り値
1567 .B mirrordir
1568 は以下の値を返す:
1569 .TP
1570 .B 0
1571 成功。
1572 .TP
1573 .B 1
1574 何らかのエラー (書き込みエラー、許可属性エラーなど) が起った。
1575 この場合、エラーの詳細は stderr に書き込まれているはずである。
1576 .TP
1577 .B 2
1578 あるファイルが利用中でコピーできなかったが、それ以外は成功した。
1579 この場合は `unable to open control file for writing'
1580 というエラーが書き込まれているはずである。
1581 標準エラーでこのメッセージを grep し、これらのファイルに対してのみ
1582 もう一度 mirrordir を実行すればよい。
1583 .BR grep (1)
1584 を参照のこと。
1585 .SH バグ
1586 .B atd
1587 デーモンのあるバージョンでは、
1588 ロックファイル (や pid ファイル?) をそのファイルもロック付きで作成するため、
1589 .B secure-mcserv
1590 が永遠にブロックする。
1591 これを防ぐには、
1592 .B atd
1593 を停止させるか、このファイルを対象から除外しなければならない。
1594
1595 サマータイムの時間補正があるところと ftp でミラーを行うと、
1596 1 時間の時間のオフセットが生じるように見える。
1597 とりあえずの回避策としては --time-offset を用いてほしい。
1598 これが
1599 .B mirrordir
1600 のせいなのかどうかは私にはわからない。
1601
1602 .B mirrordir
1603 のせいで CPU が食い尽くされ、停止してしまうように見えるバグは修正された。
1604
1605 コマンドラインから多数の --exclude 式を指定すると、
1606 処理が遅くなる。たくさんのファイルのリストを除外対象したい人は、
1607 そのリストをテキストファイルに書いて、
1608 .B --exclude-from
1609 オプションを利用する方がよい。
1610
1611 シンボリックリンク (それが指すファイルではない)
1612 の修正時刻とアクセス時刻は複製されない。
1613
1614 以前にあった、ハードリンクファイルが通常ファイルとして扱われてしまうという
1615 制限は解決された。--no-hard-links オプションを指定すれば、
1616 0.9.8 以前の動作をエミュレート可能である。
1617
1618 ハードリンクがデバイスをまたいで作成されているかどうかはチェックしていない。
1619 この場合はそれに見合ったエラーが報告されることになろう。
1620
1621 ftp ファイルシステムは、まずファイルを一時ディレクトリに
1622 \fB*ftpfs*\fP という名前でダウンロードする。
1623 これはスペースの無駄だが、vfs ライブラリのデフォルトの動作なのだ。
1624 このディレクトリに十分な容量がないと、おそらく
1625 .B mirrordir
1626 はハングする。
1627 上述の \fB環境変数\fP を参照のこと。
1628
1629 ファイル除外に用いる C スクリプト言語は、
1630 実装のやりすぎである。
1631 .SH ファイル
1632 .TP
1633 .B "~/.netrc"
1634 マシンとそのパスワードのリスト。
1635 オプション
1636 .B --netrc
1637 を参照のこと。
1638 .TP
1639 .B /etc/ssocket/accept.cs
1640 このスクリプトは、接続のサーバ側で、鍵交換と署名生成を行う。
1641 .TP
1642 .B /etc/ssocket/connect.cs
1643 このスクリプトは、接続のクライアント側で、鍵交換と署名生成を行う。
1644 .TP
1645 .B /etc/ssocket/arcinit.cs
1646 ストリーム cipher 暗号化を初期化する
1647 (国際版では存在しない)。
1648 .TP
1649 .B /etc/ssocket/arcencrypt.cs
1650 ストリーム cipher 暗号化を行う
1651 (国際版では存在しない)。
1652 .TP
1653 .B /etc/ssocket/private/
1654 このディレクトリには、ホストの秘密鍵が置かれる。
1655 鍵はそれぞれ別々のファイルに保存される。
1656 ファイル名は 512, 1024 などである。
1657 鍵のデータベースを使うようにすると、
1658 鍵管理用のユーティリティが必要になるので、
1659 こちらのほうがよい。
1660 すぐに Reiser ファイルシステムが標準的になるだろうから、
1661 データベースファイルはいずれにしても不要になるだろう。
1662 .TP
1663 .B /etc/ssocket/public/
1664 こちらは公開鍵のもの。後は \fB/etc/ssocket/private/\fP と同様。
1665 .SH 準拠
1666 mirrordir は作成者の発明であり、
1667 いかなる OS の標準にも従っていない (そうするべきではあるが!)
1668 .SH 入手方法
1669 このプログラムの最新版は、
1670 \fBftp://metalab.unc.edu/pub/Linux/system/backup\fP または
1671 \fBftp://lava.obsidian.co.za/pub/linux/mirrordir\fP
1672 から入手できる。
1673 .SH 著者
1674 Paul Sheer  <psheer@obsidian.co.za>  <psheer@icon.co.za>
1675 .\" man page by Jim Van Zandt <jrv@vanzandt.mv.com>
1676 .SH 関連項目
1677 \fBmirror\fP(1), \fBpavuk\fP(1), \fBcp\fP(1), \fBscp\fP(1),
1678 \fBfind\fP(1), \fBmc\fP(1), \fBftp\fP(1), \fBssh\fP(1),
1679 \fBtar\fP(1), \fBrlogin\fP(1), \fBrlogind\fP(8), \fBforward\fP(1)