File: mirrordir.1

package info (click to toggle)
manpages-ja 0.5.0.0.20120606-1
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 25,964 kB
  • sloc: perl: 161; makefile: 116
file content (1679 lines) | stat: -rw-r--r-- 62,261 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
.\" (c) 1998 by James R. Van Zandt <jrv@vanzandt.mv.com>    -*- nroff -*-
.\"
.\" Japanese Version Copyright (c) 2003 NAKANO Takeo all rights reserved.
.\" Translated Wed 29 Jan 2003 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
.\"
.TH mirrordir 1 "1998 November 1" "Linux"
.SH 名前
pslogin \- 強力なストリーム cipher 暗号化と diffie-hellman 鍵交換を用いた安全なリモート tcp ログイン
.PP
forward \- 任意の tcp ソケットを安全かつ暗号化されたチャネルにフォワードする
.PP
copydir, mirrordir \- 変更された最小の部分のみを用いて
(ローカル、FTP 経由、安全な tcp 接続経由で)
ディレクトリツリーをコピーまたはミラーする
.PP
recursdir \- ファイルの操作/検索や tar ファイル作成のために、ローカルまたはリモートのディレクトリを再帰的に探索する
.SH 書式
.B mirrordir
.br
[\fB-a\fP, \fB--access-times\fP]
.br
[\fB-m\fP, \fB--strict-mtimes\fP]
.br
[\fB--no-mtimes\fP]
.br
[\fB--ignore-size\fP]
.br
[\fB-A\fP, \fB--mtime-threshold\fP \fIext\fP]
.br
[\fB--time-offset\fP [[\fI+\fP]|\fI-\fP][\fIH\fP]\fIH\fP[\fI:MM\fP]]
.br
[\fB-A\fP, \fB--always-write\fP]
.br
[\fB-r\fP, \fB--restore-access\fP]
.br
[\fB--no-chown\fP]
.br
[\fB--no-chmod\fP]
.br
[\fB-D\fP, \fB--only-delete\fP]
.br
[\fB-b\fP, \fB-S\fP, \fB--backup-extension\fP, \fB--suffix\fP \fIext\fP]
.br
[\fB-N\fP, \fB--num-backups\fP \fInum\fP]
.br
[\fB-O\fP, \fB--backup-outdate\fP \fIsec\fP]
.br
[\fB-B\fP, \fB--block-size\fP \fIbytes\fP]
.br
[\fB-M\fP, \fB--max-bytes\fP \fInum\fP[\fBK\fP|\fBM\fP|\fBG\fP]]
.br
[\fB-s\fP, \fB--starting-file\fP \fIpath\fP]
.br
[\fB-i\fP, \fB--ignore-next-exclude\fP]
.br
[[\fB-i\fP] \fB-X\fP, \fB--exclude\fP \fIpath\fP] [[\fB-i\fP] \fB-X\fP, \fB--exclude\fP \fIpath\fP] ...
.br
[[\fB-i\fP] \fB-F\fP, \fB--exclude-from\fP \fIfile\fP] ...
.br
[[\fB-i\fP] \fB-G\fP, \fB--exclude-glob\fP \fIexpr\fP] [[\fB-i\fP] \fB-G\fP, \fB--exclude-glob\fP \fIexpr\fP] ...
.br
[[\fB-i\fP] \fB-R\fP, \fB--exclude-regexp\fP \fIexpr\fP] [[\fB-i\fP] \fB-R\fP, \fB--exclude-regexp\fP \fIexpr\fP] ...
.br
[\fB-C\fP, \fB--exclude-script\fP [\fIexpr\fP|\fIfile\fP]] [\fB-C\fP, \fB--exclude-script\fP [\fIexpr\fP|\fIfile\fP]] ...
.br
[\fB-h\fP, \fB--help\fP]
.br
[\fB-v\fP, \fB--verbose\fP] [\fB-v\fP, \fB--verbose\fP] ...
.br
[\fB-V\fP, \fB--version\fP]
.br
[\fB-k\fP, \fB--keep-files\fP]
.br
[\fB-l\fP, \fB--no-hard-links\fP]
.br
[\fB--follow-symlinks\fP]
.br
[\fB-L\fP, \fB--strict-locking\fP]
.br
[\fB-p\fP, \fB--password\fP \fIpassword\fP]
.br
[\fB-P\fP, \fB--password-exact\fP \fIpassword\fP]
.br
[\fB--test-login\fP]
.br
[\fB--no-warn-first-login\fP]
.br
[\fB--read-password-from-stdin\fP]
.br
[\fB--allow-empty-ftp-dirs\fP]
.br
[\fB--no-allow-empty-ftp-dirs\fP]
.br
[\fB--netrc\fP]
.br
[\fB--no-netrc\fP]
.br
[\fB--proxy-host\fP \fIhost\fP]
.br
[\fB--secure\fP]
.br
[\fB-z\fP, \fB--gzip\fP]
.br
[\fB--gzip-backups\fP]
.br
[\fB--case-insensitive\fP]
.br
[\fB--to-lower\fP]
.br
[\fB--to-upper\fP]
.br
[\fB--no-use-passive-connections\fP]
.br
[\fB-K\fP, \fB--key-size\fP \fIbits\fP]
.br
[\fB--download-scripts\fP]
.br
[\fB--tar-file\fP \fIfilename\fP]
.br
[\fB--tar-block-size\fP \fIN\fP]
.br
[\fB-t\fP, \fB--dry-run\fP, \fB--test-only\fP]
.br
[\fB--nice\fP \fInum\fP] \fIcontrol mirror\fP
.PP
.B mirrordir
[\fB-c\fP | \fB--copy-mode\fP | \fB--recurs-mode\fP ] 
-[\fBabBCdDFGhklMmNOopRrstvVX\fP] \fIsrc\fP [\fIsrc\fP ...] \fIdest\fP
.PP
.B copydir
-[\fBabBCdeFGhklMmNOopRrstvVX\fP] \fIsrc\fP [\fIsrc\fP ...] \fIdest\fP
.PP
.B recursdir
-[\fBabBCdeFGhklMmNOopRrstvVX\fP] \fIsrc\fP [\fIsrc\fP ...]
.PP
.B pslogin
[\fB--key-size\fP \fIbits\fP]
[\fBmc://\fP][\fIusername\fP\fB@\fP]\fIhostname\fP[\fB:\fP\fIportnumber\fP][\fB/\fP\fIpath\fP]
.PP
しかし通常は単に:
.br
.BR mirrordir " [" --exclude " \fIpath\fP] " "\fIcontrol mirror\fP"
.br
.B copydir
\fIsrc\fP [\fIsrc\fP ...] \fIdest\fP
.br
.B recursdir 
\fIsrc\fP [\fIsrc\fP ...] [\fB-C\fP \fIprogram\fP]
.br
.B pslogin
[\fIusername\fP\fB@\fP]\fIhostname\fP[\fB:\fP\fIportnumber\fP]
.SH 説明
.B mirrordir
はディレクトリを操作したりミラーする際に便利なユーティリティの集まりである。
.BR ssh (1)
の代替になるコマンド
.B pslogin
や、任意の TCP ソケット接続を暗号化された安全なチャネルにフォワードする
.BR forward (1)
も含まれている。
.PP
.B mirrordir
は 2 つのディレクトリ
.I control
.I mirror
との間で異なるファイルを、
.I control
から
.I mirror
へとコピーする。
.\"nakano control は訳者の判断で追加.
修正時刻 (modification time) またはサイズが異なるファイルがコピーされる。
ファイルの許可属性・所有者・修正時刻・アクセス時刻
(--access-time が用いられた場合のみ)・スティッキービット・
デバイスタイプが複製される。
シンボリックリンクはリンク先の解決をされずにそのままコピーされる。
シンボリックリンクの修正・アクセス時刻 (シンボリック自身のもので、
シンボリックが指すファイルのものではないことに注意) は保存\fIされない\fP。
ハードリンクされたファイルは単にコピーされる。
生成時刻は、私の知る限り Unix では設定できない。

.B mirrordir
は\fB危険な\fPコマンドである。
.I mirror
にあって
.I control
にないファイルやディレクトリは削除されるからである。もし
.I control
が完全に空の場合には、
.I mirror
のすべてのファイルやディレクトリが削除される。もし
.I mirror
が完全に空の場合には、
.I control
のすべてのファイルやディレクトリがコピーされる。

要するに
.B mirrordir
.I mirror
をディレクトリツリー
.I control
の完全なレプリカにし、またその際にあらゆるものを
(定期的バックアップという目的に合致するなら)
可能な限り複製しようとする。当然
.B mirrordir
はサブディレクトリの一番深いところまで降りていく。
ディレクトリミラーの際には、それに必要な最小の変更のみを調べ、
可能な限り効率的に動作しようとする。

アクセス時刻の複製は通常は必要なく、また不要な負荷を与えることになる。
よってこれはオプションになっている。

ディレクトリ
.I control
には、何の変化も与えない。--restore-access
が与えられると、アクセス時刻は読み込みのたびに、
元の時刻に再設定される。

--strict-locking オプションをオンにすると、
.I control
にあるコピー作業中のファイルは「共有読み込み (shared reading)」
にロックされる。これによって、
他のプロセスがそのファイルに頻繁に書き込みを行っている場合でも、
ファイルが不完全な状態や壊れた状態ではコピーされないことを保証する。

通常
.B mirrordir
は問題があっても中断せず、
問題の報告を stderr へのエラーメッセージとして行い、
動作を継続する。

ディレクトリ
.I mirror
.I dest
は (たとえ空であっても) 存在していなければならない。

ディレクトリのすべてのファイルを削除する前に、
.B mirrordir
は \fB*--keep-me\fP というファイル (ここで \fB*\fP は 0 または 1 つの文字)
をチェックする。
このファイルが存在すると、エラーメッセージを出して中断する。
よって再帰的に削除されてはまずいディレクトリがあったら、
それぞれにこのようなファイルを作っておけば良い。
.\"nakano かなり意訳。

.B copydir
は \fBmirrordir\fP \fI-ck --no-erase-directories\fP ...
と等価である (-c には -k が含まれるが)。よって
.B copydir
は厳密な意味での
.BR cp (1)
とよく似ているが、ファイル名は URL でも良く、
かつ古いファイルだけが置き換えられる。
ファイル転送には、ほとんどの場合
.B mirrordir
ではなく
.B copydir
を使うほうがよい。本当に消してよい場合に限り、
.B mirrordir
を使うようにすること。

.B recursdir
はまたもう一つのプログラムで、
コマンドライン上でディレクトリを降りてゆくだけで何も行わない。
これは \fBmirrordir\fP \fI--recures-mode\fP ...
と等価である。これは
.B -C
オプションが追加される前にできたプログラムで、より厳密な
.BR find (1)
として、あるいは見つかったすべてのファイルを
tar ファイルにパックする目的に、それぞれ利用できる。

.\"nakano envoke は evoke の typo かな?
.B pslogin
はさらにもう一つのプログラムで、
これまでに挙げた 3 つとはほとんど関係がない。
.B pslogin
.B secure-mcserv
を用いて安全なログインセッションを開始する。
これは \fBmirrordir\fP \fI--login-mode\fP \fI--secure\fP ...
と等価である。
.B pslogin
.B logindir
と呼ぶべきかもしれない。後述の
.B --login-mode
を参照のこと。

.B forward
はさらにもう一つのプログラムで、
最初の 3 つとはほとんど関係がない。
これは任意のサービスを安全なチャネルにフォワードできる。
詳細は
.BR forward (1)
を参照のこと。

このパッケージの重要な点は、
通常のファイル名に替えて URL を使える点にある。
よってファイルをネットワーク越しに操作できる。
現在サポートされている URL のタイプは、
\fBftp://\fP と \fBmc://\fP である
(\fBhttp://\fP はファイルシステムではないので、サポートされていない)。
\fBmc://\fP は \fBMidnight Commander\fP ファイルシステムで、
.B secure-mcserv
デーモンによってサービスされるものである。
これには、暗号化された、
強く安全なファイル転送およびログインを提供するという長所がある。

.B recursdir
コマンドと
.B copydir
コマンドには glob 表現も利用できる。
これらは再帰的に展開される。
.SH セキュリティと暗号化
.B mirrordir
は、強力なストリーム cipher 暗号化と、
何種類かの鍵サイズでの Diffie-Hellman 鍵交換をサポートしている。
安全な接続は
.B mc://
の接続で動作する。オプション
.BR --secure ", " --key-size ", " --download-scripts
を参照のこと。
デモは
.B 例
の節を、公開鍵・秘密鍵の置場所については
.B ファイル
の節を参照のこと。
.SH オプション
.TP 
.B --help
詳しいヘルプを出力して終了する。
.IP \fB--verbose\fP
.I mirror
に対してなされたファイル修正に関して、
詳しい出力をするよう指定する。
このオプションは複数個指定でき、
たくさん指定するほどより詳しく出力する。
出力は標準出力に書き出される。
.IP \fB--restore-access\fP
読み込むを行うごとに、
.I control
のアクセス時間を元に戻す。
.IP \fB--access-times\fP
.I control
のアクセス時刻も複製する。
.TP 
\fB--always-write\fP
同じに見えるかどうかに関らず、
すべてのファイルを書き変えるよう強制する。
.TP
\fB--recurs-mode\fP
これは
.B recursdir
ではデフォルトで有効になる。
指定したディレクトリを再帰的に読み、それらに対しては何も行わない。
このオプションは
ファイルを検索したり、
.B -C
と共に指定してシェルコマンドを実行したりするのに便利である。
なお C インタープリタでは
.BR system() ", " exec() ", " popen
関数が利用できる。
.TP
\fB--login-mode\fP
このオプションは
.B pslogin
ではデフォルトでセットされる。これは
.B secure-mcserv
をサーバに使う
.B rlogin
とだいたい同じになる。
.BR ssh (1)
の代わりに使えるような、安全な暗号化された接続を提供する。
.B pslogin
は暗黙のうちに
.B --secure
も指定する。このオプションを指定したり、
.B pslogin
を用いた場合は、コマンドラインにはパスを 1 つだけ指定しなければならない。
指定の形式は
[\fBmc://\fP][\fIusername\fP\fB@\fP]\fIhostname\fP[\fB:\fP\fIportnumber\fP][\fB/\fP\fIpath\fP]
である。
.sp
ログイン後直ちに、シェルプロンプトから \fBcd\fP \fI/path\fP
が実行される。
.B pslogin
は文字 \fB#\fP, \fB$\fP, \fB>\fP を調べ、
プロンプトが出たかどうか判断する。
これらが見つからないと、
.B pslogin
はずっと止まったままになる。この動作を避けるには、
.BI / path
.B /
とすれば良い。するとログインディレクトリに留まったままになる。
あるいはシェルプロンプトを変更して、これらの文字を含めるようにしてもよい。
.TP
\fB--copy-mode\fP
これは
.B copydir
ではデフォルトでセットされる。
コピー元・コピー先の各ファイルに対して
.BR cp (1)
と同じように振る舞う。このオプションを用いると、暗黙のうちに
.B --keep-files
を指定したことになる。
コピー先の既存のファイル・ディレクトリのうち、
コピー元と同じ名前を持つものはすべて上書きされるが、
これ以外の理由でファイルやディレクトリが削除されることはない。
コピー元には複数のファイルやディレクトリを指定できる。
コピー先のパスはディレクトリでなければならない。
.TP 
\fB--no-erase-directories\fP
このオプションを指定すると、
コピー先のディレクトリとコピー元のファイルがおなじ名前で、
かつそのディレクトリが空でない場合、
エラーメッセージを表示して終了する。これは
.B copydir
のデフォルトの動作である。
.TP 
\fB--erase-directories\fP
このオプションを指定すると、
コピー先のディレクトリとコピー元のファイルがおなじ名前の場合、
コピー先のディレクトリは再帰的に削除される。これは
.B mirrordir
のデフォルトの動作である。
.TP
\fB--allow-empty-ftp-dirs\fP
ftp サーバには、 . とか .. といったディレクトリを生成しないものがある。
そのような場合、ディレクトリへの読み取り許可がないように見えてしまう。
このオプションを用いると、この動作を変更し、
このような完全に空のディレクトリを単に空であるとみなしてエラーにしない。
\fBunable to open directory: *: Permission denied\fP
というエラーになった場合は、このオプションを試してみるとよい。
このオプションはデフォルトでは有効になっている (次項を参照のこと)。
.TP
\fB--no-allow-empty-ftp-dirs\fP
現在はディレクトリに cd してアクセス許可を調べるためにようになったので、
デフォルトの動作は空のディレクトリを許可するようにした。
.TP
\fB--only-delete\fP
\fImirror\fP に対して、利用しているディスクスペースを
増加させるような変更は一切行なわない。
これは容量の限られているドライブに対してバックアップを取る場合、
転送の最中に \fIcontrol\fP に \fImirror\fP を増加させてしまうような
変更がなされるときに便利である。
一度このオプションをつけて \fBmirrordir\fP を実行すれば、
次にこのオプションをつけて実行したときには、
利用できる領域を越えないことが通常は保証される。
.TP
\fB-i\fP, \fB--ignore-next-exclude\fP
このオプションを指定すると、次の --exclude- タイプのオプションは、
対象ファイルが mirror ディレクトリにあろうと無かろうと、
それらを完全に無視することになる。
これは後述する
.B --exclude-script
オプションで \fBIGNORE\fP が返った場合と同じ効果を持つ。
これは特定のファイルを決して変更しないようにするのに利用できる。
例えば
.I /etc/named.boot
を決して変更したくない場合には、
.B mirrordir /mnt/1 /mnt/2 -i --exclude /mnt/1/etc/named.boot
とすればよい。mirror ディレクトリではなく、
control ディレクトリのフルパスで指定することに注意。
.B --exclude /mnt/2/etc/named.boot
では動作しない。
後者では、ファイルを削除したくない場合には
そのファイルが control ディレクトリに存在しなければならない
(たとえサイズ 0 であっても) という馬鹿げた動作となる。
.TP
\fB--exclude\fP \fIpath\fP
ファイルまたはディレクトリ
.I path
を除外する。コマンドラインにたくさんの exclude パスを指定すると、
動作が遅くなってしまう。除外されたパスは、
mirror ツリーに存在する場合は削除される
(そのディレクトリまたはファイルが存在していない場合と同様である)。
これらのファイルを削除せずに無視して保持しておきたい場合は、
--ignore オプションを用いること。

除外するファイルが長いリストになる場合は、
.B --exclude-from
オプションを利用すること。
.TP
\fB--exclude-glob\fP \fIglob\fP
glob 形式の表現
.I glob
にマッチするファイルするディレクトリを除外する。
ファイルへのマッチではフルパスを用いない。
シェルにおいては、glob 表現を適切な引用符で括り、
解釈されないようにする必要がある。
.TP
\fB--exclude-regexp\fP \fIregex\fP
フルパス名が
.I regex
にマッチするファイルやディレクトリを除外する。
シェルにおいては、正規表現を適切な引用符で括り、
解釈されないようにする必要がある。
.TP
\fB--exclude-script\fP [\fIexpr\fP|\fIfile\fP]
.RS
各ファイルに対する処理を行なう前に、スクリプト \fIexpr\fP を実行する。
このスクリプトは
C 言語スタイルの文ブロックからなり、\`\fBreturn\fP \fIexpression\fP;\'
で終了する。
.I expression
の値は
.BR INCLUDE ,
.BR EXCLUDE ,
.BR UNKNOWN
.B IGNORE
(上述の \fB-ifP を見よ)
のいずれかであり、そのファイルに対して成すべき動作を示す。
.I expr
にセミコロン (;) が含まれていない場合は、
これはファイル名とみなされ、そのファイルがロードされる。
それ以外の場合は、テキストは高速化のために
逆ポーランド形式にコンパイルされる。
このオプションは複数指定でき、
その場合スクリプトは
.B UNKNOWN
以外の値が返るまで、順に実行される。
.B UNKNOWN
が返った場合は、コマンドラインにあるその他の
.B --exclude-
形式のオプションが効力を持つ。
.PP
インタープリタがおかしなエラーを報告したり、
セグメンテーションフォールトを起こした場合は、
その原因となったスクリプトを私に送ってほしい。
.PP
このスクリプト言語自体は、C プログラミング言語のサブセットである。
例えば以下のようなものは正しいスクリプトである。
.PP
.nf
/* PATH はファイルのフルパス名で、DIR は末尾に
   スラッシュ (/) の無いディレクトリ、CWD は
   カレントワーキングディレクトリ、dpath() は
   フォワードスラッシュ (/) の個数-1 を返す。*/
if (depth (DIR) - depth (CWD) > 3) {
    printf ("%s: excluded\\n", PATH);
    return EXCLUDE;
} else
    return INCLUDE;
.fi
.PP
このスクリプト言語は代入演算子をサポートしない。
したがってユーザ定義変数をサポートしない。
.PP
以下の定義済みマクロを利用できる。
マクロの展開は、ディレクトリにもファイルと等しく同じように適用される。
.TP
\fBFILE\fP
現在のファイル (パス無し)
.TP
\fBNAME\fP
パス・拡張子の無いファイル名。末尾にドット (.) は付かない。
.TP
\fBEXTENSION\fP
ファイルの拡張子。先頭にドット (.) は付かない。
.TP
\fBDIR\fP
ファイル名の無いディレクトリ。末尾にスラッシュ (/) は付かない。
.TP
\fBPATH\fP
フルパスのファイル名
.TP
\fBCWD\fP
カレントワーキングディレクトリ
.TP
\fBTIME\fP
現在時刻 (秒単位)
.PP
C のすべての論理演算子・算術演算子・ビット演算子がサポートされている。
すなわち \fB(\fP
\fB)\fP
\fB>=\fP
\fB<=\fP 
\fB>\fP
\fB<\fP
\fB!=\fP
\fB==\fP
\fB&&\fP
\fB||\fP
\fB!\fP
\fB-\fP
\fB+\fP
\fB*\fP
\fB/\fP
\fB%\fP
\fB&\fP
\fB^\fP で、これらは全て C のものと同じ意味を持つ。
.PP
さらに以下に示すマクロも利用できる。
各々は整数 (C での \fBlong int\fP 型) を返す。
これらはそのファイルに対する \fBlstat\fP
(または \fB--follow-symlinks\fP が用いられている場合は \fBstat\fP)
を基にしている。詳しい説明は
.BR stat (2)
を参照のこと。
.PP
\fBstat.st_dev\fP - デバイス
.br
\fBstat.st_ino\fP - i-ノード
.br
\fBstat.st_mode \fP - 許可属性 (permission)
.br
\fBstat.st_nlink\fP - ハードリンクの数
.br
\fBstat.st_uid\fP - 所有者のユーザ id
.br
\fBstat.st_gid\fP - 所有者のグループ id
.br
\fBstat.st_rdev \fP - デバイスタイプ
.br
\fBstat.st_size \fP - ファイルサイズ (バイト単位)
.br
\fBstat.st_blksize\fP - ファイルシステム I/O のブロックサイズ
.br
\fBstat.st_blocks\fP - アロケート済みのブロック数
.\"nakaon allocated の typo?
.br
\fBstat.st_atime\fP - 最後にアクセスされた時刻 (秒単位)
.br
\fBstat.st_mtime\fP - 最後に変更された時刻 (行単位)
.br
\fBstat.st_ctime\fP - 作成された時刻
.PP
以下の関数はブール値を返す。
.TP
\fBstrncmp\fP(\fIstring1\fP, \fIstring2\fP, \fIinteger\fP);
string1 が string2 より小さい場合は 0 以下の整数を、
マッチする場合は 0 を、
大きい場合は 0 以上の整数を返す。
.TP
\fBglob\fP(\fIglob\fP, \fIstring\fP);
.I string
が glob 表現
.I glob
にマッチする場合は 0 を返す。
下層の実装における効率を良くしたい場合は、
あなたが書くコードでの glob 表現をひとつに限ってみること。
.TP
\fBregexp\fP(\fIregexp\fP, \fIstring\fP);
.I string
が正規表現
.I regexp
にマッチする場合は 0 を返す。
下層の実装における効率を良くしたい場合は、
あなたが書くコードでの正規表現をひとつに限ってみること。
.TP
\fBstrstr\fP(\fIstring1\fP, \fIstring2\fP);
.I string1
の長さの範囲に最初に現れる
.I string2
の位置を返す。現れない場合は 0 を返す。
.PP
以下の関数もブール値を返す。これらは
.BR stat (2)
で説明されているマクロに対応している。
これらは、指定された条件が真の場合に非ゼロの値を返す。
.PP
\fBS_ISLNK\fP(\fIinteger\fP); - ファイルはシンボリックリンク
.br
\fBS_ISREG\fP(\fIinteger\fP); - ファイルは通常のファイル
.br
\fBS_ISDIR\fP(\fIinteger\fP); - ファイルはディレクトリ
.br
\fBS_ISCHR\fP(\fIinteger\fP); - ファイルはキャラクタデバイス
.br
\fBS_ISBLK\fP(\fIinteger\fP); - ファイルはブロックデバイス
.br
\fBS_ISFIFO\fP(\fIinteger\fP); - ファイルは fifo
.br
\fBS_ISSOCK\fP(\fIinteger\fP); - ファイルはソケット
.PP
以下の関数は文字列を操作する。
.TP
\fBstrcat\fP(\fIstring1\fP, \fIstring2\fP);
.I string1
.I string2
を連結して返す。
.B +
演算子も文字列を連結することに注意。
.TP
\fBdepth\fP(\fIstring\fP);
.I string
に現れるフォワードスラッシュ (/) の個数から 1 を引いたものを返す。
.TP
\fBprintf\fP(\fIformat\fP, ...);
.BR printf (3)
のように動作する。ただし重要な例外がある:
.B long int
のフォーマット指定以外は使ってはならない。
これ以外の指定を行なったときの変換結果は未定義である。
例えば、\fB"%d"\fP ではなく \fB"%ld"\fP を用いること。
結果は標準出力に表示される。
.PP
以下の関数はシステムコールを実行する。
.TP
\fBsystem\fP(\fIcommand\fP);
.B /bin/sh -c
.I command
を実行する。しかし C 言語のものとは異なり、
コマンドの終了コードを返す。
つまり、一行だけのシェルスクリプト
.I command
を実行する。
.TP
\fBexec\fP(\fIargv0\fP, \fIargv1\fP, ...);
プロセス
.I argv0
を引数
.I argv1...
で実行する。
.I argv0
フルパスで指定しなければならない。
これは \fBsh\fP を経由しないので \fBsystem\fP より速い。
.TP
\fBpopen\fP([\fIstring\fP, ] \fIshell_command\fP);
.B system
と似ているが、
.I shell_command
の出力を文字列として返す。
.I string
が与えられている場合には、その文字列を
.I shell_command
の標準入力に与え、成功したら 0 を返す。
.PP
以下の整数定数も利用可能で、stat.h で定義されているマクロ
(説明は
.BR stat (2)
にある) に対応する。
.PP
\fBS_IFMT S_IFSOCK S_IFLNK S_IFREG S_IFBLK S_IFDIR S_IFCHR S_IFIFO
S_ISUID S_ISGID S_ISVTX S_IRWXU S_IRUSR S_IWUSR S_IXUSR S_IRWXG
S_IRGRP S_IWGRP S_IXGRP S_IRWXO S_IROTH S_IWOTH S_IXOTH\fP
.PP
以下の定数のひとつを
.B return
文を用いて返し、呼出し元に意図を伝える必要がある。
何も返さない場合は、返り値は
.B UNKNOWN
であるとみなされる。
.TP
\fBUNKNOWN\fP
どうすべきか分からない。引き続き他の
.B --exclude-
タイプのオプションを実行する。
.TP
\fBINCLUDE\fP
そのファイルを処理に含める。
.TP
\fBIGNORE\fP
そのファイルが mirror ディレクトリにあろうと無かろうと、
何も行なわない。
.TP
\fBEXCLUDE\fP
そのファイルが control ディレクトリに存在しないものとみなす。
よって mirror ディレクトリからは削除される
(これは
.B --keep-files
オプションよりも優先される)。
.PP
以下は C のようなフロー制御を行なう。
.PP
以下の
.B if
文は
.I integer
が真 (つまり非ゼロ)
ならば
.IR statement1 ,
.I statement2
などを実行し、
それ以外の場合は
.IR statementA ,
.I statementB
などを実行する。
.\"nakano 原文 1,2 は typo。
.B else
{...} の部分は省略可能である。
.PP
.nf
    \fBif\fP (\fIinteger\fP) {
        \fIstatement1\fP;
        \fIstatement2\fP;
        \.
        \.
        \.
    } \fBelse\fP {
        \fIstatementA\fP;
        \fIstatementB\fP;
        \.
        \.
        \.
    }
.fi
.PP
.B return
文は
.B mirrordir
に値を返し、スクリプトを終了させる。
.PP
.nf
    \fBreturn\fP \fIexpression\fP;
.fi
.PP
.B exit
関数は、
.B mirrordir
を指定した終了コードで終了させる。
.PP
.nf
    \fBexit\fP(\fIinteger\fP);
.fi
.PP
通常 C スクリプトは、特定のファイルを除外するために用いる。
これはスクリプト言語の実装としてはやりすぎで、
機能のすべてを一般用途向けに書いたわけではない。
典型的なスクリプトは、例えばデバイスファイルを除外する、
という程度のことに留まるだろう。
.PP
.nf
if (S_ISSOCK(stat.st_mode) || S_ISFIFO(stat.st_mode)
         || S_ISBLK(stat.st_mode) || S_ISCHR(stat.st_mode)) {
    return EXCLUDE;
} else
    return INCLUDE;
.fi
.PP
.B --recurs-mode
オプションとともに用いれば、
C スクリプトはファイルを検索するためにも利用できる
.RB ( recursdir
コマンドと同じ):
.PP
.nf
/* core ファイルを全て削除する */
/* この例は \fB例\fP セクションに移動した。 */
.fi
.RE
.PP
.TP
\fB--exclude-from\fP \fIfile\fP
ファイル
.I file
に書かれているリストに含まれるパスを除外する。
空行とコメント行 (行頭の文字が # の行) は無視される。
このファイルのリストはソートされ二分木探索されるので、
たくさんのファイル名を除外したい場合には、
ここにそれらのファイルを書く方が性能は良くなる。
このオプションは複数指定でき、複数個のファイルを指定できる。
.BR バグ:
.I file
の最後に与えたパスは、改行で終らなければならない。
.TP
\fB--backup-extension\fP \fIlevel\fP
ファイルを削除したり置き換えたりする前に、
それらのファイルのバックアップを作る。
.I extension
は C 形式のフォーマット文字列で、例えば .ORIG.%d
(% へのシェル代入に注意) のようにする。
.I level
は保存しておくリビジョンの最大数。
.I extension
がファイル名に追加され、古いファイルほど大きな番号を持つ。
.TP
\fB--backup-outdate \fIsec\fP
.I sec
秒よりも古いバックアップファイルを削除する。
.TP
\fB--nice\fP \fInum\fP 
時々スリープして、他のプロセスに対して行儀良く振る舞う。
--nice を指定すると、プロセスはアクティブであった時間の
.I num
倍の時間スリープする。したがって 1 を指定すると
(非常におおざっぱに言えば) コピーに要する時間は 2 倍になり、
3 を指定すれば 4 倍になる。
これは定期的なバックアップを、
CPU 負荷を小さくして行ないたい場合に利用するとよい。
システムによっては --nice は利用できないかもしれない。
.TP
\fB--no-chmod\fP
.\"nakano than は then の typo
通常はファイルの許可属性設定が行なわれる。
アクセス権限が制限されていて、許可属性を変更できない場合は、
このオプションを指定すれば許可属性設定を無効にできる。
.TP
\fB--no-chown\fP
.\"nakano than は then の typo
通常はファイルの所有権設定が行なわれる。
アクセス権限が制限されていて、所有者を変更できない場合は、
このオプションを指定すれば所有権設定を無効にできる。
.TP
\fB--mtime-threshold\fP \fIsec\fP
mtime の違いがこの値よりも小さい場合には、
ファイルは上書きされない。ftp サイトをミラーした場合、
そのミラー中の mtime は分の単位の精度しか持たないので、
これを nfs ミラーしようとするとすべてのファイルがコピーされる。
これを直すには --mtime-threshold 60 を用いればよい。
.TP
\fB--time-offset\fP [[\fI+\fP]|\fI-\fP][\fIH\fP]\fIH\fP[\fI:MM\fP]
vfs な (つまり ローカルでない) ディレクトリの時刻オフセットを設定する。
例えば私は New York より 8 時間東にいるので、
New York からミラーする場合には
.B --time-offset -8:00
を使っている。
.TP
\fB--test-only, --dry-run\fP
実際には変更を行なわない。
--verbose と共に用いると、
どのような変更がなされるかを表示できる。
これはディレクトリ間の比較をするのにも効果的な方法である。
\fIこれはテストされていない。
すなわち、このオプションが\fB本当に\fI変更をしないかどうかは、
私は保証できない。\fP
.TP
\fB--skip-symlinks\fP
シンボリックリンクは、読み込まれなかったかのように扱われる。
よってそれらが mirror ディレクトリにあると、削除される。
.TP
\fB--keep-files\fP
ファイルが
.I control
に無い場合でも、そのファイルを
.I mirror
から削除しない。こうすると
.B mirrordir
はある意味
.BR cp (1)
のようになる。
.TP
\fB--no-hard-links\fP
このオプションが指定されない限り、
.B mirrordir
はハードリンク属性を正しくミラーする。
指定されると、ハードリンクは通常ファイルのようにコピーされる。
.TP
\fB--follow-symlinks\fP
このオプションが指定されなければ、
.B mirrordir
はシンボリックリンクを適切にミラーする。
指定されると、シンボリックリンクは通常ファイルとしてコピーされる。
Debian ツリーをミラーするときに便利である。
注意してほしいのは、
シンボリックリンクは control と mirror の両方で解決される、
という点である。
依ってシンボリックリンクが mirror ディレクトリに存在していると、
それらはそのままシンボリックリンクのまま残る。
.B --follow-symlinks
を指定すると、暗黙のうちに
.B --no-hard-links
も指定したことになる。
.TP
\fB--strict-locking\fP
ファイルを読み込むとき、共有読み込みのロックを作成する。
これはファイルコピーの事故を予防する。
特にメールディレクトリに対して有効である
(メールプログラムは
.B mirrordir
がファイルを読み込もうとしているときに、
同時にそれらに書き込みを行なおうとするかもしれない)。
このオプションは仮想ファイルシステムに対しては効力を持たない。
.TP
.BR "--max-bytes " [[ \fInum\fP [  k | M | G ]] "" | \fInum\fP ]
このバイト数を越えると `filled up all blocks - first file/dir not mirrored:
\fIpath\fP' というメッセージが標準出力に表示される。
残りのファイルは \fImirror\fP から削除されるが、
これはリストされた順序で行なわれる。よって
.B mirrordir
が走り続けていると、アーカイブの大きさが \fInum\fP を越えることがある。
この偶発分のゆとりをとって、
\fInum\fP は利用できるスペースより小さくしておくこと。
またファイルシステムによっては、
完全にいっぱいになる前に `No space left on device'
というメッセージを出すことがある。
.B mirrordir
には \fB--starting-file\fP \fIpath\fP オプションがあり、
これを用いると別のデバイスで作業を継続できる。
こうすれば、複数のデバイスに対して
.B mirrordir
を用いたバックアップができる。
.I num
には
.BR k ,
.BR M ,
.B G
(大文字小文字を区別する) のいずれかを後置でき、
それぞれキロバイト、メガバイト、ギガバイトを指定する。
どれかひとつのファイルがこの数値よりも大きいと、
エラーメッセージが表示される。
.B --block-size
も参照のこと。
.TP
.BR "--password " \fIpassword\fP
FTP 接続・mc:// 接続に対するパスワードを設定する。
匿名接続の場合のパスワードは、
デフォルトで「ログイン名@ローカルマシン名」になっている。
それ以外のログインパスワードは、プロンプトが出て尋ねられる。
いつもの警告だが、
パスワードをスクリプトに含めるのはセキュリティ上のリスクがある。
パスワードは
.B "~/.netrc"
ファイルに入れ、
.B --no-netrc
オプションを指定しないかたちの方がずっと良い。
詳細は
.B man ftp
を見よ。
.TP
\fB--password-exact\fP \fIpassword\fP]
匿名パスワードの前に \fB-\fP を前置しない。
ftp の匿名パスワードでは、通常パスワード文字列の前に
\fB-\fP が置かれる。私は
Midnight Commander vfs がなぜこのようにしていたのか知らないが、
あるユーザがこの問題に突き当たったので、
このオプションを設け、パスワードを
.I password
に指定した通りに送れるようにしている。
.TP
\fB--test-login\fP
.B --login-mode
.B pslogin
を用いるとき、非対話的なアクセスをテストしてみたいことがあるだろう
(例えばシェルスクリプトで用いたいときなど)。
これを行なうには、
.B pslogin
をこのオプションとともに実行し、終了ステータスを見ればよい。
.B secure-mcserv
は、ユーザがパスワードサーバにログインできるかどうかを調べるために、
これを用いている。
.TP
\fB--no-warn-first-login\fP
あるマシンに対して最初に安全な接続を試みた時は、
公開鍵がローカルマシンに存在しない。
よって「間に人」攻撃に対して無防備である。
この内容に関する警告が表示され、
ユーザにプロンプトが出され、継続したいかどうか尋ねられる。
このオプションはこの警告を出さないようにし、
一切を無視して先に進む。
.TP
\fB--read-password-from-stdin\fP
パスワードをコマンドラインから指定するのではなく、
標準入力から与える。
これは見えないパスワードをタイプ入力するのと同じではない。
こちらは端末が無い場合にでも使える。
これは他のプログラムから、例えば
.BR popen (3)
などを用いて利用する場合に都合が良い。
.B secure-mcserv
は、ユーザがパスワードサーバにログインできるかどうかを調べるために、
これを用いている。
.TP
.BR "--netrc"
.B ~/.netrc
をスキャンする。デフォルトでこのオプションは on になっている。
.TP
.BR "--no-netrc"
.B ~/.netrc
ファイルの読み込みを行なわない。
.TP
\fB--proxy-host\fP \fIhost\fP
ftp ダウンロードのプロキシを設定する。
これがどのように動作するのか、
あるいは実際に動作するかどうかは私にはわからない。
プロキシのサポートについては
.BR mc (1)
にあたってほしい。
.TP
.BR "--secure"
(\fIこの機能はβ段階である\fP) 私は
.B mirrordir
用に安全なソケット層を実装した。これはこのオプションで有効となり、
.B secure-mcserv
の接続 (すなわち \fBmc://\fP 形式の URL) に適用される。
安全なソケットのライブラリは
.B libdiffie.a
とヘッダファイル
.B diffie-socket.h
からなる。
.B sys/socket.h
の後に
.B diffie-socket.h
をインクルードし、そのプログラムを際コンパイルすれば、
通常のソケットが全て安全なソケットになる
(これは Unix のソケットコールを用いる、あらゆるプログラムに当てはまるが、
しかしテストはされていない)。
これをサポートする最初のサービスは
.B secure-mcserv
で、デフォルトでコンパイルされ、インストールされる。
よって、リモートのホストも
.B secure-mcserv
を走らせていれば、
\fBmc://\fP ファイルシステムは
.B --secure
オプションで利用できる (\fBsecure-mcserv -h\fP とすればヘルプが表示される)。
.B --secure
は、DES などのブロック cipher よりずっと安全で高速なストリーム cipher を、
公開鍵サーバ認証 (Diffie-Hellman 及び p-NEW スキーム) の
離散対数鍵交換で用いている。
.\"nakano この辺おかしいかもしれない。
詳細はソース配布の
.B diffie-socket.h
を見てほしい。デフォルトの鍵のサイズは 512 ビットである。
.I gcc
を用いている場合は、
.B mirrordir
のコンパイル時に
.B -O3 -fomit-frame-pointer -s -Wall
オプションをつけると、鍵生成が高速化される。
.TP
.BR "--key-size " \fIbits\fP
デフォルトの鍵サイズは 512 ビットである。
サイズを変更するには素数を生成して fileld.c に書き込まなければならないので、
field.c にリストされているサイズだけがサポートされており、
.\"nakano primes はミスだろう。
現時点ではこれは 512, 768, 1024, 1536 である。
遅い計算機を用いている場合には、中程度のセキュリティとなる 768 を奨める。
それ以外なら、長い目で見れば 1536 も非合理で偏執的な値、というわけでもない。
巨大企業・良くつないでくるハッカー・政府などがあなたの接続を
盗聴している心配がなければ、512 でも構わないだろう。
ストリーム cipher は \fBbits\fP/2 の長さを持つので、クラックされる確率は、
宝くじを換金しているあいだに隕石にぶち当たる確率よりは低い。
ただしある人間が接続を盗聴し、長い間出力をとり続ければ、
破ることは不可能ではない。
20 年も経てば、1536 ビットの鍵も小さいと考えられるかもしれない。
また (ここで用いられている) 離散対数問題は、
素因数分解よりも解くのが難しいと考えられているので、
鍵は RSA よりも実効的にやや大きいことになる。
これは私の (どちらかというと無学な) 意見である。
.TP
\fB--download-scripts\fP
.B mirrordir
には 2 つの版、\fIInternational\fP 版と \fIUS\fP 版がある
.RB ( --version
を見よ)。\fIUS\fP 版は暗号化に類するコードを一切含んでいない。
その代わり、必要なアルゴリズムを (\fB南アフリカ\fP にある)
.B encrypt.obsidian.co.za
からダウンロードするようになっている。
これらは高速かつネイティブな、C 形式のインタープリタ言語で書かれている。
これらは 4 つのスクリプトからなる。それぞれ、
Diffie-Hellman 鍵交換サーバ、Diffie-Hellman 鍵交換クライアント、
ストリーム cipher の初期化、実際にストリーム cipher を用いた暗号化、
のためのものである。
.B mirrordir
は、あなたがセキュリティ機能を用いようとすると、
自動的にこれらのスクリプトをダウンロードする。しかしこの
.B --download-script
オプションを用いると、いつでもダウンロードを実行できる。
\fIInternational\fP 版にはストリーム cipher が組み込まれていて、
2 つのスクリプトだけを用いるが、
これらは配布に含まれているのでダウンロードの必要はない。
Diffie-Hellman 交換をスクリプトで用いても、速度的な劣化は生じない。
しかし暗号化に関しては、
スクリプトと組み込みの間の違いが結構大きいかもしれない。
.TP
\fB--version\fP
バージョン番号と、
この
.B mirrordir
.I International
版か
.I US
版かを表示する。
.B --download-scripts
を見よ。
.TP
\fB-z\fP, \fB--gzip\fP
.B mc://
接続で圧縮を有効にする。
実際には符号化よりも低いレベルにある圧縮ソケット層を呼出す。
圧縮は
.BR gzip (1)
.B libz
ライブラリを用いて行なう。圧縮の程度は、
転送時間を最小化するように動的に設定される。
高速なイーサネット接続なら無圧縮にまで低くなりうるし、
モデム経由の遅い接続では最大圧縮にまで高くなる。
このアルゴリズムは、TCP の write コールが、
同量のデータを
.I deflate
する (つまり圧縮する) 時間の 2〜5 % の範囲になるように、
圧縮レベルを調整する。
.TP
\fB--gzip-backups\fP
バックアップは通常は単にファイルのコピーである。
このオプションを指定すると各ファイルは圧縮され、
.B .gz
がデフォルトの拡張子として付加される。
バックアップの拡張として、あなたが自分で
.B --backup-extension
の指定を行なった場合は、その末尾が
.B .gz
で終らないと、比較が正しく動作しない。
.TP
\fB--case-insensitive\fP, \fB--for-Robert-Seese\fP
ファイル名やリンク名の比較に、大文字小文字の違いを無視する。
これは、特定の頭の悪い OS と通信するときに便利だろう。
このオプションがすべての状況で正しく動作するかどうかは、あまり自信が無い。
.TP
\fB--to-lower\fP
.TP
\fB--to-upper\fP
すべての新しいファイル名を大文字または小文字に変換する。
.B --case-insensitive
と共に用いると、新しいファイルを作成する場合にのみ適用される。
.B --case-insensitive
なしで指定すると、既存かどうかに関らす、
すべてのファイルが大文字・小文字に変換される。
このときの方法は非効率的なもので、
古いファイルを一度消してから、新しいファイルを再度コピーする。
これは、特定の頭の悪い OS と通信するときに便利だろう。
このオプションがすべての状況で正しく動作するかどうかは、あまり自信が無い。
.TP
\fB--no-use-passive-connections\fP
.B could not setup passive mode
というエラーメッセージを受け取った場合、
このオプションを有効にする必要があると考えられる。
私は `passive' の意味するところを完全には理解していないので、
私には聞かないでほしい。
.TP
\fB--tar-file\fP \fIfilename\fP
これは
.B recursdir
と共にのみ用いる。tar アーカイブを GNU
.BR tar (1)
と同じフォーマットで作成し、
.I filename
に保存する。先頭の特殊なプレフィックスと末尾のスラッシュは削除される。
すなわち
.I http://machine/dir/file
.I dir/file
になる。ファイル名の先頭文字が | の場合、
テキストの残りは出力がパイプされるコマンドとみなされる。
よって gzip 圧縮アーカイブは、例えば以下のようにすれば作成できる。
.br
recursdir ftp://machine/dir --tar-file '| gzip -d > foo.tar.gz'
.TP
\fB--tar-block-size\fP \fIN\fP
tar 出力のブロックサイズを 512 * \fIN\fP にする。
これはデータをアーカイブに書き込むときの単位である。
デフォルトは 20。
これはブロックデバイスに書き込むときに限って意味を持つ。
これを
.B --block-size
と混同しないこと。
.TP
.BR "--block-size " \fIbytes\fP
デフォルトのブロックサイズは 1024 バイトである。
消費されるブロックの総数を計算する際、
ファイルサイズは隣接するブロック末尾に切り上げられる。
実際のブロックサイズがこの値よりも大きいと、
書き込み時に実際に利用されるブロック数よりも、
計算値が小さくなる可能性がある。
よって
.B --max-bytes
オプションを用いるときには、実際のブロックサイズと同じ、
またはより大きな値を指定することがとても大切である。
.TP
.BR --strict-mtimes
通常ファイルをコピーする場合、
.B mirrordir
は通常 mirror のファイルが
control のファイルよりも「古い」場合に限って上書きコピーを行なう。
このオプションを用いると、
ファイル間に修正時刻の「何らかの」差異があれば、コピーを行なう。
.TP
\fB--no-mtimes\fP
サイズが違う場合に限ってコピーする。
ファイルの修正時刻は無視する。
.TP
\fB--ignore-size\fP
ファイルのコピーを mtime に基づいて行ない、
サイズの違いは無視する。
.TP 
.BR "--starting-file " \fIpath\fP
.I path
はファイルまたはディレクトリ。
.I path
が読まれるまでは、ファイルやディレクトリは除外ファイル
(つまり
.I mirror
にある場合は削除される) のように扱われる。
.I path
を含むディレクトリは、存在していなければ作成される。
.I path
が読み込まれると、ファイルやディレクトリは通常にミラーされる。
.I path
そのものもミラーされる。
.I path
またはそのサブディレクトリが存在していない場合は、
.\"nakano path がなくてサブディレクトリがある場合ってあるの?
.B mirrordir
は直ちに終了する。
これは
.B mirrordir
が作業前に終了する唯一の場合である。
これは
.I path
が見つからない場合に、ファイルシステム全体が削除されるのを防ぐためである。
.SH FTP のサポート
ftp 転送が、
Midnight Commander の仮想ファイルシステム
(Virtual File System: \fBVFS\fP) を利用する形でサポートされている。
要するにつまり、URL もローカルディレクトリと同じようにサポートされている。
以下に例を示そう。
.nf
    mirrordir --verbose \\ 
	ftp://lava.obsidian.co.za/pub/mirrordir \\ 
	    /home/mirrordir
.fi
あるいは
.nf
    mirrordir --verbose /home/mirrordir \\ 
	ftp://psheer@lava.obsidian.co.za/home/ftp/pub/mirrordir
.fi
も動作する。ただし後者ではまずパスワードを尋ねられる。
ftp サーバに「アップロード」を行う場合は、
--strict-mtimes オプションは on にすべきでない。
ftp では修正時刻の設定はできないので、
すべてがコピーされてしまう。
.PP
(--verbose を設定すれば)
.B mirrordir
が繰り返し ftp
で修正時刻とアクセス時刻をセットしようとしていることに気づくだろう。
用いている VFS のタイプにおける制限をユーザに知らせるために、
これらのメッセージは残しておくつもりである。
これらの試行は、明らかな性能の劣化としては現われない。
しかしこのプロトコルを用いたアップロードの性能が悪い場合は、代わりに
.B mc://
を用いてみるといいだろう。
なおダウンロードは常にアップロードよりも高速である。
.PP
一般に cron ジョブでは ftp アップロードを用いるべきではない。
またディレクトリの同期を取る目的にも向いていない。
ディレクトリを同期したい場合は、反対側からのダウンロードを用いること。
アップロードは一回きりのアップロードにしか有用でない。
.SH 例
ここでは
.B mirrordir
を用いて行える、ちょっと気の効いた作業を紹介する。
.TP
.B ミニマリスト的コピー
.RS
ソースツリーが 2 つあり、
古い版をパッチを適用するために保管しておきたいとする。
これには
.B mkdir tree.OLD
して、
.PP
.nf
    \fB  mirrordir -v tree tree.OLD\fP
.fi
.PP
するだけでよい。
もう一度
.B mirrordir
を実行すれば、最小限の変更のみ (つまり更新されたファイルのみ)
がコピーされる (実は
.BR cp (1)
も同じことをする)。
.RE
.TP
.B システムバックアップ
.RS
システムによっては、
定期的なバックアップをテープアーカイブに行っていることがある。
また RAID デバイスを用いて、
あるパーティションと同一のコピーを恒常的に保持しているシステムもあるだろう。
.B mirrordir
はさらに別の選択肢を提供する。
システムに 2 台のドライブを装備する。ひとつは普段用いるもの、
もう一つはバックアップするためのものである。
そして
.B mirrordir
.BR cron (8)
のテーブルに追加するのだ。
変更されたファイルのバックアップには、様々なオプションが利用できる。
バックアップディレクトリはユーザから読み取り可能にしておき、
各人のバックアップファイルを閲覧できるようにしておくといいだろう。
特定のファイルの古いバージョンを取り戻したいユーザは、
バックアップから入手できるようになる。
.B mirrordir
は変更されたファイルの最小限だけを処理するので、非常に高速である。
一日に何回も実行したり、あるいは --nice オプションを付けて
途切れることなく実行させることさえ可能である。

マシンが壊れたときに対する備えをさらに強固にしたければ、
FTP を用いてリモートマシンにバックアップを行うこともできる。
.RE
.TP
.B 2 台のマシンを毎時バックアップする
.RS
.B dar2
というマシン上で、私は次のような cron ジョブを 6 時間ごとに実行している。
.PP
.nf
#!/bin/sh

# (this is just in case of any bugs I don't know about,
# but I don't think it is necessary)
killall -9 tee
killall mirrordir >& /dev/null
sleep 2
killall -9 mirrordir >& /dev/null

(                                                               \\
date                                                        ;   \\
echo "mirrordir says (if it said nothing it is bad):"       ;   \\
    mirrordir mc://dar1:12346/ -p abcdefg /mnt/dar1/            \\
    -i --exclude-regexp '^mc://dar1:12346/var/lock/subsys/atd'  \\
    --exclude-regexp '^mc://dar1:12346/proc/'                   \\
    --exclude-regexp '^mc://dar1:12346/mnt/[^/]*/.*$'           \\
    -i --exclude-regexp '^mc://dar1:12346/boot/'                \\
    -i --exclude-regexp '^mc://dar1:12346/etc/lilo.conf'        \\
    -C                                                          \\
\'
if (S_ISDIR (stat.st_mode)) {
    if (!regexp ("^mc://dar1:12346/[^/]*$", PATH))
        printf ("Backing up: %s\n", PATH);
}
\'                                                   ;           \\
date                                                ;           \\
echo "Done"                                         ;           \\
) 2>&1                                                          \\
| tee --ignore-interrupts --append /var/log/mirrordir.log       \\
| mail -s 'dar1 backup results' psheer@obsidian.co.za
.fi
.PP
.RE
.TP
.B 安全な転送とログイン
.RS
.B turing.co.uk
において以下のコマンドを実行しておく
.br
.nf
    \fBsecure-mcserv -p 12345 -d\fP
.fi
.br
どこか外部のマシンから
.br
.nf
    \fBcopydir --secure -K 512 -z \\ 
    mc://alan@turing.co.uk:12345/usr/src/linux/.config .\fP
.fi
.br
とすれば、512 ビットの鍵を用いた安全なファイルコピー (圧縮つき) ができる。
また
.br
.nf
    \fBpslogin mc://alan@turing.co.uk:12345/\fP
.fi
.br
とすれば、このマシンに安全にログインできる。
.br
.RE
.TP
.B FTP サイトのミラー
.RS
ftp サイトでは ls の -R オプションが禁止されていることが多いので、
従来用いられてきた
.B mirror (1)
は失敗することがあった。
.B mirrordir
にはこの制限はない。
.PP
.nf
    \fBmirrordir -v ftp://metalab.unc.edu/pub /home/ftp/pub\fP
.fi
.PP
.RE
.TP
.B FTP 転送
.RS
よくある FTP 転送は、--copy-mode オプションを用いた
一行のコマンドで簡単に実現できる。
複数のファイルをどちら向きにも、
また別々の ftp サイトにすら (間接的にではあるが)、
.BR cp (1)
のようにコピーできる。
.br
.nf
    \fBcopydir -v mirrordir-0.9.15.tar.gz \\ 
    mirrordir.lsm ftp://metalab.unc.edu/incoming/Linux\fP
.fi
とすると
.B mirrordir
を sunsite にアップロードする。
.LP
anonymous でない ftp 転送のパスワードは、標準的な ftp の慣習に従って
.B "~/.netrc"
ファイルに置き、--netrc オプションを用いるのがよい。
あるいは
.B ftp://myname@machine/
を用いてもかまわない。
.RE
.TP
.B ファイル探索
\fBrecursdir / -C\fP 
.br
.B 'if (!glob ("*.c", FILE)) printf ("%s\\\\n", PATH);'
.br
とするとシステムにあるすべての C ファイルを表示する。
.br
\fBrecursdir / -C\fP 
.br
.B 'if (S_ISCHR(stat.st_mode)) printf ("%s\\\\n", PATH);'
.br
とすればシステムにあるすべてのキャラクタデバイスを表示する。
.TP
.B FTP サイトをテープにバックアップする
.RS
リモートサイトをテープにバックアップするには
.br
.nf
    \fBrecursdir ftp://user@remote.machine/ \\ 
    --exclude-regexp '//[^/]*/proc/' --tar-file /dev/mt\fP 
.fi
とすればよい。
.br
.RE
.TP
.B core ファイルの削除
.RS
これはシステムからすべての core ファイルを削除する:
.PP
.nf
recursdir / -C \'
long l;
if (strncmp (PATH, "/proc", 5)) {
    if (S_ISREG (stat.st_mode) && !strcmp ("core", FILE)) {
        if (strstr (popen ("file " + PATH), "ELF 32-bit LSB core")) {
            l = l + stat.st_size;
            printf ("removing: %s, cumu. total = %ldkB\\n", PATH, l >> 10);
            exec ("rm", "-f", PATH);    /* could also use system() */
        }
    }
}
\'
.fi
.PP
.RE
.SH 環境変数
.TP
.B TMPDIR
一時的なファイルを保管させたいディレクトリ。
ftp ファイルシステムは、
まずファイルをこの一時ディレクトリにダウンロードし、
正しい場所にそのファイルをコピーする。後述の \fBバグ\fP を参照のこと。

TMPDIR が指定されないと、
デフォルトでは現在進行中のファイルがあるディレクトリに保存される。
.SH 返り値
.B mirrordir
は以下の値を返す:
.TP
.B 0
成功。
.TP
.B 1
何らかのエラー (書き込みエラー、許可属性エラーなど) が起った。
この場合、エラーの詳細は stderr に書き込まれているはずである。
.TP
.B 2
あるファイルが利用中でコピーできなかったが、それ以外は成功した。
この場合は `unable to open control file for writing'
というエラーが書き込まれているはずである。
標準エラーでこのメッセージを grep し、これらのファイルに対してのみ
もう一度 mirrordir を実行すればよい。
.BR grep (1)
を参照のこと。
.SH バグ
.B atd
デーモンのあるバージョンでは、
ロックファイル (や pid ファイル?) をそのファイルもロック付きで作成するため、
.B secure-mcserv
が永遠にブロックする。
これを防ぐには、
.B atd
を停止させるか、このファイルを対象から除外しなければならない。

サマータイムの時間補正があるところと ftp でミラーを行うと、
1 時間の時間のオフセットが生じるように見える。
とりあえずの回避策としては --time-offset を用いてほしい。
これが
.B mirrordir
のせいなのかどうかは私にはわからない。

.B mirrordir
のせいで CPU が食い尽くされ、停止してしまうように見えるバグは修正された。

コマンドラインから多数の --exclude 式を指定すると、
処理が遅くなる。たくさんのファイルのリストを除外対象したい人は、
そのリストをテキストファイルに書いて、
.B --exclude-from
オプションを利用する方がよい。

シンボリックリンク (それが指すファイルではない)
の修正時刻とアクセス時刻は複製されない。

以前にあった、ハードリンクファイルが通常ファイルとして扱われてしまうという
制限は解決された。--no-hard-links オプションを指定すれば、
0.9.8 以前の動作をエミュレート可能である。

ハードリンクがデバイスをまたいで作成されているかどうかはチェックしていない。
この場合はそれに見合ったエラーが報告されることになろう。

ftp ファイルシステムは、まずファイルを一時ディレクトリに
\fB*ftpfs*\fP という名前でダウンロードする。
これはスペースの無駄だが、vfs ライブラリのデフォルトの動作なのだ。
このディレクトリに十分な容量がないと、おそらく
.B mirrordir
はハングする。
上述の \fB環境変数\fP を参照のこと。

ファイル除外に用いる C スクリプト言語は、
実装のやりすぎである。
.SH ファイル
.TP
.B "~/.netrc"
マシンとそのパスワードのリスト。
オプション
.B --netrc
を参照のこと。
.TP
.B /etc/ssocket/accept.cs
このスクリプトは、接続のサーバ側で、鍵交換と署名生成を行う。
.TP
.B /etc/ssocket/connect.cs
このスクリプトは、接続のクライアント側で、鍵交換と署名生成を行う。
.TP
.B /etc/ssocket/arcinit.cs
ストリーム cipher 暗号化を初期化する
(国際版では存在しない)。
.TP
.B /etc/ssocket/arcencrypt.cs
ストリーム cipher 暗号化を行う
(国際版では存在しない)。
.TP
.B /etc/ssocket/private/
このディレクトリには、ホストの秘密鍵が置かれる。
鍵はそれぞれ別々のファイルに保存される。
ファイル名は 512, 1024 などである。
鍵のデータベースを使うようにすると、
鍵管理用のユーティリティが必要になるので、
こちらのほうがよい。
すぐに Reiser ファイルシステムが標準的になるだろうから、
データベースファイルはいずれにしても不要になるだろう。
.TP
.B /etc/ssocket/public/
こちらは公開鍵のもの。後は \fB/etc/ssocket/private/\fP と同様。
.SH 準拠
mirrordir は作成者の発明であり、
いかなる OS の標準にも従っていない (そうするべきではあるが!)
.SH 入手方法
このプログラムの最新版は、
\fBftp://metalab.unc.edu/pub/Linux/system/backup\fP または
\fBftp://lava.obsidian.co.za/pub/linux/mirrordir\fP
から入手できる。
.SH 著者
Paul Sheer  <psheer@obsidian.co.za>  <psheer@icon.co.za>
.\" man page by Jim Van Zandt <jrv@vanzandt.mv.com>
.SH 関連項目
\fBmirror\fP(1), \fBpavuk\fP(1), \fBcp\fP(1), \fBscp\fP(1),
\fBfind\fP(1), \fBmc\fP(1), \fBftp\fP(1), \fBssh\fP(1),
\fBtar\fP(1), \fBrlogin\fP(1), \fBrlogind\fP(8), \fBforward\fP(1)