]> Dogcows Code - chaz/tar/blob - doc/tar.texi
Put leading '*' in direntry.
[chaz/tar] / doc / tar.texi
1 \input texinfo
2 @c %**start of header
3 @setfilename tar.info
4 @settitle GNU tar
5 @finalout
6 @smallbook
7 @setchapternewpage odd
8 @c %**end of header
9
10 @c ======================================================================
11 @c This document has three levels of rendition: PUBLISH, DISTRIB or PROOF,
12 @c as decided by @set symbols. The PUBLISH rendition does not show
13 @c notes or marks asking for revision. Most users will prefer having more
14 @c information, even if this information is not fully revised for adequacy,
15 @c so DISTRIB is the default for tar distributions. The PROOF rendition
16 @c show all marks to the point of ugliness, but is nevertheless useful to
17 @c those working on the manual itself.
18 @c ======================================================================
19
20 @ifclear PUBLISH
21 @ifclear DISTRIB
22 @ifclear PROOF
23 @set DISTRIB
24 @end ifclear
25 @end ifclear
26 @end ifclear
27
28 @ifset PUBLISH
29 @set RENDITION The book, version
30 @end ifset
31
32 @ifset DISTRIB
33 @set RENDITION FTP release, version
34 @end ifset
35
36 @ifset PROOF
37 @set RENDITION Proof reading version
38 @end ifset
39
40 @c ---------------------------------------------------------------------
41 @c The @FIXME's, @UNREVISED and @c comments are part Fran@,{c}ois's work
42 @c plan. These annotations are somewhat precious to him; he asks that I
43 @c do not alter them inconsiderately. Much work is needed for GNU tar
44 @c internals (the sources, the programs themselves). Revising the
45 @c adequacy of the manual while revising the sources, and cleaning them
46 @c both at the same time, seems to him like a good way to proceed.
47 @c ---------------------------------------------------------------------
48
49 @c Output marks for nodes needing revision, but not in PUBLISH rendition.
50
51 @macro UNREVISED
52 @ifclear PUBLISH
53 @quotation
54 @emph{(This message will disappear, once this node revised.)}
55 @end quotation
56 @end ifclear
57 @end macro
58
59 @c Output various FIXME information only in PROOF rendition.
60
61 @macro FIXME{string}
62 @allow-recursion
63 @quote-arg
64 @ifset PROOF
65 @strong{<FIXME>} \string\ @strong{</>}
66 @end ifset
67
68 @end macro
69
70 @macro FIXME-ref{string}
71 @quote-arg
72 @ifset PROOF
73 @strong{<REF>} \string\ @strong{</>}
74 @end ifset
75
76 @end macro
77
78 @macro FIXME-pxref{string}
79 @quote-arg
80 @ifset PROOF
81 @strong{<PXREF>} \string\ @strong{</>}
82 @end ifset
83
84 @end macro
85
86 @macro FIXME-xref{string}
87 @quote-arg
88 @ifset PROOF
89 @strong{<XREF>} \string\ @strong{</>}
90 @end ifset
91
92 @end macro
93
94 @c @macro option{entry}
95 @c @quote-arg
96 @c @opindex{--\entry\}
97 @c @value{\entry\}
98 @c @end macro
99
100 @set op-absolute-names @kbd{--absolute-names} (@kbd{-P})
101 @set ref-absolute-names @ref{absolute}
102 @set xref-absolute-names @xref{absolute}
103 @set pxref-absolute-names @pxref{absolute}
104
105 @set op-after-date @kbd{--after-date=@var{date}} (@kbd{--newer=@var{date}}, @kbd{-N @var{date}})
106 @set ref-after-date @ref{after}
107 @set xref-after-date @xref{after}
108 @set pxref-after-date @pxref{after}
109
110 @set op-append @kbd{--append} (@kbd{-r})
111 @set ref-append @ref{add}
112 @set xref-append @xref{add}
113 @set pxref-append @pxref{add}
114
115 @set op-atime-preserve @kbd{--atime-preserve}
116 @set ref-atime-preserve @ref{Attributes}
117 @set xref-atime-preserve @xref{Attributes}
118 @set pxref-atime-preserve @pxref{Attributes}
119
120 @set op-backup @kbd{--backup}
121 @set ref-backup @ref{Backup options}
122 @set xref-backup @xref{Backup options}
123 @set pxref-backup @pxref{Backup options}
124
125 @set op-block-number @kbd{--block-number} (@kbd{-R})
126 @set ref-block-number @ref{verbose}
127 @set xref-block-number @xref{verbose}
128 @set pxref-block-number @pxref{verbose}
129
130 @set op-blocking-factor @kbd{--blocking-factor=@var{512-size}} (@kbd{-b @var{512-size}})
131 @set ref-blocking-factor @ref{Blocking Factor}
132 @set xref-blocking-factor @xref{Blocking Factor}
133 @set pxref-blocking-factor @pxref{Blocking Factor}
134
135 @set op-bzip2 @kbd{--bzip2} (@kbd{-j})
136 @set ref-bzip2 @ref{gzip}
137 @set xref-bzip2 @xref{gzip}
138 @set pxref-bzip2 @pxref{gzip}
139
140 @set op-checkpoint @kbd{--checkpoint}
141 @set ref-checkpoint @ref{verbose}
142 @set xref-checkpoint @xref{verbose}
143 @set pxref-checkpoint @pxref{verbose}
144
145 @set op-compare @kbd{--compare} (@kbd{--diff}, @kbd{-d})
146 @set ref-compare @ref{compare}
147 @set xref-compare @xref{compare}
148 @set pxref-compare @pxref{compare}
149
150 @set op-compress @kbd{--compress} (@kbd{--uncompress}, @kbd{-Z})
151 @set ref-compress @ref{gzip}
152 @set xref-compress @xref{gzip}
153 @set pxref-compress @pxref{gzip}
154
155 @set op-concatenate @kbd{--concatenate} (@kbd{--catenate}, @kbd{-A})
156 @set ref-concatenate @ref{concatenate}
157 @set xref-concatenate @xref{concatenate}
158 @set pxref-concatenate @pxref{concatenate}
159
160 @set op-create @kbd{--create} (@kbd{-c})
161 @set ref-create @ref{create}
162 @set xref-create @xref{create}
163 @set pxref-create @pxref{create}
164
165 @set op-delete @kbd{--delete}
166 @set ref-delete @ref{delete}
167 @set xref-delete @xref{delete}
168 @set pxref-delete @pxref{delete}
169
170 @set op-dereference @kbd{--dereference} (@kbd{-h})
171 @set ref-dereference @ref{dereference}
172 @set xref-dereference @xref{dereference}
173 @set pxref-dereference @pxref{dereference}
174
175 @set op-directory @kbd{--directory=@var{directory}} (@kbd{-C @var{directory}})
176 @set ref-directory @ref{directory}
177 @set xref-directory @xref{directory}
178 @set pxref-directory @pxref{directory}
179
180 @set op-exclude @kbd{--exclude=@var{pattern}}
181 @set ref-exclude @ref{exclude}
182 @set xref-exclude @xref{exclude}
183 @set pxref-exclude @pxref{exclude}
184
185 @set op-exclude-from @kbd{--exclude-from=@var{file-of-patterns}} (@kbd{-X @var{file-of-patterns}})
186 @set ref-exclude-from @ref{exclude}
187 @set xref-exclude-from @xref{exclude}
188 @set pxref-exclude-from @pxref{exclude}
189
190 @set op-extract @kbd{--extract} (@kbd{--get}, @kbd{-x})
191 @set ref-extract @ref{extract}
192 @set xref-extract @xref{extract}
193 @set pxref-extract @pxref{extract}
194
195 @set op-file @kbd{--file=@var{archive-name}} (@kbd{-f @var{archive-name}})
196 @set ref-file @ref{file}
197 @set xref-file @xref{file}
198 @set pxref-file @pxref{file}
199
200 @set op-files-from @kbd{--files-from=@var{file-of-names}} (@kbd{-T @var{file-of-names}})
201 @set ref-files-from @ref{files}
202 @set xref-files-from @xref{files}
203 @set pxref-files-from @pxref{files}
204
205 @set op-force-local @kbd{--force-local}
206 @set ref-force-local @ref{file}
207 @set xref-force-local @xref{file}
208 @set pxref-force-local @pxref{file}
209
210 @set op-group @kbd{--group=@var{group}}
211 @set ref-group @ref{Option Summary}
212 @set xref-group @xref{Option Summary}
213 @set pxref-group @pxref{Option Summary}
214
215 @set op-gzip @kbd{--gzip} (@kbd{--gunzip}, @kbd{--ungzip}, @kbd{-z})
216 @set ref-gzip @ref{gzip}
217 @set xref-gzip @xref{gzip}
218 @set pxref-gzip @pxref{gzip}
219
220 @set op-help @kbd{--help}
221 @set ref-help @ref{help}
222 @set xref-help @xref{help}
223 @set pxref-help @pxref{help}
224
225 @set op-ignore-failed-read @kbd{--ignore-failed-read}
226 @set ref-ignore-failed-read @ref{create options}
227 @set xref-ignore-failed-read @xref{create options}
228 @set pxref-ignore-failed-read @pxref{create options}
229
230 @set op-ignore-zeros @kbd{--ignore-zeros} (@kbd{-i})
231 @set ref-ignore-zeros @ref{Reading}
232 @set xref-ignore-zeros @xref{Reading}
233 @set pxref-ignore-zeros @pxref{Reading}
234
235 @set op-incremental @kbd{--incremental} (@kbd{-G})
236 @set ref-incremental @ref{Inc Dumps}
237 @set xref-incremental @xref{Inc Dumps}
238 @set pxref-incremental @pxref{Inc Dumps}
239
240 @set op-info-script @kbd{--info-script=@var{script-name}} (@kbd{--new-volume-script=@var{script-name}}, @kbd{-F @var{script-name}})
241 @set ref-info-script @ref{Multi-Volume Archives}
242 @set xref-info-script @xref{Multi-Volume Archives}
243 @set pxref-info-script @pxref{Multi-Volume Archives}
244
245 @set op-interactive @kbd{--interactive} (@kbd{-w})
246 @set ref-interactive @ref{interactive}
247 @set xref-interactive @xref{interactive}
248 @set pxref-interactive @pxref{interactive}
249
250 @set op-keep-old-files @kbd{--keep-old-files} (@kbd{-k})
251 @set ref-keep-old-files @ref{Writing}
252 @set xref-keep-old-files @xref{Writing}
253 @set pxref-keep-old-files @pxref{Writing}
254
255 @set op-label @kbd{--label=@var{archive-label}} (@kbd{-V @var{archive-label}})
256 @set ref-label @ref{label}
257 @set xref-label @xref{label}
258 @set pxref-label @pxref{label}
259
260 @set op-list @kbd{--list} (@kbd{-t})
261 @set ref-list @ref{list}
262 @set xref-list @xref{list}
263 @set pxref-list @pxref{list}
264
265 @set op-listed-incremental @kbd{--listed-incremental=@var{snapshot-file}} (@kbd{-g @var{snapshot-file}})
266 @set ref-listed-incremental @ref{Inc Dumps}
267 @set xref-listed-incremental @xref{Inc Dumps}
268 @set pxref-listed-incremental @pxref{Inc Dumps}
269
270 @set op-mode @kbd{--mode=@var{permissions}}
271 @set ref-mode @ref{Option Summary}
272 @set xref-mode @xref{Option Summary}
273 @set pxref-mode @pxref{Option Summary}
274
275 @set op-multi-volume @kbd{--multi-volume} (@kbd{-M})
276 @set ref-multi-volume @ref{Multi-Volume Archives}
277 @set xref-multi-volume @xref{Multi-Volume Archives}
278 @set pxref-multi-volume @pxref{Multi-Volume Archives}
279
280 @set op-newer-mtime @kbd{--newer-mtime=@var{date}}
281 @set ref-newer-mtime @ref{after}
282 @set xref-newer-mtime @xref{after}
283 @set pxref-newer-mtime @pxref{after}
284
285 @set op-no-recursion @kbd{--no-recursion}
286 @set ref-no-recursion @ref{recurse}
287 @set xref-no-recursion @xref{recurse}
288 @set pxref-no-recursion @pxref{recurse}
289
290 @set op-no-same-owner @kbd{--no-same-owner}
291 @set ref-no-same-owner @ref{Attributes}
292 @set xref-no-same-owner @xref{Attributes}
293 @set pxref-no-same-owner @pxref{Attributes}
294
295 @set op-no-same-permissions @kbd{--no-same-permissions}
296 @set ref-no-same-permissions @ref{Attributes}
297 @set xref-no-same-permissions @xref{Attributes}
298 @set pxref-no-same-permissions @pxref{Attributes}
299
300 @set op-null @kbd{--null}
301 @set ref-null @ref{files}
302 @set xref-null @xref{files}
303 @set pxref-null @pxref{files}
304
305 @set op-numeric-owner @kbd{--numeric-owner}
306 @set ref-numeric-owner @ref{Attributes}
307 @set xref-numeric-owner @xref{Attributes}
308 @set pxref-numeric-owner @pxref{Attributes}
309
310 @set op-old-archive @kbd{--old-archive} (@kbd{-o})
311 @set ref-old-archive @ref{old}
312 @set xref-old-archive @xref{old}
313 @set pxref-old-archive @pxref{old}
314
315 @set op-one-file-system @kbd{--one-file-system} (@kbd{-l})
316 @set ref-one-file-system @ref{one}
317 @set xref-one-file-system @xref{one}
318 @set pxref-one-file-system @pxref{one}
319
320 @set op-overwrite @kbd{--overwrite}
321 @set ref-overwrite @ref{Overwrite Old Files}
322 @set xref-overwrite @xref{Overwrite Old Files}
323 @set pxref-overwrite @pxref{Overwrite Old Files}
324
325 @set op-owner @kbd{--owner=@var{user}}
326 @set ref-owner @ref{Option Summary}
327 @set xref-owner @xref{Option Summary}
328 @set pxref-owner @pxref{Option Summary}
329
330 @set op-posix @kbd{--posix}
331 @set ref-posix @ref{posix}
332 @set xref-posix @xref{posix}
333 @set pxref-posix @pxref{posix}
334
335 @set op-preserve @kbd{--preserve}
336 @set ref-preserve @ref{Attributes}
337 @set xref-preserve @xref{Attributes}
338 @set pxref-preserve @pxref{Attributes}
339
340 @set op-record-size @kbd{--record-size=@var{size}}
341 @set ref-record-size @ref{Blocking}
342 @set xref-record-size @xref{Blocking}
343 @set pxref-record-size @pxref{Blocking}
344
345 @set op-recursive-unlink @kbd{--recursive-unlink}
346 @set ref-recursive-unlink @ref{Writing}
347 @set xref-recursive-unlink @xref{Writing}
348 @set pxref-recursive-unlink @pxref{Writing}
349
350 @set op-read-full-records @kbd{--read-full-records} (@kbd{-B})
351 @set ref-read-full-records @ref{Blocking}
352 @set xref-read-full-records @xref{Blocking}
353 @set pxref-read-full-records @pxref{Blocking}
354 @c FIXME: or should it be Reading, or Blocking Factor
355
356 @set op-remove-files @kbd{--remove-files}
357 @set ref-remove-files @ref{Writing}
358 @set xref-remove-files @xref{Writing}
359 @set pxref-remove-files @pxref{Writing}
360
361 @set op-rsh-command @kbd{rsh-command=@var{command}}
362
363 @set op-same-order @kbd{--same-order} (@kbd{--preserve-order}, @kbd{-s})
364 @set ref-same-order @ref{Scarce}
365 @set xref-same-order @xref{Scarce}
366 @set pxref-same-order @pxref{Scarce}
367 @c FIXME: or should it be Reading, or Attributes?
368
369 @set op-same-owner @kbd{--same-owner}
370 @set ref-same-owner @ref{Attributes}
371 @set xref-same-owner @xref{Attributes}
372 @set pxref-same-owner @pxref{Attributes}
373
374 @set op-same-permissions @kbd{--same-permissions} (@kbd{--preserve-permissions}, @kbd{-p})
375 @set ref-same-permissions @ref{Attributes}
376 @set xref-same-permissions @xref{Attributes}
377 @set pxref-same-permissions @pxref{Attributes}
378 @c FIXME: or should it be Writing?
379
380 @set op-show-omitted-dirs @kbd{--show-omitted-dirs}
381 @set ref-show-omitted-dirs @ref{verbose}
382 @set xref-show-omitted-dirs @xref{verbose}
383 @set pxref-show-omitted-dirs @pxref{verbose}
384
385 @set op-sparse @kbd{--sparse} (@kbd{-S})
386 @set ref-sparse @ref{sparse}
387 @set xref-sparse @xref{sparse}
388 @set pxref-sparse @pxref{sparse}
389
390 @set op-starting-file @kbd{--starting-file=@var{name}} (@kbd{-K @var{name}})
391 @set ref-starting-file @ref{Scarce}
392 @set xref-starting-file @xref{Scarce}
393 @set pxref-starting-file @pxref{Scarce}
394
395 @set op-suffix @kbd{--suffix=@var{suffix}}
396 @set ref-suffix @ref{Backup options}
397 @set xref-suffix @xref{Backup options}
398 @set pxref-suffix @pxref{Backup options}
399
400 @set op-tape-length @kbd{--tape-length=@var{1024-size}} (@kbd{-L @var{1024-size}})
401 @set ref-tape-length @ref{Using Multiple Tapes}
402 @set xref-tape-length @xref{Using Multiple Tapes}
403 @set pxref-tape-length @pxref{Using Multiple Tapes}
404
405 @set op-to-stdout @kbd{--to-stdout} (@kbd{-O})
406 @set ref-to-stdout @ref{Writing}
407 @set xref-to-stdout @xref{Writing}
408 @set pxref-to-stdout @pxref{Writing}
409
410 @set op-totals @kbd{--totals}
411 @set ref-totals @ref{verbose}
412 @set xref-totals @xref{verbose}
413 @set pxref-totals @pxref{verbose}
414
415 @set op-touch @kbd{--touch} (@kbd{-m})
416 @set ref-touch @ref{Writing}
417 @set xref-touch @xref{Writing}
418 @set pxref-touch @pxref{Writing}
419
420 @set op-unlink-first @kbd{--unlink-first} (@kbd{-U})
421 @set ref-unlink-first @ref{Writing}
422 @set xref-unlink-first @xref{Writing}
423 @set pxref-unlink-first @pxref{Writing}
424
425 @set op-update @kbd{--update} (@kbd{-u})
426 @set ref-update @ref{update}
427 @set xref-update @xref{update}
428 @set pxref-update @pxref{update}
429
430 @set op-use-compress-prog @kbd{--use-compress-prog=@var{program}}
431 @set ref-use-compress-prog @ref{gzip}
432 @set xref-use-compress-prog @xref{gzip}
433 @set pxref-use-compress-prog @pxref{gzip}
434
435 @set op-verbose @kbd{--verbose} (@kbd{-v})
436 @set ref-verbose @ref{verbose}
437 @set xref-verbose @xref{verbose}
438 @set pxref-verbose @pxref{verbose}
439
440 @set op-verify @kbd{--verify} (@kbd{-W})
441 @set ref-verify @ref{verify}
442 @set xref-verify @xref{verify}
443 @set pxref-verify @pxref{verify}
444
445 @set op-version @kbd{--version}
446 @set ref-version @ref{help}
447 @set xref-version @xref{help}
448 @set pxref-version @pxref{help}
449
450 @set op-volno-file @kbd{--volno-file=@var{file-of-number}}
451 @set ref-volno-file @ref{Using Multiple Tapes}
452 @set xref-volno-file @xref{Using Multiple Tapes}
453 @set pxref-volno-file @pxref{Using Multiple Tapes}
454
455 @include version.texi
456
457 @c Put everything in one index (arbitrarily chosen to be the concept index).
458 @syncodeindex fn cp
459 @syncodeindex ky cp
460 @syncodeindex pg cp
461 @syncodeindex vr cp
462
463 @defindex op
464 @syncodeindex op cp
465
466 @dircategory GNU Packages
467 @direntry
468 * Tar: (tar). Making tape (or disk) archives.
469 @end direntry
470
471 @dircategory Individual utilities
472 @direntry
473 * tar: (tar)tar invocation. Invoking @sc{gnu} @command{tar}
474 @end direntry
475
476 @ifinfo
477 This file documents @sc{gnu} @command{tar}, which creates and extracts
478 files from archives.
479
480 Copyright 1992, 1994, 1995, 1996, 1997, 1999, 2000, 2001 Free Software
481 Foundation, Inc.
482
483 Permission is granted to copy, distribute and/or modify this document
484 under the terms of the GNU Free Documentation License, Version 1.1
485 or any later version published by the Free Software Foundation;
486 with no Invariant Sections, with no
487 Front-Cover Texts, and with no Back-Cover Texts.
488 A copy of the license is included in the section entitled ``GNU
489 Free Documentation License''.
490
491 @end ifinfo
492
493 @shorttitlepage @sc{gnu} @command{tar}
494
495 @titlepage
496 @title @sc{gnu} tar: an archiver tool
497 @subtitle @value{RENDITION} @value{VERSION}, @value{UPDATED}
498 @author Melissa Weisshaus, Jay Fenlason,
499 @author Thomas Bushnell, n/BSG, Amy Gorin
500 @c he said to remove it: Fran@,{c}ois Pinard
501 @c i'm thinking about how the author page *should* look. -mew 2may96
502
503 @page
504 @vskip 0pt plus 1filll
505 Copyright @copyright{} 1992, 1994, 1995, 1996, 1997, 1999, 2000, 2001
506 Free Software Foundation, Inc.
507
508 Permission is granted to copy, distribute and/or modify this document
509 under the terms of the GNU Free Documentation License, Version 1.1
510 or any later version published by the Free Software Foundation;
511 with no Invariant Sections, with no
512 Front-Cover Texts, and with no Back-Cover Texts.
513 A copy of the license is included in the section entitled ``GNU
514 Free Documentation License''.
515 @end titlepage
516
517 @ifnottex
518 @node Top
519 @top @sc{gnu} tar: an archiver tool
520
521 @cindex file archival
522 @cindex archiving files
523
524 @sc{gnu} @command{tar} creates and extracts files from archives.
525
526 This manual documents version @value{VERSION} of @sc{gnu} @command{tar}.
527
528 The first part of this master menu lists the major nodes in this Info
529 document. The rest of the menu lists all the lower level nodes.
530 @end ifnottex
531
532 @c The master menu, created with texinfo-master-menu, goes here.
533 @c (However, getdate.texi's menu is interpolated by hand.)
534
535 @menu
536 * Introduction::
537 * Tutorial::
538 * tar invocation::
539 * operations::
540 * Backups::
541 * Choosing::
542 * Date input formats::
543 * Formats::
544 * Media::
545 * Copying This Manual::
546 * Index::
547
548 @detailmenu
549 --- The Detailed Node Listing ---
550
551 Introduction
552
553 * Book Contents:: What this Book Contains
554 * Definitions:: Some Definitions
555 * What tar Does:: What @command{tar} Does
556 * Naming tar Archives:: How @command{tar} Archives are Named
557 * posix compliance::
558 * Authors:: @sc{gnu} @command{tar} Authors
559 * Reports:: Reporting bugs or suggestions
560
561 Tutorial Introduction to @command{tar}
562
563 * assumptions::
564 * stylistic conventions::
565 * basic tar options:: Basic @command{tar} Operations and Options
566 * frequent operations::
567 * Two Frequent Options::
568 * create:: How to Create Archives
569 * list:: How to List Archives
570 * extract:: How to Extract Members from an Archive
571 * going further::
572
573 Two Frequently Used Options
574
575 * file tutorial::
576 * verbose tutorial::
577 * help tutorial::
578
579 How to Create Archives
580
581 * prepare for examples::
582 * Creating the archive::
583 * create verbose::
584 * short create::
585 * create dir::
586
587 How to List Archives
588
589 * list dir::
590
591 How to Extract Members from an Archive
592
593 * extracting archives::
594 * extracting files::
595 * extract dir::
596 * failing commands::
597
598 Invoking @sc{gnu} @command{tar}
599
600 * Synopsis::
601 * using tar options::
602 * Styles::
603 * All Options::
604 * help::
605 * verbose::
606 * interactive::
607
608 The Three Option Styles
609
610 * Mnemonic Options:: Mnemonic Option Style
611 * Short Options:: Short Option Style
612 * Old Options:: Old Option Style
613 * Mixing:: Mixing Option Styles
614
615 All @command{tar} Options
616
617 * Operation Summary::
618 * Option Summary::
619 * Short Option Summary::
620
621 @sc{gnu} @command{tar} Operations
622
623 * Basic tar::
624 * Advanced tar::
625 * create options::
626 * extract options::
627 * backup::
628 * Applications::
629 * looking ahead::
630
631 Advanced @sc{gnu} @command{tar} Operations
632
633 * Operations::
634 * current state::
635 * append::
636 * update::
637 * concatenate::
638 * delete::
639 * compare::
640
641 How to Add Files to Existing Archives: @code{--append}
642
643 * appending files:: Appending Files to an Archive
644 * multiple::
645
646 Updating an Archive
647
648 * how to update::
649
650 Options Used by @code{--create}
651
652 * Ignore Failed Read::
653
654 Options Used by @code{--extract}
655
656 * Reading:: Options to Help Read Archives
657 * Writing:: Changing How @command{tar} Writes Files
658 * Scarce:: Coping with Scarce Resources
659
660 Options to Help Read Archives
661
662 * read full records::
663 * Ignore Zeros::
664
665 Changing How @command{tar} Writes Files
666
667 * Dealing with Old Files::
668 * Overwrite Old Files::
669 * Keep Old Files::
670 * Unlink First::
671 * Recursive Unlink::
672 * Modification Times::
673 * Setting Access Permissions::
674 * Writing to Standard Output::
675 * remove files::
676
677 Coping with Scarce Resources
678
679 * Starting File::
680 * Same Order::
681
682 Performing Backups and Restoring Files
683
684 * Full Dumps:: Using @command{tar} to Perform Full Dumps
685 * Inc Dumps:: Using @command{tar} to Perform Incremental Dumps
686 * incremental and listed-incremental:: The Incremental Options
687 * Backup Levels:: Levels of Backups
688 * Backup Parameters:: Setting Parameters for Backups and Restoration
689 * Scripted Backups:: Using the Backup Scripts
690 * Scripted Restoration:: Using the Restore Script
691
692 Setting Parameters for Backups and Restoration
693
694 * backup-specs example:: An Example Text of @file{Backup-specs}
695 * Script Syntax:: Syntax for @file{Backup-specs}
696
697 Choosing Files and Names for @command{tar}
698
699 * file:: Choosing the Archive's Name
700 * Selecting Archive Members::
701 * files:: Reading Names from a File
702 * exclude:: Excluding Some Files
703 * Wildcards::
704 * after:: Operating Only on New Files
705 * recurse:: Descending into Directories
706 * one:: Crossing Filesystem Boundaries
707
708 Reading Names from a File
709
710 * nul::
711
712 Excluding Some Files
713
714 * controlling pattern-patching with exclude::
715 * problems with exclude::
716
717 Crossing Filesystem Boundaries
718
719 * directory:: Changing Directory
720 * absolute:: Absolute File Names
721
722 Date input formats
723
724 * General date syntax:: Common rules.
725 * Calendar date items:: 19 Dec 1994.
726 * Time of day items:: 9:20pm.
727 * Time zone items:: @sc{est}, @sc{pdt}, @sc{gmt}, ...
728 * Day of week items:: Monday and others.
729 * Relative items in date strings:: next tuesday, 2 years ago.
730 * Pure numbers in date strings:: 19931219, 1440.
731 * Authors of getdate:: Bellovin, Eggert, Salz, Berets, et al.
732
733 Controlling the Archive Format
734
735 * Portability:: Making @command{tar} Archives More Portable
736 * Compression:: Using Less Space through Compression
737 * Attributes:: Handling File Attributes
738 * Standard:: The Standard Format
739 * Extensions:: @sc{gnu} Extensions to the Archive Format
740 * cpio:: Comparison of @command{tar} and @command{cpio}
741
742 Making @command{tar} Archives More Portable
743
744 * Portable Names:: Portable Names
745 * dereference:: Symbolic Links
746 * old:: Old V7 Archives
747 * posix:: @sc{posix} archives
748 * Checksumming:: Checksumming Problems
749 * Large or Negative Values:: Large files, negative time stamps, etc.
750
751 Using Less Space through Compression
752
753 * gzip:: Creating and Reading Compressed Archives
754 * sparse:: Archiving Sparse Files
755
756 Tapes and Other Archive Media
757
758 * Device:: Device selection and switching
759 * Remote Tape Server::
760 * Common Problems and Solutions::
761 * Blocking:: Blocking
762 * Many:: Many archives on one tape
763 * Using Multiple Tapes:: Using Multiple Tapes
764 * label:: Including a Label in the Archive
765 * verify::
766 * Write Protection::
767
768 Blocking
769
770 * Format Variations:: Format Variations
771 * Blocking Factor:: The Blocking Factor of an Archive
772
773 Many Archives on One Tape
774
775 * Tape Positioning:: Tape Positions and Tape Marks
776 * mt:: The @command{mt} Utility
777
778 Using Multiple Tapes
779
780 * Multi-Volume Archives:: Archives Longer than One Tape or Disk
781 * Tape Files:: Tape Files
782
783 Copying This Manual
784
785 * GNU Free Documentation License:: License for copying this manual
786
787 @end detailmenu
788 @end menu
789
790 @node Introduction
791 @chapter Introduction
792
793 Welcome to the @sc{gnu} @command{tar} manual. @sc{gnu} @command{tar} creates
794 and manipulates (@dfn{archives}) which are actually collections of
795 many other files; the program provides users with an organized and
796 systematic method for controlling a large amount of data.
797
798 @menu
799 * Book Contents:: What this Book Contains
800 * Definitions:: Some Definitions
801 * What tar Does:: What @command{tar} Does
802 * Naming tar Archives:: How @command{tar} Archives are Named
803 * posix compliance::
804 * Authors:: @sc{gnu} @command{tar} Authors
805 * Reports:: Reporting bugs or suggestions
806 @end menu
807
808 @node Book Contents
809 @section What this Book Contains
810
811 The first part of this chapter introduces you to various terms that will
812 recur throughout the book. It also tells you who has worked on @sc{gnu}
813 @command{tar} and its documentation, and where you should send bug reports
814 or comments.
815
816 The second chapter is a tutorial (@pxref{Tutorial}) which provides a
817 gentle introduction for people who are new to using @command{tar}. It is
818 meant to be self contained, not requiring any reading from subsequent
819 chapters to make sense. It moves from topic to topic in a logical,
820 progressive order, building on information already explained.
821
822 Although the tutorial is paced and structured to allow beginners to
823 learn how to use @command{tar}, it is not intended solely for beginners.
824 The tutorial explains how to use the three most frequently used
825 operations (@samp{create}, @samp{list}, and @samp{extract}) as well as
826 two frequently used options (@samp{file} and @samp{verbose}). The other
827 chapters do not refer to the tutorial frequently; however, if a section
828 discusses something which is a complex variant of a basic concept, there
829 may be a cross reference to that basic concept. (The entire book,
830 including the tutorial, assumes that the reader understands some basic
831 concepts of using a Unix-type operating system; @pxref{Tutorial}.)
832
833 The third chapter presents the remaining five operations, and
834 information about using @command{tar} options and option syntax.
835
836 @FIXME{this sounds more like a @sc{gnu} Project Manuals Concept [tm] more
837 than the reality. should think about whether this makes sense to say
838 here, or not.} The other chapters are meant to be used as a
839 reference. Each chapter presents everything that needs to be said
840 about a specific topic.
841
842 One of the chapters (@pxref{Date input formats}) exists in its entirety
843 in other @sc{gnu} manuals, and is mostly self-contained. In addition, one
844 section of this manual (@pxref{Standard}) contains a big quote which is
845 taken directly from @command{tar} sources.
846
847 In general, we give both the long and short (abbreviated) option names
848 at least once in each section where the relevant option is covered, so
849 that novice readers will become familiar with both styles. (A few
850 options have no short versions, and the relevant sections will
851 indicate this.)
852
853 @node Definitions
854 @section Some Definitions
855
856 @cindex archive
857 @cindex tar archive
858 The @command{tar} program is used to create and manipulate @command{tar}
859 archives. An @dfn{archive} is a single file which contains the contents
860 of many files, while still identifying the names of the files, their
861 owner(s), and so forth. (In addition, archives record access
862 permissions, user and group, size in bytes, and last modification time.
863 Some archives also record the file names in each archived directory, as
864 well as other file and directory information.) You can use @command{tar}
865 to @dfn{create} a new archive in a specified directory.
866
867 @cindex member
868 @cindex archive member
869 @cindex file name
870 @cindex member name
871 The files inside an archive are called @dfn{members}. Within this
872 manual, we use the term @dfn{file} to refer only to files accessible in
873 the normal ways (by @command{ls}, @command{cat}, and so forth), and the term
874 @dfn{member} to refer only to the members of an archive. Similarly, a
875 @dfn{file name} is the name of a file, as it resides in the filesystem,
876 and a @dfn{member name} is the name of an archive member within the
877 archive.
878
879 @cindex extraction
880 @cindex unpacking
881 The term @dfn{extraction} refers to the process of copying an archive
882 member (or multiple members) into a file in the filesystem. Extracting
883 all the members of an archive is often called @dfn{extracting the
884 archive}. The term @dfn{unpack} can also be used to refer to the
885 extraction of many or all the members of an archive. Extracting an
886 archive does not destroy the archive's structure, just as creating an
887 archive does not destroy the copies of the files that exist outside of
888 the archive. You may also @dfn{list} the members in a given archive
889 (this is often thought of as ``printing'' them to the standard output,
890 or the command line), or @dfn{append} members to a pre-existing archive.
891 All of these operations can be performed using @command{tar}.
892
893 @node What tar Does
894 @section What @command{tar} Does
895
896 @cindex tar
897 The @command{tar} program provides the ability to create @command{tar}
898 archives, as well as various other kinds of manipulation. For example,
899 you can use @command{tar} on previously created archives to extract files,
900 to store additional files, or to update or list files which were already
901 stored.
902
903 Initially, @command{tar} archives were used to store files conveniently on
904 magnetic tape. The name @command{tar} comes from this use; it stands for
905 @code{t}ape @code{ar}chiver. Despite the utility's name, @command{tar} can
906 direct its output to available devices, files, or other programs (using
907 pipes). @command{tar} may even access remote devices or files (as archives).
908
909 @FIXME{the following table entries need a bit of work..}
910
911 You can use @command{tar} archives in many ways. We want to stress a few
912 of them: storage, backup, and transportation.
913
914 @table @asis
915 @item Storage
916 Often, @command{tar} archives are used to store related files for
917 convenient file transfer over a network. For example, the @sc{gnu} Project
918 distributes its software bundled into @command{tar} archives, so that
919 all the files relating to a particular program (or set of related
920 programs) can be transferred as a single unit.
921
922 A magnetic tape can store several files in sequence. However, the tape
923 has no names for these files; it only knows their relative position on
924 the tape. One way to store several files on one tape and retain their
925 names is by creating a @command{tar} archive. Even when the basic transfer
926 mechanism can keep track of names, as FTP can, the nuisance of handling
927 multiple files, directories, and multiple links makes @command{tar}
928 archives useful.
929
930 Archive files are also used for long-term storage. You can think of
931 this as transportation from the present into the future. (It is a
932 science-fiction idiom that you can move through time as well as in
933 space; the idea here is that @command{tar} can be used to move archives in
934 all dimensions, even time!)
935
936 @item Backup
937 Because the archive created by @command{tar} is capable of preserving file
938 information and directory structure, @command{tar} is commonly used for
939 performing full and incremental backups of disks. A backup puts a
940 collection of files (possibly pertaining to many users and
941 projects) together on a disk or a tape. This guards against accidental
942 destruction of the information in those files. @sc{gnu} @command{tar} has
943 special features that allow it to be used to make incremental and full
944 dumps of all the files in a filesystem.
945
946 @item Transportation
947 You can create an archive on one system, transfer it to another system,
948 and extract the contents there. This allows you to transport a group of
949 files from one system to another.
950 @end table
951
952 @node Naming tar Archives
953 @section How @command{tar} Archives are Named
954
955 Conventionally, @command{tar} archives are given names ending with
956 @samp{.tar}. This is not necessary for @command{tar} to operate properly,
957 but this manual follows that convention in order to accustom readers to
958 it and to make examples more clear.
959
960 @cindex tar file
961 @cindex entry
962 @cindex tar entry
963 Often, people refer to @command{tar} archives as ``@command{tar} files,'' and
964 archive members as ``files'' or ``entries''. For people familiar with
965 the operation of @command{tar}, this causes no difficulty. However, in
966 this manual, we consistently refer to ``archives'' and ``archive
967 members'' to make learning to use @command{tar} easier for novice users.
968
969 @node posix compliance
970 @section @sc{posix} Compliance
971
972 @noindent
973 @FIXME{must ask franc,ois about this. dan hagerty thinks this might
974 be an issue, but we're not really sure at this time. dan just tried a
975 test case of mixing up options' orders while the variable was set, and
976 there was no problem...}
977
978 We make some of our recommendations throughout this book for one
979 reason in addition to what we think of as ``good sense''. The main
980 additional reason for a recommendation is to be compliant with the
981 @sc{posix} standards. If you set the shell environment variable
982 @env{POSIXLY_CORRECT}, @sc{gnu} @command{tar} will force you to adhere to
983 these standards. Therefore, if this variable is set and you violate
984 one of the @sc{posix} standards in the way you phrase a command, for
985 example, @sc{gnu} @command{tar} will not allow the command and will signal an
986 error message. You would then have to reorder the options or rephrase
987 the command to comply with the @sc{posix} standards.
988
989 There is a chance in the future that, if you set this environment
990 variable, your archives will be forced to comply with @sc{posix} standards,
991 also. No @sc{gnu} @command{tar} extensions will be allowed.
992
993 @node Authors
994 @section @sc{gnu} @command{tar} Authors
995
996 @sc{gnu} @command{tar} was originally written by John Gilmore, and modified by
997 many people. The @sc{gnu} enhancements were written by Jay Fenlason, then
998 Joy Kendall, and the whole package has been further maintained by
999 Thomas Bushnell, n/BSG, and finally Fran@,{c}ois Pinard, with
1000 the help of numerous and kind users.
1001
1002 We wish to stress that @command{tar} is a collective work, and owes much to
1003 all those people who reported problems, offered solutions and other
1004 insights, or shared their thoughts and suggestions. An impressive, yet
1005 partial list of those contributors can be found in the @file{THANKS}
1006 file from the @sc{gnu} @command{tar} distribution.
1007
1008 @FIXME{i want all of these names mentioned, Absolutely. BUT, i'm not
1009 sure i want to spell out the history in this detail, at least not for
1010 the printed book. i'm just not sure it needs to be said this way.
1011 i'll think about it.}
1012
1013 @FIXME{History is more important, and surely more interesting, than
1014 actual names. Quoting names without history would be meaningless. FP}
1015
1016 Jay Fenlason put together a draft of a @sc{gnu} @command{tar} manual,
1017 borrowing notes from the original man page from John Gilmore. This
1018 was withdrawn in version
1019 1.11. Thomas Bushnell, n/BSG and Amy Gorin worked on a tutorial and
1020 manual for @sc{gnu} @command{tar}. Fran@,{c}ois Pinard put version 1.11.8
1021 of the manual together by taking information from all these sources
1022 and merging them. Melissa Weisshaus finally edited and redesigned the
1023 book to create version 1.12. @FIXME{update version number as
1024 necessary; i'm being optimistic!} @FIXME{Someone [maybe karl berry?
1025 maybe bob chassell? maybe melissa? maybe julie sussman?] needs to
1026 properly index the thing.}
1027
1028 For version 1.12, Daniel Hagerty contributed a great deal of technical
1029 consulting. In particular, he is the primary author of @ref{Backups}.
1030
1031 @node Reports
1032 @section Reporting bugs or suggestions
1033
1034 @cindex bug reports
1035 @cindex reporting bugs
1036 If you find problems or have suggestions about this program or manual,
1037 please report them to @file{bug-tar@@gnu.org}.
1038
1039 @node Tutorial
1040 @chapter Tutorial Introduction to @command{tar}
1041
1042 This chapter guides you through some basic examples of three @command{tar}
1043 operations: @samp{--create}, @samp{--list}, and @samp{--extract}. If
1044 you already know how to use some other version of @command{tar}, then you
1045 may not need to read this chapter. This chapter omits most complicated
1046 details about how @command{tar} works.
1047
1048 @menu
1049 * assumptions::
1050 * stylistic conventions::
1051 * basic tar options:: Basic @command{tar} Operations and Options
1052 * frequent operations::
1053 * Two Frequent Options::
1054 * create:: How to Create Archives
1055 * list:: How to List Archives
1056 * extract:: How to Extract Members from an Archive
1057 * going further::
1058 @end menu
1059
1060 @node assumptions
1061 @section Assumptions this Tutorial Makes
1062
1063 This chapter is paced to allow beginners to learn about @command{tar}
1064 slowly. At the same time, we will try to cover all the basic aspects of
1065 these three operations. In order to accomplish both of these tasks, we
1066 have made certain assumptions about your knowledge before reading this
1067 manual, and the hardware you will be using:
1068
1069 @itemize @bullet
1070 @item
1071 Before you start to work through this tutorial, you should understand
1072 what the terms ``archive'' and ``archive member'' mean
1073 (@pxref{Definitions}). In addition, you should understand something
1074 about how Unix-type operating systems work, and you should know how to
1075 use some basic utilities. For example, you should know how to create,
1076 list, copy, rename, edit, and delete files and directories; how to
1077 change between directories; and how to figure out where you are in the
1078 filesystem. You should have some basic understanding of directory
1079 structure and how files are named according to which directory they are
1080 in. You should understand concepts such as standard output and standard
1081 input, what various definitions of the term ``argument'' mean, and the
1082 differences between relative and absolute path names. @FIXME{and what
1083 else?}
1084
1085 @item
1086 This manual assumes that you are working from your own home directory
1087 (unless we state otherwise). In this tutorial, you will create a
1088 directory to practice @command{tar} commands in. When we show path names,
1089 we will assume that those paths are relative to your home directory.
1090 For example, my home directory path is @file{/home/fsf/melissa}. All of
1091 my examples are in a subdirectory of the directory named by that path
1092 name; the subdirectory is called @file{practice}.
1093
1094 @item
1095 In general, we show examples of archives which exist on (or can be
1096 written to, or worked with from) a directory on a hard disk. In most
1097 cases, you could write those archives to, or work with them on any other
1098 device, such as a tape drive. However, some of the later examples in
1099 the tutorial and next chapter will not work on tape drives.
1100 Additionally, working with tapes is much more complicated than working
1101 with hard disks. For these reasons, the tutorial does not cover working
1102 with tape drives. @xref{Media}, for complete information on using
1103 @command{tar} archives with tape drives.
1104
1105 @FIXME{this is a cop out. need to add some simple tape drive info.}
1106 @end itemize
1107
1108 @node stylistic conventions
1109 @section Stylistic Conventions
1110
1111 In the examples, @samp{$} represents a typical shell prompt. It
1112 precedes lines you should type; to make this more clear, those lines are
1113 shown in @kbd{this font}, as opposed to lines which represent the
1114 computer's response; those lines are shown in @code{this font}, or
1115 sometimes @samp{like this}. When we have lines which are too long to be
1116 displayed in any other way, we will show them like this:
1117
1118 @smallexample
1119 This is an example of a line which would otherwise not fit in this space.
1120 @end smallexample
1121
1122 @FIXME{how often do we use smallexample?}
1123
1124 @node basic tar options
1125 @section Basic @command{tar} Operations and Options
1126
1127 @command{tar} can take a wide variety of arguments which specify and define
1128 the actions it will have on the particular set of files or the archive.
1129 The main types of arguments to @command{tar} fall into one of two classes:
1130 operations, and options.
1131
1132 Some arguments fall into a class called @dfn{operations}; exactly one of
1133 these is both allowed and required for any instance of using @command{tar};
1134 you may @emph{not} specify more than one. People sometimes speak of
1135 @dfn{operating modes}. You are in a particular operating mode when you
1136 have specified the operation which specifies it; there are eight
1137 operations in total, and thus there are eight operating modes.
1138
1139 The other arguments fall into the class known as @dfn{options}. You are
1140 not required to specify any options, and you are allowed to specify more
1141 than one at a time (depending on the way you are using @command{tar} at
1142 that time). Some options are used so frequently, and are so useful for
1143 helping you type commands more carefully that they are effectively
1144 ``required''. We will discuss them in this chapter.
1145
1146 You can write most of the @command{tar} operations and options in any of
1147 three forms: long (mnemonic) form, short form, and old style. Some of
1148 the operations and options have no short or ``old'' forms; however, the
1149 operations and options which we will cover in this tutorial have
1150 corresponding abbreviations. @FIXME{make sure this is still the case,
1151 at the end}We will indicate those abbreviations appropriately to get
1152 you used to seeing them. (Note that the ``old style'' option forms
1153 exist in @sc{gnu} @command{tar} for compatibility with Unix @command{tar}. We
1154 present a full discussion of this way of writing options and operations
1155 appears in @ref{Old Options}, and we discuss the other two styles of
1156 writing options in @ref{Mnemonic Options} and @ref{Short Options}.)
1157
1158 In the examples and in the text of this tutorial, we usually use the
1159 long forms of operations and options; but the ``short'' forms produce
1160 the same result and can make typing long @command{tar} commands easier.
1161 For example, instead of typing
1162
1163 @example
1164 @kbd{tar --create --verbose --file=afiles.tar apple angst aspic}
1165 @end example
1166
1167 @noindent
1168 you can type
1169 @example
1170 @kbd{tar -c -v -f afiles.tar apple angst aspic}
1171 @end example
1172
1173 @noindent
1174 or even
1175 @example
1176 @kbd{tar -cvf afiles.tar apple angst aspic}
1177 @end example
1178
1179 @noindent
1180 For more information on option syntax, see @ref{Advanced tar}. In
1181 discussions in the text, when we name an option by its long form, we
1182 also give the corresponding short option in parentheses.
1183
1184 The term, ``option'', can be confusing at times, since ``operations''
1185 are often lumped in with the actual, @emph{optional} ``options'' in certain
1186 general class statements. For example, we just talked about ``short and
1187 long forms of options and operations''. However, experienced @command{tar}
1188 users often refer to these by shorthand terms such as, ``short and long
1189 options''. This term assumes that the ``operations'' are included, also.
1190 Context will help you determine which definition of ``options'' to use.
1191
1192 Similarly, the term ``command'' can be confusing, as it is often used in
1193 two different ways. People sometimes refer to @command{tar} ``commands''.
1194 A @command{tar} @dfn{command} is the entire command line of user input
1195 which tells @command{tar} what to do --- including the operation, options,
1196 and any arguments (file names, pipes, other commands, etc). However,
1197 you will also sometimes hear the term ``the @command{tar} command''. When
1198 the word ``command'' is used specifically like this, a person is usually
1199 referring to the @command{tar} @emph{operation}, not the whole line.
1200 Again, use context to figure out which of the meanings the speaker
1201 intends.
1202
1203 @node frequent operations
1204 @section The Three Most Frequently Used Operations
1205
1206 Here are the three most frequently used operations (both short and long
1207 forms), as well as a brief description of their meanings. The rest of
1208 this chapter will cover how to use these operations in detail. We will
1209 present the rest of the operations in the next chapter.
1210
1211 @table @kbd
1212 @item --create
1213 @itemx -c
1214 Create a new @command{tar} archive.
1215 @item --list
1216 @itemx -t
1217 List the contents of an archive.
1218 @item --extract
1219 @itemx -x
1220 Extract one or more members from an archive.
1221 @end table
1222
1223 @node Two Frequent Options
1224 @section Two Frequently Used Options
1225
1226 To understand how to run @command{tar} in the three operating modes listed
1227 previously, you also need to understand how to use two of the options to
1228 @command{tar}: @samp{--file} (which takes an archive file as an argument)
1229 and @samp{--verbose}. (You are usually not @emph{required} to specify
1230 either of these options when you run @command{tar}, but they can be very
1231 useful in making things more clear and helping you avoid errors.)
1232
1233 @menu
1234 * file tutorial::
1235 * verbose tutorial::
1236 * help tutorial::
1237 @end menu
1238
1239 @node file tutorial
1240 @unnumberedsubsec The @samp{--file} Option
1241
1242 @table @kbd
1243 @item --file=@var{archive-name}
1244 @itemx -f @var{archive-name}
1245 Specify the name of an archive file.
1246 @end table
1247
1248 You can specify an argument for the @value{op-file} option whenever you
1249 use @command{tar}; this option determines the name of the archive file
1250 that @command{tar} will work on.
1251
1252 If you don't specify this argument, then @command{tar} will use a
1253 default, usually some physical tape drive attached to your machine.
1254 If there is no tape drive attached, or the default is not meaningful,
1255 then @command{tar} will print an error message. The error message might
1256 look roughly like one of the following:
1257
1258 @example
1259 tar: can't open /dev/rmt8 : No such device or address
1260 tar: can't open /dev/rsmt0 : I/O error
1261 @end example
1262
1263 @noindent
1264 To avoid confusion, we recommend that you always specify an archive file
1265 name by using @value{op-file} when writing your @command{tar} commands.
1266 For more information on using the @value{op-file} option, see
1267 @ref{file}.
1268
1269 @node verbose tutorial
1270 @unnumberedsubsec The @samp{--verbose} Option
1271
1272 @table @kbd
1273 @item --verbose
1274 @itemx -v
1275 Show the files being worked on as @command{tar} is running.
1276 @end table
1277
1278 @value{op-verbose} shows details about the results of running
1279 @command{tar}. This can be especially useful when the results might not be
1280 obvious. For example, if you want to see the progress of @command{tar} as
1281 it writes files into the archive, you can use the @samp{--verbose}
1282 option. In the beginning, you may find it useful to use
1283 @samp{--verbose} at all times; when you are more accustomed to
1284 @command{tar}, you will likely want to use it at certain times but not at
1285 others. We will use @samp{--verbose} at times to help make something
1286 clear, and we will give many examples both using and not using
1287 @samp{--verbose} to show the differences.
1288
1289 Sometimes, a single instance of @samp{--verbose} on the command line
1290 will show a full, @samp{ls} style listing of an archive or files,
1291 giving sizes, owners, and similar information. Other times,
1292 @samp{--verbose} will only show files or members that the particular
1293 operation is operating on at the time. In the latter case, you can
1294 use @samp{--verbose} twice in a command to get a listing such as that
1295 in the former case. For example, instead of saying
1296
1297 @example
1298 @kbd{tar -cvf afiles.tar apple angst aspic}
1299 @end example
1300
1301 @noindent
1302 above, you might say
1303
1304 @example
1305 @kbd{tar -cvvf afiles.tar apple angst aspic}
1306 @end example
1307
1308 @noindent
1309 This works equally well using short or long forms of options. Using
1310 long forms, you would simply write out the mnemonic form of the option
1311 twice, like this:
1312
1313 @example
1314 $ @kbd{tar --create --verbose --verbose @dots{}}
1315 @end example
1316
1317 @noindent
1318 Note that you must double the hyphens properly each time.
1319
1320 Later in the tutorial, we will give examples using @w{@samp{--verbose
1321 --verbose}}.
1322
1323 @node help tutorial
1324 @unnumberedsubsec Getting Help: Using the @code{--help} Option
1325
1326 @table @kbd
1327 @item --help
1328
1329 The @samp{--help} option to @command{tar} prints out a very brief list of
1330 all operations and option available for the current version of
1331 @command{tar} available on your system.
1332 @end table
1333
1334 @node create
1335 @section How to Create Archives
1336 @UNREVISED
1337
1338 One of the basic operations of @command{tar} is @value{op-create}, which
1339 you use to create a @command{tar} archive. We will explain
1340 @samp{--create} first because, in order to learn about the other
1341 operations, you will find it useful to have an archive available to
1342 practice on.
1343
1344 To make this easier, in this section you will first create a directory
1345 containing three files. Then, we will show you how to create an
1346 @emph{archive} (inside the new directory). Both the directory, and
1347 the archive are specifically for you to practice on. The rest of this
1348 chapter and the next chapter will show many examples using this
1349 directory and the files you will create: some of those files may be
1350 other directories and other archives.
1351
1352 The three files you will archive in this example are called
1353 @file{blues}, @file{folk}, and @file{jazz}. The archive is called
1354 @file{collection.tar}.
1355
1356 This section will proceed slowly, detailing how to use @samp{--create}
1357 in @code{verbose} mode, and showing examples using both short and long
1358 forms. In the rest of the tutorial, and in the examples in the next
1359 chapter, we will proceed at a slightly quicker pace. This section
1360 moves more slowly to allow beginning users to understand how
1361 @command{tar} works.
1362
1363 @menu
1364 * prepare for examples::
1365 * Creating the archive::
1366 * create verbose::
1367 * short create::
1368 * create dir::
1369 @end menu
1370
1371 @node prepare for examples
1372 @subsection Preparing a Practice Directory for Examples
1373
1374 To follow along with this and future examples, create a new directory
1375 called @file{practice} containing files called @file{blues}, @file{folk}
1376 and @file{jazz}. The files can contain any information you like:
1377 ideally, they should contain information which relates to their names,
1378 and be of different lengths. Our examples assume that @file{practice}
1379 is a subdirectory of your home directory.
1380
1381 Now @command{cd} to the directory named @file{practice}; @file{practice}
1382 is now your @dfn{working directory}. (@emph{Please note}: Although
1383 the full path name of this directory is
1384 @file{/@var{homedir}/practice}, in our examples we will refer to
1385 this directory as @file{practice}; the @var{homedir} is presumed.
1386
1387 In general, you should check that the files to be archived exist where
1388 you think they do (in the working directory) by running @command{ls}.
1389 Because you just created the directory and the files and have changed to
1390 that directory, you probably don't need to do that this time.
1391
1392 It is very important to make sure there isn't already a file in the
1393 working directory with the archive name you intend to use (in this case,
1394 @samp{collection.tar}), or that you don't care about its contents.
1395 Whenever you use @samp{create}, @command{tar} will erase the current
1396 contents of the file named by @value{op-file} if it exists. @command{tar}
1397 will not tell you if you are about to overwrite an archive unless you
1398 specify an option which does this. @FIXME{xref to the node for
1399 --backup!}To add files to an existing archive, you need to use a
1400 different option, such as @value{op-append}; see @ref{append} for
1401 information on how to do this.
1402
1403 @node Creating the archive
1404 @subsection Creating the Archive
1405
1406 To place the files @file{blues}, @file{folk}, and @file{jazz} into an
1407 archive named @file{collection.tar}, use the following command:
1408
1409 @example
1410 $ @kbd{tar --create --file=collection.tar blues folk jazz}
1411 @end example
1412
1413 The order of the arguments is not very important, @emph{when using long
1414 option forms}. You could also say:
1415
1416 @example
1417 $ @kbd{tar blues --create folk --file=collection.tar jazz}
1418 @end example
1419
1420 @noindent
1421 However, you can see that this order is harder to understand; this is
1422 why we will list the arguments in the order that makes the commands
1423 easiest to understand (and we encourage you to do the same when you use
1424 @command{tar}, to avoid errors).
1425
1426 Note that the part of the command which says,
1427 @w{@kbd{--file=collection.tar}} is considered to be @emph{one} argument.
1428 If you substituted any other string of characters for
1429 @kbd{collection.tar}, then that string would become the name of the
1430 archive file you create.
1431
1432 The order of the options becomes more important when you begin to use
1433 short forms. With short forms, if you type commands in the wrong order
1434 (even if you type them correctly in all other ways), you may end up with
1435 results you don't expect. For this reason, it is a good idea to get
1436 into the habit of typing options in the order that makes inherent sense.
1437 @xref{short create}, for more information on this.
1438
1439 In this example, you type the command as shown above: @samp{--create}
1440 is the operation which creates the new archive
1441 (@file{collection.tar}), and @samp{--file} is the option which lets
1442 you give it the name you chose. The files, @file{blues}, @file{folk},
1443 and @file{jazz}, are now members of the archive, @file{collection.tar}
1444 (they are @dfn{file name arguments} to the @samp{--create} operation).
1445 @FIXME{xref here to the discussion of file name args?}Now that they are
1446 in the archive, they are called @emph{archive members}, not files.
1447 @FIXME{xref to definitions?}
1448
1449 When you create an archive, you @emph{must} specify which files you want
1450 placed in the archive. If you do not specify any archive members, @sc{gnu}
1451 @command{tar} will complain.
1452
1453 If you now list the contents of the working directory (@kbd{ls}), you will
1454 find the archive file listed as well as the files you saw previously:
1455
1456 @example
1457 blues folk jazz collection.tar
1458 @end example
1459
1460 @noindent
1461 Creating the archive @samp{collection.tar} did not destroy the copies of
1462 the files in the directory.
1463
1464 Keep in mind that if you don't indicate an operation, @command{tar} will not
1465 run and will prompt you for one. If you don't name any files, @command{tar}
1466 will complain. You must have write access to the working directory,
1467 or else you will not be able to create an archive in that directory.
1468
1469 @emph{Caution}: Do not attempt to use @value{op-create} to add files to
1470 an existing archive; it will delete the archive and write a new one.
1471 Use @value{op-append} instead. @xref{append}.
1472
1473 @node create verbose
1474 @subsection Running @samp{--create} with @samp{--verbose}
1475
1476 If you include the @value{op-verbose} option on the command line,
1477 @command{tar} will list the files it is acting on as it is working. In
1478 verbose mode, the @code{create} example above would appear as:
1479
1480 @example
1481 $ @kbd{tar --create --verbose --file=collection.tar blues folk jazz}
1482 blues
1483 folk
1484 jazz
1485 @end example
1486
1487 This example is just like the example we showed which did not use
1488 @samp{--verbose}, except that @command{tar} generated the remaining lines
1489 @iftex
1490 (note the different font styles).
1491 @end iftex
1492 @ifinfo
1493 .
1494 @end ifinfo
1495
1496 In the rest of the examples in this chapter, we will frequently use
1497 @code{verbose} mode so we can show actions or @command{tar} responses that
1498 you would otherwise not see, and which are important for you to
1499 understand.
1500
1501 @node short create
1502 @subsection Short Forms with @samp{create}
1503
1504 As we said before, the @value{op-create} operation is one of the most
1505 basic uses of @command{tar}, and you will use it countless times.
1506 Eventually, you will probably want to use abbreviated (or ``short'')
1507 forms of options. A full discussion of the three different forms that
1508 options can take appears in @ref{Styles}; for now, here is what the
1509 previous example (including the @value{op-verbose} option) looks like
1510 using short option forms:
1511
1512 @example
1513 $ @kbd{tar -cvf collection.tar blues folk jazz}
1514 blues
1515 folk
1516 jazz
1517 @end example
1518
1519 @noindent
1520 As you can see, the system responds the same no matter whether you use
1521 long or short option forms.
1522
1523 @FIXME{i don't like how this is worded:} One difference between using
1524 short and long option forms is that, although the exact placement of
1525 arguments following options is no more specific when using short forms,
1526 it is easier to become confused and make a mistake when using short
1527 forms. For example, suppose you attempted the above example in the
1528 following way:
1529
1530 @example
1531 $ @kbd{tar -cfv collection.tar blues folk jazz}
1532 @end example
1533
1534 @noindent
1535 In this case, @command{tar} will make an archive file called @file{v},
1536 containing the files @file{blues}, @file{folk}, and @file{jazz}, because
1537 the @samp{v} is the closest ``file name'' to the @samp{-f} option, and
1538 is thus taken to be the chosen archive file name. @command{tar} will try
1539 to add a file called @file{collection.tar} to the @file{v} archive file;
1540 if the file @file{collection.tar} did not already exist, @command{tar} will
1541 report an error indicating that this file does not exist. If the file
1542 @file{collection.tar} does already exist (e.g., from a previous command
1543 you may have run), then @command{tar} will add this file to the archive.
1544 Because the @samp{-v} option did not get registered, @command{tar} will not
1545 run under @samp{verbose} mode, and will not report its progress.
1546
1547 The end result is that you may be quite confused about what happened,
1548 and possibly overwrite a file. To illustrate this further, we will show
1549 you how an example we showed previously would look using short forms.
1550
1551 This example,
1552
1553 @example
1554 $ @kbd{tar blues --create folk --file=collection.tar jazz}
1555 @end example
1556
1557 @noindent
1558 is confusing as it is. When shown using short forms, however, it
1559 becomes much more so:
1560
1561 @example
1562 $ @kbd{tar blues -c folk -f collection.tar jazz}
1563 @end example
1564
1565 @noindent
1566 It would be very easy to put the wrong string of characters
1567 immediately following the @samp{-f}, but doing that could sacrifice
1568 valuable data.
1569
1570 For this reason, we recommend that you pay very careful attention to
1571 the order of options and placement of file and archive names,
1572 especially when using short option forms. Not having the option name
1573 written out mnemonically can affect how well you remember which option
1574 does what, and therefore where different names have to be placed.
1575 (Placing options in an unusual order can also cause @command{tar} to
1576 report an error if you have set the shell environment variable
1577 @env{POSIXLY_CORRECT}; @pxref{posix compliance} for more information
1578 on this.)
1579
1580 @node create dir
1581 @subsection Archiving Directories
1582
1583 @cindex Archiving Directories
1584 @cindex Directories, Archiving
1585 You can archive a directory by specifying its directory name as a
1586 file name argument to @command{tar}. The files in the directory will be
1587 archived relative to the working directory, and the directory will be
1588 re-created along with its contents when the archive is extracted.
1589
1590 To archive a directory, first move to its superior directory. If you
1591 have followed the previous instructions in this tutorial, you should
1592 type:
1593
1594 @example
1595 $ @kbd{cd ..}
1596 $
1597 @end example
1598
1599 @noindent
1600 This will put you into the directory which contains @file{practice},
1601 i.e. your home directory. Once in the superior directory, you can
1602 specify the subdirectory, @file{practice}, as a file name argument. To
1603 store @file{practice} in the new archive file @file{music.tar}, type:
1604
1605 @example
1606 $ @kbd{tar --create --verbose --file=music.tar practice}
1607 @end example
1608
1609 @noindent
1610 @command{tar} should output:
1611
1612 @example
1613 practice/
1614 practice/blues
1615 practice/folk
1616 practice/jazz
1617 practice/collection.tar
1618 @end example
1619
1620 Note that the archive thus created is not in the subdirectory
1621 @file{practice}, but rather in the current working directory---the
1622 directory from which @command{tar} was invoked. Before trying to archive a
1623 directory from its superior directory, you should make sure you have
1624 write access to the superior directory itself, not only the directory
1625 you are trying archive with @command{tar}. For example, you will probably
1626 not be able to store your home directory in an archive by invoking
1627 @command{tar} from the root directory; @value{xref-absolute-names}. (Note
1628 also that @file{collection.tar}, the original archive file, has itself
1629 been archived. @command{tar} will accept any file as a file to be
1630 archived, regardless of its content. When @file{music.tar} is
1631 extracted, the archive file @file{collection.tar} will be re-written
1632 into the file system).
1633
1634 If you give @command{tar} a command such as
1635
1636 @example
1637 $ @kbd{tar --create --file=foo.tar .}
1638 @end example
1639
1640 @noindent
1641 @command{tar} will report @samp{tar: ./foo.tar is the archive; not dumped}.
1642 This happens because @command{tar} creates the archive @file{foo.tar} in
1643 the current directory before putting any files into it. Then, when
1644 @command{tar} attempts to add all the files in the directory @file{.} to
1645 the archive, it notices that the file @file{./foo.tar} is the same as the
1646 archive @file{foo.tar}, and skips it. (It makes no sense to put an archive
1647 into itself.) @sc{gnu} @command{tar} will continue in this case, and create the
1648 archive normally, except for the exclusion of that one file.
1649 (@emph{Please note:} Other versions of @command{tar} are not so clever;
1650 they will enter an infinite loop when this happens, so you should not
1651 depend on this behavior unless you are certain you are running @sc{gnu}
1652 @command{tar}.) @FIXME{bob doesn't like this sentence, since he does it
1653 all the time, and we've been doing it in the editing passes for this
1654 manual: In general, make sure that the archive is not inside a
1655 directory being dumped.}
1656
1657 @node list
1658 @section How to List Archives
1659
1660 Frequently, you will find yourself wanting to determine exactly what a
1661 particular archive contains. You can use the @value{op-list} operation
1662 to get the member names as they currently appear in the archive, as well
1663 as various attributes of the files at the time they were archived. For
1664 example, you can examine the archive @file{collection.tar} that you
1665 created in the last section with the command,
1666
1667 @example
1668 $ @kbd{tar --list --file=collection.tar}
1669 @end example
1670
1671 @noindent
1672 The output of @command{tar} would then be:
1673
1674 @example
1675 blues
1676 folk
1677 jazz
1678 @end example
1679
1680 @FIXME{we hope this will change. if it doesn't, need to show the
1681 creation of bfiles somewhere above!!! : }
1682
1683 @noindent
1684 The archive @file{bfiles.tar} would list as follows:
1685
1686 @example
1687 ./birds
1688 baboon
1689 ./box
1690 @end example
1691
1692 @noindent
1693 Be sure to use a @value{op-file} option just as with @value{op-create}
1694 to specify the name of the archive.
1695
1696 If you use the @value{op-verbose} option with @samp{--list}, then
1697 @command{tar} will print out a listing reminiscent of @w{@samp{ls -l}},
1698 showing owner, file size, and so forth.
1699
1700 If you had used @value{op-verbose} mode, the example above would look
1701 like:
1702
1703 @example
1704 $ @kbd{tar --list --verbose --file=collection.tar folk}
1705 -rw-rw-rw- myself user 62 1990-05-23 10:55 folk
1706 @end example
1707
1708 @cindex File name arguments, using @code{--list} with
1709 @cindex @code{--list} with file name arguments
1710 You can specify one or more individual member names as arguments when
1711 using @samp{list}. In this case, @command{tar} will only list the
1712 names of members you identify. For example, @w{@kbd{tar --list
1713 --file=afiles.tar apple}} would only print @file{apple}.
1714
1715 @FIXME{we hope the relevant aspects of this will change:}Because
1716 @command{tar} preserves paths, file names must be specified as they appear
1717 in the archive (ie., relative to the directory from which the archive
1718 was created). Therefore, it is essential when specifying member names
1719 to @command{tar} that you give the exact member names. For example,
1720 @w{@kbd{tar --list --file=bfiles birds}} would produce an error message
1721 something like @samp{tar: birds: Not found in archive}, because there is
1722 no member named @file{birds}, only one named @file{./birds}. While the
1723 names @file{birds} and @file{./birds} name the same file, @emph{member}
1724 names are compared using a simplistic name comparison, in which an exact
1725 match is necessary. @xref{absolute}.
1726
1727 However, @w{@kbd{tar --list --file=collection.tar folk}} would respond
1728 with @file{folk}, because @file{folk} is in the archive file
1729 @file{collection.tar}. If you are not sure of the exact file name, try
1730 listing all the files in the archive and searching for the one you
1731 expect to find; remember that if you use @samp{--list} with no file
1732 names as arguments, @command{tar} will print the names of all the members
1733 stored in the specified archive.
1734
1735 @menu
1736 * list dir::
1737 @end menu
1738
1739 @node list dir
1740 @unnumberedsubsec Listing the Contents of a Stored Directory
1741 @UNREVISED
1742
1743 @FIXME{i changed the order of these nodes around and haven't had a
1744 chance to play around with this node's example, yet. i have to play
1745 with it and see what it actually does for my own satisfaction, even if
1746 what it says *is* correct..}
1747
1748 To get information about the contents of an archived directory,
1749 use the directory name as a file name argument in conjunction with
1750 @value{op-list}. To find out file attributes, include the
1751 @value{op-verbose} option.
1752
1753 For example, to find out about files in the directory @file{practice}, in
1754 the archive file @file{music.tar}, type:
1755
1756 @example
1757 $ @kbd{tar --list --verbose --file=music.tar practice}
1758 @end example
1759
1760 @command{tar} responds:
1761
1762 @example
1763 drwxrwxrwx myself user 0 1990-05-31 21:49 practice/
1764 -rw-rw-rw- myself user 42 1990-05-21 13:29 practice/blues
1765 -rw-rw-rw- myself user 62 1990-05-23 10:55 practice/folk
1766 -rw-rw-rw- myself user 40 1990-05-21 13:30 practice/jazz
1767 -rw-rw-rw- myself user 10240 1990-05-31 21:49 practice/collection.tar
1768 @end example
1769
1770 When you use a directory name as a file name argument, @command{tar} acts on
1771 all the files (including sub-directories) in that directory.
1772
1773 @node extract
1774 @section How to Extract Members from an Archive
1775 @UNREVISED
1776 @cindex Extraction
1777 @cindex Retrieving files from an archive
1778 @cindex Resurrecting files from an archive
1779
1780 Creating an archive is only half the job---there is no point in storing
1781 files in an archive if you can't retrieve them. The act of retrieving
1782 members from an archive so they can be used and manipulated as
1783 unarchived files again is called @dfn{extraction}. To extract files
1784 from an archive, use the @value{op-extract} operation. As with
1785 @value{op-create}, specify the name of the archive with @value{op-file}.
1786 Extracting an archive does not modify the archive in any way; you can
1787 extract it multiple times if you want or need to.
1788
1789 Using @samp{--extract}, you can extract an entire archive, or specific
1790 files. The files can be directories containing other files, or not. As
1791 with @value{op-create} and @value{op-list}, you may use the short or the
1792 long form of the operation without affecting the performance.
1793
1794 @menu
1795 * extracting archives::
1796 * extracting files::
1797 * extract dir::
1798 * failing commands::
1799 @end menu
1800
1801 @node extracting archives
1802 @subsection Extracting an Entire Archive
1803
1804 To extract an entire archive, specify the archive file name only, with
1805 no individual file names as arguments. For example,
1806
1807 @example
1808 $ @kbd{tar -xvf collection.tar}
1809 @end example
1810
1811 @noindent
1812 produces this:
1813
1814 @example
1815 -rw-rw-rw- me user 28 1996-10-18 16:31 jazz
1816 -rw-rw-rw- me user 21 1996-09-23 16:44 blues
1817 -rw-rw-rw- me user 20 1996-09-23 16:44 folk
1818 @end example
1819
1820 @node extracting files
1821 @subsection Extracting Specific Files
1822
1823 To extract specific archive members, give their exact member names as
1824 arguments, as printed by @value{op-list}. If you had mistakenly deleted
1825 one of the files you had placed in the archive @file{collection.tar}
1826 earlier (say, @file{blues}), you can extract it from the archive without
1827 changing the archive's structure. It will be identical to the original
1828 file @file{blues} that you deleted. @FIXME{check this; will the times,
1829 permissions, owner, etc be the same, also?}
1830
1831 First, make sure you are in the @file{practice} directory, and list the
1832 files in the directory. Now, delete the file, @samp{blues}, and list
1833 the files in the directory again.
1834
1835 You can now extract the member @file{blues} from the archive file
1836 @file{collection.tar} like this:
1837
1838 @example
1839 $ @kbd{tar --extract --file=collection.tar blues}
1840 @end example
1841
1842 @noindent
1843 If you list the files in the directory again, you will see that the file
1844 @file{blues} has been restored, with its original permissions, creation
1845 times, and owner.@FIXME{This is only accidentally true, but not in
1846 general. In most cases, one has to be root for restoring the owner, and
1847 use a special option for restoring permissions. Here, it just happens
1848 that the restoring user is also the owner of the archived members, and
1849 that the current @code{umask} is compatible with original permissions.}
1850 (These parameters will be identical to those which
1851 the file had when you originally placed it in the archive; any changes
1852 you may have made before deleting the file from the file system,
1853 however, will @emph{not} have been made to the archive member.) The
1854 archive file, @samp{collection.tar}, is the same as it was before you
1855 extracted @samp{blues}. You can confirm this by running @command{tar} with
1856 @value{op-list}.
1857
1858 @FIXME{we hope this will change:}Remember that as with other operations,
1859 specifying the exact member name is important. @w{@kbd{tar --extract
1860 --file=bfiles.tar birds}} will fail, because there is no member named
1861 @file{birds}. To extract the member named @file{./birds}, you must
1862 specify @w{@kbd{tar --extract --file=bfiles.tar ./birds}}. To find the
1863 exact member names of the members of an archive, use @value{op-list}
1864 (@pxref{list}).
1865
1866 If you give the @value{op-verbose} option, then @value{op-extract} will
1867 print the names of the archive members as it extracts them.
1868
1869 @node extract dir
1870 @subsection Extracting Files that are Directories
1871
1872 Extracting directories which are members of an archive is similar to
1873 extracting other files. The main difference to be aware of is that if
1874 the extracted directory has the same name as any directory already in
1875 the working directory, then files in the extracted directory will be
1876 placed into the directory of the same name. Likewise, if there are
1877 files in the pre-existing directory with the same names as the members
1878 which you extract, the files from the extracted archive will replace
1879 the files already in the working directory (and possible
1880 subdirectories). This will happen regardless of whether or not the
1881 files in the working directory were more recent than those extracted.
1882
1883 However, if a file was stored with a directory name as part of its file
1884 name, and that directory does not exist under the working directory when
1885 the file is extracted, @command{tar} will create the directory.
1886
1887 We can demonstrate how to use @samp{--extract} to extract a directory
1888 file with an example. Change to the @file{practice} directory if you
1889 weren't there, and remove the files @file{folk} and @file{jazz}. Then,
1890 go back to the parent directory and extract the archive
1891 @file{music.tar}. You may either extract the entire archive, or you may
1892 extract only the files you just deleted. To extract the entire archive,
1893 don't give any file names as arguments after the archive name
1894 @file{music.tar}. To extract only the files you deleted, use the
1895 following command:
1896
1897 @example
1898 $ @kbd{tar -xvf music.tar practice/folk practice/jazz}
1899 @end example
1900
1901 @FIXME{need to show tar's response; used verbose above. also, here's a
1902 good place to demonstrate the -v -v thing. have to write that up
1903 (should be trivial, but i'm too tired!).}
1904
1905 @noindent
1906 Because you created the directory with @file{practice} as part of the
1907 file names of each of the files by archiving the @file{practice}
1908 directory as @file{practice}, you must give @file{practice} as part
1909 of the file names when you extract those files from the archive.
1910
1911 @FIXME{IMPORTANT! show the final structure, here. figure out what it
1912 will be.}
1913
1914 @node failing commands
1915 @subsection Commands That Will Fail
1916
1917 Here are some sample commands you might try which will not work, and why
1918 they won't work.
1919
1920 If you try to use this command,
1921
1922 @example
1923 $ @kbd{tar -xvf music.tar folk jazz}
1924 @end example
1925
1926 @noindent
1927 you will get the following response:
1928
1929 @example
1930 tar: folk: Not found in archive
1931 tar: jazz: Not found in archive
1932 $
1933 @end example
1934
1935 @noindent
1936 This is because these files were not originally @emph{in} the parent
1937 directory @file{..}, where the archive is located; they were in the
1938 @file{practice} directory, and their file names reflect this:
1939
1940 @example
1941 $ @kbd{tar -tvf music.tar}
1942 practice/folk
1943 practice/jazz
1944 practice/rock
1945 @end example
1946
1947 @FIXME{make sure the above works when going through the examples in
1948 order...}
1949
1950 @noindent
1951 Likewise, if you try to use this command,
1952
1953 @example
1954 $ @kbd{tar -tvf music.tar folk jazz}
1955 @end example
1956
1957 @noindent
1958 you would get a similar response. Members with those names are not in the
1959 archive. You must use the correct member names in order to extract the
1960 files from the archive.
1961
1962 If you have forgotten the correct names of the files in the archive,
1963 use @w{@kbd{tar --list --verbose}} to list them correctly.
1964
1965 @FIXME{more examples, here? hag thinks it's a good idea.}
1966
1967 @node going further
1968 @section Going Further Ahead in this Manual
1969
1970 @FIXME{need to write up a node here about the things that are going to
1971 be in the rest of the manual.}
1972
1973 @node tar invocation
1974 @chapter Invoking @sc{gnu} @command{tar}
1975 @UNREVISED
1976
1977 This chapter is about how one invokes the @sc{gnu} @command{tar} command, from
1978 the command synopsis (@pxref{Synopsis}). There are numerous options,
1979 and many styles for writing them. One mandatory option specifies
1980 the operation @command{tar} should perform (@pxref{Operation Summary}),
1981 other options are meant to detail how this operation should be performed
1982 (@pxref{Option Summary}). Non-option arguments are not always interpreted
1983 the same way, depending on what the operation is.
1984
1985 You will find in this chapter everything about option styles and rules for
1986 writing them (@pxref{Styles}). On the other hand, operations and options
1987 are fully described elsewhere, in other chapters. Here, you will find
1988 only synthetic descriptions for operations and options, together with
1989 pointers to other parts of the @command{tar} manual.
1990
1991 Some options are so special they are fully described right in this
1992 chapter. They have the effect of inhibiting the normal operation of
1993 @command{tar} or else, they globally alter the amount of feedback the user
1994 receives about what is going on. These are the @value{op-help} and
1995 @value{op-version} (@pxref{help}), @value{op-verbose} (@pxref{verbose})
1996 and @value{op-interactive} options (@pxref{interactive}).
1997
1998 @menu
1999 * Synopsis::
2000 * using tar options::
2001 * Styles::
2002 * All Options::
2003 * help::
2004 * verbose::
2005 * interactive::
2006 @end menu
2007
2008 @node Synopsis
2009 @section General Synopsis of @command{tar}
2010
2011 The @sc{gnu} @command{tar} program is invoked as either one of:
2012
2013 @example
2014 @kbd{tar @var{option}@dots{} [@var{name}]@dots{}}
2015 @kbd{tar @var{letter}@dots{} [@var{argument}]@dots{} [@var{option}]@dots{} [@var{name}]@dots{}}
2016 @end example
2017
2018 The second form is for when old options are being used.
2019
2020 You can use @command{tar} to store files in an archive, to extract them from
2021 an archive, and to do other types of archive manipulation. The primary
2022 argument to @command{tar}, which is called the @dfn{operation}, specifies
2023 which action to take. The other arguments to @command{tar} are either
2024 @dfn{options}, which change the way @command{tar} performs an operation,
2025 or file names or archive members, which specify the files or members
2026 @command{tar} is to act on.
2027
2028 You can actually type in arguments in any order, even if in this manual
2029 the options always precede the other arguments, to make examples easier
2030 to understand. Further, the option stating the main operation mode
2031 (the @command{tar} main command) is usually given first.
2032
2033 Each @var{name} in the synopsis above is interpreted as an archive member
2034 name when the main command is one of @value{op-compare}, @value{op-delete},
2035 @value{op-extract}, @value{op-list} or @value{op-update}. When naming
2036 archive members, you must give the exact name of the member in the
2037 archive, as it is printed by @value{op-list}. For @value{op-append}
2038 and @value{op-create}, these @var{name} arguments specify the names
2039 of either files or directory hierarchies to place in the archive.
2040 These files or hierarchies should already exist in the file system,
2041 prior to the execution of the @command{tar} command.
2042
2043 @command{tar} interprets relative file names as being relative to the
2044 working directory. @command{tar} will make all file names relative
2045 (by removing leading slashes when archiving or restoring files),
2046 unless you specify otherwise (using the @value{op-absolute-names}
2047 option). @value{xref-absolute-names}, for more information about
2048 @value{op-absolute-names}.
2049
2050 If you give the name of a directory as either a file name or a member
2051 name, then @command{tar} acts recursively on all the files and directories
2052 beneath that directory. For example, the name @file{/} identifies all
2053 the files in the filesystem to @command{tar}.
2054
2055 The distinction between file names and archive member names is especially
2056 important when shell globbing is used, and sometimes a source of confusion
2057 for newcomers. @xref{Wildcards}, for more information about globbing.
2058 The problem is that shells may only glob using existing files in the
2059 file system. Only @command{tar} itself may glob on archive members, so when
2060 needed, you must ensure that wildcard characters reach @command{tar} without
2061 being interpreted by the shell first. Using a backslash before @samp{*}
2062 or @samp{?}, or putting the whole argument between quotes, is usually
2063 sufficient for this.
2064
2065 Even if @var{name}s are often specified on the command line, they
2066 can also be read from a text file in the file system, using the
2067 @value{op-files-from} option.
2068
2069 If you don't use any file name arguments, @value{op-append},
2070 @value{op-delete} and @value{op-concatenate} will do nothing, while
2071 @value{op-create} will usually yield a diagnostic and inhibit @command{tar}
2072 execution. The other operations of @command{tar} (@value{op-list},
2073 @value{op-extract}, @value{op-compare}, and @value{op-update}) will act
2074 on the entire contents of the archive.
2075
2076 @cindex exit status
2077 @cindex return status
2078 Besides successful exits, @sc{gnu} @command{tar} may fail for many reasons.
2079 Some reasons correspond to bad usage, that is, when the @command{tar}
2080 command is improperly written.
2081 Errors may be encountered later, while encountering an error
2082 processing the archive or the files. Some errors are recoverable,
2083 in which case the failure is delayed until @command{tar} has completed
2084 all its work. Some errors are such that it would not meaningful,
2085 or at least risky, to continue processing: @command{tar} then aborts
2086 processing immediately. All abnormal exits, whether immediate or
2087 delayed, should always be clearly diagnosed on @code{stderr}, after
2088 a line stating the nature of the error.
2089
2090 @sc{gnu} @command{tar} returns only a few exit statuses. I'm really
2091 aiming simplicity in that area, for now. If you are not using the
2092 @value{op-compare} option, zero means that everything went well, besides
2093 maybe innocuous warnings. Nonzero means that something went wrong.
2094 Right now, as of today, ``nonzero'' is almost always 2, except for
2095 remote operations, where it may be 128.
2096
2097 @node using tar options
2098 @section Using @command{tar} Options
2099
2100 @sc{gnu} @command{tar} has a total of eight operating modes which allow you to
2101 perform a variety of tasks. You are required to choose one operating
2102 mode each time you employ the @command{tar} program by specifying one, and
2103 only one operation as an argument to the @command{tar} command (two lists
2104 of four operations each may be found at @ref{frequent operations} and
2105 @ref{Operations}). Depending on circumstances, you may also wish to
2106 customize how the chosen operating mode behaves. For example, you may
2107 wish to change the way the output looks, or the format of the files that
2108 you wish to archive may require you to do something special in order to
2109 make the archive look right.
2110
2111 You can customize and control @command{tar}'s performance by running
2112 @command{tar} with one or more options (such as @value{op-verbose}, which
2113 we used in the tutorial). As we said in the tutorial, @dfn{options} are
2114 arguments to @command{tar} which are (as their name suggests) optional.
2115 Depending on the operating mode, you may specify one or more options.
2116 Different options will have different effects, but in general they all
2117 change details of the operation, such as archive format, archive name,
2118 or level of user interaction. Some options make sense with all
2119 operating modes, while others are meaningful only with particular modes.
2120 You will likely use some options frequently, while you will only use
2121 others infrequently, or not at all. (A full list of options is
2122 available in @pxref{All Options}.)
2123
2124 The @env{TAR_OPTIONS} environment variable specifies default options to
2125 be placed in front of any explicit options. For example, if
2126 @code{TAR_OPTIONS} is @samp{-v --unlink-first}, @command{tar} behaves as
2127 if the two options @option{-v} and @option{--unlink-first} had been
2128 specified before any explicit options. Option specifications are
2129 separated by whitespace. A backslash escapes the next character, so it
2130 can be used to specify an option containing whitespace or a backslash.
2131
2132 Note that @command{tar} options are case sensitive. For example, the
2133 options @samp{-T} and @samp{-t} are different; the first requires an
2134 argument for stating the name of a file providing a list of @var{name}s,
2135 while the second does not require an argument and is another way to
2136 write @value{op-list}.
2137
2138 In addition to the eight operations, there are many options to
2139 @command{tar}, and three different styles for writing both: long (mnemonic)
2140 form, short form, and old style. These styles are discussed below.
2141 Both the options and the operations can be written in any of these three
2142 styles.
2143
2144 @FIXME{menu at end of this node. need to think of an actual outline
2145 for this chapter; probably do that after stuff from chap. 4 is
2146 incorporated.}
2147
2148 @node Styles
2149 @section The Three Option Styles
2150
2151 There are three styles for writing operations and options to the command
2152 line invoking @command{tar}. The different styles were developed at
2153 different times during the history of @command{tar}. These styles will be
2154 presented below, from the most recent to the oldest.
2155
2156 Some options must take an argument. (For example, @value{op-file} takes
2157 the name of an archive file as an argument. If you do not supply an
2158 archive file name, @command{tar} will use a default, but this can be
2159 confusing; thus, we recommend that you always supply a specific archive
2160 file name.) Where you @emph{place} the arguments generally depends on
2161 which style of options you choose. We will detail specific information
2162 relevant to each option style in the sections on the different option
2163 styles, below. The differences are subtle, yet can often be very
2164 important; incorrect option placement can cause you to overwrite a
2165 number of important files. We urge you to note these differences, and
2166 only use the option style(s) which makes the most sense to you until you
2167 feel comfortable with the others.
2168
2169 @FIXME{hag to write a brief paragraph on the option(s) which can
2170 optionally take an argument}
2171
2172 @menu
2173 * Mnemonic Options:: Mnemonic Option Style
2174 * Short Options:: Short Option Style
2175 * Old Options:: Old Option Style
2176 * Mixing:: Mixing Option Styles
2177 @end menu
2178
2179 @node Mnemonic Options
2180 @subsection Mnemonic Option Style
2181
2182 @FIXME{have to decide whether or ot to replace other occurrences of
2183 "mnemonic" with "long", or *ugh* vice versa.}
2184
2185 Each option has at least one long (or mnemonic) name starting with two
2186 dashes in a row, e.g.@: @samp{--list}. The long names are more clear than
2187 their corresponding short or old names. It sometimes happens that a
2188 single mnemonic option has many different different names which are
2189 synonymous, such as @samp{--compare} and @samp{--diff}. In addition,
2190 long option names can be given unique abbreviations. For example,
2191 @samp{--cre} can be used in place of @samp{--create} because there is no
2192 other mnemonic option which begins with @samp{cre}. (One way to find
2193 this out is by trying it and seeing what happens; if a particular
2194 abbreviation could represent more than one option, @command{tar} will tell
2195 you that that abbreviation is ambiguous and you'll know that that
2196 abbreviation won't work. You may also choose to run @samp{tar --help}
2197 to see a list of options. Be aware that if you run @command{tar} with a
2198 unique abbreviation for the long name of an option you didn't want to
2199 use, you are stuck; @command{tar} will perform the command as ordered.)
2200
2201 Mnemonic options are meant to be obvious and easy to remember, and their
2202 meanings are generally easier to discern than those of their
2203 corresponding short options (see below). For example:
2204
2205 @example
2206 $ @kbd{tar --create --verbose --blocking-factor=20 --file=/dev/rmt0}
2207 @end example
2208
2209 @noindent
2210 gives a fairly good set of hints about what the command does, even
2211 for those not fully acquainted with @command{tar}.
2212
2213 Mnemonic options which require arguments take those arguments
2214 immediately following the option name; they are introduced by an equal
2215 sign. For example, the @samp{--file} option (which tells the name
2216 of the @command{tar} archive) is given a file such as @file{archive.tar}
2217 as argument by using the notation @samp{--file=archive.tar} for the
2218 mnemonic option.
2219
2220 @node Short Options
2221 @subsection Short Option Style
2222
2223 Most options also have a short option name. Short options start with
2224 a single dash, and are followed by a single character, e.g.@: @samp{-t}
2225 (which is equivalent to @samp{--list}). The forms are absolutely
2226 identical in function; they are interchangeable.
2227
2228 The short option names are faster to type than long option names.
2229
2230 Short options which require arguments take their arguments immediately
2231 following the option, usually separated by white space. It is also
2232 possible to stick the argument right after the short option name, using
2233 no intervening space. For example, you might write @w{@samp{-f
2234 archive.tar}} or @samp{-farchive.tar} instead of using
2235 @samp{--file=archive.tar}. Both @samp{--file=@var{archive-name}} and
2236 @w{@samp{-f @var{archive-name}}} denote the option which indicates a
2237 specific archive, here named @file{archive.tar}.
2238
2239 Short options' letters may be clumped together, but you are not
2240 required to do this (as compared to old options; see below). When short
2241 options are clumped as a set, use one (single) dash for them all, e.g.@:
2242 @w{@samp{@command{tar} -cvf}}. Only the last option in such a set is allowed
2243 to have an argument@footnote{Clustering many options, the last of which
2244 has an argument, is a rather opaque way to write options. Some wonder if
2245 @sc{gnu} @code{getopt} should not even be made helpful enough for considering
2246 such usages as invalid.}.
2247
2248 When the options are separated, the argument for each option which requires
2249 an argument directly follows that option, as is usual for Unix programs.
2250 For example:
2251
2252 @example
2253 $ @kbd{tar -c -v -b 20 -f /dev/rmt0}
2254 @end example
2255
2256 If you reorder short options' locations, be sure to move any arguments
2257 that belong to them. If you do not move the arguments properly, you may
2258 end up overwriting files.
2259
2260 @node Old Options
2261 @subsection Old Option Style
2262 @UNREVISED
2263
2264 Like short options, old options are single letters. However, old options
2265 must be written together as a single clumped set, without spaces separating
2266 them or dashes preceding them@footnote{Beware that if you precede options
2267 with a dash, you are announcing the short option style instead of the
2268 old option style; short options are decoded differently.}. This set
2269 of letters must be the first to appear on the command line, after the
2270 @command{tar} program name and some white space; old options cannot appear
2271 anywhere else. The letter of an old option is exactly the same letter as
2272 the corresponding short option. For example, the old option @samp{t} is
2273 the same as the short option @samp{-t}, and consequently, the same as the
2274 mnemonic option @samp{--list}. So for example, the command @w{@samp{tar
2275 cv}} specifies the option @samp{-v} in addition to the operation @samp{-c}.
2276
2277 @FIXME{bob suggests having an uglier example. :-) }
2278
2279 When options that need arguments are given together with the command,
2280 all the associated arguments follow, in the same order as the options.
2281 Thus, the example given previously could also be written in the old
2282 style as follows:
2283
2284 @example
2285 $ @kbd{tar cvbf 20 /dev/rmt0}
2286 @end example
2287
2288 @noindent
2289 Here, @samp{20} is the argument of @samp{-b} and @samp{/dev/rmt0} is
2290 the argument of @samp{-f}.
2291
2292 On the other hand, this old style syntax makes it difficult to match
2293 option letters with their corresponding arguments, and is often
2294 confusing. In the command @w{@samp{tar cvbf 20 /dev/rmt0}}, for example,
2295 @samp{20} is the argument for @samp{-b}, @samp{/dev/rmt0} is the
2296 argument for @samp{-f}, and @samp{-v} does not have a corresponding
2297 argument. Even using short options like in @w{@samp{tar -c -v -b 20 -f
2298 /dev/rmt0}} is clearer, putting all arguments next to the option they
2299 pertain to.
2300
2301 If you want to reorder the letters in the old option argument, be
2302 sure to reorder any corresponding argument appropriately.
2303
2304 This old way of writing @command{tar} options can surprise even experienced
2305 users. For example, the two commands:
2306
2307 @example
2308 @kbd{tar cfz archive.tar.gz file}
2309 @kbd{tar -cfz archive.tar.gz file}
2310 @end example
2311
2312 @noindent
2313 are quite different. The first example uses @file{archive.tar.gz} as
2314 the value for option @samp{f} and recognizes the option @samp{z}. The
2315 second example, however, uses @file{z} as the value for option
2316 @samp{f}---probably not what was intended.
2317
2318 Old options are kept for compatibility with old versions of @command{tar}.
2319
2320 This second example could be corrected in many ways, among which the
2321 following are equivalent:
2322
2323 @example
2324 @kbd{tar -czf archive.tar.gz file}
2325 @kbd{tar -cf archive.tar.gz -z file}
2326 @kbd{tar cf archive.tar.gz -z file}
2327 @end example
2328
2329 @FIXME{still could explain this better; it's redundant:}
2330
2331 @cindex option syntax, traditional
2332 As far as we know, all @command{tar} programs, @sc{gnu} and non-@sc{gnu}, support
2333 old options. @sc{gnu} @command{tar} supports them not only for historical
2334 reasons, but also because many people are used to them. For
2335 compatibility with Unix @command{tar}, the first argument is always
2336 treated as containing command and option letters even if it doesn't
2337 start with @samp{-}. Thus, @samp{tar c} is equivalent to @w{@samp{tar
2338 -c}:} both of them specify the @value{op-create} command to create an
2339 archive.
2340
2341 @node Mixing
2342 @subsection Mixing Option Styles
2343
2344 All three styles may be intermixed in a single @command{tar} command, so
2345 long as the rules for each style are fully respected@footnote{Before @sc{gnu}
2346 @command{tar} version 1.11.6, a bug prevented intermixing old style options
2347 with mnemonic options in some cases.}. Old style options and either of the
2348 modern styles of options may be mixed within a single @command{tar} command.
2349 However, old style options must be introduced as the first arguments only,
2350 following the rule for old options (old options must appear directly
2351 after the @command{tar} command and some white space). Modern options may
2352 be given only after all arguments to the old options have been collected.
2353 If this rule is not respected, a modern option might be falsely interpreted
2354 as the value of the argument to one of the old style options.
2355
2356 For example, all the following commands are wholly equivalent, and
2357 illustrate the many combinations and orderings of option styles.
2358
2359 @example
2360 @kbd{tar --create --file=archive.tar}
2361 @kbd{tar --create -f archive.tar}
2362 @kbd{tar --create -farchive.tar}
2363 @kbd{tar --file=archive.tar --create}
2364 @kbd{tar --file=archive.tar -c}
2365 @kbd{tar -c --file=archive.tar}
2366 @kbd{tar -c -f archive.tar}
2367 @kbd{tar -c -farchive.tar}
2368 @kbd{tar -cf archive.tar}
2369 @kbd{tar -cfarchive.tar}
2370 @kbd{tar -f archive.tar --create}
2371 @kbd{tar -f archive.tar -c}
2372 @kbd{tar -farchive.tar --create}
2373 @kbd{tar -farchive.tar -c}
2374 @kbd{tar c --file=archive.tar}
2375 @kbd{tar c -f archive.tar}
2376 @kbd{tar c -farchive.tar}
2377 @kbd{tar cf archive.tar}
2378 @kbd{tar f archive.tar --create}
2379 @kbd{tar f archive.tar -c}
2380 @kbd{tar fc archive.tar}
2381 @end example
2382
2383 On the other hand, the following commands are @emph{not} equivalent to
2384 the previous set:
2385
2386 @example
2387 @kbd{tar -f -c archive.tar}
2388 @kbd{tar -fc archive.tar}
2389 @kbd{tar -fcarchive.tar}
2390 @kbd{tar -farchive.tarc}
2391 @kbd{tar cfarchive.tar}
2392 @end example
2393
2394 @noindent
2395 These last examples mean something completely different from what the
2396 user intended (judging based on the example in the previous set which
2397 uses long options, whose intent is therefore very clear). The first
2398 four specify that the @command{tar} archive would be a file named
2399 @samp{-c}, @samp{c}, @samp{carchive.tar} or @samp{archive.tarc},
2400 respectively. The first two examples also specify a single non-option,
2401 @var{name} argument having the value @samp{archive.tar}. The last
2402 example contains only old style option letters (repeating option
2403 @samp{c} twice), not all of which are meaningful (eg., @samp{.},
2404 @samp{h}, or @samp{i}), with no argument value. @FIXME{not sure i liked
2405 the first sentence of this paragraph..}
2406
2407 @node All Options
2408 @section All @command{tar} Options
2409
2410 The coming manual sections contain an alphabetical listing of all
2411 @command{tar} operations and options, with brief descriptions and cross
2412 references to more in-depth explanations in the body of the manual.
2413 They also contain an alphabetically arranged table of the short option
2414 forms with their corresponding long option. You can use this table as
2415 a reference for deciphering @command{tar} commands in scripts.
2416
2417 @menu
2418 * Operation Summary::
2419 * Option Summary::
2420 * Short Option Summary::
2421 @end menu
2422
2423 @node Operation Summary
2424 @subsection Operations
2425
2426 @table @kbd
2427
2428 @item --append
2429 @itemx -r
2430
2431 Appends files to the end of the archive. @xref{append}.
2432
2433 @item --catenate
2434 @itemx -A
2435
2436 Same as @samp{--concatenate}. @xref{concatenate}.
2437
2438 @item --compare
2439 @itemx -d
2440
2441 Compares archive members with their counterparts in the file
2442 system, and reports differences in file size, mode, owner,
2443 modification date and contents. @xref{compare}.
2444
2445 @item --concatenate
2446 @itemx -A
2447
2448 Appends other @command{tar} archives to the end of the archive.
2449 @xref{concatenate}.
2450
2451 @item --create
2452 @itemx -c
2453
2454 Creates a new @command{tar} archive. @xref{create}.
2455
2456 @item --delete
2457
2458 Deletes members from the archive. Don't try this on a archive on a
2459 tape! @xref{delete}.
2460
2461 @item --diff
2462 @itemx -d
2463
2464 Same @samp{--compare}. @xref{compare}.
2465
2466 @item --extract
2467 @itemx -x
2468
2469 Extracts members from the archive into the file system. @xref{extract}.
2470
2471 @item --get
2472 @itemx -x
2473
2474 Same as @samp{--extract}. @xref{extract}.
2475
2476 @item --list
2477 @itemx -t
2478
2479 Lists the members in an archive. @xref{list}.
2480
2481 @item --update
2482 @itemx -u
2483
2484 @FIXME{It was: A combination of the @samp{--compare} and @samp{--append} operations.
2485 This is not true and rather misleading, as @value{op-compare}
2486 does a lot more than @value{op-update} for ensuring files are identical.}
2487 Adds files to the end of the archive, but only if they are newer than
2488 their counterparts already in the archive, or if they do not already
2489 exist in the archive.
2490 @xref{update}.
2491
2492 @end table
2493
2494 @node Option Summary
2495 @subsection @command{tar} Options
2496
2497 @table @kbd
2498
2499 @item --absolute-names
2500 @itemx -P
2501
2502 Normally when creating an archive, @command{tar} strips an initial @samp{/} from
2503 member names. This option disables that behavior. @FIXME-xref{}
2504
2505 @item --after-date
2506
2507 (See @samp{--newer}.) @FIXME-pxref{}
2508
2509 @item --anchored
2510 An exclude pattern must match an initial subsequence of the name's components.
2511 @FIXME-xref{}
2512
2513 @item --atime-preserve
2514
2515 Tells @command{tar} to preserve the access time field in a file's inode when
2516 reading it. Due to limitations in the @code{utimes} system call, the
2517 modification time field is also preserved, which may cause problems if
2518 the file is simultaneously being modified by another program.
2519 This option is incompatible with incremental backups, because
2520 preserving the access time involves updating the last-changed time.
2521 Also, this option does not work on files that you do not own,
2522 unless you're root.
2523 @FIXME-xref{}
2524
2525 @item --backup=@var{backup-type}
2526
2527 Rather than deleting files from the file system, @command{tar} will back them up
2528 using simple or numbered backups, depending upon @var{backup-type}.
2529 @FIXME-xref{}
2530
2531 @item --block-number
2532 @itemx -R
2533
2534 With this option present, @command{tar} prints error messages for read errors
2535 with the block number in the archive file. @FIXME-xref{}
2536
2537 @item --blocking-factor=@var{blocking}
2538 @itemx -b @var{blocking}
2539
2540 Sets the blocking factor @command{tar} uses to @var{blocking} x 512 bytes per
2541 record. @FIXME-xref{}
2542
2543 @item --bzip2
2544 @itemx -j
2545
2546 This option tells @command{tar} to read or write archives through @code{bzip2}.
2547 @FIXME-xref{}
2548
2549 @item --checkpoint
2550
2551 This option directs @command{tar} to print periodic checkpoint messages as it
2552 reads through the archive. Its intended for when you want a visual
2553 indication that @command{tar} is still running, but don't want to see
2554 @samp{--verbose} output. @FIXME-xref{}
2555
2556 @item --compress
2557 @itemx --uncompress
2558 @itemx -Z
2559
2560 @command{tar} will use the @command{compress} program when reading or writing the
2561 archive. This allows you to directly act on archives while saving
2562 space. @FIXME-xref{}
2563
2564 @item --confirmation
2565
2566 (See @samp{--interactive}.) @FIXME-pxref{}
2567
2568 @item --dereference
2569 @itemx -h
2570
2571 When creating a @command{tar} archive, @command{tar} will archive the file that a symbolic
2572 link points to, rather than archiving the symlink. @FIXME-xref{}
2573
2574 @item --directory=@var{dir}
2575 @itemx -C @var{dir}
2576
2577 When this option is specified, @command{tar} will change its current directory
2578 to @var{dir} before performing any operations. When this option is used
2579 during archive creation, it is order sensitive. @FIXME-xref{}
2580
2581 @item --exclude=@var{pattern}
2582
2583 When performing operations, @command{tar} will skip files that match
2584 @var{pattern}. @FIXME-xref{}
2585
2586 @item --exclude-from=@var{file}
2587 @itemx -X @var{file}
2588
2589 Similar to @samp{--exclude}, except @command{tar} will use the list of patterns
2590 in the file @var{file}. @FIXME-xref{}
2591
2592 @item --file=@var{archive}
2593 @itemx -f @var{archive}
2594
2595 @command{tar} will use the file @var{archive} as the @command{tar} archive it
2596 performs operations on, rather than @command{tar}'s compilation dependent
2597 default. @FIXME-xref{}
2598
2599 @item --files-from=@var{file}
2600 @itemx -T @var{file}
2601
2602 @command{tar} will use the contents of @var{file} as a list of archive members
2603 or files to operate on, in addition to those specified on the
2604 command-line. @FIXME-xref{}
2605
2606 @item --force-local
2607
2608 Forces @command{tar} to interpret the filename given to @samp{--file} as a local
2609 file, even if it looks like a remote tape drive name. @FIXME-xref{}
2610
2611 @item --group=@var{group}
2612
2613 Files added to the @command{tar} archive will have a group id of @var{group},
2614 rather than the group from the source file. @var{group} is first decoded
2615 as a group symbolic name, but if this interpretation fails, it has to be
2616 a decimal numeric group ID. @FIXME-xref{}
2617
2618 Also see the comments for the @value{op-owner} option.
2619
2620 @item --gunzip
2621
2622 (See @samp{--gzip}.) @FIXME-pxref{}
2623
2624 @item --gzip
2625 @itemx --gunzip
2626 @itemx --ungzip
2627 @itemx -z
2628
2629 This option tells @command{tar} to read or write archives through @command{gzip},
2630 allowing @command{tar} to directly operate on several kinds of compressed
2631 archives transparently. @FIXME-xref{}
2632
2633 @item --help
2634
2635 @command{tar} will print out a short message summarizing the operations and
2636 options to @command{tar} and exit. @FIXME-xref{}
2637
2638 @item --ignore-case
2639 Ignore case when excluding files.
2640 @FIXME-xref{}
2641
2642 @item --ignore-failed-read
2643
2644 Do not exit unsuccessfully merely because an unreadable file was encountered.
2645 @xref{Reading}.
2646
2647 @item --ignore-zeros
2648 @itemx -i
2649
2650 With this option, @command{tar} will ignore zeroed blocks in the archive, which
2651 normally signals EOF. @xref{Reading}.
2652
2653 @item --incremental
2654 @itemx -G
2655
2656 Used to inform @command{tar} that it is working with an old @sc{gnu}-format
2657 incremental backup archive. It is intended primarily for backwards
2658 compatibility only. @FIXME-xref{}
2659
2660 @item --info-script=@var{script-file}
2661 @itemx --new-volume-script=@var{script-file}
2662 @itemx -F @var{script-file}
2663
2664 When @command{tar} is performing multi-tape backups, @var{script-file} is run
2665 at the end of each tape. If @var{script-file} exits with nonzero status,
2666 @command{tar} fails immediately. @FIXME-xref{}
2667
2668 @item --interactive
2669 @itemx --confirmation
2670 @itemx -w
2671
2672 Specifies that @command{tar} should ask the user for confirmation before
2673 performing potentially destructive options, such as overwriting files.
2674 @FIXME-xref{}
2675
2676 @item --keep-old-files
2677 @itemx -k
2678
2679 Do not overwrite existing files when extracting files from an archive.
2680 @xref{Writing}.
2681
2682 @item --label=@var{name}
2683 @itemx -V @var{name}
2684
2685 When creating an archive, instructs @command{tar} to write @var{name} as a name
2686 record in the archive. When extracting or listing archives, @command{tar} will
2687 only operate on archives that have a label matching the pattern
2688 specified in @var{name}. @FIXME-xref{}
2689
2690 @item --listed-incremental=@var{snapshot-file}
2691 @itemx -g @var{snapshot-file}
2692
2693 During a @samp{--create} operation, specifies that the archive that
2694 @command{tar} creates is a new @sc{gnu}-format incremental backup, using
2695 @var{snapshot-file} to determine which files to backup.
2696 With other operations, informs @command{tar} that the archive is in incremental
2697 format. @FIXME-xref{}
2698
2699 @item --mode=@var{permissions}
2700
2701 When adding files to an archive, @command{tar} will use @var{permissions}
2702 for the archive members, rather than the permissions from the files.
2703 The program @command{chmod} and this @command{tar} option share the same syntax
2704 for what @var{permissions} might be. @xref{File permissions, Permissions,
2705 File permissions, fileutils, @sc{gnu} file utilities}. This reference also
2706 has useful information for those not being overly familiar with the Unix
2707 permission system.
2708
2709 Of course, @var{permissions} might be plainly specified as an octal number.
2710 However, by using generic symbolic modifications to mode bits, this allows
2711 more flexibility. For example, the value @samp{a+rw} adds read and write
2712 permissions for everybody, while retaining executable bits on directories
2713 or on any other file already marked as executable.
2714
2715 @item --multi-volume
2716 @itemx -M
2717
2718 Informs @command{tar} that it should create or otherwise operate on a
2719 multi-volume @command{tar} archive. @FIXME-xref{}
2720
2721 @item --new-volume-script
2722
2723 (see --info-script)
2724
2725 @item --newer=@var{date}
2726 @itemx --after-date=@var{date}
2727 @itemx -N
2728
2729 When creating an archive, @command{tar} will only add files that have changed
2730 since @var{date}. If @var{date} begins with @samp{/} or @samp{.}, it
2731 is taken to be the name of a file whose last-modified time specifies
2732 the date. @FIXME-xref{}
2733
2734 @item --newer-mtime=@var{date}
2735
2736 Like @samp{--newer}, but add only files whose
2737 contents have changed (as opposed to just @samp{--newer}, which will
2738 also back up files for which any status information has changed).
2739
2740 @item --no-anchored
2741 An exclude pattern can match any subsequence of the name's components.
2742 @FIXME-xref{}
2743
2744 @item --no-ignore-case
2745 Use case-sensitive matching when excluding files.
2746 @FIXME-xref{}
2747
2748 @item --no-recursion
2749
2750 With this option, @command{tar} will not recurse into directories.
2751 @FIXME-xref{}
2752
2753 @item --no-same-owner
2754
2755 When extracting an archive, do not attempt to preserve the owner
2756 specified in the @command{tar} archive. This the default behavior
2757 for ordinary users; this option has an effect only for the superuser.
2758
2759 @item --no-same-permissions
2760
2761 When extracting an archive, subtract the user's umask from files from
2762 the permissions specified in the archive. This is the default behavior
2763 for ordinary users; this option has an effect only for the superuser.
2764
2765 @item --no-wildcards
2766 Do not use wildcards when excluding files.
2767 @FIXME-xref{}
2768
2769 @item --no-wildcards-match-slash
2770 Wildcards do not match @samp{/} when excluding files.
2771 @FIXME-xref{}
2772
2773 @item --null
2774
2775 When @command{tar} is using the @samp{--files-from} option, this option
2776 instructs @command{tar} to expect filenames terminated with @kbd{NUL}, so
2777 @command{tar} can correctly work with file names that contain newlines.
2778 @FIXME-xref{}
2779
2780 @item --numeric-owner
2781
2782 This option will notify @command{tar} that it should use numeric user and group
2783 IDs when creating a @command{tar} file, rather than names. @FIXME-xref{}
2784
2785 @item --old-archive
2786
2787 (See @samp{--portability}.) @FIXME-pxref{}
2788
2789 @item --one-file-system
2790 @itemx -l
2791
2792 Used when creating an archive. Prevents @command{tar} from recursing into
2793 directories that are on different file systems from the current
2794 directory. @FIXME-xref{}
2795
2796 @item --overwrite
2797
2798 Overwrite existing files and directory metadata when extracting files
2799 from an archive. @xref{Overwrite Old Files}.
2800
2801 @item --owner=@var{user}
2802
2803 Specifies that @command{tar} should use @var{user} as the owner of members
2804 when creating archives, instead of the user associated with the source
2805 file. @var{user} is first decoded as a user symbolic name, but if
2806 this interpretation fails, it has to be a decimal numeric user ID.
2807 @FIXME-xref{}
2808
2809 There is no value indicating a missing number, and @samp{0} usually means
2810 @code{root}. Some people like to force @samp{0} as the value to offer in
2811 their distributions for the owner of files, because the @code{root} user is
2812 anonymous anyway, so that might as well be the owner of anonymous archives.
2813
2814 This option does not affect extraction from archives.
2815
2816 @item --portability
2817 @itemx --old-archive
2818 @itemx -o
2819
2820 Tells @command{tar} to create an archive that is compatible with Unix V7
2821 @command{tar}. @FIXME-xref{}
2822
2823 @item --posix
2824
2825 Instructs @command{tar} to create a @sc{posix} compliant @command{tar} archive. @FIXME-xref{}
2826
2827 @item --preserve
2828
2829 Synonymous with specifying both @samp{--preserve-permissions} and
2830 @samp{--same-order}. @FIXME-xref{}
2831
2832 @item --preserve-order
2833
2834 (See @samp{--same-order}; @pxref{Reading}.)
2835
2836 @item --preserve-permissions
2837 @itemx --same-permissions
2838 @itemx -p
2839
2840 When @command{tar} is extracting an archive, it normally subtracts the users'
2841 umask from the permissions specified in the archive and uses that
2842 number as the permissions to create the destination file. Specifying
2843 this option instructs @command{tar} that it should use the permissions directly
2844 from the archive. @xref{Writing}.
2845
2846 @item --read-full-records
2847 @itemx -B
2848
2849 Specifies that @command{tar} should reblock its input, for reading from pipes on
2850 systems with buggy implementations. @xref{Reading}.
2851
2852 @item --record-size=@var{size}
2853
2854 Instructs @command{tar} to use @var{size} bytes per record when accessing the
2855 archive. @FIXME-xref{}
2856
2857 @item --recursion
2858
2859 With this option, @command{tar} recurses into directories.
2860 @FIXME-xref{}
2861
2862 @item --recursive-unlink
2863
2864 Remove existing
2865 directory hierarchies before extracting directories of the same name
2866 from the archive. @xref{Writing}.
2867
2868 @item --remove-files
2869
2870 Directs @command{tar} to remove the source file from the file system after
2871 appending it to an archive. @FIXME-xref{}
2872
2873 @item --rsh-command=@var{cmd}
2874
2875 Notifies @command{tar} that is should use @var{cmd} to communicate with remote
2876 devices. @FIXME-xref{}
2877
2878 @item --same-order
2879 @itemx --preserve-order
2880 @itemx -s
2881
2882 This option is an optimization for @command{tar} when running on machines with
2883 small amounts of memory. It informs @command{tar} that the list of file
2884 arguments has already been sorted to match the order of files in the
2885 archive. @xref{Reading}.
2886
2887 @item --same-owner
2888
2889 When extracting an archive, @command{tar} will attempt to preserve the owner
2890 specified in the @command{tar} archive with this option present.
2891 This is the default behavior for the superuser; this option has an
2892 effect only for ordinary users. @FIXME-xref{}
2893
2894 @item --same-permissions
2895
2896 (See @samp{--preserve-permissions}; @pxref{Writing}.)
2897
2898 @item --show-omitted-dirs
2899
2900 Instructs @command{tar} to mention directories its skipping over when operating
2901 on a @command{tar} archive. @FIXME-xref{}
2902
2903 @item --sparse
2904 @itemx -S
2905
2906 Invokes a @sc{gnu} extension when adding files to an archive that handles
2907 sparse files efficiently. @FIXME-xref{}
2908
2909 @item --starting-file=@var{name}
2910 @itemx -K @var{name}
2911
2912 This option affects extraction only; @command{tar} will skip extracting
2913 files in the archive until it finds one that matches @var{name}.
2914 @xref{Scarce}.
2915
2916 @item --suffix=@var{suffix}
2917
2918 Alters the suffix @command{tar} uses when backing up files from the default
2919 @samp{~}. @FIXME-xref{}
2920
2921 @item --tape-length=@var{num}
2922 @itemx -L @var{num}
2923
2924 Specifies the length of tapes that @command{tar} is writing as being
2925 @w{@var{num} x 1024} bytes long. @FIXME-xref{}
2926
2927 @item --to-stdout
2928 @itemx -O
2929
2930 During extraction, @command{tar} will extract files to stdout rather than to the
2931 file system. @xref{Writing}.
2932
2933 @item --totals
2934
2935 Displays the total number of bytes written after creating an archive.
2936 @FIXME-xref{}
2937
2938 @item --touch
2939 @itemx -m
2940
2941 Sets the modification time of extracted files to the extraction time,
2942 rather than the modification time stored in the archive.
2943 @xref{Writing}.
2944
2945 @item --uncompress
2946
2947 (See @samp{--compress}.) @FIXME-pxref{}
2948
2949 @item --ungzip
2950
2951 (See @samp{--gzip}.) @FIXME-pxref{}
2952
2953 @item --unlink-first
2954 @itemx -U
2955
2956 Directs @command{tar} to remove the corresponding file from the file
2957 system before extracting it from the archive. @xref{Writing}.
2958
2959 @item --use-compress-program=@var{prog}
2960
2961 Instructs @command{tar} to access the archive through @var{prog}, which is
2962 presumed to be a compression program of some sort. @FIXME-xref{}
2963
2964 @item --verbose
2965 @itemx -v
2966
2967 Specifies that @command{tar} should be more verbose about the operations its
2968 performing. This option can be specified multiple times for some
2969 operations to increase the amount of information displayed. @FIXME-xref{}
2970
2971 @item --verify
2972 @itemx -W
2973
2974 Verifies that the archive was correctly written when creating an
2975 archive. @FIXME-xref{}
2976
2977 @item --version
2978
2979 @command{tar} will print an informational message about what version it is and a
2980 copyright message, some credits, and then exit. @FIXME-xref{}
2981
2982 @item --volno-file=@var{file}
2983
2984 Used in conjunction with @samp{--multi-volume}. @command{tar} will keep track
2985 of which volume of a multi-volume archive its working in @var{file}.
2986 @FIXME-xref{}
2987
2988 @item --wildcards
2989 Use wildcards when excluding files.
2990 @FIXME-xref{}
2991
2992 @item --wildcards-match-slash
2993 Wildcards match @samp{/} when excluding files.
2994 @FIXME-xref{}
2995 @end table
2996
2997 @node Short Option Summary
2998 @subsection Short Options Cross Reference
2999
3000 Here is an alphabetized list of all of the short option forms, matching
3001 them with the equivalent long option.
3002
3003 @table @kbd
3004
3005 @item -A
3006
3007 @samp{--concatenate}
3008
3009 @item -B
3010
3011 @samp{--read-full-records}
3012
3013 @item -C
3014
3015 @samp{--directory}
3016
3017 @item -F
3018
3019 @samp{--info-script}
3020
3021 @item -G
3022
3023 @samp{--incremental}
3024
3025 @item -K
3026
3027 @samp{--starting-file}
3028
3029 @item -L
3030
3031 @samp{--tape-length}
3032
3033 @item -M
3034
3035 @samp{--multi-volume}
3036
3037 @item -N
3038
3039 @samp{--newer}
3040
3041 @item -O
3042
3043 @samp{--to-stdout}
3044
3045 @item -P
3046
3047 @samp{--absolute-names}
3048
3049 @item -R
3050
3051 @samp{--block-number}
3052
3053 @item -S
3054
3055 @samp{--sparse}
3056
3057 @item -T
3058
3059 @samp{--files-from}
3060
3061 @item -U
3062
3063 @samp{--unlink-first}
3064
3065 @item -V
3066
3067 @samp{--label}
3068
3069 @item -W
3070
3071 @samp{--verify}
3072
3073 @item -X
3074
3075 @samp{--exclude-from}
3076
3077 @item -Z
3078
3079 @samp{--compress}
3080
3081 @item -b
3082
3083 @samp{--blocking-factor}
3084
3085 @item -c
3086
3087 @samp{--create}
3088
3089 @item -d
3090
3091 @samp{--compare}
3092
3093 @item -f
3094
3095 @samp{--file}
3096
3097 @item -g
3098
3099 @samp{--listed-incremental}
3100
3101 @item -h
3102
3103 @samp{--dereference}
3104
3105 @item -i
3106
3107 @samp{--ignore-zeros}
3108
3109 @item -k
3110
3111 @samp{--keep-old-files}
3112
3113 @item -l
3114
3115 @samp{--one-file-system}
3116
3117 @item -m
3118
3119 @samp{--touch}
3120
3121 @item -o
3122
3123 @samp{--portability}
3124
3125 @item -p
3126
3127 @samp{--preserve-permissions}
3128
3129 @item -r
3130
3131 @samp{--append}
3132
3133 @item -s
3134
3135 @samp{--same-order}
3136
3137 @item -t
3138
3139 @samp{--list}
3140
3141 @item -u
3142
3143 @samp{--update}
3144
3145 @item -v
3146
3147 @samp{--verbose}
3148
3149 @item -w
3150
3151 @samp{--interactive}
3152
3153 @item -x
3154
3155 @samp{--extract}
3156
3157 @item -z
3158
3159 @samp{--gzip}
3160
3161 @end table
3162
3163 @node help
3164 @section @sc{gnu} @command{tar} documentation
3165
3166 Being careful, the first thing is really checking that you are using @sc{gnu}
3167 @command{tar}, indeed. The @value{op-version} option will generate a message
3168 giving confirmation that you are using @sc{gnu} @command{tar}, with the precise
3169 version of @sc{gnu} @command{tar} you are using. @command{tar} identifies itself
3170 and prints the version number to the standard output, then immediately
3171 exits successfully, without doing anything else, ignoring all other
3172 options. For example, @w{@samp{tar --version}} might return:
3173
3174 @example
3175 tar (@sc{gnu} tar) @value{VERSION}
3176 @end example
3177
3178 @noindent
3179 The first occurrence of @samp{tar} in the result above is the program
3180 name in the package (for example, @command{rmt} is another program), while
3181 the second occurrence of @samp{tar} is the name of the package itself,
3182 containing possibly many programs. The package is currently named
3183 @samp{tar}, after the name of the main program it contains@footnote{There
3184 are plans to merge the @command{cpio} and @command{tar} packages into a single one
3185 which would be called @code{paxutils}. So, who knows if, one of this days,
3186 the @value{op-version} would not yield @w{@samp{tar (@sc{gnu} paxutils) 3.2}}}.
3187
3188 Another thing you might want to do is checking the spelling or meaning
3189 of some particular @command{tar} option, without resorting to this manual,
3190 for once you have carefully read it. @sc{gnu} @command{tar} has a short help
3191 feature, triggerable through the @value{op-help} option. By using this
3192 option, @command{tar} will print a usage message listing all available
3193 options on standard output, then exit successfully, without doing
3194 anything else and ignoring all other options. Even if this is only a
3195 brief summary, it may be several screens long. So, if you are not
3196 using some kind of scrollable window, you might prefer to use something
3197 like:
3198
3199 @example
3200 $ @kbd{tar --help | less}
3201 @end example
3202
3203 @noindent
3204 presuming, here, that you like using @command{less} for a pager. Other
3205 popular pagers are @command{more} and @command{pg}. If you know about some
3206 @var{keyword} which interests you and do not want to read all the
3207 @value{op-help} output, another common idiom is doing:
3208
3209 @example
3210 tar --help | grep @var{keyword}
3211 @end example
3212
3213 @noindent
3214 for getting only the pertinent lines.
3215
3216 The perceptive reader would have noticed some contradiction in the
3217 previous paragraphs. It is written that both @value{op-version} and
3218 @value{op-help} print something, and have all other options ignored. In
3219 fact, they cannot ignore each other, and one of them has to win. We do
3220 not specify which is stronger, here; experiment if you really wonder!
3221
3222 The short help output is quite succinct, and you might have to get back
3223 to the full documentation for precise points. If you are reading this
3224 paragraph, you already have the @command{tar} manual in some form. This
3225 manual is available in printed form, as a kind of small book. It may
3226 printed out of the @sc{gnu} @command{tar} distribution, provided you have @TeX{}
3227 already installed somewhere, and a laser printer around. Just configure
3228 the distribution, execute the command @w{@samp{make dvi}}, then print
3229 @file{doc/tar.dvi} the usual way (contact your local guru to know how).
3230 If @sc{gnu} @command{tar} has been conveniently installed at your place, this
3231 manual is also available in interactive, hypertextual form as an Info
3232 file. Just call @w{@samp{info tar}} or, if you do not have the
3233 @command{info} program handy, use the Info reader provided within @sc{gnu}
3234 Emacs, calling @samp{tar} from the main Info menu.
3235
3236 There is currently no @code{man} page for @sc{gnu} @command{tar}. If you observe
3237 such a @code{man} page on the system you are running, either it does not
3238 long to @sc{gnu} @command{tar}, or it has not been produced by @sc{gnu}. Currently,
3239 @sc{gnu} @command{tar} documentation is provided in Texinfo format only, if we
3240 except, of course, the short result of @kbd{tar --help}.
3241
3242 @node verbose
3243 @section Checking @command{tar} progress
3244
3245 @cindex Progress information
3246 @cindex Status information
3247 @cindex Information on progress and status of operations
3248 @cindex Verbose operation
3249 @cindex Block number where error occurred
3250 @cindex Error message, block number of
3251 @cindex Version of the @command{tar} program
3252
3253 @cindex Getting more information during the operation
3254 @cindex Information during operation
3255 @cindex Feedback from @command{tar}
3256
3257 Typically, @command{tar} performs most operations without reporting any
3258 information to the user except error messages. When using @command{tar}
3259 with many options, particularly ones with complicated or
3260 difficult-to-predict behavior, it is possible to make serious mistakes.
3261 @command{tar} provides several options that make observing @command{tar}
3262 easier. These options cause @command{tar} to print information as it
3263 progresses in its job, and you might want to use them just for being
3264 more careful about what is going on, or merely for entertaining
3265 yourself. If you have encountered a problem when operating on an
3266 archive, however, you may need more information than just an error
3267 message in order to solve the problem. The following options can be
3268 helpful diagnostic tools.
3269
3270 Normally, the @value{op-list} command to list an archive prints just
3271 the file names (one per line) and the other commands are silent.
3272 When used with most operations, the @value{op-verbose} option causes
3273 @command{tar} to print the name of each file or archive member as it
3274 is processed. This and the other options which make @command{tar} print
3275 status information can be useful in monitoring @command{tar}.
3276
3277 With @value{op-create} or @value{op-extract}, @value{op-verbose} used once
3278 just prints the names of the files or members as they are processed.
3279 Using it twice causes @command{tar} to print a longer listing (reminiscent
3280 of @samp{ls -l}) for each member. Since @value{op-list} already prints
3281 the names of the members, @value{op-verbose} used once with @value{op-list}
3282 causes @command{tar} to print an @samp{ls -l} type listing of the files
3283 in the archive. The following examples both extract members with
3284 long list output:
3285
3286 @example
3287 $ @kbd{tar --extract --file=archive.tar --verbose --verbose}
3288 $ @kbd{tar xvv archive.tar}
3289 @end example
3290
3291 Verbose output appears on the standard output except when an archive is
3292 being written to the standard output, as with @samp{tar --create
3293 --file=- --verbose} (@samp{tar cfv -}, or even @samp{tar cv}---if the
3294 installer let standard output be the default archive). In that case
3295 @command{tar} writes verbose output to the standard error stream.
3296
3297 The @value{op-totals} option---which is only meaningful when used with
3298 @value{op-create}---causes @command{tar} to print the total
3299 amount written to the archive, after it has been fully created.
3300
3301 The @value{op-checkpoint} option prints an occasional message
3302 as @command{tar} reads or writes the archive. In fact, it print
3303 directory names while reading the archive. It is designed for
3304 those who don't need the more detailed (and voluminous) output of
3305 @value{op-block-number}, but do want visual confirmation that @command{tar}
3306 is actually making forward progress.
3307
3308 @FIXME{There is some confusion here. It seems that -R once wrote a
3309 message at @samp{every} record read or written.}
3310
3311 The @value{op-show-omitted-dirs} option, when reading an archive---with
3312 @value{op-list} or @value{op-extract}, for example---causes a message
3313 to be printed for each directory in the archive which is skipped.
3314 This happens regardless of the reason for skipping: the directory might
3315 not have been named on the command line (implicitly or explicitly),
3316 it might be excluded by the use of the @value{op-exclude} option, or
3317 some other reason.
3318
3319 If @value{op-block-number} is used, @command{tar} prints, along with every
3320 message it would normally produce, the block number within the archive
3321 where the message was triggered. Also, supplementary messages are
3322 triggered when reading blocks full of NULs, or when hitting end of file on
3323 the archive. As of now, if the archive if properly terminated with a NUL
3324 block, the reading of the file may stop before end of file is met, so the
3325 position of end of file will not usually show when @value{op-block-number}
3326 is used. Note that @sc{gnu} @command{tar} drains the archive before exiting when
3327 reading the archive from a pipe.
3328
3329 This option is especially useful when reading damaged archives, since
3330 it helps pinpoint the damaged sections. It can also be used with
3331 @value{op-list} when listing a file-system backup tape, allowing you to
3332 choose among several backup tapes when retrieving a file later, in
3333 favor of the tape where the file appears earliest (closest to the
3334 front of the tape). @FIXME-xref{when the node name is set and the
3335 backup section written.}
3336
3337 @node interactive
3338 @section Asking for Confirmation During Operations
3339 @cindex Interactive operation
3340
3341 Typically, @command{tar} carries out a command without stopping for
3342 further instructions. In some situations however, you may want to
3343 exclude some files and archive members from the operation (for instance
3344 if disk or storage space is tight). You can do this by excluding
3345 certain files automatically (@pxref{Choosing}), or by performing
3346 an operation interactively, using the @value{op-interactive} option.
3347 @command{tar} also accepts @samp{--confirmation} for this option.
3348
3349 When the @value{op-interactive} option is specified, before
3350 reading, writing, or deleting files, @command{tar} first prints a message
3351 for each such file, telling what operation it intends to take, then asks
3352 for confirmation on the terminal. The actions which require
3353 confirmation include adding a file to the archive, extracting a file
3354 from the archive, deleting a file from the archive, and deleting a file
3355 from disk. To confirm the action, you must type a line of input
3356 beginning with @samp{y}. If your input line begins with anything other
3357 than @samp{y}, @command{tar} skips that file.
3358
3359 If @command{tar} is reading the archive from the standard input,
3360 @command{tar} opens the file @file{/dev/tty} to support the interactive
3361 communications.
3362
3363 Verbose output is normally sent to standard output, separate from
3364 other error messages. However, if the archive is produced directly
3365 on standard output, then verbose output is mixed with errors on
3366 @code{stderr}. Producing the archive on standard output may be used
3367 as a way to avoid using disk space, when the archive is soon to be
3368 consumed by another process reading it, say. Some people felt the need
3369 of producing an archive on stdout, still willing to segregate between
3370 verbose output and error output. A possible approach would be using a
3371 named pipe to receive the archive, and having the consumer process to
3372 read from that named pipe. This has the advantage of letting standard
3373 output free to receive verbose output, all separate from errors.
3374
3375 @node operations
3376 @chapter @sc{gnu} @command{tar} Operations
3377
3378 @menu
3379 * Basic tar::
3380 * Advanced tar::
3381 * create options::
3382 * extract options::
3383 * backup::
3384 * Applications::
3385 * looking ahead::
3386 @end menu
3387
3388 @node Basic tar
3389 @section Basic @sc{gnu} @command{tar} Operations
3390
3391 The basic @command{tar} operations, @value{op-create}, @value{op-list} and
3392 @value{op-extract}, are currently presented and described in the tutorial
3393 chapter of this manual. This section provides some complementary notes
3394 for these operations.
3395
3396 @table @asis
3397 @item @value{op-create}
3398
3399 Creating an empty archive would have some kind of elegance. One can
3400 initialize an empty archive and later use @value{op-append} for adding
3401 all members. Some applications would not welcome making an exception
3402 in the way of adding the first archive member. On the other hand,
3403 many people reported that it is dangerously too easy for @command{tar}
3404 to destroy a magnetic tape with an empty archive@footnote{This is well
3405 described in @cite{Unix-haters Handbook}, by Simson Garfinkel, Daniel
3406 Weise & Steven Strassmann, IDG Books, ISBN 1-56884-203-1.}. The two most
3407 common errors are:
3408
3409 @enumerate
3410 @item
3411 Mistakingly using @code{create} instead of @code{extract}, when the
3412 intent was to extract the full contents of an archive. This error
3413 is likely: keys @kbd{c} and @kbd{x} are right next ot each other on
3414 the QWERTY keyboard. Instead of being unpacked, the archive then
3415 gets wholly destroyed. When users speak about @dfn{exploding} an
3416 archive, they usually mean something else :-).
3417
3418 @item
3419 Forgetting the argument to @code{file}, when the intent was to create
3420 an archive with a single file in it. This error is likely because a
3421 tired user can easily add the @kbd{f} key to the cluster of option
3422 letters, by the mere force of habit, without realizing the full
3423 consequence of doing so. The usual consequence is that the single
3424 file, which was meant to be saved, is rather destroyed.
3425 @end enumerate
3426
3427 So, recognizing the likelihood and the catastrophical nature of these
3428 errors, @sc{gnu} @command{tar} now takes some distance from elegance, and
3429 cowardly refuses to create an archive when @value{op-create} option is
3430 given, there are no arguments besides options, and @value{op-files-from}
3431 option is @emph{not} used. To get around the cautiousness of @sc{gnu}
3432 @command{tar} and nevertheless create an archive with nothing in it,
3433 one may still use, as the value for the @value{op-files-from} option,
3434 a file with no names in it, as shown in the following commands:
3435
3436 @example
3437 @kbd{tar --create --file=empty-archive.tar --files-from=/dev/null}
3438 @kbd{tar cfT empty-archive.tar /dev/null}
3439 @end example
3440
3441 @item @value{op-extract}
3442
3443 A socket is stored, within a @sc{gnu} @command{tar} archive, as a pipe.
3444
3445 @item @value{op-list}
3446
3447 @sc{gnu} @command{tar} now shows dates as @samp{1996-08-30}, while it used to
3448 show them as @samp{Aug 30 1996}. (One can revert to the old behavior by
3449 defining @code{USE_OLD_CTIME} in @file{src/list.c} before reinstalling.)
3450 But preferably, people should get used to ISO 8601 dates. Local
3451 American dates should be made available again with full date localization
3452 support, once ready. In the meantime, programs not being localizable
3453 for dates should prefer international dates, that's really the way to go.
3454
3455 Look up @url{http://www.ft.uni-erlangen.de/~mskuhn/iso-time.html} if you
3456 are curious, it contains a detailed explanation of the ISO 8601 standard.
3457
3458 @end table
3459
3460 @node Advanced tar
3461 @section Advanced @sc{gnu} @command{tar} Operations
3462
3463 Now that you have learned the basics of using @sc{gnu} @command{tar}, you may
3464 want to learn about further ways in which @command{tar} can help you.
3465
3466 This chapter presents five, more advanced operations which you probably
3467 won't use on a daily basis, but which serve more specialized functions.
3468 We also explain the different styles of options and why you might want
3469 to use one or another, or a combination of them in your @command{tar}
3470 commands. Additionally, this chapter includes options which allow you to
3471 define the output from @command{tar} more carefully, and provide help and
3472 error correction in special circumstances.
3473
3474 @FIXME{check this after the chapter is actually revised to make sure
3475 it still introduces the info in the chapter correctly : ).}
3476
3477 @menu
3478 * Operations::
3479 * current state::
3480 * append::
3481 * update::
3482 * concatenate::
3483 * delete::
3484 * compare::
3485 @end menu
3486
3487 @node Operations
3488 @subsection The Five Advanced @command{tar} Operations
3489 @UNREVISED
3490
3491 In the last chapter, you learned about the first three operations to
3492 @command{tar}. This chapter presents the remaining five operations to
3493 @command{tar}: @samp{--append}, @samp{--update}, @samp{--concatenate},
3494 @samp{--delete}, and @samp{--compare}.
3495
3496 You are not likely to use these operations as frequently as those
3497 covered in the last chapter; however, since they perform specialized
3498 functions, they are quite useful when you do need to use them. We
3499 will give examples using the same directory and files that you created
3500 in the last chapter. As you may recall, the directory is called
3501 @file{practice}, the files are @samp{jazz}, @samp{blues}, @samp{folk},
3502 @samp{rock}, and the two archive files you created are
3503 @samp{collection.tar} and @samp{music.tar}.
3504
3505 We will also use the archive files @samp{afiles.tar} and
3506 @samp{bfiles.tar}. @samp{afiles.tar} contains the members @samp{apple},
3507 @samp{angst}, and @samp{aspic}. @samp{bfiles.tar} contains the members
3508 @samp{./birds}, @samp{baboon}, and @samp{./box}.
3509
3510 Unless we state otherwise, all practicing you do and examples you follow
3511 in this chapter will take place in the @file{practice} directory that
3512 you created in the previous chapter; see @ref{prepare for examples}.
3513 (Below in this section, we will remind you of the state of the examples
3514 where the last chapter left them.)
3515
3516 The five operations that we will cover in this chapter are:
3517
3518 @table @kbd
3519 @item --append
3520 @itemx -r
3521 Add new entries to an archive that already exists.
3522 @item --update
3523 @itemx -r
3524 Add more recent copies of archive members to the end of an archive, if
3525 they exist.
3526 @item --concatenate
3527 @itemx --catenate
3528 @itemx -A
3529 Add one or more pre-existing archives to the end of another archive.
3530 @item --delete
3531 Delete items from an archive (does not work on tapes).
3532 @item --compare
3533 @itemx --diff
3534 @itemx -d
3535 Compare archive members to their counterparts in the file system.
3536 @end table
3537
3538 @node current state
3539 @subsection The Current State of the Practice Files
3540
3541 Currently, the listing of the directory using @command{ls} is as follows:
3542
3543 @example
3544
3545 @end example
3546
3547 @noindent
3548 The archive file @samp{collection.tar} looks like this:
3549
3550 @example
3551 $ @kbd{tar -tvf collection.tar}
3552
3553 @end example
3554
3555 @noindent
3556 The archive file @samp{music.tar} looks like this:
3557
3558 @example
3559 $ @kbd{tar -tvf music.tar}
3560
3561 @end example
3562
3563 @FIXME{need to fill in the above!!!}
3564
3565 @node append
3566 @subsection How to Add Files to Existing Archives: @code{--append}
3567 @UNREVISED
3568
3569 If you want to add files to an existing archive, you don't need to
3570 create a new archive; you can use @value{op-append}. The archive must
3571 already exist in order to use @samp{--append}. (A related operation
3572 is the @samp{--update} operation; you can use this to add newer
3573 versions of archive members to an existing archive. To learn how to
3574 do this with @samp{--update}, @pxref{update}.)
3575
3576 @FIXME{Explain in second paragraph whether you can get to the previous
3577 version -- explain whole situation somewhat more clearly.}
3578
3579 If you use @value{op-append} to add a file that has the same name as an
3580 archive member to an archive containing that archive member, then the
3581 old member is not deleted. What does happen, however, is somewhat
3582 complex. @command{tar} @emph{allows} you to have infinite numbers of files
3583 with the same name. Some operations treat these same-named members no
3584 differently than any other set of archive members: for example, if you
3585 view an archive with @value{op-list}, you will see all of those members
3586 listed, with their modification times, owners, etc.
3587
3588 Other operations don't deal with these members as perfectly as you might
3589 prefer; if you were to use @value{op-extract} to extract the archive,
3590 only the most recently added copy of a member with the same name as four
3591 other members would end up in the working directory. This is because
3592 @samp{--extract} extracts an archive in the order the members appeared
3593 in the archive; the most recently archived members will be extracted
3594 last. Additionally, an extracted member will @emph{replace} a file of
3595 the same name which existed in the directory already, and @command{tar}
3596 will not prompt you about this. Thus, only the most recently archived
3597 member will end up being extracted, as it will replace the one
3598 extracted before it, and so on.
3599
3600 @FIXME{ hag -- you might want to incorporate some of the above into the
3601 MMwtSN node; not sure. i didn't know how to make it simpler...}
3602
3603 There are a few ways to get around this. @FIXME-xref{Multiple Members
3604 with the Same Name.}
3605
3606 @cindex Members, replacing with other members
3607 @cindex Replacing members with other members
3608 If you want to replace an archive member, use @value{op-delete} to
3609 delete the member you want to remove from the archive, , and then use
3610 @samp{--append} to add the member you want to be in the archive. Note
3611 that you can not change the order of the archive; the most recently
3612 added member will still appear last. In this sense, you cannot truly
3613 ``replace'' one member with another. (Replacing one member with another
3614 will not work on certain types of media, such as tapes; see @ref{delete}
3615 and @ref{Media}, for more information.)
3616
3617 @menu
3618 * appending files:: Appending Files to an Archive
3619 * multiple::
3620 @end menu
3621
3622 @node appending files
3623 @subsubsection Appending Files to an Archive
3624 @UNREVISED
3625 @cindex Adding files to an Archive
3626 @cindex Appending files to an Archive
3627 @cindex Archives, Appending files to
3628
3629 The simplest way to add a file to an already existing archive is the
3630 @value{op-append} operation, which writes specified files into the
3631 archive whether or not they are already among the archived files.
3632 When you use @samp{--append}, you @emph{must} specify file name
3633 arguments, as there is no default. If you specify a file that already
3634 exists in the archive, another copy of the file will be added to the
3635 end of the archive. As with other operations, the member names of the
3636 newly added files will be exactly the same as their names given on the
3637 command line. The @value{op-verbose} option will print out the names
3638 of the files as they are written into the archive.
3639
3640 @samp{--append} cannot be performed on some tape drives, unfortunately,
3641 due to deficiencies in the formats those tape drives use. The archive
3642 must be a valid @command{tar} archive, or else the results of using this
3643 operation will be unpredictable. @xref{Media}.
3644
3645 To demonstrate using @samp{--append} to add a file to an archive,
3646 create a file called @file{rock} in the @file{practice} directory.
3647 Make sure you are in the @file{practice} directory. Then, run the
3648 following @command{tar} command to add @file{rock} to
3649 @file{collection.tar}:
3650
3651 @example
3652 $ @kbd{tar --append --file=collection.tar rock}
3653 @end example
3654
3655 @noindent
3656 If you now use the @value{op-list} operation, you will see that
3657 @file{rock} has been added to the archive:
3658
3659 @example
3660 $ @kbd{tar --list --file=collection.tar}
3661 -rw-rw-rw- me user 28 1996-10-18 16:31 jazz
3662 -rw-rw-rw- me user 21 1996-09-23 16:44 blues
3663 -rw-rw-rw- me user 20 1996-09-23 16:44 folk
3664 -rw-rw-rw- me user 20 1996-09-23 16:44 rock
3665 @end example
3666
3667 @FIXME{in theory, dan will (soon) try to turn this node into what it's
3668 title claims it will become...}
3669
3670 @node multiple
3671 @subsubsection Multiple Files with the Same Name
3672
3673 You can use @value{op-append} to add copies of files which have been
3674 updated since the archive was created. (However, we do not recommend
3675 doing this since there is another @command{tar} option called
3676 @samp{--update}; @pxref{update} for more information. We describe this
3677 use of @samp{--append} here for the sake of completeness.) @FIXME{is
3678 this really a good idea, to give this whole description for something
3679 which i believe is basically a Stupid way of doing something? certain
3680 aspects of it show ways in which tar is more broken than i'd personally
3681 like to admit to, specifically the last sentence. On the other hand, i
3682 don't think it's a good idea to be saying that re explicitly don't
3683 recommend using something, but i can't see any better way to deal with
3684 the situation.}When you extract the archive, the older version will be
3685 effectively lost. This works because files are extracted from an
3686 archive in the order in which they were archived. Thus, when the
3687 archive is extracted, a file archived later in time will replace a
3688 file of the same name which was archived earlier, even though the older
3689 version of the file will remain in the archive unless you delete all
3690 versions of the file.
3691
3692 Supposing you change the file @file{blues} and then append the changed
3693 version to @file{collection.tar}. As you saw above, the original
3694 @file{blues} is in the archive @file{collection.tar}. If you change the
3695 file and append the new version of the file to the archive, there will
3696 be two copies in the archive. When you extract the archive, the older
3697 version of the file will be extracted first, and then replaced by the
3698 newer version when it is extracted.
3699
3700 You can append the new, changed copy of the file @file{blues} to the
3701 archive in this way:
3702
3703 @example
3704 $ @kbd{tar --append --verbose --file=collection.tar blues}
3705 blues
3706 @end example
3707
3708 @noindent
3709 Because you specified the @samp{--verbose} option, @command{tar} has
3710 printed the name of the file being appended as it was acted on. Now
3711 list the contents of the archive:
3712
3713 @example
3714 $ @kbd{tar --list --verbose --file=collection.tar}
3715 -rw-rw-rw- me user 28 1996-10-18 16:31 jazz
3716 -rw-rw-rw- me user 21 1996-09-23 16:44 blues
3717 -rw-rw-rw- me user 20 1996-09-23 16:44 folk
3718 -rw-rw-rw- me user 20 1996-09-23 16:44 rock
3719 -rw-rw-rw- me user 58 1996-10-24 18:30 blues
3720 @end example
3721
3722 @noindent
3723 The newest version of @file{blues} is now at the end of the archive
3724 (note the different creation dates and file sizes). If you extract
3725 the archive, the older version of the file @file{blues} will be
3726 replaced by the newer version. You can confirm this by extracting
3727 the archive and running @samp{ls} on the directory. @xref{Writing},
3728 for more information. (@emph{Please note:} This is the case unless
3729 you employ the @value{op-backup} option. @FIXME-ref{Multiple Members
3730 with the Same Name}.)
3731
3732 @node update
3733 @subsection Updating an Archive
3734 @UNREVISED
3735 @cindex Updating an archive
3736
3737 In the previous section, you learned how to use @value{op-append} to add
3738 a file to an existing archive. A related operation is
3739 @value{op-update}. The @samp{--update} operation updates a @command{tar}
3740 archive by comparing the date of the specified archive members against
3741 the date of the file with the same name. If the file has been modified
3742 more recently than the archive member, then the newer version of the
3743 file is added to the archive (as with @value{op-append}).
3744
3745 Unfortunately, you cannot use @samp{--update} with magnetic tape drives.
3746 The operation will fail.
3747
3748 @FIXME{other examples of media on which --update will fail? need to ask
3749 charles and/or mib/thomas/dave shevett..}
3750
3751 Both @samp{--update} and @samp{--append} work by adding to the end
3752 of the archive. When you extract a file from the archive, only the
3753 version stored last will wind up in the file system, unless you use
3754 the @value{op-backup} option. @FIXME-ref{Multiple Members with the
3755 Same Name}
3756
3757 @menu
3758 * how to update::
3759 @end menu
3760
3761 @node how to update
3762 @subsubsection How to Update an Archive Using @code{--update}
3763
3764 You must use file name arguments with the @value{op-update} operation.
3765 If you don't specify any files, @command{tar} won't act on any files and
3766 won't tell you that it didn't do anything (which may end up confusing
3767 you).
3768
3769 @FIXME{note: the above parenthetical added because in fact, this
3770 behavior just confused the author. :-) }
3771
3772 To see the @samp{--update} option at work, create a new file,
3773 @file{classical}, in your practice directory, and some extra text to the
3774 file @file{blues}, using any text editor. Then invoke @command{tar} with
3775 the @samp{update} operation and the @value{op-verbose} option specified,
3776 using the names of all the files in the practice directory as file name
3777 arguments:
3778
3779 @example
3780 $ @kbd{tar --update -v -f collection.tar blues folk rock classical}
3781 blues
3782 classical
3783 $
3784 @end example
3785
3786 @noindent
3787 Because we have specified verbose mode, @command{tar} prints out the names
3788 of the files it is working on, which in this case are the names of the
3789 files that needed to be updated. If you run @samp{tar --list} and look
3790 at the archive, you will see @file{blues} and @file{classical} at its
3791 end. There will be a total of two versions of the member @samp{blues};
3792 the one at the end will be newer and larger, since you added text before
3793 updating it.
3794
3795 (The reason @command{tar} does not overwrite the older file when updating
3796 it is because writing to the middle of a section of tape is a difficult
3797 process. Tapes are not designed to go backward. @xref{Media}, for more
3798 information about tapes.
3799
3800 @value{op-update} is not suitable for performing backups for two
3801 reasons: it does not change directory content entries, and it lengthens
3802 the archive every time it is used. The @sc{gnu} @command{tar} options intended
3803 specifically for backups are more efficient. If you need to run
3804 backups, please consult @ref{Backups}.
3805
3806 @node concatenate
3807 @subsection Combining Archives with @code{--concatenate}
3808
3809 @cindex Adding archives to an archive
3810 @cindex Concatenating Archives
3811 Sometimes it may be convenient to add a second archive onto the end of
3812 an archive rather than adding individual files to the archive. To add
3813 one or more archives to the end of another archive, you should use the
3814 @value{op-concatenate} operation.
3815
3816 To use @samp{--concatenate}, name the archives to be concatenated on the
3817 command line. (Nothing happens if you don't list any.) The members,
3818 and their member names, will be copied verbatim from those archives. If
3819 this causes multiple members to have the same name, it does not delete
3820 any members; all the members with the same name coexist. @FIXME-ref{For
3821 information on how this affects reading the archive, Multiple
3822 Members with the Same Name.}
3823
3824 To demonstrate how @samp{--concatenate} works, create two small archives
3825 called @file{bluesrock.tar} and @file{folkjazz.tar}, using the relevant
3826 files from @file{practice}:
3827
3828 @example
3829 $ @kbd{tar -cvf bluesrock.tar blues rock}
3830 blues
3831 classical
3832 $ @kbd{tar -cvf folkjazz.tar folk jazz}
3833 folk
3834 jazz
3835 @end example
3836
3837 @noindent
3838 If you like, You can run @samp{tar --list} to make sure the archives
3839 contain what they are supposed to:
3840
3841 @example
3842 $ @kbd{tar -tvf bluesrock.tar}
3843 -rw-rw-rw- melissa user 105 1997-01-21 19:42 blues
3844 -rw-rw-rw- melissa user 33 1997-01-20 15:34 rock
3845 $ @kbd{tar -tvf folkjazz.tar}
3846 -rw-rw-rw- melissa user 20 1996-09-23 16:44 folk
3847 -rw-rw-rw- melissa user 65 1997-01-30 14:15 jazz
3848 @end example
3849
3850 We can concatenate these two archives with @command{tar}:
3851
3852 @example
3853 $ @kbd{cd ..}
3854 $ @kbd{tar --concatenate --file=bluesrock.tar jazzfolk.tar}
3855 @end example
3856
3857 If you now list the contents of the @file{bluesclass.tar}, you will see
3858 that now it also contains the archive members of @file{jazzfolk.tar}:
3859
3860 @example
3861 $ @kbd{tar --list --file=bluesrock.tar}
3862 blues
3863 rock
3864 jazz
3865 folk
3866 @end example
3867
3868 When you use @samp{--concatenate}, the source and target archives must
3869 already exist and must have been created using compatible format
3870 parameters. @FIXME-pxref{Matching Format Parameters}The new,
3871 concatenated archive will be called by the same name as the first
3872 archive listed on the command line. @FIXME{is there a way to specify a
3873 new name?}
3874
3875 Like @value{op-append}, this operation cannot be performed on some
3876 tape drives, due to deficiencies in the formats those tape drives use.
3877
3878 @cindex @code{concatenate} vs @command{cat}
3879 @cindex @command{cat} vs @code{concatenate}
3880 It may seem more intuitive to you to want or try to use @command{cat} to
3881 concatenate two archives instead of using the @samp{--concatenate}
3882 operation; after all, @command{cat} is the utility for combining files.
3883
3884 However, @command{tar} archives incorporate an end-of-file marker which
3885 must be removed if the concatenated archives are to be read properly as
3886 one archive. @samp{--concatenate} removes the end-of-archive marker
3887 from the target archive before each new archive is appended. If you use
3888 @command{cat} to combine the archives, the result will not be a valid
3889 @command{tar} format archive. If you need to retrieve files from an
3890 archive that was added to using the @command{cat} utility, use the
3891 @value{op-ignore-zeros} option. @xref{Ignore Zeros}, for further
3892 information on dealing with archives improperly combined using the
3893 @command{cat} shell utility.
3894
3895 @FIXME{this shouldn't go here. where should it go?} You must specify
3896 the source archives using @value{op-file} (@value{pxref-file}). If you
3897 do not specify the target archive, @command{tar} uses the value of the
3898 environment variable @env{TAPE}, or, if this has not been set, the
3899 default archive name.
3900
3901 @node delete
3902 @subsection Removing Archive Members Using @samp{--delete}
3903 @UNREVISED
3904 @cindex Deleting files from an archive
3905 @cindex Removing files from an archive
3906
3907 You can remove members from an archive by using the @value{op-delete}
3908 option. Specify the name of the archive with @value{op-file} and then
3909 specify the names of the members to be deleted; if you list no member
3910 names, nothing will be deleted. The @value{op-verbose} option will
3911 cause @command{tar} to print the names of the members as they are deleted.
3912 As with @value{op-extract}, you must give the exact member names when
3913 using @samp{tar --delete}. @samp{--delete} will remove all versions of
3914 the named file from the archive. The @samp{--delete} operation can run
3915 very slowly.
3916
3917 Unlike other operations, @samp{--delete} has no short form.
3918
3919 @cindex Tapes, using @code{--delete} and
3920 @cindex Deleting from tape archives
3921 This operation will rewrite the archive. You can only use
3922 @samp{--delete} on an archive if the archive device allows you to
3923 write to any point on the media, such as a disk; because of this, it
3924 does not work on magnetic tapes. Do not try to delete an archive member
3925 from a magnetic tape; the action will not succeed, and you will be
3926 likely to scramble the archive and damage your tape. There is no safe
3927 way (except by completely re-writing the archive) to delete files from
3928 most kinds of magnetic tape. @xref{Media}.
3929
3930 To delete all versions of the file @file{blues} from the archive
3931 @file{collection.tar} in the @file{practice} directory, make sure you
3932 are in that directory, and then,
3933
3934 @example
3935 $ @kbd{tar --list --file=collection.tar}
3936 blues
3937 folk
3938 jazz
3939 rock
3940 practice/blues
3941 practice/folk
3942 practice/jazz
3943 practice/rock
3944 practice/blues
3945 $ @kbd{tar --delete --file=collection.tar blues}
3946 $ @kbd{tar --list --file=collection.tar}
3947 folk
3948 jazz
3949 rock
3950 $
3951 @end example
3952
3953 @FIXME{I changed the order of these nodes around and haven't had a chance
3954 to fix the above example's results, yet. I have to play with this and
3955 follow it and see what it actually does!}
3956
3957 The @value{op-delete} option has been reported to work properly when
3958 @command{tar} acts as a filter from @code{stdin} to @code{stdout}.
3959
3960 @node compare
3961 @subsection Comparing Archive Members with the File System
3962 @cindex Verifying the currency of an archive
3963 @UNREVISED
3964
3965 The @samp{--compare} (@samp{-d}), or @samp{--diff} operation compares
3966 specified archive members against files with the same names, and then
3967 reports differences in file size, mode, owner, modification date and
3968 contents. You should @emph{only} specify archive member names, not file
3969 names. If you do not name any members, then @command{tar} will compare the
3970 entire archive. If a file is represented in the archive but does not
3971 exist in the file system, @command{tar} reports a difference.
3972
3973 You have to specify the record size of the archive when modifying an
3974 archive with a non-default record size.
3975
3976 @command{tar} ignores files in the file system that do not have
3977 corresponding members in the archive.
3978
3979 The following example compares the archive members @file{rock},
3980 @file{blues} and @file{funk} in the archive @file{bluesrock.tar} with
3981 files of the same name in the file system. (Note that there is no file,
3982 @file{funk}; @command{tar} will report an error message.)
3983
3984 @example
3985 $ @kbd{tar --compare --file=bluesrock.tar rock blues funk}
3986 rock
3987 blues
3988 tar: funk not found in archive
3989 @end example
3990
3991 @noindent
3992 @FIXME{what does this actually depend on? i'm making a guess,
3993 here.}Depending on the system where you are running @command{tar} and the
3994 version you are running, @command{tar} may have a different error message,
3995 such as:
3996
3997 @example
3998 funk: does not exist
3999 @end example
4000
4001 @FIXME-xref{somewhere, for more information about format parameters.
4002 Melissa says: such as "format variations"? But why? Clearly I don't
4003 get it yet; I'll deal when I get to that section.}
4004
4005 The spirit behind the @value{op-compare} option is to check whether the
4006 archive represents the current state of files on disk, more than validating
4007 the integrity of the archive media. For this later goal, @xref{verify}.
4008
4009 @node create options
4010 @section Options Used by @code{--create}
4011
4012 The previous chapter described the basics of how to use
4013 @value{op-create} to create an archive from a set of files.
4014 @xref{create}. This section described advanced options to be used with
4015 @samp{--create}.
4016
4017 @menu
4018 * Ignore Failed Read::
4019 @end menu
4020
4021 @node Ignore Failed Read
4022 @subsection Ignore Fail Read
4023
4024 @table @kbd
4025 @item --ignore-failed-read
4026 Do not exit with nonzero on unreadable files or directories.
4027 @end table
4028
4029 @node extract options
4030 @section Options Used by @code{--extract}
4031 @UNREVISED
4032
4033 @FIXME{i need to get dan to go over these options with me and see if
4034 there's a better way of organizing them.}
4035
4036 The previous chapter showed how to use @value{op-extract} to extract
4037 an archive into the filesystem. Various options cause @command{tar} to
4038 extract more information than just file contents, such as the owner,
4039 the permissions, the modification date, and so forth. This section
4040 presents options to be used with @samp{--extract} when certain special
4041 considerations arise. You may review the information presented in
4042 @ref{extract} for more basic information about the
4043 @samp{--extract} operation.
4044
4045 @menu
4046 * Reading:: Options to Help Read Archives
4047 * Writing:: Changing How @command{tar} Writes Files
4048 * Scarce:: Coping with Scarce Resources
4049 @end menu
4050
4051 @node Reading
4052 @subsection Options to Help Read Archives
4053 @cindex Options when reading archives
4054 @cindex Reading incomplete records
4055 @cindex Records, incomplete
4056 @cindex End-of-archive entries, ignoring
4057 @cindex Ignoring end-of-archive entries
4058 @cindex Large lists of file names on small machines
4059 @cindex Small memory
4060 @cindex Running out of space
4061 @UNREVISED
4062
4063 Normally, @command{tar} will request data in full record increments from
4064 an archive storage device. If the device cannot return a full record,
4065 @command{tar} will report an error. However, some devices do not always
4066 return full records, or do not require the last record of an archive to
4067 be padded out to the next record boundary. To keep reading until you
4068 obtain a full record, or to accept an incomplete record if it contains
4069 an end-of-archive marker, specify the @value{op-read-full-records} option
4070 in conjunction with the @value{op-extract} or @value{op-list} operations.
4071 @value{xref-read-full-records}.
4072
4073 The @value{op-read-full-records} option is turned on by default when
4074 @command{tar} reads an archive from standard input, or from a remote
4075 machine. This is because on BSD Unix systems, attempting to read a
4076 pipe returns however much happens to be in the pipe, even if it is
4077 less than was requested. If this option were not enabled, @command{tar}
4078 would fail as soon as it read an incomplete record from the pipe.
4079
4080 If you're not sure of the blocking factor of an archive, you can
4081 read the archive by specifying @value{op-read-full-records} and
4082 @value{op-blocking-factor}, using a blocking factor larger than what the
4083 archive uses. This lets you avoid having to determine the blocking factor
4084 of an archive. @value{xref-blocking-factor}.
4085
4086 @menu
4087 * read full records::
4088 * Ignore Zeros::
4089 @end menu
4090
4091 @node read full records
4092 @unnumberedsubsubsec Reading Full Records
4093
4094 @FIXME{need sentence or so of intro here}
4095
4096 @table @kbd
4097 @item --read-full-records
4098 @item -B
4099 Use in conjunction with @value{op-extract} to read an archive which
4100 contains incomplete records, or one which has a blocking factor less
4101 than the one specified.
4102 @end table
4103
4104 @node Ignore Zeros
4105 @unnumberedsubsubsec Ignoring Blocks of Zeros
4106
4107 Normally, @command{tar} stops reading when it encounters a block of zeros
4108 between file entries (which usually indicates the end of the archive).
4109 @value{op-ignore-zeros} allows @command{tar} to completely read an archive
4110 which contains a block of zeros before the end (i.e.@: a damaged
4111 archive, or one which was created by concatenating several archives
4112 together).
4113
4114 The @value{op-ignore-zeros} option is turned off by default because many
4115 versions of @command{tar} write garbage after the end-of-archive entry,
4116 since that part of the media is never supposed to be read. @sc{gnu}
4117 @command{tar} does not write after the end of an archive, but seeks to
4118 maintain compatiblity among archiving utilities.
4119
4120 @table @kbd
4121 @item --ignore-zeros
4122 @itemx -i
4123 To ignore blocks of zeros (ie.@: end-of-archive entries) which may be
4124 encountered while reading an archive. Use in conjunction with
4125 @value{op-extract} or @value{op-list}.
4126 @end table
4127
4128 @node Writing
4129 @subsection Changing How @command{tar} Writes Files
4130 @cindex Overwriting old files, prevention
4131 @cindex Protecting old files
4132 @cindex Modification times of extracted files
4133 @cindex Permissions of extracted files
4134 @cindex Modes of extracted files
4135 @cindex Writing extracted files to standard output
4136 @cindex Standard output, writing extracted files to
4137 @UNREVISED
4138
4139 @FIXME{need to mention the brand new option, --backup}
4140
4141 @menu
4142 * Dealing with Old Files::
4143 * Overwrite Old Files::
4144 * Keep Old Files::
4145 * Unlink First::
4146 * Recursive Unlink::
4147 * Modification Times::
4148 * Setting Access Permissions::
4149 * Writing to Standard Output::
4150 * remove files::
4151 @end menu
4152
4153 @node Dealing with Old Files
4154 @unnumberedsubsubsec Options Controlling the Overwriting of Existing Files
4155
4156 When extracting files, if @command{tar} discovers that the extracted
4157 file already exists, it normally replaces the file by removing it before
4158 extracting it, to prevent confusion in the presence of hard or symbolic
4159 links. (If the existing file is a symbolic link, it is removed, not
4160 followed.) However, if a directory cannot be removed because it is
4161 nonempty, @command{tar} neither removes it nor modifies its ownership,
4162 permissions, or time stamps.
4163
4164 To be more cautious and prevent existing files from being replaced, use
4165 the @value{op-keep-old-files} option. It causes @command{tar} to refuse
4166 to replace or update a file that already exists, i.e., a file with the
4167 same name as an archive member prevents extraction of that archive
4168 member. Instead, it reports an error.
4169
4170 To be more aggressive about altering existing files, use the
4171 @value{op-overwrite} option. It causes @command{tar} to overwrite
4172 existing files and to follow existing symbolic links when extracting.
4173
4174 Some people argue that @sc{gnu} @command{tar} should not hesitate to overwrite
4175 files with other files when extracting. When extracting a @command{tar}
4176 archive, they expect to see a faithful copy of the state of the filesystem
4177 when the archive was created. It is debatable that this would always
4178 be a proper behavior. For example, suppose one has an archive in
4179 which @file{usr/local} is a link to @file{usr/local2}. Since then,
4180 maybe the site removed the link and renamed the whole hierarchy from
4181 @file{/usr/local2} to @file{/usr/local}. Such things happen all the time.
4182 I guess it would not be welcome at all that @sc{gnu} @command{tar} removes the
4183 whole hierarchy just to make room for the link to be reinstated (unless it
4184 @emph{also} simultaneously restores the full @file{/usr/local2}, of course!
4185 @sc{gnu} @command{tar} is indeed able to remove a whole hierarchy to reestablish a
4186 symbolic link, for example, but @emph{only if} @value{op-recursive-unlink}
4187 is specified to allow this behavior. In any case, single files are
4188 silently removed.
4189
4190 Finally, the @value{op-unlink-first} option can improve performance in
4191 some cases by causing @command{tar} to remove files unconditionally
4192 before extracting them.
4193
4194 @node Overwrite Old Files
4195 @unnumberedsubsubsec Overwrite Old Files
4196
4197 @table @kbd
4198 @item --overwrite
4199 Overwrite existing files and directory metadata when extracting files
4200 from an archive.
4201
4202 This
4203 causes @command{tar} to write extracted files into the file system without
4204 regard to the files already on the system; i.e., files with the same
4205 names as archive members are overwritten when the archive is extracted.
4206 It also causes @command{tar} to extract the ownership, permissions,
4207 and time stamps onto any preexisting files or directories.
4208 If the name of a corresponding file name is a symbolic link, the file
4209 pointed to by the symbolic link will be overwritten instead of the
4210 symbolic link itself (if this is possible). Moreover, special devices,
4211 empty directories and even symbolic links are automatically removed if
4212 they are in the way of extraction.
4213
4214 Be careful when using the @value{op-overwrite} option, particularly when
4215 combined with the @value{op-absolute-names} option, as this combination
4216 can change the contents, ownership or permissions of any file on your
4217 system. Also, many systems do not take kindly to overwriting files that
4218 are currently being executed.
4219 @end table
4220
4221 @node Keep Old Files
4222 @unnumberedsubsubsec Keep Old Files
4223
4224 @table @kbd
4225 @item --keep-old-files
4226 @itemx -k
4227 Do not replace existing files from archive. The
4228 @value{op-keep-old-files} option prevents @command{tar} from replacing
4229 existing files with files with the same name from the archive.
4230 The @value{op-keep-old-files} option is meaningless with @value{op-list}.
4231 Prevents @command{tar} from replacing files in the file system during
4232 extraction.
4233 @end table
4234
4235 @node Unlink First
4236 @unnumberedsubsubsec Unlink First
4237
4238 @table @kbd
4239 @item --unlink-first
4240 @itemx -U
4241 Remove files before extracting over them.
4242 This can make @command{tar} run a bit faster if you know in advance
4243 that the extracted files all need to be removed. Normally this option
4244 slows @command{tar} down slightly, so it is disabled by default.
4245 @end table
4246
4247 @node Recursive Unlink
4248 @unnumberedsubsubsec Recursive Unlink
4249
4250 @table @kbd
4251 @item --recursive-unlink
4252 When this option is specified, try removing files and directory hierarchies
4253 before extracting over them. @emph{This is a dangerous option!}
4254 @end table
4255
4256 If you specify the @value{op-recursive-unlink} option,
4257 @command{tar} removes @emph{anything} that keeps you from extracting a file
4258 as far as current permissions will allow it. This could include removal
4259 of the contents of a full directory hierarchy.
4260
4261 @node Modification Times
4262 @unnumberedsubsubsec Setting Modification Times
4263
4264 Normally, @command{tar} sets the modification times of extracted files to
4265 the modification times recorded for the files in the archive, but
4266 limits the permissions of extracted files by the current @code{umask}
4267 setting.
4268
4269 To set the modification times of extracted files to the time when
4270 the files were extracted, use the @value{op-touch} option in
4271 conjunction with @value{op-extract}.
4272
4273 @table @kbd
4274 @item --touch
4275 @itemx -m
4276 Sets the modification time of extracted archive members to the time
4277 they were extracted, not the time recorded for them in the archive.
4278 Use in conjunction with @value{op-extract}.
4279 @end table
4280
4281 @node Setting Access Permissions
4282 @unnumberedsubsubsec Setting Access Permissions
4283
4284 To set the modes (access permissions) of extracted files to those
4285 recorded for those files in the archive, use @samp{--same-permissions}
4286 in conjunction with the @value{op-extract} operation. @FIXME{Should be
4287 aliased to ignore-umask.}
4288
4289 @table @kbd
4290 @item --preserve-permission
4291 @itemx --same-permission
4292 @itemx --ignore-umask
4293 @itemx -p
4294 Set modes of extracted archive members to those recorded in the
4295 archive, instead of current umask settings. Use in conjunction with
4296 @value{op-extract}.
4297 @end table
4298
4299 @FIXME{Following paragraph needs to be rewritten: why doesn't this cat
4300 files together, why is this useful. is it really useful with
4301 more than one file?}
4302
4303 @node Writing to Standard Output
4304 @unnumberedsubsubsec Writing to Standard Output
4305
4306 To write the extracted files to the standard output, instead of
4307 creating the files on the file system, use @value{op-to-stdout} in
4308 conjunction with @value{op-extract}. This option is useful if you are
4309 extracting files to send them through a pipe, and do not need to
4310 preserve them in the file system. If you extract multiple members,
4311 they appear on standard output concatenated, in the order they are
4312 found in the archive.
4313
4314 @table @kbd
4315 @item --to-stdout
4316 @itemx -O
4317 Writes files to the standard output. Used in conjunction with
4318 @value{op-extract}. Extract files to standard output. When this option
4319 is used, instead of creating the files specified, @command{tar} writes
4320 the contents of the files extracted to its standard output. This may
4321 be useful if you are only extracting the files in order to send them
4322 through a pipe. This option is meaningless with @value{op-list}.
4323 @end table
4324
4325 @FIXME{Why would you want to do such a thing, how are files separated on
4326 the standard output? is this useful with more that one file? Are
4327 pipes the real reason?}
4328
4329 @node remove files
4330 @unnumberedsubsubsec Removing Files
4331
4332 @FIXME{the various macros in the front of the manual think that this
4333 option goes in this section. i have no idea; i only know it's nowhere
4334 else in the book...}
4335
4336 @table @kbd
4337 @item --remove-files
4338 Remove files after adding them to the archive.
4339 @end table
4340
4341 @node Scarce
4342 @subsection Coping with Scarce Resources
4343 @cindex Middle of the archive, starting in the
4344 @cindex Running out of space during extraction
4345 @cindex Disk space, running out of
4346 @cindex Space on the disk, recovering from lack of
4347 @UNREVISED
4348
4349 @menu
4350 * Starting File::
4351 * Same Order::
4352 @end menu
4353
4354 @node Starting File
4355 @unnumberedsubsubsec Starting File
4356
4357 @table @kbd
4358 @item --starting-file=@var{name}
4359 @itemx -K @var{name}
4360 Starts an operation in the middle of an archive. Use in conjunction
4361 with @value{op-extract} or @value{op-list}.
4362 @end table
4363
4364 If a previous attempt to extract files failed due to lack of disk
4365 space, you can use @value{op-starting-file} to start extracting only
4366 after member @var{name} of the archive. This assumes, of course, that
4367 there is now free space, or that you are now extracting into a
4368 different file system. (You could also choose to suspend @command{tar},
4369 remove unnecessary files from the file system, and then restart the
4370 same @command{tar} operation. In this case, @value{op-starting-file} is
4371 not necessary. @value{xref-incremental}, @value{xref-interactive},
4372 and @value{ref-exclude}.)
4373
4374 @node Same Order
4375 @unnumberedsubsubsec Same Order
4376
4377 @table @kbd
4378 @item --same-order
4379 @itemx --preserve-order
4380 @itemx -s
4381 To process large lists of file names on machines with small amounts of
4382 memory. Use in conjunction with @value{op-compare},
4383 @value{op-list}
4384 or @value{op-extract}.
4385 @end table
4386
4387 @FIXME{we don't need/want --preserve to exist any more (from melissa:
4388 ie, don't want that *version* of the option to exist, or don't want
4389 the option to exist in either version?}
4390
4391 @FIXME{i think this explanation is lacking.}
4392
4393 The @value{op-same-order} option tells @command{tar} that the list of file
4394 names to be listed or extracted is sorted in the same order as the
4395 files in the archive. This allows a large list of names to be used,
4396 even on a small machine that would not otherwise be able to hold all
4397 the names in memory at the same time. Such a sorted list can easily be
4398 created by running @samp{tar -t} on the archive and editing its output.
4399
4400 This option is probably never needed on modern computer systems.
4401
4402 @node backup
4403 @section Backup options
4404
4405 @cindex backup options
4406
4407 @sc{gnu} @command{tar} offers options for making backups of files before writing
4408 new versions. These options control the details of these backups.
4409 They may apply to the archive itself before it is created or rewritten,
4410 as well as individual extracted members. Other @sc{gnu} programs (@command{cp},
4411 @command{install}, @command{ln}, and @command{mv}, for example) offer similar
4412 options.
4413
4414 Backup options may prove unexpectedly useful when extracting archives
4415 containing many members having identical name, or when extracting archives
4416 on systems having file name limitations, making different members appear
4417 has having similar names through the side-effect of name truncation.
4418 (This is true only if we have a good scheme for truncated backup names,
4419 which I'm not sure at all: I suspect work is needed in this area.)
4420 When any existing file is backed up before being overwritten by extraction,
4421 then clashing files are automatically be renamed to be unique, and the
4422 true name is kept for only the last file of a series of clashing files.
4423 By using verbose mode, users may track exactly what happens.
4424
4425 At the detail level, some decisions are still experimental, and may
4426 change in the future, we are waiting comments from our users. So, please
4427 do not learn to depend blindly on the details of the backup features.
4428 For example, currently, directories themselves are never renamed through
4429 using these options, so, extracting a file over a directory still has
4430 good chances to fail. Also, backup options apply to created archives,
4431 not only to extracted members. For created archives, backups will not
4432 be attempted when the archive is a block or character device, or when it
4433 refers to a remote file.
4434
4435 For the sake of simplicity and efficiency, backups are made by renaming old
4436 files prior to creation or extraction, and not by copying. The original
4437 name is restored if the file creation fails. If a failure occurs after a
4438 partial extraction of a file, both the backup and the partially extracted
4439 file are kept.
4440
4441 @table @samp
4442
4443 @item --backup[=@var{method}]
4444 @opindex --backup
4445 @vindex VERSION_CONTROL
4446 @cindex backups
4447 Back up files that are about to be overwritten or removed.
4448 Without this option, the original versions are destroyed.
4449
4450 Use @var{method} to determine the type of backups made.
4451 If @var{method} is not specified, use the value of the @env{VERSION_CONTROL}
4452 environment variable. And if @env{VERSION_CONTROL} is not set,
4453 use the @samp{existing} method.
4454
4455 @vindex version-control @r{Emacs variable}
4456 This option corresponds to the Emacs variable @samp{version-control};
4457 the same values for @var{method} are accepted as in Emacs. This option
4458 also allows more descriptive names. The valid @var{method}s are:
4459
4460 @table @samp
4461 @item t
4462 @itemx numbered
4463 @opindex numbered @r{backup method}
4464 Always make numbered backups.
4465
4466 @item nil
4467 @itemx existing
4468 @opindex existing @r{backup method}
4469 Make numbered backups of files that already have them, simple backups
4470 of the others.
4471
4472 @item never
4473 @itemx simple
4474 @opindex simple @r{backup method}
4475 Always make simple backups.
4476
4477 @end table
4478
4479 @item --suffix=@var{suffix}
4480 @opindex --suffix
4481 @cindex backup suffix
4482 @vindex SIMPLE_BACKUP_SUFFIX
4483 Append @var{suffix} to each backup file made with @samp{--backup}. If this
4484 option is not specified, the value of the @env{SIMPLE_BACKUP_SUFFIX}
4485 environment variable is used. And if @env{SIMPLE_BACKUP_SUFFIX} is not
4486 set, the default is @samp{~}, just as in Emacs.
4487
4488 @end table
4489
4490 Some people express the desire to @emph{always} use the @value{op-backup}
4491 option, by defining some kind of alias or script. This is not as easy
4492 as one may think, due to the fact that old style options should appear first
4493 and consume arguments a bit unpredictably for an alias or script. But,
4494 if you are ready to give up using old style options, you may resort to
4495 using something like (a Bourne shell function here):
4496
4497 @example
4498 tar () @{ /usr/local/bin/tar --backup $*; @}
4499 @end example
4500
4501 @node Applications
4502 @section Notable @command{tar} Usages
4503 @UNREVISED
4504
4505 @FIXME{Using Unix file linking capability to recreate directory
4506 structures---linking files into one subdirectory and then
4507 @command{tar}ring that directory.}
4508
4509 @FIXME{Nice hairy example using absolute-names, newer, etc.}
4510
4511 @findex uuencode
4512 You can easily use archive files to transport a group of files from
4513 one system to another: put all relevant files into an archive on one
4514 computer system, transfer the archive to another system, and extract
4515 the contents there. The basic transfer medium might be magnetic tape,
4516 Internet FTP, or even electronic mail (though you must encode the
4517 archive with @command{uuencode} in order to transport it properly by
4518 mail). Both machines do not have to use the same operating system, as
4519 long as they both support the @command{tar} program.
4520
4521 For example, here is how you might copy a directory's contents from
4522 one disk to another, while preserving the dates, modes, owners and
4523 link-structure of all the files therein. In this case, the transfer
4524 medium is a @dfn{pipe}, which is one a Unix redirection mechanism:
4525
4526 @smallexample
4527 $ @kbd{cd sourcedir; tar -cf - . | (cd targetdir; tar -xf -)}
4528 @end smallexample
4529
4530 @noindent
4531 The command also works using short option forms:
4532
4533 @FIXME{The following using standard input/output correct??}
4534 @smallexample
4535 $ @w{@kbd{cd sourcedir; tar --create --file=- . | (cd targetdir; tar --extract --file=-)}}
4536 @end smallexample
4537
4538 @noindent
4539 This is one of the easiest methods to transfer a @command{tar} archive.
4540
4541 @node looking ahead
4542 @section Looking Ahead: The Rest of this Manual
4543
4544 You have now seen how to use all eight of the operations available to
4545 @command{tar}, and a number of the possible options. The next chapter
4546 explains how to choose and change file and archive names, how to use
4547 files to store names of other files which you can then call as
4548 arguments to @command{tar} (this can help you save time if you expect to
4549 archive the same list of files a number of times), and so forth.
4550 @FIXME{in case it's not obvious, i'm making this up in some sense
4551 based on my imited memory of what the next chapter *really* does. i
4552 just wanted to flesh out this final section a little bit so i'd
4553 remember to sitck it in here. :-)}
4554
4555 If there are too many files to conveniently list on the command line,
4556 you can list the names in a file, and @command{tar} will read that file.
4557 @value{xref-files-from}.
4558
4559 There are various ways of causing @command{tar} to skip over some files,
4560 and not archive them. @xref{Choosing}.
4561
4562 @node Backups
4563 @chapter Performing Backups and Restoring Files
4564 @UNREVISED
4565
4566 @sc{gnu} @command{tar} is distributed along with the scripts which the Free
4567 Software Foundation uses for performing backups. There is no corresponding
4568 scripts available yet for doing restoration of files. Even if there is
4569 a good chance those scripts may be satisfying to you, they are not the
4570 only scripts or methods available for doing backups and restore. You may
4571 well create your own, or use more sophisticated packages dedicated to
4572 that purpose.
4573
4574 Some users are enthusiastic about @code{Amanda} (The Advanced Maryland
4575 Automatic Network Disk Archiver), a backup system developed by James
4576 da Silva @file{jds@@cs.umd.edu} and available on many Unix systems.
4577 This is free software, and it is available at these places:
4578
4579 @example
4580 http://www.cs.umd.edu/projects/amanda/amanda.html
4581 ftp://ftp.cs.umd.edu/pub/amanda
4582 @end example
4583
4584 @ifclear PUBLISH
4585
4586 Here is a possible plan for a future documentation about the backuping
4587 scripts which are provided within the @sc{gnu} @command{tar} distribution.
4588
4589 @example
4590 .* dumps
4591 . + what are dumps
4592
4593 . + different levels of dumps
4594 . - full dump = dump everything
4595 . - level 1, level 2 dumps etc, -
4596 A level n dump dumps everything changed since the last level
4597 n-1 dump (?)
4598
4599 . + how to use scripts for dumps (ie, the concept)
4600 . - scripts to run after editing backup specs (details)
4601
4602 . + Backup Specs, what is it.
4603 . - how to customize
4604 . - actual text of script [/sp/dump/backup-specs]
4605
4606 . + Problems
4607 . - rsh doesn't work
4608 . - rtape isn't installed
4609 . - (others?)
4610
4611 . + the --incremental option of tar
4612
4613 . + tapes
4614 . - write protection
4615 . - types of media
4616 . : different sizes and types, useful for different things
4617 . - files and tape marks
4618 one tape mark between files, two at end.
4619 . - positioning the tape
4620 MT writes two at end of write,
4621 backspaces over one when writing again.
4622 @end example
4623
4624 @end ifclear
4625
4626 This chapter documents both the provided FSF scripts and @command{tar}
4627 options which are more specific to usage as a backup tool.
4628
4629 To @dfn{back up} a file system means to create archives that contain
4630 all the files in that file system. Those archives can then be used to
4631 restore any or all of those files (for instance if a disk crashes or a
4632 file is accidentally deleted). File system @dfn{backups} are also
4633 called @dfn{dumps}.
4634
4635 @menu
4636 * Full Dumps:: Using @command{tar} to Perform Full Dumps
4637 * Inc Dumps:: Using @command{tar} to Perform Incremental Dumps
4638 * incremental and listed-incremental:: The Incremental Options
4639 * Backup Levels:: Levels of Backups
4640 * Backup Parameters:: Setting Parameters for Backups and Restoration
4641 * Scripted Backups:: Using the Backup Scripts
4642 * Scripted Restoration:: Using the Restore Script
4643 @end menu
4644
4645 @node Full Dumps
4646 @section Using @command{tar} to Perform Full Dumps
4647 @UNREVISED
4648
4649 @cindex full dumps
4650 @cindex dumps, full
4651
4652 @cindex corrupted archives
4653 Full dumps should only be made when no other people or programs
4654 are modifying files in the filesystem. If files are modified while
4655 @command{tar} is making the backup, they may not be stored properly in
4656 the archive, in which case you won't be able to restore them if you
4657 have to. (Files not being modified are written with no trouble, and do
4658 not corrupt the entire archive.)
4659
4660 You will want to use the @value{op-label} option to give the archive a
4661 volume label, so you can tell what this archive is even if the label
4662 falls off the tape, or anything like that.
4663
4664 Unless the filesystem you are dumping is guaranteed to fit on
4665 one volume, you will need to use the @value{op-multi-volume} option.
4666 Make sure you have enough tapes on hand to complete the backup.
4667
4668 If you want to dump each filesystem separately you will need to use
4669 the @value{op-one-file-system} option to prevent @command{tar} from crossing
4670 filesystem boundaries when storing (sub)directories.
4671
4672 The @value{op-incremental} option is not needed, since this is a complete
4673 copy of everything in the filesystem, and a full restore from this
4674 backup would only be done onto a completely empty disk.
4675
4676 Unless you are in a hurry, and trust the @command{tar} program (and your
4677 tapes), it is a good idea to use the @value{op-verify} option, to make
4678 sure your files really made it onto the dump properly. This will
4679 also detect cases where the file was modified while (or just after)
4680 it was being archived. Not all media (notably cartridge tapes) are
4681 capable of being verified, unfortunately.
4682
4683 @value{op-listed-incremental} take a file name argument always. If the
4684 file doesn't exist, run a level zero dump, creating the file. If the
4685 file exists, uses that file to see what has changed.
4686
4687 @value{op-incremental} @FIXME{look it up}
4688
4689 @value{op-incremental} handle old @sc{gnu}-format incremental backup.
4690
4691 This option should only be used when creating an incremental backup of
4692 a filesystem. When the @value{op-incremental} option is used, @command{tar}
4693 writes, at the beginning of the archive, an entry for each of the
4694 directories that will be operated on. The entry for a directory
4695 includes a list of all the files in the directory at the time the
4696 dump was done, and a flag for each file indicating whether the file
4697 is going to be put in the archive. This information is used when
4698 doing a complete incremental restore.
4699
4700 Note that this option causes @command{tar} to create a non-standard
4701 archive that may not be readable by non-@sc{gnu} versions of the @command{tar}
4702 program.
4703
4704 The @value{op-incremental} option means the archive is an incremental
4705 backup. Its meaning depends on the command that it modifies.
4706
4707 If the @value{op-incremental} option is used with @value{op-list}, @command{tar}
4708 will list, for each directory in the archive, the list of files in
4709 that directory at the time the archive was created. This information
4710 is put out in a format that is not easy for humans to read, but which
4711 is unambiguous for a program: each file name is preceded by either a
4712 @samp{Y} if the file is present in the archive, an @samp{N} if the
4713 file is not included in the archive, or a @samp{D} if the file is
4714 a directory (and is included in the archive). Each file name is
4715 terminated by a null character. The last file is followed by an
4716 additional null and a newline to indicate the end of the data.
4717
4718 If the @value{op-incremental} option is used with @value{op-extract}, then
4719 when the entry for a directory is found, all files that currently
4720 exist in that directory but are not listed in the archive @emph{are
4721 deleted from the directory}.
4722
4723 This behavior is convenient when you are restoring a damaged file
4724 system from a succession of incremental backups: it restores the
4725 entire state of the file system to that which obtained when the backup
4726 was made. If you don't use @value{op-incremental}, the file system will
4727 probably fill up with files that shouldn't exist any more.
4728
4729 @value{op-listed-incremental} handle new @sc{gnu}-format incremental backup.
4730 This option handles new @sc{gnu}-format incremental backup. It has much the
4731 same effect as @value{op-incremental}, but also the time when the dump
4732 is done and the list of directories dumped is written to the given
4733 @var{file}. When restoring, only files newer than the saved time are
4734 restored, and the directory list is used to speed up operations.
4735
4736 @value{op-listed-incremental} acts like @value{op-incremental}, but when
4737 used in conjunction with @value{op-create} will also cause @command{tar} to
4738 use the file @var{file}, which contains information about the state
4739 of the filesystem at the time of the last backup, to decide which
4740 files to include in the archive being created. That file will then
4741 be updated by @command{tar}. If the file @var{file} does not exist when
4742 this option is specified, @command{tar} will create it, and include all
4743 appropriate files in the archive.
4744
4745 The file, which is archive independent, contains the date it was last
4746 modified and a list of devices, inode numbers and directory names.
4747 @command{tar} will archive files with newer mod dates or inode change
4748 times, and directories with an unchanged inode number and device but
4749 a changed directory name. The file is updated after the files to
4750 be archived are determined, but before the new archive is actually
4751 created.
4752
4753 @sc{gnu} @command{tar} actually writes the file twice: once before the data
4754 and written, and once after.
4755
4756 @node Inc Dumps
4757 @section Using @command{tar} to Perform Incremental Dumps
4758 @UNREVISED
4759
4760 @cindex incremental dumps
4761 @cindex dumps, incremental
4762
4763 Performing incremental dumps is similar to performing full dumps,
4764 although a few more options will usually be needed.
4765
4766 A standard scheme is to do a @emph{monthly} (full) dump once a month,
4767 a @emph{weekly} dump once a week of everything since the last monthly
4768 and a @emph{daily} every day of everything since the last (weekly or
4769 monthly) dump.
4770
4771 Here is a sample script to dump the directory hierarchies @samp{/usr}
4772 and @samp{/var}.
4773
4774 @example
4775 #! /bin/sh
4776 tar --create \
4777 --blocking-factor=126 \
4778 --file=/dev/rmt/0 \
4779 --label="`hostname` /usr /var `date +%Y-%m-%d`" \
4780 --listed-incremental=/var/log/usr-var.snar \
4781 --verbose \
4782 /usr /var
4783 @end example
4784
4785 This script uses the file @file{/var/log/usr-var.snar} as a snapshot to
4786 store information about the previous tar dump.
4787
4788 The blocking factor 126 is an attempt to make the tape drive stream.
4789 Some tape devices cannot handle 64 kB blocks or larger, and require the
4790 block size to be a multiple of 1 kB; for these devices, 126 is the
4791 largest blocking factor that can be used.
4792
4793 @node incremental and listed-incremental
4794 @section The Incremental Options
4795 @UNREVISED
4796
4797 @value{op-incremental} is used in conjunction with @value{op-create},
4798 @value{op-extract} or @value{op-list} when backing up and restoring file
4799 systems. An archive cannot be extracted or listed with the
4800 @value{op-incremental} option specified unless it was created with the
4801 option specified. This option should only be used by a script, not by
4802 the user, and is usually disregarded in favor of
4803 @value{op-listed-incremental}, which is described below.
4804
4805 @value{op-incremental} in conjunction with @value{op-create} causes
4806 @command{tar} to write, at the beginning of the archive, an entry for
4807 each of the directories that will be archived. The entry for a
4808 directory includes a list of all the files in the directory at the
4809 time the archive was created and a flag for each file indicating
4810 whether or not the file is going to be put in the archive.
4811
4812 Note that this option causes @command{tar} to create a non-standard
4813 archive that may not be readable by non-@sc{gnu} versions of the @command{tar}
4814 program.
4815
4816 @value{op-incremental} in conjunction with @value{op-extract} causes
4817 @command{tar} to read the lists of directory contents previously stored
4818 in the archive, @emph{delete} files in the file system that did not
4819 exist in their directories when the archive was created, and then
4820 extract the files in the archive.
4821
4822 This behavior is convenient when restoring a damaged file system from
4823 a succession of incremental backups: it restores the entire state of
4824 the file system to that which obtained when the backup was made. If
4825 @value{op-incremental} isn't specified, the file system will probably
4826 fill up with files that shouldn't exist any more.
4827
4828 @value{op-incremental} in conjunction with @value{op-list} causes
4829 @command{tar} to print, for each directory in the archive, the list of
4830 files in that directory at the time the archive was created. This
4831 information is put out in a format that is not easy for humans to
4832 read, but which is unambiguous for a program: each file name is
4833 preceded by either a @samp{Y} if the file is present in the archive,
4834 an @samp{N} if the file is not included in the archive, or a @samp{D}
4835 if the file is a directory (and is included in the archive). Each
4836 file name is terminated by a null character. The last file is followed
4837 by an additional null and a newline to indicate the end of the data.
4838
4839 @value{op-listed-incremental} acts like @value{op-incremental}, but when
4840 used in conjunction with @value{op-create} will also cause @command{tar}
4841 to use the file @var{snapshot-file}, which contains information about
4842 the state of the file system at the time of the last backup, to decide
4843 which files to include in the archive being created. That file will
4844 then be updated by @command{tar}. If the file @var{file} does not exist
4845 when this option is specified, @command{tar} will create it, and include
4846 all appropriate files in the archive.
4847
4848 The file @var{file}, which is archive independent, contains the date
4849 it was last modified and a list of devices, inode numbers and
4850 directory names. @command{tar} will archive files with newer mod dates
4851 or inode change times, and directories with an unchanged inode number
4852 and device but a changed directory name. The file is updated after
4853 the files to be archived are determined, but before the new archive is
4854 actually created.
4855
4856 Incremental dumps depend crucially on time stamps, so the results are
4857 unreliable if you modify a file's time stamps during dumping (e.g.@:
4858 with the @samp{--atime-preserve} option), or if you set the clock
4859 backwards.
4860
4861 Despite it should be obvious that a device has a non-volatile value, NFS
4862 devices have non-dependable values when an automounter gets in the picture.
4863 This led to a great deal of spurious redumping in incremental dumps,
4864 so it is somewhat useless to compare two NFS devices numbers over time.
4865 So @command{tar} now considers all NFS devices as being equal when it comes
4866 to comparing directories; this is fairly gross, but there does not seem
4867 to be a better way to go.
4868
4869 @FIXME{this section needs to be written}
4870
4871 @node Backup Levels
4872 @section Levels of Backups
4873 @UNREVISED
4874
4875 An archive containing all the files in the file system is called a
4876 @dfn{full backup} or @dfn{full dump}. You could insure your data by
4877 creating a full dump every day. This strategy, however, would waste a
4878 substantial amount of archive media and user time, as unchanged files
4879 are daily re-archived.
4880
4881 It is more efficient to do a full dump only occasionally. To back up
4882 files between full dumps, you can a incremental dump. A @dfn{level
4883 one} dump archives all the files that have changed since the last full
4884 dump.
4885
4886 A typical dump strategy would be to perform a full dump once a week,
4887 and a level one dump once a day. This means some versions of files
4888 will in fact be archived more than once, but this dump strategy makes
4889 it possible to restore a file system to within one day of accuracy by
4890 only extracting two archives---the last weekly (full) dump and the
4891 last daily (level one) dump. The only information lost would be in
4892 files changed or created since the last daily backup. (Doing dumps
4893 more than once a day is usually not worth the trouble).
4894
4895 @sc{gnu} @command{tar} comes with scripts you can use to do full and level-one
4896 dumps. Using scripts (shell programs) to perform backups and
4897 restoration is a convenient and reliable alternative to typing out
4898 file name lists and @command{tar} commands by hand.
4899
4900 Before you use these scripts, you need to edit the file
4901 @file{backup-specs}, which specifies parameters used by the backup
4902 scripts and by the restore script. @FIXME{There is no such restore
4903 script!}@FIXME-xref{Script Syntax}Once the backup parameters
4904 are set, you can perform backups or restoration by running the
4905 appropriate script.
4906
4907 The name of the restore script is @code{restore}. @FIXME{There is
4908 no such restore script!}The names of the level one and full backup
4909 scripts are, respectively, @code{level-1} and @code{level-0}.
4910 The @code{level-0} script also exists under the name @code{weekly}, and
4911 the @code{level-1} under the name @code{daily}---these additional names
4912 can be changed according to your backup schedule. @FIXME-xref{Scripted
4913 Restoration, for more information on running the restoration script.}
4914 @FIXME-xref{Scripted Backups, for more information on running the
4915 backup scripts.}
4916
4917 @emph{Please Note:} The backup scripts and the restoration scripts are
4918 designed to be used together. While it is possible to restore files by
4919 hand from an archive which was created using a backup script, and to create
4920 an archive by hand which could then be extracted using the restore script,
4921 it is easier to use the scripts.@FIXME{There is no such restore script!}
4922 @value{xref-incremental}, and @value{xref-listed-incremental},
4923 before making such an attempt.
4924
4925 @FIXME{shorten node names}
4926
4927 @node Backup Parameters
4928 @section Setting Parameters for Backups and Restoration
4929 @UNREVISED
4930
4931 The file @file{backup-specs} specifies backup parameters for the
4932 backup and restoration scripts provided with @command{tar}. You must
4933 edit @file{backup-specs} to fit your system configuration and schedule
4934 before using these scripts.
4935
4936 @FIXME{This about backup scripts needs to be written: BS is a shell
4937 script .... thus ... @file{backup-specs} is in shell script syntax.}
4938
4939 @FIXME-xref{Script Syntax, for an explanation of this syntax.}
4940
4941 @FIXME{Whats a parameter .... looked at by the backup scripts
4942 ... which will be expecting to find ... now syntax ... value is linked
4943 to lame ... @file{backup-specs} specifies the following parameters:}
4944
4945 @table @samp
4946 @item ADMINISTRATOR
4947 The user name of the backup administrator.
4948
4949 @item BACKUP_HOUR
4950 The hour at which the backups are done. This can be a number from 0
4951 to 23, or the string @samp{now}.
4952
4953 @item TAPE_FILE
4954 The device @command{tar} writes the archive to. This device should be
4955 attached to the host on which the dump scripts are run.
4956
4957 @FIXME{examples for all ...}
4958
4959 @item TAPE_STATUS
4960 The command to use to obtain the status of the archive device,
4961 including error count. On some tape drives there may not be such a
4962 command; in that case, simply use @samp{TAPE_STATUS=false}.
4963
4964 @item BLOCKING
4965 The blocking factor @command{tar} will use when writing the dump archive.
4966 @value{xref-blocking-factor}.
4967
4968 @item BACKUP_DIRS
4969 A list of file systems to be dumped. You can include any directory
4970 name in the list---subdirectories on that file system will be
4971 included, regardless of how they may look to other networked machines.
4972 Subdirectories on other file systems will be ignored.
4973
4974 The host name specifies which host to run @command{tar} on, and should
4975 normally be the host that actually contains the file system. However,
4976 the host machine must have @sc{gnu} @command{tar} installed, and must be able
4977 to access the directory containing the backup scripts and their
4978 support files using the same file name that is used on the machine
4979 where the scripts are run (ie. what @command{pwd} will print when in that
4980 directory on that machine). If the host that contains the file system
4981 does not have this capability, you can specify another host as long as
4982 it can access the file system through NFS.
4983
4984 @item BACKUP_FILES
4985 A list of individual files to be dumped. These should be accessible
4986 from the machine on which the backup script is run.
4987
4988 @FIXME{Same file name, be specific. Through NFS ...}
4989
4990 @end table
4991
4992 @menu
4993 * backup-specs example:: An Example Text of @file{Backup-specs}
4994 * Script Syntax:: Syntax for @file{Backup-specs}
4995 @end menu
4996
4997 @node backup-specs example
4998 @subsection An Example Text of @file{Backup-specs}
4999 @UNREVISED
5000
5001 The following is the text of @file{backup-specs} as it appears at FSF:
5002
5003 @example
5004 # site-specific parameters for file system backup.
5005
5006 ADMINISTRATOR=friedman
5007 BACKUP_HOUR=1
5008 TAPE_FILE=/dev/nrsmt0
5009 TAPE_STATUS="mts -t $TAPE_FILE"
5010 BLOCKING=124
5011 BACKUP_DIRS="
5012 albert:/fs/fsf
5013 apple-gunkies:/gd
5014 albert:/fs/gd2
5015 albert:/fs/gp
5016 geech:/usr/jla
5017 churchy:/usr/roland
5018 albert:/
5019 albert:/usr
5020 apple-gunkies:/
5021 apple-gunkies:/usr
5022 gnu:/hack
5023 gnu:/u
5024 apple-gunkies:/com/mailer/gnu
5025 apple-gunkies:/com/archive/gnu"
5026
5027 BACKUP_FILES="/com/mailer/aliases /com/mailer/league*[a-z]"
5028
5029 @end example
5030
5031 @node Script Syntax
5032 @subsection Syntax for @file{Backup-specs}
5033 @UNREVISED
5034
5035 @file{backup-specs} is in shell script syntax. The following
5036 conventions should be considered when editing the script:
5037 @FIXME{"conventions?"}
5038
5039 A quoted string is considered to be contiguous, even if it is on more
5040 than one line. Therefore, you cannot include commented-out lines
5041 within a multi-line quoted string. BACKUP_FILES and BACKUP_DIRS are
5042 the two most likely parameters to be multi-line.
5043
5044 A quoted string typically cannot contain wildcards. In
5045 @file{backup-specs}, however, the parameters BACKUP_DIRS and
5046 BACKUP_FILES can contain wildcards.
5047
5048 @node Scripted Backups
5049 @section Using the Backup Scripts
5050 @UNREVISED
5051
5052 The syntax for running a backup script is:
5053
5054 @example
5055 @file{script-name} [@var{time-to-be-run}]
5056 @end example
5057
5058 where @var{time-to-be-run} can be a specific system time, or can be
5059 @kbd{now}. If you do not specify a time, the script runs at the time
5060 specified in @file{backup-specs}. @FIXME-pxref{Script Syntax}
5061
5062 You should start a script with a tape or disk mounted. Once you
5063 start a script, it prompts you for new tapes or disks as it
5064 needs them. Media volumes don't have to correspond to archive
5065 files---a multi-volume archive can be started in the middle of a
5066 tape that already contains the end of another multi-volume archive.
5067 The @code{restore} script prompts for media by its archive volume,
5068 so to avoid an error message you should keep track of which tape
5069 (or disk) contains which volume of the archive. @FIXME{There is
5070 no such restore script!} @FIXME-xref{Scripted Restoration}
5071 @FIXME{Have file names changed?}
5072
5073 The backup scripts write two files on the file system. The first is a
5074 record file in @file{/etc/tar-backup/}, which is used by the scripts
5075 to store and retrieve information about which files were dumped. This
5076 file is not meant to be read by humans, and should not be deleted by
5077 them. @FIXME-xref{incremental and listed-incremental, for a more
5078 detailed explanation of this file.}
5079
5080 The second file is a log file containing the names of the file systems
5081 and files dumped, what time the backup was made, and any error
5082 messages that were generated, as well as how much space was left in
5083 the media volume after the last volume of the archive was written.
5084 You should check this log file after every backup. The file name is
5085 @file{log-@var{mmm-ddd-yyyy}-level-1} or
5086 @file{log-@var{mmm-ddd-yyyy}-full}.
5087
5088 The script also prints the name of each system being dumped to the
5089 standard output.
5090
5091 @node Scripted Restoration
5092 @section Using the Restore Script
5093 @UNREVISED
5094
5095 @ifset PUBLISH
5096
5097 The @command{tar} distribution does not provide restoring scripts.
5098
5099 @end ifset
5100
5101 @ifclear PUBLISH
5102
5103 @quotation
5104 @strong{Warning:} The @sc{gnu} @command{tar} distribution does @emph{not}
5105 provide any such @code{restore} script yet. This section is only
5106 listed here for documentation maintenance purposes. In any case,
5107 all contents is subject to change as things develop.
5108 @end quotation
5109
5110 @FIXME{A section on non-scripted restore may be a good idea.}
5111
5112 To restore files that were archived using a scripted backup, use the
5113 @code{restore} script. The syntax for the script is:
5114
5115 where ***** are the file systems to restore from, and
5116 ***** is a regular expression which specifies which files to
5117 restore. If you specify --all, the script restores all the files
5118 in the file system.
5119
5120 You should start the restore script with the media containing the
5121 first volume of the archive mounted. The script will prompt for other
5122 volumes as they are needed. If the archive is on tape, you don't need
5123 to rewind the tape to to its beginning---if the tape head is
5124 positioned past the beginning of the archive, the script will rewind
5125 the tape as needed. @FIXME-xref{Media, for a discussion of tape
5126 positioning.}
5127
5128 If you specify @samp{--all} as the @var{files} argument, the
5129 @code{restore} script extracts all the files in the archived file
5130 system into the active file system.
5131
5132 @quotation
5133 @strong{Warning:} The script will delete files from the active file
5134 system if they were not in the file system when the archive was made.
5135 @end quotation
5136
5137 @value{xref-incremental}, and @value{ref-listed-incremental},
5138 for an explanation of how the script makes that determination.
5139
5140 @FIXME{this may be an option, not a given}
5141
5142 @end ifclear
5143
5144 @node Choosing
5145 @chapter Choosing Files and Names for @command{tar}
5146 @UNREVISED
5147
5148 @FIXME{Melissa (still) Doesn't Really Like This ``Intro'' Paragraph!!!}
5149
5150 Certain options to @command{tar} enable you to specify a name for your
5151 archive. Other options let you decide which files to include or exclude
5152 from the archive, based on when or whether files were modified, whether
5153 the file names do or don't match specified patterns, or whether files
5154 are in specified directories.
5155
5156 @menu
5157 * file:: Choosing the Archive's Name
5158 * Selecting Archive Members::
5159 * files:: Reading Names from a File
5160 * exclude:: Excluding Some Files
5161 * Wildcards::
5162 * after:: Operating Only on New Files
5163 * recurse:: Descending into Directories
5164 * one:: Crossing Filesystem Boundaries
5165 @end menu
5166
5167 @node file
5168 @section Choosing and Naming Archive Files
5169 @cindex Naming an archive
5170 @cindex Archive Name
5171 @cindex Directing output
5172 @cindex Choosing an archive file
5173 @cindex Where is the archive?
5174 @UNREVISED
5175
5176 @FIXME{should the title of this section actually be, "naming an
5177 archive"?}
5178
5179 By default, @command{tar} uses an archive file name that was compiled when
5180 it was built on the system; usually this name refers to some physical
5181 tape drive on the machine. However, the person who installed @command{tar}
5182 on the system may not set the default to a meaningful value as far as
5183 most users are concerned. As a result, you will usually want to tell
5184 @command{tar} where to find (or create) the archive. The @value{op-file}
5185 option allows you to either specify or name a file to use as the archive
5186 instead of the default archive file location.
5187
5188 @table @kbd
5189 @item --file=@var{archive-name}
5190 @itemx -f @var{archive-name}
5191 Name the archive to create or operate on. Use in conjunction with
5192 any operation.
5193 @end table
5194
5195 For example, in this @command{tar} command,
5196
5197 @example
5198 $ @kbd{tar -cvf collection.tar blues folk jazz}
5199 @end example
5200
5201 @noindent
5202 @file{collection.tar} is the name of the archive. It must directly
5203 follow the @samp{-f} option, since whatever directly follows @samp{-f}
5204 @emph{will} end up naming the archive. If you neglect to specify an
5205 archive name, you may end up overwriting a file in the working directory
5206 with the archive you create since @command{tar} will use this file's name
5207 for the archive name.
5208
5209 An archive can be saved as a file in the file system, sent through a
5210 pipe or over a network, or written to an I/O device such as a tape,
5211 floppy disk, or CD write drive.
5212
5213 @cindex Writing new archives
5214 @cindex Archive creation
5215 If you do not name the archive, @command{tar} uses the value of the
5216 environment variable @env{TAPE} as the file name for the archive. If
5217 that is not available, @command{tar} uses a default, compiled-in archive
5218 name, usually that for tape unit zero (ie. @file{/dev/tu00}).
5219 @command{tar} always needs an archive name.
5220
5221 If you use @file{-} as an @var{archive-name}, @command{tar} reads the
5222 archive from standard input (when listing or extracting files), or
5223 writes it to standard output (when creating an archive). If you use
5224 @file{-} as an @var{archive-name} when modifying an archive,
5225 @command{tar} reads the original archive from its standard input and
5226 writes the entire new archive to its standard output.
5227
5228 @FIXME{might want a different example here; this is already used in
5229 "notable tar usages".}
5230
5231 @example
5232 $ @kbd{cd sourcedir; tar -cf - . | (cd targetdir; tar -xf -)}
5233 @end example
5234
5235 @FIXME{help!}
5236
5237 @cindex Standard input and output
5238 @cindex tar to standard input and output
5239 To specify an archive file on a device attached to a remote machine,
5240 use the following:
5241
5242 @example
5243 @kbd{--file=@var{hostname}:/@var{dev}/@var{file name}}
5244 @end example
5245
5246 @noindent
5247 @command{tar} will complete the remote connection, if possible, and
5248 prompt you for a username and password. If you use
5249 @samp{--file=@@@var{hostname}:/@var{dev}/@var{file name}}, @command{tar}
5250 will complete the remote connection, if possible, using your username
5251 as the username on the remote machine.
5252
5253 If the archive file name includes a colon (@samp{:}), then it is assumed
5254 to be a file on another machine. If the archive file is
5255 @samp{@var{user}@@@var{host}:@var{file}}, then @var{file} is used on the
5256 host @var{host}. The remote host is accessed using the @command{rsh}
5257 program, with a username of @var{user}. If the username is omitted
5258 (along with the @samp{@@} sign), then your user name will be used.
5259 (This is the normal @command{rsh} behavior.) It is necessary for the
5260 remote machine, in addition to permitting your @command{rsh} access, to
5261 have the @file{/usr/ucb/rmt} program installed. If you need to use a
5262 file whose name includes a colon, then the remote tape drive behavior
5263 can be inhibited by using the @value{op-force-local} option.
5264
5265 @FIXME{i know we went over this yesterday, but bob (and now i do again,
5266 too) thinks it's out of the middle of nowhere. it doesn't seem to tie
5267 into what came before it well enough <<i moved it now, is it better
5268 here?>>. bob also comments that if Amanda isn't free software, we
5269 shouldn't mention it..}
5270
5271 When the archive is being created to @file{/dev/null}, @sc{gnu} @command{tar}
5272 tries to minimize input and output operations. The Amanda backup
5273 system, when used with @sc{gnu} @command{tar}, has an initial sizing pass which
5274 uses this feature.
5275
5276 @node Selecting Archive Members
5277 @section Selecting Archive Members
5278 @cindex Specifying files to act on
5279 @cindex Specifying archive members
5280
5281 @dfn{File Name arguments} specify which files in the file system
5282 @command{tar} operates on, when creating or adding to an archive, or which
5283 archive members @command{tar} operates on, when reading or deleting from
5284 an archive. @xref{Operations}.
5285
5286 To specify file names, you can include them as the last arguments on
5287 the command line, as follows:
5288 @smallexample
5289 @kbd{tar} @var{operation} [@var{option1} @var{option2} @dots{}] [@var{file name-1} @var{file name-2} @dots{}]
5290 @end smallexample
5291
5292 If you specify a directory name as a file name argument, all the files
5293 in that directory are operated on by @command{tar}.
5294
5295 If you do not specify files when @command{tar} is invoked with
5296 @value{op-create}, @command{tar} operates on all the non-directory files in
5297 the working directory. If you specify either @value{op-list} or
5298 @value{op-extract}, @command{tar} operates on all the archive members in the
5299 archive. If you specify any operation other than one of these three,
5300 @command{tar} does nothing.
5301
5302 By default, @command{tar} takes file names from the command line. However,
5303 there are other ways to specify file or member names, or to modify the
5304 manner in which @command{tar} selects the files or members upon which to
5305 operate. @FIXME{add xref here}In general, these methods work both for
5306 specifying the names of files and archive members.
5307
5308 @node files
5309 @section Reading Names from a File
5310 @UNREVISED
5311
5312 @cindex Reading file names from a file
5313 @cindex Lists of file names
5314 @cindex File Name arguments, alternatives
5315 Instead of giving the names of files or archive members on the command
5316 line, you can put the names into a file, and then use the
5317 @value{op-files-from} option to @command{tar}. Give the name of the file
5318 which contains the list of files to include as the argument to
5319 @samp{--files-from}. In the list, the file names should be separated by
5320 newlines. You will frequently use this option when you have generated
5321 the list of files to archive with the @command{find} utility.
5322
5323 @table @kbd
5324 @item --files-from=@var{file name}
5325 @itemx -T @var{file name}
5326 Get names to extract or create from file @var{file name}.
5327 @end table
5328
5329 If you give a single dash as a file name for @samp{--files-from}, (i.e.,
5330 you specify either @samp{--files-from=-} or @samp{-T -}), then the file
5331 names are read from standard input.
5332
5333 Unless you are running @command{tar} with @samp{--create}, you can not use
5334 both @samp{--files-from=-} and @samp{--file=-} (@samp{-f -}) in the same
5335 command.
5336
5337 @FIXME{add bob's example, from his message on 2-10-97}
5338
5339 The following example shows how to use @command{find} to generate a list of
5340 files smaller than 400K in length and put that list into a file
5341 called @file{small-files}. You can then use the @samp{-T} option to
5342 @command{tar} to specify the files from that file, @file{small-files}, to
5343 create the archive @file{little.tgz}. (The @samp{-z} option to
5344 @command{tar} compresses the archive with @command{gzip}; @pxref{gzip} for
5345 more information.)
5346
5347 @example
5348 $ @kbd{find . -size -400 -print > small-files}
5349 $ @kbd{tar -c -v -z -T small-files -f little.tgz}
5350 @end example
5351
5352 @noindent
5353 @FIXME{say more here to conclude the example/section?}
5354
5355 @menu
5356 * nul::
5357 @end menu
5358
5359 @node nul
5360 @subsection @kbd{NUL} Terminated File Names
5361
5362 @cindex File names, terminated by @kbd{NUL}
5363 @cindex @kbd{NUL} terminated file names
5364 The @value{op-null} option causes @value{op-files-from} to read file
5365 names terminated by a @code{NUL} instead of a newline, so files whose
5366 names contain newlines can be archived using @samp{--files-from}.
5367
5368 @table @kbd
5369 @item --null
5370 Only consider @kbd{NUL} terminated file names, instead of files that
5371 terminate in a newline.
5372 @end table
5373
5374 The @samp{--null} option is just like the one in @sc{gnu} @command{xargs} and
5375 @command{cpio}, and is useful with the @samp{-print0} predicate of @sc{gnu}
5376 @command{find}. In @command{tar}, @samp{--null} also causes
5377 @value{op-directory} options to be treated as file names to archive, in
5378 case there are any files out there called @file{-C}.
5379
5380 This example shows how to use @command{find} to generate a list of files
5381 larger than 800K in length and put that list into a file called
5382 @file{long-files}. The @samp{-print0} option to @command{find} just just
5383 like @samp{-print}, except that it separates files with a @kbd{NUL}
5384 rather than with a newline. You can then run @command{tar} with both the
5385 @samp{--null} and @samp{-T} options to specify that @command{tar} get the
5386 files from that file, @file{long-files}, to create the archive
5387 @file{big.tgz}. The @samp{--null} option to @command{tar} will cause
5388 @command{tar} to recognize the @kbd{NUL} separator between files.
5389
5390 @example
5391 $ @kbd{find . -size +800 -print0 > long-files}
5392 $ @kbd{tar -c -v --null --files-from=long-files --file=big.tar}
5393 @end example
5394
5395 @FIXME{say anything else here to conclude the section?}
5396
5397 @node exclude
5398 @section Excluding Some Files
5399 @cindex File names, excluding files by
5400 @cindex Excluding files by name and pattern
5401 @cindex Excluding files by file system
5402 @UNREVISED
5403
5404 To avoid operating on files whose names match a particular pattern,
5405 use the @value{op-exclude} or @value{op-exclude-from} options.
5406
5407 @table @kbd
5408 @item --exclude=@var{pattern}
5409 Causes @command{tar} to ignore files that match the @var{pattern}.
5410 @end table
5411
5412 @findex exclude
5413 The @value{op-exclude} option prevents any file or member whose name
5414 matches the shell wildcard (@var{pattern}) from being operated on.
5415 For example, to create an archive with all the contents of the directory
5416 @file{src} except for files whose names end in @file{.o}, use the
5417 command @samp{tar -cf src.tar --exclude='*.o' src}.
5418
5419 You may give multiple @samp{--exclude} options.
5420
5421 @table @kbd
5422 @item --exclude-from=@var{file}
5423 @itemx -X @var{file}
5424 Causes @command{tar} to ignore files that match the patterns listed in
5425 @var{file}.
5426 @end table
5427
5428 @findex exclude-from
5429 Use the @samp{--exclude-from=@var{file-of-patterns}} option to read a
5430 list of patterns, one per line, from @var{file}; @command{tar} will
5431 ignore files matching those patterns. Thus if @command{tar} is
5432 called as @w{@samp{tar -c -X foo .}} and the file @file{foo} contains a
5433 single line @file{*.o}, no files whose names end in @file{.o} will be
5434 added to the archive.
5435
5436 @FIXME{do the exclude options files need to have stuff separated by
5437 newlines the same as the files-from option does?}
5438
5439 @menu
5440 * controlling pattern-patching with exclude::
5441 * problems with exclude::
5442 @end menu
5443
5444 @node controlling pattern-patching with exclude
5445 @unnumberedsubsec Controlling Pattern-Matching with the @code{exclude} Options
5446
5447 Normally, a pattern matches a name if an initial subsequence of the
5448 name's components matches the pattern, where @samp{*}, @samp{?}, and
5449 @samp{[...]} are the usual shell wildcards, @samp{\} escapes wildcards,
5450 and wildcards can match @samp{/}.
5451
5452 Other than optionally stripping leading @samp{/} from names
5453 (@pxref{absolute}), patterns and names are used as-is. For
5454 example, trailing @samp{/} is not trimmed from a user-specified name
5455 before deciding whether to exclude it.
5456
5457 However, this matching procedure can be altered by the options listed
5458 below. These options accumulate. For example:
5459
5460 @example
5461 --ignore-case --exclude='makefile' --no-ignore-case ---exclude='readme'
5462 @end example
5463
5464 ignores case when excluding @samp{makefile}, but not when excluding
5465 @samp{readme}.
5466
5467 @table @option
5468 @item --anchored
5469 @itemx --no-anchored
5470 If anchored (the default), a pattern must match an initial subsequence
5471 of the name's components. Otherwise, the pattern can match any subsequence.
5472
5473 @item --ignore-case
5474 @itemx --no-ignore-case
5475 When ignoring case, upper-case patterns match lower-case names and vice versa.
5476 When not ignoring case (the default), matching is case-sensitive.
5477
5478 @item --wildcards
5479 @itemx --no-wildcards
5480 When using wildcards (the default), @samp{*}, @samp{?}, and @samp{[...]}
5481 are the usual shell wildcards, and @samp{\} escapes wildcards.
5482 Otherwise, none of these characters are special, and patterns must match
5483 names literally.
5484
5485 @item --wildcards-match-slash
5486 @itemx --no-wildcards-match-slash
5487 When wildcards match slash (the default), a wildcard like @samp{*} in
5488 the pattern can match a @samp{/} in the name. Otherwise, @samp{/} is
5489 matched only by @samp{/}.
5490
5491 @end table
5492
5493 The @option{--recursion} and @option{--no-recursion} options
5494 (@pxref{recurse}) also affect how exclude patterns are interpreted. If
5495 recursion is in effect, a pattern excludes a name if it matches any of
5496 the name's parent directories.
5497
5498 @node problems with exclude
5499 @unnumberedsubsec Problems with Using the @code{exclude} Options
5500
5501 Some users find @samp{exclude} options confusing. Here are some common
5502 pitfalls:
5503
5504 @itemize @bullet
5505 @item
5506 The main operating mode of @command{tar} does not act on a path name
5507 explicitly listed on the command line if one of its file name
5508 components is excluded. In the example above, if
5509 you create an archive and exclude files that end with @samp{*.o}, but
5510 explicitly name the file @samp{dir.o/foo} after all the options have been
5511 listed, @samp{dir.o/foo} will be excluded from the archive.
5512
5513 @item
5514 You can sometimes confuse the meanings of @value{op-exclude} and
5515 @value{op-exclude-from}. Be careful: use @value{op-exclude} when files
5516 to be excluded are given as a pattern on the command line. Use
5517 @samp{--exclude-from=@var{file-of-patterns}} to introduce the name of a
5518 file which contains a list of patterns, one per line; each of these
5519 patterns can exclude zero, one, or many files.
5520
5521 @item
5522 When you use @value{op-exclude}, be sure to quote the @var{pattern}
5523 parameter, so @sc{gnu} @command{tar} sees wildcard characters like @samp{*}.
5524 If you do not do this, the shell might expand the @samp{*} itself
5525 using files at hand, so @command{tar} might receive a list of files
5526 instead of one pattern, or none at all, making the command somewhat
5527 illegal. This might not correspond to what you want.
5528
5529 For example, write:
5530
5531 @example
5532 $ @kbd{tar -c -f @var{archive.tar} --exclude '*.o' @var{directory}}
5533 @end example
5534
5535 @noindent
5536 rather than:
5537
5538 @example
5539 $ @kbd{tar -c -f @var{archive.tar} --exclude *.o @var{directory}}
5540 @end example
5541
5542 @item
5543 You must use use shell syntax, or globbing, rather than @code{regexp}
5544 syntax, when using exclude options in @command{tar}. If you try to use
5545 @code{regexp} syntax to describe files to be excluded, your command
5546 might fail.
5547
5548 @item
5549 In earlier versions of @command{tar}, what is now the
5550 @samp{--exclude-from=@var{file-of-patterns}} option was called
5551 @samp{--exclude=@var{pattern}} instead. Now,
5552 @samp{--exclude=@var{pattern}} applies to patterns listed on the command
5553 line and @samp{--exclude-from=@var{file-of-patterns}} applies to
5554 patterns listed in a file.
5555
5556 @end itemize
5557
5558 @node Wildcards
5559 @section Wildcards Patterns and Matching
5560
5561 @dfn{Globbing} is the operation by which @dfn{wildcard} characters,
5562 @samp{*} or @samp{?} for example, are replaced and expanded into all
5563 existing files matching the given pattern. However, @command{tar} often
5564 uses wildcard patterns for matching (or globbing) archive members instead
5565 of actual files in the filesystem. Wildcard patterns are also used for
5566 verifying volume labels of @command{tar} archives. This section has the
5567 purpose of explaining wildcard syntax for @command{tar}.
5568
5569 @FIXME{the next few paragraphs need work.}
5570
5571 A @var{pattern} should be written according to shell syntax, using wildcard
5572 characters to effect globbing. Most characters in the pattern stand
5573 for themselves in the matched string, and case is significant: @samp{a}
5574 will match only @samp{a}, and not @samp{A}. The character @samp{?} in the
5575 pattern matches any single character in the matched string. The character
5576 @samp{*} in the pattern matches zero, one, or more single characters in
5577 the matched string. The character @samp{\} says to take the following
5578 character of the pattern @emph{literally}; it is useful when one needs to
5579 match the @samp{?}, @samp{*}, @samp{[} or @samp{\} characters, themselves.
5580
5581 The character @samp{[}, up to the matching @samp{]}, introduces a character
5582 class. A @dfn{character class} is a list of acceptable characters
5583 for the next single character of the matched string. For example,
5584 @samp{[abcde]} would match any of the first five letters of the alphabet.
5585 Note that within a character class, all of the ``special characters''
5586 listed above other than @samp{\} lose their special meaning; for example,
5587 @samp{[-\\[*?]]} would match any of the characters, @samp{-}, @samp{\},
5588 @samp{[}, @samp{*}, @samp{?}, or @samp{]}. (Due to parsing constraints,
5589 the characters @samp{-} and @samp{]} must either come @emph{first} or
5590 @emph{last} in a character class.)
5591
5592 @cindex Excluding characters from a character class
5593 @cindex Character class, excluding characters from
5594 If the first character of the class after the opening @samp{[}
5595 is @samp{!} or @samp{^}, then the meaning of the class is reversed.
5596 Rather than listing character to match, it lists those characters which
5597 are @emph{forbidden} as the next single character of the matched string.
5598
5599 Other characters of the class stand for themselves. The special
5600 construction @samp{[@var{a}-@var{e}]}, using an hyphen between two
5601 letters, is meant to represent all characters between @var{a} and
5602 @var{e}, inclusive.
5603
5604 @FIXME{need to add a sentence or so here to make this clear for those
5605 who don't have dan around.}
5606
5607 Periods (@samp{.}) or forward slashes (@samp{/}) are not considered
5608 special for wildcard matches. However, if a pattern completely matches
5609 a directory prefix of a matched string, then it matches the full matched
5610 string: excluding a directory also excludes all the files beneath it.
5611
5612 There are some discussions floating in the air and asking for modifications
5613 in the way @sc{gnu} @command{tar} accomplishes wildcard matches. We perceive
5614 any change of semantics in this area as a delicate thing to impose on
5615 @sc{gnu} @command{tar} users. On the other hand, the @sc{gnu} project should be
5616 progressive enough to correct any ill design: compatibility at all price
5617 is not always a good attitude. In conclusion, it is @emph{possible}
5618 that slight amendments be later brought to the previous description.
5619 Your opinions on the matter are welcome.
5620
5621 @node after
5622 @section Operating Only on New Files
5623 @cindex Excluding file by age
5624 @cindex Modification time, excluding files by
5625 @cindex Age, excluding files by
5626 @UNREVISED
5627
5628 The @value{op-after-date} option causes @command{tar} to only work on files
5629 whose modification or inode-changed times are newer than the @var{date}
5630 given. If @var{date} starts with @samp{/} or @samp{.}, it is taken to
5631 be a file name; the last-modified time of that file is used as the date.
5632 If you use this option when creating or appending to an archive,
5633 the archive will only include new files. If you use @samp{--after-date}
5634 when extracting an archive, @command{tar} will only extract files newer
5635 than the @var{date} you specify.
5636
5637 If you only want @command{tar} to make the date comparison based on
5638 modification of the actual contents of the file (rather than inode
5639 changes), then use the @value{op-newer-mtime} option.
5640
5641 You may use these options with any operation. Note that these options
5642 differ from the @value{op-update} operation in that they allow you to
5643 specify a particular date against which @command{tar} can compare when
5644 deciding whether or not to archive the files.
5645
5646 @table @kbd
5647 @item --after-date=@var{date}
5648 @itemx --newer=@var{date}
5649 @itemx -N @var{date}
5650 Only store files newer than @var{date}.
5651
5652 Acts on files only if their modification or inode-changed times are
5653 later than @var{date}. Use in conjunction with any operation.
5654
5655 If @var{date} starts with @samp{/} or @samp{.}, it is taken to be a file
5656 name; the last-modified time of that file is used as the date.
5657
5658 @item --newer-mtime=@var{date}
5659 Acts like @value{op-after-date}, but only looks at modification times.
5660 @end table
5661
5662 These options limit @command{tar} to only operating on files which have
5663 been modified after the date specified. A file is considered to have
5664 changed if the contents have been modified, or if the owner,
5665 permissions, and so forth, have been changed. (For more information on
5666 how to specify a date, see @ref{Date input formats}; remember that the
5667 entire date argument must be quoted if it contains any spaces.)
5668
5669 Gurus would say that @value{op-after-date} tests both the @code{mtime}
5670 (time the contents of the file were last modified) and @code{ctime}
5671 (time the file's status was last changed: owner, permissions, etc)
5672 fields, while @value{op-newer-mtime} tests only @code{mtime} field.
5673
5674 To be precise, @value{op-after-date} checks @emph{both} @code{mtime} and
5675 @code{ctime} and processes the file if either one is more recent than
5676 @var{date}, while @value{op-newer-mtime} only checks @code{mtime} and
5677 disregards @code{ctime}. Neither uses @code{atime} (the last time the
5678 contents of the file were looked at).
5679
5680 Date specifiers can have embedded spaces. Because of this, you may need
5681 to quote date arguments to keep the shell from parsing them as separate
5682 arguments.
5683
5684 @FIXME{Need example of --newer-mtime with quoted argument.}
5685
5686 @quotation
5687 @strong{Please Note:} @value{op-after-date} and @value{op-newer-mtime}
5688 should not be used for incremental backups. Some files (such as those
5689 in renamed directories) are not selected properly by these options.
5690 @xref{incremental and listed-incremental}.
5691 @end quotation
5692
5693 @noindent
5694 @FIXME{which tells -- need to fill this in!}
5695
5696 @node recurse
5697 @section Descending into Directories
5698 @cindex Avoiding recursion in directories
5699 @cindex Descending directories, avoiding
5700 @cindex Directories, avoiding recursion
5701 @cindex Recursion in directories, avoiding
5702 @UNREVISED
5703
5704 @FIXME{arrggh! this is still somewhat confusing to me. :-< }
5705
5706 @FIXME{show dan bob's comments, from 2-10-97}
5707
5708 Usually, @command{tar} will recursively explore all directories (either
5709 those given on the command line or through the @value{op-files-from}
5710 option) for the various files they contain. However, you may not always
5711 want @command{tar} to act this way.
5712
5713 The @value{op-no-recursion} option inhibits @command{tar}'s recursive descent
5714 into specified directories. If you specify @samp{--no-recursion}, you can
5715 use the @command{find} utility for hunting through levels of directories to
5716 construct a list of file names which you could then pass to @command{tar}.
5717 @command{find} allows you to be more selective when choosing which files to
5718 archive; see @ref{files} for more information on using @command{find} with
5719 @command{tar}, or look.
5720
5721 @table @kbd
5722 @item --no-recursion
5723 Prevents @command{tar} from recursively descending directories.
5724
5725 @item --recursion
5726 Requires @command{tar} to recursively descend directories.
5727 This is the default.
5728 @end table
5729
5730 When you use @samp{--no-recursion}, @sc{gnu} @command{tar} grabs directory entries
5731 themselves, but does not descend on them recursively. Many people use
5732 @command{find} for locating files they want to back up, and since
5733 @command{tar} @emph{usually} recursively descends on directories, they have
5734 to use the @samp{@w{! -d}} option to @command{find} @FIXME{needs more
5735 explanation or a cite to another info file}as they usually do not want
5736 all the files in a directory. They then use the @value{op-files-from}
5737 option to archive the files located via @command{find}.
5738
5739 The problem when restoring files archived in this manner is that the
5740 directories themselves are not in the archive; so the
5741 @value{op-same-permissions} option does not affect them---while users
5742 might really like it to. Specifying @value{op-no-recursion} is a way to
5743 tell @command{tar} to grab only the directory entries given to it, adding
5744 no new files on its own.
5745
5746 The @value{op-no-recursion} option also applies when extracting: it
5747 causes @command{tar} to extract only the matched directory entries, not
5748 the files under those directories.
5749
5750 The @value{op-no-recursion} option also affects how exclude patterns
5751 are interpreted (@pxref{controlling pattern-patching with exclude}).
5752
5753 @FIXME{example here}
5754
5755 @node one
5756 @section Crossing Filesystem Boundaries
5757 @cindex File system boundaries, not crossing
5758 @UNREVISED
5759
5760 @command{tar} will normally automatically cross file system boundaries in
5761 order to archive files which are part of a directory tree. You can
5762 change this behavior by running @command{tar} and specifying
5763 @value{op-one-file-system}. This option only affects files that are
5764 archived because they are in a directory that is being archived;
5765 @command{tar} will still archive files explicitly named on the command line
5766 or through @value{op-files-from}, regardless of where they reside.
5767
5768 @table @kbd
5769 @item --one-file-system
5770 @itemx -l
5771 Prevents @command{tar} from crossing file system boundaries when
5772 archiving. Use in conjunction with any write operation.
5773 @end table
5774
5775 The @samp{--one-file-system} option causes @command{tar} to modify its
5776 normal behavior in archiving the contents of directories. If a file in
5777 a directory is not on the same filesystem as the directory itself, then
5778 @command{tar} will not archive that file. If the file is a directory
5779 itself, @command{tar} will not archive anything beneath it; in other words,
5780 @command{tar} will not cross mount points.
5781
5782 It is reported that using this option, the mount point is is archived,
5783 but nothing under it.
5784
5785 This option is useful for making full or incremental archival backups of
5786 a file system. If this option is used in conjunction with
5787 @value{op-verbose}, files that are excluded are mentioned by name on the
5788 standard error.
5789
5790 @menu
5791 * directory:: Changing Directory
5792 * absolute:: Absolute File Names
5793 @end menu
5794
5795 @node directory
5796 @subsection Changing the Working Directory
5797
5798 @FIXME{need to read over this node now for continuity; i've switched
5799 things around some.}
5800
5801 @cindex Changing directory mid-stream
5802 @cindex Directory, changing mid-stream
5803 @cindex Working directory, specifying
5804 @UNREVISED
5805
5806 To change the working directory in the middle of a list of file names,
5807 either on the command line or in a file specified using
5808 @value{op-files-from}, use @value{op-directory}. This will change the
5809 working directory to the directory @var{directory} after that point in
5810 the list.
5811
5812 @table @kbd
5813 @item --directory=@var{directory}
5814 @itemx -C @var{directory}
5815 Changes the working directory in the middle of a command line.
5816 @end table
5817
5818 For example,
5819
5820 @example
5821 $ @kbd{tar -c -f jams.tar grape prune -C food cherry}
5822 @end example
5823
5824 @noindent
5825 will place the files @file{grape} and @file{prune} from the current
5826 directory into the archive @file{jams.tar}, followed by the file
5827 @file{cherry} from the directory @file{food}. This option is especially
5828 useful when you have several widely separated files that you want to
5829 store in the same archive.
5830
5831 Note that the file @file{cherry} is recorded in the archive under the
5832 precise name @file{cherry}, @emph{not} @file{food/cherry}. Thus, the
5833 archive will contain three files that all appear to have come from the
5834 same directory; if the archive is extracted with plain @samp{tar
5835 --extract}, all three files will be written in the current directory.
5836
5837 Contrast this with the command,
5838
5839 @example
5840 $ @kbd{tar -c -f jams.tar grape prune -C food red/cherry}
5841 @end example
5842
5843 @noindent
5844 which records the third file in the archive under the name
5845 @file{red/cherry} so that, if the archive is extracted using
5846 @samp{tar --extract}, the third file will be written in a subdirectory
5847 named @file{orange-colored}.
5848
5849 You can use the @samp{--directory} option to make the archive
5850 independent of the original name of the directory holding the files.
5851 The following command places the files @file{/etc/passwd},
5852 @file{/etc/hosts}, and @file{/lib/libc.a} into the archive
5853 @file{foo.tar}:
5854
5855 @example
5856 $ @kbd{tar -c -f foo.tar -C /etc passwd hosts -C /lib libc.a}
5857 @end example
5858
5859 @noindent
5860 However, the names of the archive members will be exactly what they were
5861 on the command line: @file{passwd}, @file{hosts}, and @file{libc.a}.
5862 They will not appear to be related by file name to the original
5863 directories where those files were located.
5864
5865 Note that @samp{--directory} options are interpreted consecutively. If
5866 @samp{--directory} specifies a relative file name, it is interpreted
5867 relative to the then current directory, which might not be the same as
5868 the original current working directory of @command{tar}, due to a previous
5869 @samp{--directory} option.
5870
5871 @FIXME{dan: does this mean that you *can* use the short option form, but
5872 you can *not* use the long option form with --files-from? or is this
5873 totally screwed?}
5874
5875 When using @samp{--files-from} (@pxref{files}), you can put @samp{-C}
5876 options in the file list. Unfortunately, you cannot put
5877 @samp{--directory} options in the file list. (This interpretation can
5878 be disabled by using the @value{op-null} option.)
5879
5880 @node absolute
5881 @subsection Absolute File Names
5882 @UNREVISED
5883
5884 @table @kbd
5885 @item -P
5886 @itemx --absolute-names
5887 Do not strip leading slashes from file names, and permit file names
5888 containing a @file{..} file name component.
5889 @end table
5890
5891 By default, @sc{gnu} @command{tar} drops a leading @samp{/} on input or output,
5892 and complains about file names containing a @file{..} component.
5893 This option turns off this behavior.
5894
5895 When @command{tar} extracts archive members from an archive, it strips any
5896 leading slashes (@samp{/}) from the member name. This causes absolute
5897 member names in the archive to be treated as relative file names. This
5898 allows you to have such members extracted wherever you want, instead of
5899 being restricted to extracting the member in the exact directory named
5900 in the archive. For example, if the archive member has the name
5901 @file{/etc/passwd}, @command{tar} will extract it as if the name were
5902 really @file{etc/passwd}.
5903
5904 File names containing @file{..} can cause problems when extracting, so
5905 @command{tar} normally warns you about such files when creating an
5906 archive, and rejects attempts to extracts such files.
5907
5908 Other @command{tar} programs do not do this. As a result, if you create an
5909 archive whose member names start with a slash, they will be difficult
5910 for other people with a non-@sc{gnu} @command{tar} program to use. Therefore,
5911 @sc{gnu} @command{tar} also strips leading slashes from member names when
5912 putting members into the archive. For example, if you ask @command{tar} to
5913 add the file @file{/bin/ls} to an archive, it will do so, but the member
5914 name will be @file{bin/ls}.
5915
5916 If you use the @value{op-absolute-names} option, @command{tar} will do
5917 none of these transformations.
5918
5919 To archive or extract files relative to the root directory, specify
5920 the @value{op-absolute-names} option.
5921
5922 Normally, @command{tar} acts on files relative to the working
5923 directory---ignoring superior directory names when archiving, and
5924 ignoring leading slashes when extracting.
5925
5926 When you specify @value{op-absolute-names}, @command{tar} stores file names
5927 including all superior directory names, and preserves leading slashes.
5928 If you only invoked @command{tar} from the root directory you would never
5929 need the @value{op-absolute-names} option, but using this option may be
5930 more convenient than switching to root.
5931
5932 @FIXME{Should be an example in the tutorial/wizardry section using this
5933 to transfer files between systems.}
5934
5935 @FIXME{Is write access an issue?}
5936
5937 @table @kbd
5938 @item --absolute-names
5939 Preserves full file names (including superior directory names) when
5940 archiving files. Preserves leading slash when extracting files.
5941
5942 @end table
5943
5944 @FIXME{this is still horrible; need to talk with dan on monday.}
5945
5946 @command{tar} prints out a message about removing the @samp{/} from file
5947 names. This message appears once per @sc{gnu} @command{tar} invocation. It
5948 represents something which ought to be told; ignoring what it means can
5949 cause very serious surprises, later.
5950
5951 Some people, nevertheless, do not want to see this message. Wanting to
5952 play really dangerously, one may of course redirect @command{tar} standard
5953 error to the sink. For example, under @command{sh}:
5954
5955 @example
5956 $ @kbd{tar -c -f archive.tar /home 2> /dev/null}
5957 @end example
5958
5959 @noindent
5960 Another solution, both nicer and simpler, would be to change to
5961 the @file{/} directory first, and then avoid absolute notation.
5962 For example:
5963
5964 @example
5965 $ @kbd{(cd / && tar -c -f archive.tar home)}
5966 $ @kbd{tar -c -f archive.tar -C / home}
5967 @end example
5968
5969 @include getdate.texi
5970
5971 @node Formats
5972 @chapter Controlling the Archive Format
5973
5974 @FIXME{need an intro here}
5975
5976 @menu
5977 * Portability:: Making @command{tar} Archives More Portable
5978 * Compression:: Using Less Space through Compression
5979 * Attributes:: Handling File Attributes
5980 * Standard:: The Standard Format
5981 * Extensions:: @sc{gnu} Extensions to the Archive Format
5982 * cpio:: Comparison of @command{tar} and @command{cpio}
5983 @end menu
5984
5985 @node Portability
5986 @section Making @command{tar} Archives More Portable
5987
5988 Creating a @command{tar} archive on a particular system that is meant to be
5989 useful later on many other machines and with other versions of @command{tar}
5990 is more challenging than you might think. @command{tar} archive formats
5991 have been evolving since the first versions of Unix. Many such formats
5992 are around, and are not always compatible with each other. This section
5993 discusses a few problems, and gives some advice about making @command{tar}
5994 archives more portable.
5995
5996 One golden rule is simplicity. For example, limit your @command{tar}
5997 archives to contain only regular files and directories, avoiding
5998 other kind of special files. Do not attempt to save sparse files or
5999 contiguous files as such. Let's discuss a few more problems, in turn.
6000
6001 @menu
6002 * Portable Names:: Portable Names
6003 * dereference:: Symbolic Links
6004 * old:: Old V7 Archives
6005 * posix:: @sc{posix} archives
6006 * Checksumming:: Checksumming Problems
6007 * Large or Negative Values:: Large files, negative time stamps, etc.
6008 @end menu
6009
6010 @node Portable Names
6011 @subsection Portable Names
6012
6013 Use portable file and member names. A name is portable if it contains
6014 only ASCII letters and digits, @samp{/}, @samp{.}, @samp{_}, and
6015 @samp{-}; it cannot be empty, start with @samp{-} or @samp{//}, or
6016 contain @samp{/-}. Avoid deep directory nesting. For portability to
6017 old Unix hosts, limit your file name components to 14 characters or
6018 less.
6019
6020 If you intend to have your @command{tar} archives to be read under MSDOS,
6021 you should not rely on case distinction for file names, and you might
6022 use the @sc{gnu} @command{doschk} program for helping you further diagnosing
6023 illegal MSDOS names, which are even more limited than System V's.
6024
6025 @node dereference
6026 @subsection Symbolic Links
6027 @cindex File names, using symbolic links
6028 @cindex Symbolic link as file name
6029
6030 Normally, when @command{tar} archives a symbolic link, it writes a
6031 block to the archive naming the target of the link. In that way, the
6032 @command{tar} archive is a faithful record of the filesystem contents.
6033 @value{op-dereference} is used with @value{op-create}, and causes @command{tar}
6034 to archive the files symbolic links point to, instead of the links
6035 themselves. When this option is used, when @command{tar} encounters a
6036 symbolic link, it will archive the linked-to file, instead of simply
6037 recording the presence of a symbolic link.
6038
6039 The name under which the file is stored in the file system is not
6040 recorded in the archive. To record both the symbolic link name and
6041 the file name in the system, archive the file under both names. If
6042 all links were recorded automatically by @command{tar}, an extracted file
6043 might be linked to a file name that no longer exists in the file
6044 system.
6045
6046 If a linked-to file is encountered again by @command{tar} while creating
6047 the same archive, an entire second copy of it will be stored. (This
6048 @emph{might} be considered a bug.)
6049
6050 So, for portable archives, do not archive symbolic links as such,
6051 and use @value{op-dereference}: many systems do not support
6052 symbolic links, and moreover, your distribution might be unusable if
6053 it contains unresolved symbolic links.
6054
6055 @node old
6056 @subsection Old V7 Archives
6057 @cindex Format, old style
6058 @cindex Old style format
6059 @cindex Old style archives
6060
6061 Certain old versions of @command{tar} cannot handle additional
6062 information recorded by newer @command{tar} programs. To create an
6063 archive in V7 format (not ANSI), which can be read by these old
6064 versions, specify the @value{op-old-archive} option in
6065 conjunction with the @value{op-create}. @command{tar} also
6066 accepts @samp{--portability} for this option. When you specify it,
6067 @command{tar} leaves out information about directories, pipes, fifos,
6068 contiguous files, and device files, and specifies file ownership by
6069 group and user IDs instead of group and user names.
6070
6071 When updating an archive, do not use @value{op-old-archive}
6072 unless the archive was created with using this option.
6073
6074 In most cases, a @emph{new} format archive can be read by an @emph{old}
6075 @command{tar} program without serious trouble, so this option should
6076 seldom be needed. On the other hand, most modern @command{tar}s are
6077 able to read old format archives, so it might be safer for you to
6078 always use @value{op-old-archive} for your distributions.
6079
6080 @node posix
6081 @subsection @sc{gnu} @command{tar} and @sc{posix} @command{tar}
6082
6083 @sc{gnu} @command{tar} was based on an early draft of the @sc{posix} 1003.1
6084 @code{ustar} standard. @sc{gnu} extensions to @command{tar}, such as the
6085 support for file names longer than 100 characters, use portions of the
6086 @command{tar} header record which were specified in that @sc{posix} draft as
6087 unused. Subsequent changes in @sc{posix} have allocated the same parts of
6088 the header record for other purposes. As a result, @sc{gnu} @command{tar} is
6089 incompatible with the current @sc{posix} spec, and with @command{tar} programs
6090 that follow it.
6091
6092 We plan to reimplement these @sc{gnu} extensions in a new way which is
6093 upward compatible with the latest @sc{posix} @command{tar} format, but we
6094 don't know when this will be done.
6095
6096 In the mean time, there is simply no telling what might happen if you
6097 read a @sc{gnu} @command{tar} archive, which uses the @sc{gnu} extensions, using
6098 some other @command{tar} program. So if you want to read the archive
6099 with another @command{tar} program, be sure to write it using the
6100 @samp{--old-archive} option (@samp{-o}).
6101
6102 @FIXME{is there a way to tell which flavor of tar was used to write a
6103 particular archive before you try to read it?}
6104
6105 Traditionally, old @command{tar}s have a limit of 100 characters. @sc{gnu}
6106 @command{tar} attempted two different approaches to overcome this limit,
6107 using and extending a format specified by a draft of some P1003.1.
6108 The first way was not that successful, and involved @file{@@MaNgLeD@@}
6109 file names, or such; while a second approach used @file{././@@LongLink}
6110 and other tricks, yielding better success. In theory, @sc{gnu} @command{tar}
6111 should be able to handle file names of practically unlimited length.
6112 So, if @sc{gnu} @command{tar} fails to dump and retrieve files having more
6113 than 100 characters, then there is a bug in @sc{gnu} @command{tar}, indeed.
6114
6115 But, being strictly @sc{posix}, the limit was still 100 characters.
6116 For various other purposes, @sc{gnu} @command{tar} used areas left unassigned
6117 in the @sc{posix} draft. @sc{posix} later revised P1003.1 @code{ustar} format by
6118 assigning previously unused header fields, in such a way that the upper
6119 limit for file name length was raised to 256 characters. However, the
6120 actual @sc{posix} limit oscillates between 100 and 256, depending on the
6121 precise location of slashes in full file name (this is rather ugly).
6122 Since @sc{gnu} @command{tar} use the same fields for quite other purposes,
6123 it became incompatible with the latest @sc{posix} standards.
6124
6125 For longer or non-fitting file names, we plan to use yet another set
6126 of @sc{gnu} extensions, but this time, complying with the provisions @sc{posix}
6127 offers for extending the format, rather than conflicting with it.
6128 Whenever an archive uses old @sc{gnu} @command{tar} extension format or @sc{posix}
6129 extensions, would it be for very long file names or other specialities,
6130 this archive becomes non-portable to other @command{tar} implementations.
6131 In fact, anything can happen. The most forgiving @command{tar}s will
6132 merely unpack the file using a wrong name, and maybe create another
6133 file named something like @file{@@LongName}, with the true file name
6134 in it. @command{tar}s not protecting themselves may segment violate!
6135
6136 Compatibility concerns make all this thing more difficult, as we
6137 will have to support @emph{all} these things together, for a while.
6138 @sc{gnu} @command{tar} should be able to produce and read true @sc{posix} format
6139 files, while being able to detect old @sc{gnu} @command{tar} formats, besides
6140 old V7 format, and process them conveniently. It would take years
6141 before this whole area stabilizes@dots{}
6142
6143 There are plans to raise this 100 limit to 256, and yet produce @sc{posix}
6144 conforming archives. Past 256, I do not know yet if @sc{gnu} @command{tar}
6145 will go non-@sc{posix} again, or merely refuse to archive the file.
6146
6147 There are plans so @sc{gnu} @command{tar} support more fully the latest @sc{posix}
6148 format, while being able to read old V7 format, @sc{gnu} (semi-@sc{posix} plus
6149 extension), as well as full @sc{posix}. One may ask if there is part of
6150 the @sc{posix} format that we still cannot support. This simple question
6151 has a complex answer. Maybe that, on intimate look, some strong
6152 limitations will pop up, but until now, nothing sounds too difficult
6153 (but see below). I only have these few pages of @sc{posix} telling about
6154 ``Extended tar Format'' (P1003.1-1990 -- section 10.1.1), and there are
6155 references to other parts of the standard I do not have, which should
6156 normally enforce limitations on stored file names (I suspect things
6157 like fixing what @kbd{/} and @kbd{@key{NUL}} means). There are also
6158 some points which the standard does not make clear, Existing practice
6159 will then drive what I should do.
6160
6161 @sc{posix} mandates that, when a file name cannot fit within 100 to
6162 256 characters (the variance comes from the fact a @kbd{/} is
6163 ideally needed as the 156'th character), or a link name cannot
6164 fit within 100 characters, a warning should be issued and the file
6165 @emph{not} be stored. Unless some @value{op-posix} option is given
6166 (or @env{POSIXLY_CORRECT} is set), I suspect that @sc{gnu} @command{tar}
6167 should disobey this specification, and automatically switch to using
6168 @sc{gnu} extensions to overcome file name or link name length limitations.
6169
6170 There is a problem, however, which I did not intimately studied yet.
6171 Given a truly @sc{posix} archive with names having more than 100 characters,
6172 I guess that @sc{gnu} @command{tar} up to 1.11.8 will process it as if it were an
6173 old V7 archive, and be fooled by some fields which are coded differently.
6174 So, the question is to decide if the next generation of @sc{gnu} @command{tar}
6175 should produce @sc{posix} format by default, whenever possible, producing
6176 archives older versions of @sc{gnu} @command{tar} might not be able to read
6177 correctly. I fear that we will have to suffer such a choice one of these
6178 days, if we want @sc{gnu} @command{tar} to go closer to @sc{posix}. We can rush it.
6179 Another possibility is to produce the current @sc{gnu} @command{tar} format
6180 by default for a few years, but have @sc{gnu} @command{tar} versions from some
6181 1.@var{POSIX} and up able to recognize all three formats, and let older
6182 @sc{gnu} @command{tar} fade out slowly. Then, we could switch to producing @sc{posix}
6183 format by default, with not much harm to those still having (very old at
6184 that time) @sc{gnu} @command{tar} versions prior to 1.@var{POSIX}.
6185
6186 @sc{posix} format cannot represent very long names, volume headers,
6187 splitting of files in multi-volumes, sparse files, and incremental
6188 dumps; these would be all disallowed if @value{op-posix} or
6189 @env{POSIXLY_CORRECT}. Otherwise, if @command{tar} is given long
6190 names, or @samp{-[VMSgG]}, then it should automatically go non-@sc{posix}.
6191 I think this is easily granted without much discussion.
6192
6193 Another point is that only @code{mtime} is stored in @sc{posix}
6194 archives, while @sc{gnu} @command{tar} currently also store @code{atime}
6195 and @code{ctime}. If we want @sc{gnu} @command{tar} to go closer to @sc{posix},
6196 my choice would be to drop @code{atime} and @code{ctime} support on
6197 average. On the other hand, I perceive that full dumps or incremental
6198 dumps need @code{atime} and @code{ctime} support, so for those special
6199 applications, @sc{posix} has to be avoided altogether.
6200
6201 A few users requested that @value{op-sparse} be always active by
6202 default, I think that before replying to them, we have to decide
6203 if we want @sc{gnu} @command{tar} to go closer to @sc{posix} on average, while
6204 producing files. My choice would be to go closer to @sc{posix} in the
6205 long run. Besides possible double reading, I do not see any point
6206 of not trying to save files as sparse when creating archives which
6207 are neither @sc{posix} nor old-V7, so the actual @value{op-sparse} would
6208 become selected by default when producing such archives, whatever
6209 the reason is. So, @value{op-sparse} alone might be redefined to force
6210 @sc{gnu}-format archives, and recover its previous meaning from this fact.
6211
6212 @sc{gnu}-format as it exists now can easily fool other @sc{posix} @command{tar},
6213 as it uses fields which @sc{posix} considers to be part of the file name
6214 prefix. I wonder if it would not be a good idea, in the long run,
6215 to try changing @sc{gnu}-format so any added field (like @code{ctime},
6216 @code{atime}, file offset in subsequent volumes, or sparse file
6217 descriptions) be wholly and always pushed into an extension block,
6218 instead of using space in the @sc{posix} header block. I could manage
6219 to do that portably between future @sc{gnu} @command{tar}s. So other @sc{posix}
6220 @command{tar}s might be at least able to provide kind of correct listings
6221 for the archives produced by @sc{gnu} @command{tar}, if not able to process
6222 them otherwise.
6223
6224 Using these projected extensions might induce older @command{tar}s to fail.
6225 We would use the same approach as for @sc{posix}. I'll put out a @command{tar}
6226 capable of reading @sc{posix}ier, yet extended archives, but will not produce
6227 this format by default, in @sc{gnu} mode. In a few years, when newer @sc{gnu}
6228 @command{tar}s will have flooded out @command{tar} 1.11.X and previous, we
6229 could switch to producing @sc{posix}ier extended archives, with no real harm
6230 to users, as almost all existing @sc{gnu} @command{tar}s will be ready to read
6231 @sc{posix}ier format. In fact, I'll do both changes at the same time, in a
6232 few years, and just prepare @command{tar} for both changes, without effecting
6233 them, from 1.@var{POSIX}. (Both changes: 1---using @sc{posix} convention for
6234 getting over 100 characters; 2---avoiding mangling @sc{posix} headers for @sc{gnu}
6235 extensions, using only @sc{posix} mandated extension techniques).
6236
6237 So, a future @command{tar} will have a @value{op-posix}
6238 flag forcing the usage of truly @sc{posix} headers, and so, producing
6239 archives previous @sc{gnu} @command{tar} will not be able to read.
6240 So, @emph{once} pretest will announce that feature, it would be
6241 particularly useful that users test how exchangeable will be archives
6242 between @sc{gnu} @command{tar} with @value{op-posix} and other @sc{posix} @command{tar}.
6243
6244 In a few years, when @sc{gnu} @command{tar} will produce @sc{posix} headers by
6245 default, @value{op-posix} will have a strong meaning and will disallow
6246 @sc{gnu} extensions. But in the meantime, for a long while, @value{op-posix}
6247 in @sc{gnu} tar will not disallow @sc{gnu} extensions like @value{op-label},
6248 @value{op-multi-volume}, @value{op-sparse}, or very long file or link names.
6249 However, @value{op-posix} with @sc{gnu} extensions will use @sc{posix}
6250 headers with reserved-for-users extensions to headers, and I will be
6251 curious to know how well or bad @sc{posix} @command{tar}s will react to these.
6252
6253 @sc{gnu} @command{tar} prior to 1.@var{POSIX}, and after 1.@var{POSIX} without
6254 @value{op-posix}, generates and checks @samp{ustar@w{ }@w{ }}, with two
6255 suffixed spaces. This is sufficient for older @sc{gnu} @command{tar} not to
6256 recognize @sc{posix} archives, and consequently, wrongly decide those archives
6257 are in old V7 format. It is a useful bug for me, because @sc{gnu} @command{tar}
6258 has other @sc{posix} incompatibilities, and I need to segregate @sc{gnu} @command{tar}
6259 semi-@sc{posix} archives from truly @sc{posix} archives, for @sc{gnu} @command{tar} should
6260 be somewhat compatible with itself, while migrating closer to latest
6261 @sc{posix} standards. So, I'll be very careful about how and when I will do
6262 the correction.
6263
6264 @node Checksumming
6265 @subsection Checksumming Problems
6266
6267 SunOS and HP-UX @command{tar} fail to accept archives created using @sc{gnu}
6268 @command{tar} and containing non-ASCII file names, that is, file names
6269 having characters with the eight bit set, because they use signed
6270 checksums, while @sc{gnu} @command{tar} uses unsigned checksums while creating
6271 archives, as per @sc{posix} standards. On reading, @sc{gnu} @command{tar} computes
6272 both checksums and accept any. It is somewhat worrying that a lot of
6273 people may go around doing backup of their files using faulty (or at
6274 least non-standard) software, not learning about it until it's time
6275 to restore their missing files with an incompatible file extractor,
6276 or vice versa.
6277
6278 @sc{gnu} @command{tar} compute checksums both ways, and accept any on read,
6279 so @sc{gnu} tar can read Sun tapes even with their wrong checksums.
6280 @sc{gnu} @command{tar} produces the standard checksum, however, raising
6281 incompatibilities with Sun. That is to say, @sc{gnu} @command{tar} has not
6282 been modified to @emph{produce} incorrect archives to be read by buggy
6283 @command{tar}'s. I've been told that more recent Sun @command{tar} now
6284 read standard archives, so maybe Sun did a similar patch, after all?
6285
6286 The story seems to be that when Sun first imported @command{tar}
6287 sources on their system, they recompiled it without realizing that
6288 the checksums were computed differently, because of a change in
6289 the default signing of @code{char}'s in their compiler. So they
6290 started computing checksums wrongly. When they later realized their
6291 mistake, they merely decided to stay compatible with it, and with
6292 themselves afterwards. Presumably, but I do not really know, HP-UX
6293 has chosen that their @command{tar} archives to be compatible with Sun's.
6294 The current standards do not favor Sun @command{tar} format. In any
6295 case, it now falls on the shoulders of SunOS and HP-UX users to get
6296 a @command{tar} able to read the good archives they receive.
6297
6298 @node Large or Negative Values
6299 @subsection Large or Negative Values
6300 @cindex large values
6301 @cindex future time stamps
6302 @cindex negative time stamps
6303
6304 @sc{posix} @command{tar} format uses fixed-sized unsigned octal strings
6305 to represent numeric values. User and group IDs and device major and
6306 minor numbers have unsigned 21-bit representations, and file sizes and
6307 times have unsigned 33-bit representations. @sc{gnu} @command{tar}
6308 generates @sc{posix} representations when possible, but for values
6309 outside the @sc{posix} range it generates two's-complement base-256
6310 strings: uids, gids, and device numbers have signed 57-bit
6311 representations, and file sizes and times have signed 89-bit
6312 representations. These representations are an extension to @sc{posix}
6313 @command{tar} format, so they are not universally portable.
6314
6315 The most common portability problems with out-of-range numeric values
6316 are large files and future or negative time stamps.
6317
6318 Portable archives should avoid members of 8 GB or larger, as @sc{posix}
6319 @command{tar} format cannot represent them.
6320
6321 Portable archives should avoid time stamps from the future. @sc{posix}
6322 @command{tar} format can represent time stamps in the range 1970-01-01
6323 00:00:00 through 2242-03-16 12:56:31 @sc{utc}. However, many current
6324 hosts use a signed 32-bit @code{time_t}, or internal time stamp format,
6325 and cannot represent time stamps after 2038-01-19 03:14:07 @sc{utc}; so
6326 portable archives must avoid these time stamps for many years to come.
6327
6328 Portable archives should also avoid time stamps before 1970. These time
6329 stamps are a common @sc{posix} extension but their @code{time_t}
6330 representations are negative. Many traditional @command{tar}
6331 implementations generate a two's complement representation for negative
6332 time stamps that assumes a signed 32-bit @code{time_t}; hence they
6333 generate archives that are not portable to hosts with differing
6334 @code{time_t} representations. @sc{gnu} @command{tar} recognizes this
6335 situation when it is run on host with a signed 32-bit @code{time_t}, but
6336 it issues a warning, as these time stamps are nonstandard and unportable.
6337
6338 @node Compression
6339 @section Using Less Space through Compression
6340
6341 @menu
6342 * gzip:: Creating and Reading Compressed Archives
6343 * sparse:: Archiving Sparse Files
6344 @end menu
6345
6346 @node gzip
6347 @subsection Creating and Reading Compressed Archives
6348 @cindex Compressed archives
6349 @cindex Storing archives in compressed format
6350 @UNREVISED
6351
6352 @table @kbd
6353 @item -z
6354 @itemx --gzip
6355 @itemx --ungzip
6356 Filter the archive through @command{gzip}.
6357 @end table
6358
6359 @FIXME{ach; these two bits orig from "compare" (?). where to put?} Some
6360 format parameters must be taken into consideration when modifying an
6361 archive.@FIXME{???} Compressed archives cannot be modified.
6362
6363 You can use @samp{--gzip} and @samp{--gunzip} on physical devices
6364 (tape drives, etc.) and remote files as well as on normal files; data
6365 to or from such devices or remote files is reblocked by another copy
6366 of the @command{tar} program to enforce the specified (or default) record
6367 size. The default compression parameters are used; if you need to
6368 override them, avoid the @value{op-gzip} option and run @command{gzip}
6369 explicitly. (Or set the @env{GZIP} environment variable.)
6370
6371 The @value{op-gzip} option does not work with the @value{op-multi-volume}
6372 option, or with the @value{op-update}, @value{op-append},
6373 @value{op-concatenate}, or @value{op-delete} operations.
6374
6375 It is not exact to say that @sc{gnu} @command{tar} is to work in concert
6376 with @command{gzip} in a way similar to @command{zip}, say. Surely, it is
6377 possible that @command{tar} and @command{gzip} be done with a single call,
6378 like in:
6379
6380 @example
6381 $ @kbd{tar cfz archive.tar.gz subdir}
6382 @end example
6383
6384 @noindent
6385 to save all of @samp{subdir} into a @code{gzip}'ed archive. Later you
6386 can do:
6387
6388 @example
6389 $ @kbd{tar xfz archive.tar.gz}
6390 @end example
6391
6392 @noindent
6393 to explode and unpack.
6394
6395 The difference is that the whole archive is compressed. With
6396 @command{zip}, archive members are archived individually. @command{tar}'s
6397 method yields better compression. On the other hand, one can view the
6398 contents of a @command{zip} archive without having to decompress it. As
6399 for the @command{tar} and @command{gzip} tandem, you need to decompress the
6400 archive to see its contents. However, this may be done without needing
6401 disk space, by using pipes internally:
6402
6403 @example
6404 $ @kbd{tar tfz archive.tar.gz}
6405 @end example
6406
6407 @cindex corrupted archives
6408 About corrupted compressed archives: @command{gzip}'ed files have no
6409 redundancy, for maximum compression. The adaptive nature of the
6410 compression scheme means that the compression tables are implicitly
6411 spread all over the archive. If you lose a few blocks, the dynamic
6412 construction of the compression tables becomes unsynchronized, and there
6413 is little chance that you could recover later in the archive.
6414
6415 There are pending suggestions for having a per-volume or per-file
6416 compression in @sc{gnu} @command{tar}. This would allow for viewing the
6417 contents without decompression, and for resynchronizing decompression at
6418 every volume or file, in case of corrupted archives. Doing so, we might
6419 lose some compressibility. But this would have make recovering easier.
6420 So, there are pros and cons. We'll see!
6421
6422 @table @kbd
6423 @item -j
6424 @itemx --bzip2
6425 Filter the archive through @code{bzip2}. Otherwise like @value{op-gzip}.
6426
6427 @item -Z
6428 @itemx --compress
6429 @itemx --uncompress
6430 Filter the archive through @command{compress}. Otherwise like @value{op-gzip}.
6431
6432 @item --use-compress-program=@var{prog}
6433 Filter through @var{prog} (must accept @samp{-d}).
6434 @end table
6435
6436 @value{op-compress} stores an archive in compressed format. This
6437 option is useful in saving time over networks and space in pipes, and
6438 when storage space is at a premium. @value{op-compress} causes
6439 @command{tar} to compress when writing the archive, or to uncompress when
6440 reading the archive.
6441
6442 To perform compression and uncompression on the archive, @command{tar}
6443 runs the @command{compress} utility. @command{tar} uses the default
6444 compression parameters; if you need to override them, avoid the
6445 @value{op-compress} option and run the @command{compress} utility
6446 explicitly. It is useful to be able to call the @command{compress}
6447 utility from within @command{tar} because the @command{compress} utility by
6448 itself cannot access remote tape drives.
6449
6450 The @value{op-compress} option will not work in conjunction with the
6451 @value{op-multi-volume} option or the @value{op-append}, @value{op-update}
6452 and @value{op-delete} operations. @xref{Operations}, for
6453 more information on these operations.
6454
6455 If there is no compress utility available, @command{tar} will report an error.
6456 @strong{Please note} that the @command{compress} program may be covered by
6457 a patent, and therefore we recommend you stop using it.
6458
6459 @value{op-bzip2} acts like @value{op-compress}, except that it uses
6460 the @code{bzip2} utility.
6461
6462 @table @kbd
6463 @item --compress
6464 @itemx --uncompress
6465 @itemx -z
6466 @itemx -Z
6467 When this option is specified, @command{tar} will compress (when writing
6468 an archive), or uncompress (when reading an archive). Used in
6469 conjunction with the @value{op-create}, @value{op-extract}, @value{op-list} and
6470 @value{op-compare} operations.
6471 @end table
6472
6473 You can have archives be compressed by using the @value{op-gzip} option.
6474 This will arrange for @command{tar} to use the @command{gzip} program to be
6475 used to compress or uncompress the archive wren writing or reading it.
6476
6477 To use the older, obsolete, @command{compress} program, use the
6478 @value{op-compress} option. The @sc{gnu} Project recommends you not use
6479 @command{compress}, because there is a patent covering the algorithm it
6480 uses. You could be sued for patent infringement merely by running
6481 @command{compress}.
6482
6483 I have one question, or maybe it's a suggestion if there isn't a way
6484 to do it now. I would like to use @value{op-gzip}, but I'd also like the
6485 output to be fed through a program like @sc{gnu} @command{ecc} (actually, right
6486 now that's @samp{exactly} what I'd like to use :-)), basically adding
6487 ECC protection on top of compression. It seems as if this should be
6488 quite easy to do, but I can't work out exactly how to go about it.
6489 Of course, I can pipe the standard output of @command{tar} through
6490 @command{ecc}, but then I lose (though I haven't started using it yet,
6491 I confess) the ability to have @command{tar} use @command{rmt} for it's I/O
6492 (I think).
6493
6494 I think the most straightforward thing would be to let me specify a
6495 general set of filters outboard of compression (preferably ordered,
6496 so the order can be automatically reversed on input operations, and
6497 with the options they require specifiable), but beggars shouldn't be
6498 choosers and anything you decide on would be fine with me.
6499
6500 By the way, I like @command{ecc} but if (as the comments say) it can't
6501 deal with loss of block sync, I'm tempted to throw some time at adding
6502 that capability. Supposing I were to actually do such a thing and
6503 get it (apparently) working, do you accept contributed changes to
6504 utilities like that? (Leigh Clayton @file{loc@@soliton.com}, May 1995).
6505
6506 Isn't that exactly the role of the @value{op-use-compress-prog} option?
6507 I never tried it myself, but I suspect you may want to write a
6508 @var{prog} script or program able to filter stdin to stdout to
6509 way you want. It should recognize the @samp{-d} option, for when
6510 extraction is needed rather than creation.
6511
6512 It has been reported that if one writes compressed data (through the
6513 @value{op-gzip} or @value{op-compress} options) to a DLT and tries to use
6514 the DLT compression mode, the data will actually get bigger and one will
6515 end up with less space on the tape.
6516
6517 @node sparse
6518 @subsection Archiving Sparse Files
6519 @cindex Sparse Files
6520 @UNREVISED
6521
6522 @table @kbd
6523 @item -S
6524 @itemx --sparse
6525 Handle sparse files efficiently.
6526 @end table
6527
6528 This option causes all files to be put in the archive to be tested for
6529 sparseness, and handled specially if they are. The @value{op-sparse}
6530 option is useful when many @code{dbm} files, for example, are being
6531 backed up. Using this option dramatically decreases the amount of
6532 space needed to store such a file.
6533
6534 In later versions, this option may be removed, and the testing and
6535 treatment of sparse files may be done automatically with any special
6536 @sc{gnu} options. For now, it is an option needing to be specified on
6537 the command line with the creation or updating of an archive.
6538
6539 Files in the filesystem occasionally have ``holes.'' A hole in a file
6540 is a section of the file's contents which was never written. The
6541 contents of a hole read as all zeros. On many operating systems,
6542 actual disk storage is not allocated for holes, but they are counted
6543 in the length of the file. If you archive such a file, @command{tar}
6544 could create an archive longer than the original. To have @command{tar}
6545 attempt to recognize the holes in a file, use @value{op-sparse}. When
6546 you use the @value{op-sparse} option, then, for any file using less
6547 disk space than would be expected from its length, @command{tar} searches
6548 the file for consecutive stretches of zeros. It then records in the
6549 archive for the file where the consecutive stretches of zeros are, and
6550 only archives the ``real contents'' of the file. On extraction (using
6551 @value{op-sparse} is not needed on extraction) any such files have
6552 hols created wherever the continuous stretches of zeros were found.
6553 Thus, if you use @value{op-sparse}, @command{tar} archives won't take
6554 more space than the original.
6555
6556 A file is sparse if it contains blocks of zeros whose existence is
6557 recorded, but that have no space allocated on disk. When you specify
6558 the @value{op-sparse} option in conjunction with the @value{op-create}
6559 operation, @command{tar} tests all files for sparseness while archiving.
6560 If @command{tar} finds a file to be sparse, it uses a sparse representation of
6561 the file in the archive. @value{xref-create}, for more information
6562 about creating archives.
6563
6564 @value{op-sparse} is useful when archiving files, such as dbm files,
6565 likely to contain many nulls. This option dramatically
6566 decreases the amount of space needed to store such an archive.
6567
6568 @quotation
6569 @strong{Please Note:} Always use @value{op-sparse} when performing file
6570 system backups, to avoid archiving the expanded forms of files stored
6571 sparsely in the system.
6572
6573 Even if your system has no sparse files currently, some may be
6574 created in the future. If you use @value{op-sparse} while making file
6575 system backups as a matter of course, you can be assured the archive
6576 will never take more space on the media than the files take on disk
6577 (otherwise, archiving a disk filled with sparse files might take
6578 hundreds of tapes). @FIXME-xref{incremental when node name is set.}
6579 @end quotation
6580
6581 @command{tar} ignores the @value{op-sparse} option when reading an archive.
6582
6583 @table @kbd
6584 @item --sparse
6585 @itemx -S
6586 Files stored sparsely in the file system are represented sparsely in
6587 the archive. Use in conjunction with write operations.
6588 @end table
6589
6590 However, users should be well aware that at archive creation time, @sc{gnu}
6591 @command{tar} still has to read whole disk file to locate the @dfn{holes}, and
6592 so, even if sparse files use little space on disk and in the archive, they
6593 may sometimes require inordinate amount of time for reading and examining
6594 all-zero blocks of a file. Although it works, it's painfully slow for a
6595 large (sparse) file, even though the resulting tar archive may be small.
6596 (One user reports that dumping a @file{core} file of over 400 megabytes,
6597 but with only about 3 megabytes of actual data, took about 9 minutes on
6598 a Sun Sparcstation ELC, with full CPU utilization.)
6599
6600 This reading is required in all cases and is not related to the fact
6601 the @value{op-sparse} option is used or not, so by merely @emph{not}
6602 using the option, you are not saving time@footnote{Well! We should say
6603 the whole truth, here. When @value{op-sparse} is selected while creating
6604 an archive, the current @command{tar} algorithm requires sparse files to be
6605 read twice, not once. We hope to develop a new archive format for saving
6606 sparse files in which one pass will be sufficient.}.
6607
6608 Programs like @command{dump} do not have to read the entire file; by examining
6609 the file system directly, they can determine in advance exactly where the
6610 holes are and thus avoid reading through them. The only data it need read
6611 are the actual allocated data blocks. @sc{gnu} @command{tar} uses a more portable
6612 and straightforward archiving approach, it would be fairly difficult that
6613 it does otherwise. Elizabeth Zwicky writes to @file{comp.unix.internals},
6614 on 1990-12-10:
6615
6616 @quotation
6617 What I did say is that you cannot tell the difference between a hole and an
6618 equivalent number of nulls without reading raw blocks. @code{st_blocks} at
6619 best tells you how many holes there are; it doesn't tell you @emph{where}.
6620 Just as programs may, conceivably, care what @code{st_blocks} is (care
6621 to name one that does?), they may also care where the holes are (I have
6622 no examples of this one either, but it's equally imaginable).
6623
6624 I conclude from this that good archivers are not portable. One can
6625 arguably conclude that if you want a portable program, you can in good
6626 conscience restore files with as many holes as possible, since you can't
6627 get it right.
6628 @end quotation
6629
6630 @node Attributes
6631 @section Handling File Attributes
6632 @UNREVISED
6633
6634 When @command{tar} reads files, this causes them to have the access
6635 times updated. To have @command{tar} attempt to set the access times
6636 back to what they were before they were read, use the
6637 @value{op-atime-preserve} option.
6638
6639 Handling of file attributes
6640
6641 @table @kbd
6642 @item --atime-preserve
6643 Preserve access times on files that are read.
6644 This doesn't work for files that
6645 you don't own, unless you're root, and it doesn't interact with
6646 incremental dumps nicely (@pxref{Backups}), and it can set access or
6647 modification times incorrectly if other programs access the file while
6648 @command{tar} is running; but it is good enough for some purposes.
6649
6650 @item -m
6651 @itemx --touch
6652 Do not extract file modified time.
6653
6654 When this option is used, @command{tar} leaves the modification times
6655 of the files it extracts as the time when the files were extracted,
6656 instead of setting it to the time recorded in the archive.
6657
6658 This option is meaningless with @value{op-list}.
6659
6660 @item --same-owner
6661 Create extracted files with the same ownership they have in the
6662 archive.
6663
6664 This is the default behavior for the superuser,
6665 so this option is meaningful only for non-root users, when @command{tar}
6666 is executed on those systems able to give files away. This is
6667 considered as a security flaw by many people, at least because it
6668 makes quite difficult to correctly account users for the disk space
6669 they occupy. Also, the @code{suid} or @code{sgid} attributes of
6670 files are easily and silently lost when files are given away.
6671
6672 When writing an archive, @command{tar} writes the user id and user name
6673 separately. If it can't find a user name (because the user id is not
6674 in @file{/etc/passwd}), then it does not write one. When restoring,
6675 and doing a @code{chmod} like when you use @value{op-same-permissions},
6676 @FIXME{same-owner?}it tries to look the name (if one was written)
6677 up in @file{/etc/passwd}. If it fails, then it uses the user id
6678 stored in the archive instead.
6679
6680 @item --no-same-owner
6681 Do not attempt to restore ownership when extracting. This is the
6682 default behavior for ordinary users, so this option has an effect
6683 only for the superuser.
6684
6685 @item --numeric-owner
6686 The @value{op-numeric-owner} option allows (ANSI) archives to be written
6687 without user/group name information or such information to be ignored
6688 when extracting. It effectively disables the generation and/or use
6689 of user/group name information. This option forces extraction using
6690 the numeric ids from the archive, ignoring the names.
6691
6692 This is useful in certain circumstances, when restoring a backup from
6693 an emergency floppy with different passwd/group files for example.
6694 It is otherwise impossible to extract files with the right ownerships
6695 if the password file in use during the extraction does not match the
6696 one belonging to the filesystem(s) being extracted. This occurs,
6697 for example, if you are restoring your files after a major crash and
6698 had booted from an emergency floppy with no password file or put your
6699 disk into another machine to do the restore.
6700
6701 The numeric ids are @emph{always} saved into @command{tar} archives.
6702 The identifying names are added at create time when provided by the
6703 system, unless @value{op-old-archive} is used. Numeric ids could be
6704 used when moving archives between a collection of machines using
6705 a centralized management for attribution of numeric ids to users
6706 and groups. This is often made through using the NIS capabilities.
6707
6708 When making a @command{tar} file for distribution to other sites, it
6709 is sometimes cleaner to use a single owner for all files in the
6710 distribution, and nicer to specify the write permission bits of the
6711 files as stored in the archive independently of their actual value on
6712 the file system. The way to prepare a clean distribution is usually
6713 to have some Makefile rule creating a directory, copying all needed
6714 files in that directory, then setting ownership and permissions as
6715 wanted (there are a lot of possible schemes), and only then making a
6716 @command{tar} archive out of this directory, before cleaning everything
6717 out. Of course, we could add a lot of options to @sc{gnu} @command{tar} for
6718 fine tuning permissions and ownership. This is not the good way,
6719 I think. @sc{gnu} @command{tar} is already crowded with options and moreover,
6720 the approach just explained gives you a great deal of control already.
6721
6722 @item -p
6723 @itemx --same-permissions
6724 @itemx --preserve-permissions
6725 Extract all protection information.
6726
6727 This option causes @command{tar} to set the modes (access permissions) of
6728 extracted files exactly as recorded in the archive. If this option
6729 is not used, the current @code{umask} setting limits the permissions
6730 on extracted files.
6731
6732 This option is meaningless with @value{op-list}.
6733
6734 @item --preserve
6735 Same as both @value{op-same-permissions} and @value{op-same-order}.
6736
6737 The @value{op-preserve} option has no equivalent short option name.
6738 It is equivalent to @value{op-same-permissions} plus @value{op-same-order}.
6739
6740 @FIXME{I do not see the purpose of such an option. (Neither I. FP.)}
6741
6742 @end table
6743
6744 @node Standard
6745 @section The Standard Format
6746 @UNREVISED
6747
6748 While an archive may contain many files, the archive itself is a
6749 single ordinary file. Like any other file, an archive file can be
6750 written to a storage device such as a tape or disk, sent through a
6751 pipe or over a network, saved on the active file system, or even
6752 stored in another archive. An archive file is not easy to read or
6753 manipulate without using the @command{tar} utility or Tar mode in @sc{gnu}
6754 Emacs.
6755
6756 Physically, an archive consists of a series of file entries terminated
6757 by an end-of-archive entry, which consists of 512 zero bytes. A file
6758 entry usually describes one of the files in the archive (an
6759 @dfn{archive member}), and consists of a file header and the contents
6760 of the file. File headers contain file names and statistics, checksum
6761 information which @command{tar} uses to detect file corruption, and
6762 information about file types.
6763
6764 Archives are permitted to have more than one member with the same
6765 member name. One way this situation can occur is if more than one
6766 version of a file has been stored in the archive. For information
6767 about adding new versions of a file to an archive, see @ref{update}.
6768 @FIXME-xref{To learn more about having more than one archive member with the
6769 same name, see -backup node, when it's written.}
6770
6771 In addition to entries describing archive members, an archive may
6772 contain entries which @command{tar} itself uses to store information.
6773 @value{xref-label}, for an example of such an archive entry.
6774
6775 A @command{tar} archive file contains a series of blocks. Each block
6776 contains @code{BLOCKSIZE} bytes. Although this format may be thought
6777 of as being on magnetic tape, other media are often used.
6778
6779 Each file archived is represented by a header block which describes
6780 the file, followed by zero or more blocks which give the contents
6781 of the file. At the end of the archive file there may be a block
6782 filled with binary zeros as an end-of-file marker. A reasonable system
6783 should write a block of zeros at the end, but must not assume that
6784 such a block exists when reading an archive.
6785
6786 The blocks may be @dfn{blocked} for physical I/O operations.
6787 Each record of @var{n} blocks (where @var{n} is set by the
6788 @value{op-blocking-factor} option to @command{tar}) is written with a single
6789 @w{@samp{write ()}} operation. On magnetic tapes, the result of
6790 such a write is a single record. When writing an archive,
6791 the last record of blocks should be written at the full size, with
6792 blocks after the zero block containing all zeros. When reading
6793 an archive, a reasonable system should properly handle an archive
6794 whose last record is shorter than the rest, or which contains garbage
6795 records after a zero block.
6796
6797 The header block is defined in C as follows. In the @sc{gnu} @command{tar}
6798 distribution, this is part of file @file{src/tar.h}:
6799
6800 @example
6801 @include header.texi
6802 @end example
6803
6804 All characters in header blocks are represented by using 8-bit
6805 characters in the local variant of ASCII. Each field within the
6806 structure is contiguous; that is, there is no padding used within
6807 the structure. Each character on the archive medium is stored
6808 contiguously.
6809
6810 Bytes representing the contents of files (after the header block
6811 of each file) are not translated in any way and are not constrained
6812 to represent characters in any character set. The @command{tar} format
6813 does not distinguish text files from binary files, and no translation
6814 of file contents is performed.
6815
6816 The @code{name}, @code{linkname}, @code{magic}, @code{uname}, and
6817 @code{gname} are null-terminated character strings. All other fileds
6818 are zero-filled octal numbers in ASCII. Each numeric field of width
6819 @var{w} contains @var{w} minus 2 digits, a space, and a null, except
6820 @code{size}, and @code{mtime}, which do not contain the trailing null.
6821
6822 The @code{name} field is the file name of the file, with directory names
6823 (if any) preceding the file name, separated by slashes.
6824
6825 @FIXME{how big a name before field overflows?}
6826
6827 The @code{mode} field provides nine bits specifying file permissions
6828 and three bits to specify the Set UID, Set GID, and Save Text
6829 (@dfn{sticky}) modes. Values for these bits are defined above.
6830 When special permissions are required to create a file with a given
6831 mode, and the user restoring files from the archive does not hold such
6832 permissions, the mode bit(s) specifying those special permissions
6833 are ignored. Modes which are not supported by the operating system
6834 restoring files from the archive will be ignored. Unsupported modes
6835 should be faked up when creating or updating an archive; e.g.@: the
6836 group permission could be copied from the @emph{other} permission.
6837
6838 The @code{uid} and @code{gid} fields are the numeric user and group
6839 ID of the file owners, respectively. If the operating system does
6840 not support numeric user or group IDs, these fields should be ignored.
6841
6842 The @code{size} field is the size of the file in bytes; linked files
6843 are archived with this field specified as zero. @FIXME-xref{Modifiers, in
6844 particular the @value{op-incremental} option.}
6845
6846 The @code{mtime} field is the modification time of the file at the time
6847 it was archived. It is the ASCII representation of the octal value of
6848 the last time the file was modified, represented as an integer number of
6849 seconds since January 1, 1970, 00:00 Coordinated Universal Time.
6850
6851 The @code{chksum} field is the ASCII representation of the octal value
6852 of the simple sum of all bytes in the header block. Each 8-bit
6853 byte in the header is added to an unsigned integer, initialized to
6854 zero, the precision of which shall be no less than seventeen bits.
6855 When calculating the checksum, the @code{chksum} field is treated as
6856 if it were all blanks.
6857
6858 The @code{typeflag} field specifies the type of file archived. If a
6859 particular implementation does not recognize or permit the specified
6860 type, the file will be extracted as if it were a regular file. As this
6861 action occurs, @command{tar} issues a warning to the standard error.
6862
6863 The @code{atime} and @code{ctime} fields are used in making incremental
6864 backups; they store, respectively, the particular file's access time
6865 and last inode-change time.
6866
6867 The @code{offset} is used by the @value{op-multi-volume} option, when
6868 making a multi-volume archive. The offset is number of bytes into
6869 the file that we need to restart at to continue the file on the next
6870 tape, i.e., where we store the location that a continued file is
6871 continued at.
6872
6873 The following fields were added to deal with sparse files. A file
6874 is @dfn{sparse} if it takes in unallocated blocks which end up being
6875 represented as zeros, i.e., no useful data. A test to see if a file
6876 is sparse is to look at the number blocks allocated for it versus the
6877 number of characters in the file; if there are fewer blocks allocated
6878 for the file than would normally be allocated for a file of that
6879 size, then the file is sparse. This is the method @command{tar} uses to
6880 detect a sparse file, and once such a file is detected, it is treated
6881 differently from non-sparse files.
6882
6883 Sparse files are often @code{dbm} files, or other database-type files
6884 which have data at some points and emptiness in the greater part of
6885 the file. Such files can appear to be very large when an @samp{ls
6886 -l} is done on them, when in truth, there may be a very small amount
6887 of important data contained in the file. It is thus undesirable
6888 to have @command{tar} think that it must back up this entire file, as
6889 great quantities of room are wasted on empty blocks, which can lead
6890 to running out of room on a tape far earlier than is necessary.
6891 Thus, sparse files are dealt with so that these empty blocks are
6892 not written to the tape. Instead, what is written to the tape is a
6893 description, of sorts, of the sparse file: where the holes are, how
6894 big the holes are, and how much data is found at the end of the hole.
6895 This way, the file takes up potentially far less room on the tape,
6896 and when the file is extracted later on, it will look exactly the way
6897 it looked beforehand. The following is a description of the fields
6898 used to handle a sparse file:
6899
6900 The @code{sp} is an array of @code{struct sparse}. Each @code{struct
6901 sparse} contains two 12-character strings which represent an offset
6902 into the file and a number of bytes to be written at that offset.
6903 The offset is absolute, and not relative to the offset in preceding
6904 array element.
6905
6906 The header can hold four of these @code{struct sparse} at the moment;
6907 if more are needed, they are not stored in the header.
6908
6909 The @code{isextended} flag is set when an @code{extended_header}
6910 is needed to deal with a file. Note that this means that this flag
6911 can only be set when dealing with a sparse file, and it is only set
6912 in the event that the description of the file will not fit in the
6913 allotted room for sparse structures in the header. In other words,
6914 an extended_header is needed.
6915
6916 The @code{extended_header} structure is used for sparse files which
6917 need more sparse structures than can fit in the header. The header can
6918 fit 4 such structures; if more are needed, the flag @code{isextended}
6919 gets set and the next block is an @code{extended_header}.
6920
6921 Each @code{extended_header} structure contains an array of 21
6922 sparse structures, along with a similar @code{isextended} flag
6923 that the header had. There can be an indeterminate number of such
6924 @code{extended_header}s to describe a sparse file.
6925
6926 @table @asis
6927
6928 @item @code{REGTYPE}
6929 @itemx @code{AREGTYPE}
6930 These flags represent a regular file. In order to be compatible
6931 with older versions of @command{tar}, a @code{typeflag} value of
6932 @code{AREGTYPE} should be silently recognized as a regular file.
6933 New archives should be created using @code{REGTYPE}. Also, for
6934 backward compatibility, @command{tar} treats a regular file whose name
6935 ends with a slash as a directory.
6936
6937 @item @code{LNKTYPE}
6938 This flag represents a file linked to another file, of any type,
6939 previously archived. Such files are identified in Unix by each
6940 file having the same device and inode number. The linked-to name is
6941 specified in the @code{linkname} field with a trailing null.
6942
6943 @item @code{SYMTYPE}
6944 This represents a symbolic link to another file. The linked-to name
6945 is specified in the @code{linkname} field with a trailing null.
6946
6947 @item @code{CHRTYPE}
6948 @itemx @code{BLKTYPE}
6949 These represent character special files and block special files
6950 respectively. In this case the @code{devmajor} and @code{devminor}
6951 fields will contain the major and minor device numbers respectively.
6952 Operating systems may map the device specifications to their own
6953 local specification, or may ignore the entry.
6954
6955 @item @code{DIRTYPE}
6956 This flag specifies a directory or sub-directory. The directory
6957 name in the @code{name} field should end with a slash. On systems where
6958 disk allocation is performed on a directory basis, the @code{size} field
6959 will contain the maximum number of bytes (which may be rounded to
6960 the nearest disk block allocation unit) which the directory may
6961 hold. A @code{size} field of zero indicates no such limiting. Systems
6962 which do not support limiting in this manner should ignore the
6963 @code{size} field.
6964
6965 @item @code{FIFOTYPE}
6966 This specifies a FIFO special file. Note that the archiving of a
6967 FIFO file archives the existence of this file and not its contents.
6968
6969 @item @code{CONTTYPE}
6970 This specifies a contiguous file, which is the same as a normal
6971 file except that, in operating systems which support it, all its
6972 space is allocated contiguously on the disk. Operating systems
6973 which do not allow contiguous allocation should silently treat this
6974 type as a normal file.
6975
6976 @item @code{A} @dots{} @code{Z}
6977 These are reserved for custom implementations. Some of these are
6978 used in the @sc{gnu} modified format, as described below.
6979
6980 @end table
6981
6982 Other values are reserved for specification in future revisions of
6983 the P1003 standard, and should not be used by any @command{tar} program.
6984
6985 The @code{magic} field indicates that this archive was output in
6986 the P1003 archive format. If this field contains @code{TMAGIC},
6987 the @code{uname} and @code{gname} fields will contain the ASCII
6988 representation of the owner and group of the file respectively.
6989 If found, the user and group IDs are used rather than the values in
6990 the @code{uid} and @code{gid} fields.
6991
6992 For references, see ISO/IEC 9945-1:1990 or IEEE Std 1003.1-1990, pages
6993 169-173 (section 10.1) for @cite{Archive/Interchange File Format}; and
6994 IEEE Std 1003.2-1992, pages 380-388 (section 4.48) and pages 936-940
6995 (section E.4.48) for @cite{pax - Portable archive interchange}.
6996
6997 @node Extensions
6998 @section @sc{gnu} Extensions to the Archive Format
6999 @UNREVISED
7000
7001 The @sc{gnu} format uses additional file types to describe new types of
7002 files in an archive. These are listed below.
7003
7004 @table @code
7005 @item GNUTYPE_DUMPDIR
7006 @itemx 'D'
7007 This represents a directory and a list of files created by the
7008 @value{op-incremental} option. The @code{size} field gives the total
7009 size of the associated list of files. Each file name is preceded by
7010 either a @samp{Y} (the file should be in this archive) or an @samp{N}.
7011 (The file is a directory, or is not stored in the archive.) Each file
7012 name is terminated by a null. There is an additional null after the
7013 last file name.
7014
7015 @item GNUTYPE_MULTIVOL
7016 @itemx 'M'
7017 This represents a file continued from another volume of a multi-volume
7018 archive created with the @value{op-multi-volume} option. The original
7019 type of the file is not given here. The @code{size} field gives the
7020 maximum size of this piece of the file (assuming the volume does
7021 not end before the file is written out). The @code{offset} field
7022 gives the offset from the beginning of the file where this part of
7023 the file begins. Thus @code{size} plus @code{offset} should equal
7024 the original size of the file.
7025
7026 @item GNUTYPE_SPARSE
7027 @itemx 'S'
7028 This flag indicates that we are dealing with a sparse file. Note
7029 that archiving a sparse file requires special operations to find
7030 holes in the file, which mark the positions of these holes, along
7031 with the number of bytes of data to be found after the hole.
7032
7033 @item GNUTYPE_VOLHDR
7034 @itemx 'V'
7035 This file type is used to mark the volume header that was given with
7036 the @value{op-label} option when the archive was created. The @code{name}
7037 field contains the @code{name} given after the @value{op-label} option.
7038 The @code{size} field is zero. Only the first file in each volume
7039 of an archive should have this type.
7040
7041 @end table
7042
7043 You may have trouble reading a @sc{gnu} format archive on a non-@sc{gnu}
7044 system if the options @value{op-incremental}, @value{op-multi-volume},
7045 @value{op-sparse}, or @value{op-label} were used when writing the archive.
7046 In general, if @command{tar} does not use the @sc{gnu}-added fields of the
7047 header, other versions of @command{tar} should be able to read the
7048 archive. Otherwise, the @command{tar} program will give an error, the
7049 most likely one being a checksum error.
7050
7051 @node cpio
7052 @section Comparison of @command{tar} and @command{cpio}
7053 @UNREVISED
7054
7055 @FIXME{Reorganize the following material}
7056
7057 The @command{cpio} archive formats, like @command{tar}, do have maximum
7058 pathname lengths. The binary and old ASCII formats have a max path
7059 length of 256, and the new ASCII and CRC ASCII formats have a max
7060 path length of 1024. @sc{gnu} @command{cpio} can read and write archives
7061 with arbitrary pathname lengths, but other @command{cpio} implementations
7062 may crash unexplainedly trying to read them.
7063
7064 @command{tar} handles symbolic links in the form in which it comes in BSD;
7065 @command{cpio} doesn't handle symbolic links in the form in which it comes
7066 in System V prior to SVR4, and some vendors may have added symlinks
7067 to their system without enhancing @command{cpio} to know about them.
7068 Others may have enhanced it in a way other than the way I did it
7069 at Sun, and which was adopted by AT&T (and which is, I think, also
7070 present in the @command{cpio} that Berkeley picked up from AT&T and put
7071 into a later BSD release---I think I gave them my changes).
7072
7073 (SVR4 does some funny stuff with @command{tar}; basically, its @command{cpio}
7074 can handle @command{tar} format input, and write it on output, and it
7075 probably handles symbolic links. They may not have bothered doing
7076 anything to enhance @command{tar} as a result.)
7077
7078 @command{cpio} handles special files; traditional @command{tar} doesn't.
7079
7080 @command{tar} comes with V7, System III, System V, and BSD source;
7081 @command{cpio} comes only with System III, System V, and later BSD
7082 (4.3-tahoe and later).
7083
7084 @command{tar}'s way of handling multiple hard links to a file can handle
7085 file systems that support 32-bit inumbers (e.g., the BSD file system);
7086 @command{cpio}s way requires you to play some games (in its "binary"
7087 format, i-numbers are only 16 bits, and in its "portable ASCII" format,
7088 they're 18 bits---it would have to play games with the "file system ID"
7089 field of the header to make sure that the file system ID/i-number pairs
7090 of different files were always different), and I don't know which
7091 @command{cpio}s, if any, play those games. Those that don't might get
7092 confused and think two files are the same file when they're not, and
7093 make hard links between them.
7094
7095 @command{tar}s way of handling multiple hard links to a file places only
7096 one copy of the link on the tape, but the name attached to that copy
7097 is the @emph{only} one you can use to retrieve the file; @command{cpio}s
7098 way puts one copy for every link, but you can retrieve it using any
7099 of the names.
7100
7101 @quotation
7102 What type of check sum (if any) is used, and how is this calculated.
7103 @end quotation
7104
7105 See the attached manual pages for @command{tar} and @command{cpio} format.
7106 @command{tar} uses a checksum which is the sum of all the bytes in the
7107 @command{tar} header for a file; @command{cpio} uses no checksum.
7108
7109 @quotation
7110 If anyone knows why @command{cpio} was made when @command{tar} was present
7111 at the unix scene,
7112 @end quotation
7113
7114 It wasn't. @command{cpio} first showed up in PWB/UNIX 1.0; no
7115 generally-available version of UNIX had @command{tar} at the time. I don't
7116 know whether any version that was generally available @emph{within AT&T}
7117 had @command{tar}, or, if so, whether the people within AT&T who did
7118 @command{cpio} knew about it.
7119
7120 On restore, if there is a corruption on a tape @command{tar} will stop at
7121 that point, while @command{cpio} will skip over it and try to restore the
7122 rest of the files.
7123
7124 The main difference is just in the command syntax and header format.
7125
7126 @command{tar} is a little more tape-oriented in that everything is blocked
7127 to start on a record boundary.
7128
7129 @quotation
7130 Is there any differences between the ability to recover crashed
7131 archives between the two of them. (Is there any chance of recovering
7132 crashed archives at all.)
7133 @end quotation
7134
7135 Theoretically it should be easier under @command{tar} since the blocking
7136 lets you find a header with some variation of @samp{dd skip=@var{nn}}.
7137 However, modern @command{cpio}'s and variations have an option to just
7138 search for the next file header after an error with a reasonable chance
7139 of resyncing. However, lots of tape driver software won't allow you to
7140 continue past a media error which should be the only reason for getting
7141 out of sync unless a file changed sizes while you were writing the
7142 archive.
7143
7144 @quotation
7145 If anyone knows why @command{cpio} was made when @command{tar} was present
7146 at the unix scene, please tell me about this too.
7147 @end quotation
7148
7149 Probably because it is more media efficient (by not blocking everything
7150 and using only the space needed for the headers where @command{tar}
7151 always uses 512 bytes per file header) and it knows how to archive
7152 special files.
7153
7154 You might want to look at the freely available alternatives. The major
7155 ones are @command{afio}, @sc{gnu} @command{tar}, and @command{pax}, each of which
7156 have their own extensions with some backwards compatibility.
7157
7158 Sparse files were @command{tar}red as sparse files (which you can easily
7159 test, because the resulting archive gets smaller, and @sc{gnu} @command{cpio}
7160 can no longer read it).
7161
7162 @node Media
7163 @chapter Tapes and Other Archive Media
7164 @UNREVISED
7165
7166 A few special cases about tape handling warrant more detailed
7167 description. These special cases are discussed below.
7168
7169 Many complexities surround the use of @command{tar} on tape drives. Since
7170 the creation and manipulation of archives located on magnetic tape was
7171 the original purpose of @command{tar}, it contains many features making
7172 such manipulation easier.
7173
7174 Archives are usually written on dismountable media---tape cartridges,
7175 mag tapes, or floppy disks.
7176
7177 The amount of data a tape or disk holds depends not only on its size,
7178 but also on how it is formatted. A 2400 foot long reel of mag tape
7179 holds 40 megabytes of data when formatted at 1600 bits per inch. The
7180 physically smaller EXABYTE tape cartridge holds 2.3 gigabytes.
7181
7182 Magnetic media are re-usable---once the archive on a tape is no longer
7183 needed, the archive can be erased and the tape or disk used over.
7184 Media quality does deteriorate with use, however. Most tapes or disks
7185 should be discarded when they begin to produce data errors. EXABYTE
7186 tape cartridges should be discarded when they generate an @dfn{error
7187 count} (number of non-usable bits) of more than 10k.
7188
7189 Magnetic media are written and erased using magnetic fields, and
7190 should be protected from such fields to avoid damage to stored data.
7191 Sticking a floppy disk to a filing cabinet using a magnet is probably
7192 not a good idea.
7193
7194 @menu
7195 * Device:: Device selection and switching
7196 * Remote Tape Server::
7197 * Common Problems and Solutions::
7198 * Blocking:: Blocking
7199 * Many:: Many archives on one tape
7200 * Using Multiple Tapes:: Using Multiple Tapes
7201 * label:: Including a Label in the Archive
7202 * verify::
7203 * Write Protection::
7204 @end menu
7205
7206 @node Device
7207 @section Device Selection and Switching
7208 @UNREVISED
7209
7210 @table @kbd
7211 @item -f [@var{hostname}:]@var{file}
7212 @itemx --file=[@var{hostname}:]@var{file}
7213 Use archive file or device @var{file} on @var{hostname}.
7214 @end table
7215
7216 This option is used to specify the file name of the archive @command{tar}
7217 works on.
7218
7219 If the file name is @samp{-}, @command{tar} reads the archive from standard
7220 input (when listing or extracting), or writes it to standard output
7221 (when creating). If the @samp{-} file name is given when updating an
7222 archive, @command{tar} will read the original archive from its standard
7223 input, and will write the entire new archive to its standard output.
7224
7225 If the file name contains a @samp{:}, it is interpreted as
7226 @samp{hostname:file name}. If the @var{hostname} contains an @dfn{at}
7227 sign (@kbd{@@}), it is treated as @samp{user@@hostname:file name}. In
7228 either case, @command{tar} will invoke the command @command{rsh} (or
7229 @command{remsh}) to start up an @file{/etc/rmt} on the remote machine. If
7230 you give an alternate login name, it will be given to the @command{rsh}.
7231 Naturally, the remote machine must have an executable @file{/etc/rmt}.
7232 This program is free software from the University of California, and a
7233 copy of the source code can be found with the sources for @command{tar};
7234 it's compiled and installed by default.
7235
7236 If this option is not given, but the environment variable @env{TAPE} is
7237 set, its value is used; otherwise, old versions of @command{tar} used a default
7238 archive name (which was picked when @command{tar} was compiled). The
7239 default is normally set up to be the @dfn{first} tape drive or other
7240 transportable I/O medium on the system.
7241
7242 Starting with version 1.11.5, @sc{gnu} @command{tar} uses standard input and
7243 standard output as the default device, and I will not try anymore
7244 supporting automatic device detection at installation time. This was
7245 failing really in too many cases, it was hopeless. This is now
7246 completely left to the installer to override standard input and standard
7247 output for default device, if this seems preferable.
7248 Further, I think @emph{most} actual usages of @command{tar} are done with
7249 pipes or disks, not really tapes, cartridges or diskettes.
7250
7251 Some users think that using standard input and output is running
7252 after trouble. This could lead to a nasty surprise on your screen if
7253 you forget to specify an output file name---especially if you are going
7254 through a network or terminal server capable of buffering large amounts
7255 of output. We had so many bug reports in that area of configuring
7256 default tapes automatically, and so many contradicting requests, that
7257 we finally consider the problem to be portably intractable. We could
7258 of course use something like @samp{/dev/tape} as a default, but this
7259 is @emph{also} running after various kind of trouble, going from hung
7260 processes to accidental destruction of real tapes. After having seen
7261 all this mess, using standard input and output as a default really
7262 sounds like the only clean choice left, and a very useful one too.
7263
7264 @sc{gnu} @command{tar} reads and writes archive in records, I suspect this is the
7265 main reason why block devices are preferred over character devices.
7266 Most probably, block devices are more efficient too. The installer
7267 could also check for @samp{DEFTAPE} in @file{<sys/mtio.h>}.
7268
7269 @table @kbd
7270 @item --force-local
7271 Archive file is local even if it contains a colon.
7272
7273 @item --rsh-command=@var{command}
7274 Use remote @var{command} instead of @command{rsh}. This option exists
7275 so that people who use something other than the standard @command{rsh}
7276 (e.g., a Kerberized @command{rsh}) can access a remote device.
7277
7278 When this command is not used, the shell command found when
7279 the @command{tar} program was installed is used instead. This is
7280 the first found of @file{/usr/ucb/rsh}, @file{/usr/bin/remsh},
7281 @file{/usr/bin/rsh}, @file{/usr/bsd/rsh} or @file{/usr/bin/nsh}.
7282 The installer may have overridden this by defining the environment
7283 variable @env{RSH} @emph{at installation time}.
7284
7285 @item -[0-7][lmh]
7286 Specify drive and density.
7287
7288 @item -M
7289 @itemx --multi-volume
7290 Create/list/extract multi-volume archive.
7291
7292 This option causes @command{tar} to write a @dfn{multi-volume} archive---one
7293 that may be larger than will fit on the medium used to hold it.
7294 @xref{Multi-Volume Archives}.
7295
7296 @item -L @var{num}
7297 @itemx --tape-length=@var{num}
7298 Change tape after writing @var{num} x 1024 bytes.
7299
7300 This option might be useful when your tape drivers do not properly
7301 detect end of physical tapes. By being slightly conservative on the
7302 maximum tape length, you might avoid the problem entirely.
7303
7304 @item -F @var{file}
7305 @itemx --info-script=@var{file}
7306 @itemx --new-volume-script=@var{file}
7307 Execute @file{file} at end of each tape. If @file{file} exits with
7308 nonzero status, exit. This implies @value{op-multi-volume}.
7309 @end table
7310
7311 @node Remote Tape Server
7312 @section The Remote Tape Server
7313
7314 @cindex remote tape drive
7315 @pindex rmt
7316 In order to access the tape drive on a remote machine, @command{tar}
7317 uses the remote tape server written at the University of California at
7318 Berkeley. The remote tape server must be installed as @file{/etc/rmt}
7319 on any machine whose tape drive you want to use. @command{tar} calls
7320 @file{/etc/rmt} by running an @command{rsh} or @command{remsh} to the remote
7321 machine, optionally using a different login name if one is supplied.
7322
7323 A copy of the source for the remote tape server is provided. It is
7324 Copyright @copyright{} 1983 by the Regents of the University of
7325 California, but can be freely distributed. Instructions for compiling
7326 and installing it are included in the @file{Makefile}.
7327
7328 @cindex absolute file names
7329 Unless you use the @value{op-absolute-names} option, @sc{gnu} @command{tar} will
7330 not allow you to create an archive that contains absolute file names
7331 (a file name beginning with @samp{/}.) If you try, @command{tar} will
7332 automatically remove the leading @samp{/} from the file names it
7333 stores in the archive. It will also type a warning message telling
7334 you what it is doing.
7335
7336 When reading an archive that was created with a different @command{tar}
7337 program, @sc{gnu} @command{tar} automatically extracts entries in the archive
7338 which have absolute file names as if the file names were not absolute.
7339 This is an important feature. A visitor here once gave a
7340 @command{tar} tape to an operator to restore; the operator used Sun @command{tar}
7341 instead of @sc{gnu} @command{tar}, and the result was that it replaced large
7342 portions of our @file{/bin} and friends with versions from the tape;
7343 needless to say, we were unhappy about having to recover the file system
7344 from backup tapes.
7345
7346 For example, if the archive contained a file @file{/usr/bin/computoy},
7347 @sc{gnu} @command{tar} would extract the file to @file{usr/bin/computoy},
7348 relative to the current directory. If you want to extract the files in
7349 an archive to the same absolute names that they had when the archive
7350 was created, you should do a @samp{cd /} before extracting the files
7351 from the archive, or you should either use the @value{op-absolute-names}
7352 option, or use the command @samp{tar -C / @dots{}}.
7353
7354 @cindex Ultrix 3.1 and write failure
7355 Some versions of Unix (Ultrix 3.1 is know to have this problem),
7356 can claim that a short write near the end of a tape succeeded,
7357 when it actually failed. This will result in the -M option not
7358 working correctly. The best workaround at the moment is to use a
7359 significantly larger blocking factor than the default 20.
7360
7361 In order to update an archive, @command{tar} must be able to backspace the
7362 archive in order to reread or rewrite a record that was just read (or
7363 written). This is currently possible only on two kinds of files: normal
7364 disk files (or any other file that can be backspaced with @samp{lseek}),
7365 and industry-standard 9-track magnetic tape (or any other kind of tape
7366 that can be backspaced with the @code{MTIOCTOP} @code{ioctl}.
7367
7368 This means that the @value{op-append}, @value{op-update},
7369 @value{op-concatenate}, and @value{op-delete} commands will not work on any
7370 other kind of file. Some media simply cannot be backspaced, which
7371 means these commands and options will never be able to work on them.
7372 These non-backspacing media include pipes and cartridge tape drives.
7373
7374 Some other media can be backspaced, and @command{tar} will work on them
7375 once @command{tar} is modified to do so.
7376
7377 Archives created with the @value{op-multi-volume}, @value{op-label}, and
7378 @value{op-incremental} options may not be readable by other version
7379 of @command{tar}. In particular, restoring a file that was split over
7380 a volume boundary will require some careful work with @command{dd}, if
7381 it can be done at all. Other versions of @command{tar} may also create
7382 an empty file whose name is that of the volume header. Some versions
7383 of @command{tar} may create normal files instead of directories archived
7384 with the @value{op-incremental} option.
7385
7386 @node Common Problems and Solutions
7387 @section Some Common Problems and their Solutions
7388
7389 @ifclear PUBLISH
7390
7391 @format
7392 errors from system:
7393 permission denied
7394 no such file or directory
7395 not owner
7396
7397 errors from @command{tar}:
7398 directory checksum error
7399 header format error
7400
7401 errors from media/system:
7402 i/o error
7403 device busy
7404 @end format
7405
7406 @end ifclear
7407
7408 @node Blocking
7409 @section Blocking
7410 @UNREVISED
7411
7412 @dfn{Block} and @dfn{record} terminology is rather confused, and it
7413 is also confusing to the expert reader. On the other hand, readers
7414 who are new to the field have a fresh mind, and they may safely skip
7415 the next two paragraphs, as the remainder of this manual uses those
7416 two terms in a quite consistent way.
7417
7418 John Gilmore, the writer of the public domain @command{tar} from which
7419 @sc{gnu} @command{tar} was originally derived, wrote (June 1995):
7420
7421 @quotation
7422 The nomenclature of tape drives comes from IBM, where I believe
7423 they were invented for the IBM 650 or so. On IBM mainframes, what
7424 is recorded on tape are tape blocks. The logical organization of
7425 data is into records. There are various ways of putting records into
7426 blocks, including @code{F} (fixed sized records), @code{V} (variable
7427 sized records), @code{FB} (fixed blocked: fixed size records, @var{n}
7428 to a block), @code{VB} (variable size records, @var{n} to a block),
7429 @code{VSB} (variable spanned blocked: variable sized records that can
7430 occupy more than one block), etc. The @code{JCL} @samp{DD RECFORM=}
7431 parameter specified this to the operating system.
7432
7433 The Unix man page on @command{tar} was totally confused about this.
7434 When I wrote @code{PD TAR}, I used the historically correct terminology
7435 (@command{tar} writes data records, which are grouped into blocks).
7436 It appears that the bogus terminology made it into @sc{posix} (no surprise
7437 here), and now Fran@,{c}ois has migrated that terminology back
7438 into the source code too.
7439 @end quotation
7440
7441 The term @dfn{physical block} means the basic transfer chunk from or
7442 to a device, after which reading or writing may stop without anything
7443 being lost. In this manual, the term @dfn{block} usually refers to
7444 a disk physical block, @emph{assuming} that each disk block is 512
7445 bytes in length. It is true that some disk devices have different
7446 physical blocks, but @command{tar} ignore these differences in its own
7447 format, which is meant to be portable, so a @command{tar} block is always
7448 512 bytes in length, and @dfn{block} always mean a @command{tar} block.
7449 The term @dfn{logical block} often represents the basic chunk of
7450 allocation of many disk blocks as a single entity, which the operating
7451 system treats somewhat atomically; this concept is only barely used
7452 in @sc{gnu} @command{tar}.
7453
7454 The term @dfn{physical record} is another way to speak of a physical
7455 block, those two terms are somewhat interchangeable. In this manual,
7456 the term @dfn{record} usually refers to a tape physical block,
7457 @emph{assuming} that the @command{tar} archive is kept on magnetic tape.
7458 It is true that archives may be put on disk or used with pipes,
7459 but nevertheless, @command{tar} tries to read and write the archive one
7460 @dfn{record} at a time, whatever the medium in use. One record is made
7461 up of an integral number of blocks, and this operation of putting many
7462 disk blocks into a single tape block is called @dfn{reblocking}, or
7463 more simply, @dfn{blocking}. The term @dfn{logical record} refers to
7464 the logical organization of many characters into something meaningful
7465 to the application. The term @dfn{unit record} describes a small set
7466 of characters which are transmitted whole to or by the application,
7467 and often refers to a line of text. Those two last terms are unrelated
7468 to what we call a @dfn{record} in @sc{gnu} @command{tar}.
7469
7470 When writing to tapes, @command{tar} writes the contents of the archive
7471 in chunks known as @dfn{records}. To change the default blocking
7472 factor, use the @value{op-blocking-factor} option. Each record will
7473 then be composed of @var{512-size} blocks. (Each @command{tar} block is
7474 512 bytes. @xref{Standard}.) Each file written to the archive uses
7475 at least one full record. As a result, using a larger record size
7476 can result in more wasted space for small files. On the other hand, a
7477 larger record size can often be read and written much more efficiently.
7478
7479 Further complicating the problem is that some tape drives ignore the
7480 blocking entirely. For these, a larger record size can still improve
7481 performance (because the software layers above the tape drive still
7482 honor the blocking), but not as dramatically as on tape drives that
7483 honor blocking.
7484
7485 When reading an archive, @command{tar} can usually figure out the record
7486 size on itself. When this is the case, and a non-standard record size
7487 was used when the archive was created, @command{tar} will print a message
7488 about a non-standard blocking factor, and then operate normally. On
7489 some tape devices, however, @command{tar} cannot figure out the record size
7490 itself. On most of those, you can specify a blocking factor (with
7491 @value{op-blocking-factor}) larger than the actual blocking factor, and then use
7492 the @value{op-read-full-records} option. (If you specify a blocking factor
7493 with @value{op-blocking-factor} and don't use the @value{op-read-full-records}
7494 option, then @command{tar} will not attempt to figure out the recording size
7495 itself.) On some devices, you must always specify the record size
7496 exactly with @value{op-blocking-factor} when reading, because @command{tar} cannot
7497 figure it out. In any case, use @value{op-list} before doing any
7498 extractions to see whether @command{tar} is reading the archive correctly.
7499
7500 @command{tar} blocks are all fixed size (512 bytes), and its scheme for
7501 putting them into records is to put a whole number of them (one or
7502 more) into each record. @command{tar} records are all the same size;
7503 at the end of the file there's a block containing all zeros, which
7504 is how you tell that the remainder of the last record(s) are garbage.
7505
7506 In a standard @command{tar} file (no options), the block size is 512
7507 and the record size is 10240, for a blocking factor of 20. What the
7508 @value{op-blocking-factor} option does is sets the blocking factor,
7509 changing the record size while leaving the block size at 512 bytes.
7510 20 was fine for ancient 800 or 1600 bpi reel-to-reel tape drives;
7511 most tape drives these days prefer much bigger records in order to
7512 stream and not waste tape. When writing tapes for myself, some tend
7513 to use a factor of the order of 2048, say, giving a record size of
7514 around one megabyte.
7515
7516 If you use a blocking factor larger than 20, older @command{tar} programs
7517 might not be able to read the archive, so we recommend this as a limit
7518 to use in practice. @sc{gnu} @command{tar}, however, will support arbitrarily
7519 large record sizes, limited only by the amount of virtual memory or the
7520 physical characteristics of the tape device.
7521
7522 @menu
7523 * Format Variations:: Format Variations
7524 * Blocking Factor:: The Blocking Factor of an Archive
7525 @end menu
7526
7527 @node Format Variations
7528 @subsection Format Variations
7529 @cindex Format Parameters
7530 @cindex Format Options
7531 @cindex Options, archive format specifying
7532 @cindex Options, format specifying
7533 @UNREVISED
7534
7535 Format parameters specify how an archive is written on the archive
7536 media. The best choice of format parameters will vary depending on
7537 the type and number of files being archived, and on the media used to
7538 store the archive.
7539
7540 To specify format parameters when accessing or creating an archive,
7541 you can use the options described in the following sections.
7542 If you do not specify any format parameters, @command{tar} uses
7543 default parameters. You cannot modify a compressed archive.
7544 If you create an archive with the @value{op-blocking-factor} option
7545 specified (@value{pxref-blocking-factor}), you must specify that
7546 blocking-factor when operating on the archive. @xref{Formats}, for other
7547 examples of format parameter considerations.
7548
7549 @node Blocking Factor
7550 @subsection The Blocking Factor of an Archive
7551 @cindex Blocking Factor
7552 @cindex Record Size
7553 @cindex Number of blocks per record
7554 @cindex Number of bytes per record
7555 @cindex Bytes per record
7556 @cindex Blocks per record
7557 @UNREVISED
7558
7559 The data in an archive is grouped into blocks, which are 512 bytes.
7560 Blocks are read and written in whole number multiples called
7561 @dfn{records}. The number of blocks in a record (ie. the size of a
7562 record in units of 512 bytes) is called the @dfn{blocking factor}.
7563 The @value{op-blocking-factor} option specifies the blocking factor of
7564 an archive. The default blocking factor is typically 20 (ie.@:
7565 10240 bytes), but can be specified at installation. To find out
7566 the blocking factor of an existing archive, use @samp{tar --list
7567 --file=@var{archive-name}}. This may not work on some devices.
7568
7569 Records are separated by gaps, which waste space on the archive media.
7570 If you are archiving on magnetic tape, using a larger blocking factor
7571 (and therefore larger records) provides faster throughput and allows you
7572 to fit more data on a tape (because there are fewer gaps). If you are
7573 archiving on cartridge, a very large blocking factor (say 126 or more)
7574 greatly increases performance. A smaller blocking factor, on the other
7575 hand, may be useful when archiving small files, to avoid archiving lots
7576 of nulls as @command{tar} fills out the archive to the end of the record.
7577 In general, the ideal record size depends on the size of the
7578 inter-record gaps on the tape you are using, and the average size of the
7579 files you are archiving. @xref{create}, for information on
7580 writing archives.
7581
7582 @FIXME{Need example of using a cartridge with blocking factor=126 or more.}
7583
7584 Archives with blocking factors larger than 20 cannot be read
7585 by very old versions of @command{tar}, or by some newer versions
7586 of @command{tar} running on old machines with small address spaces.
7587 With @sc{gnu} @command{tar}, the blocking factor of an archive is limited
7588 only by the maximum record size of the device containing the archive,
7589 or by the amount of available virtual memory.
7590
7591 Also, on some systems, not using adequate blocking factors, as sometimes
7592 imposed by the device drivers, may yield unexpected diagnostics. For
7593 example, this has been reported:
7594
7595 @example
7596 Cannot write to /dev/dlt: Invalid argument
7597 @end example
7598
7599 @noindent
7600 In such cases, it sometimes happen that the @command{tar} bundled by the
7601 system is aware of block size idiosyncrasies, while @sc{gnu} @command{tar} requires
7602 an explicit specification for the block size, which it cannot guess.
7603 This yields some people to consider @sc{gnu} @command{tar} is misbehaving, because
7604 by comparison, @cite{the bundle @command{tar} works OK}. Adding @w{@kbd{-b
7605 256}}, for example, might resolve the problem.
7606
7607 If you use a non-default blocking factor when you create an archive, you
7608 must specify the same blocking factor when you modify that archive. Some
7609 archive devices will also require you to specify the blocking factor when
7610 reading that archive, however this is not typically the case. Usually, you
7611 can use @value{op-list} without specifying a blocking factor---@command{tar}
7612 reports a non-default record size and then lists the archive members as
7613 it would normally. To extract files from an archive with a non-standard
7614 blocking factor (particularly if you're not sure what the blocking factor
7615 is), you can usually use the @value{op-read-full-records} option while
7616 specifying a blocking factor larger then the blocking factor of the archive
7617 (ie. @samp{tar --extract --read-full-records --blocking-factor=300}.
7618 @xref{list}, for more information on the @value{op-list}
7619 operation. @xref{Reading}, for a more detailed explanation of that option.
7620
7621 @table @kbd
7622 @item --blocking-factor=@var{number}
7623 @itemx -b @var{number}
7624 Specifies the blocking factor of an archive. Can be used with any
7625 operation, but is usually not necessary with @value{op-list}.
7626 @end table
7627
7628 Device blocking
7629
7630 @table @kbd
7631 @item -b @var{blocks}
7632 @itemx --blocking-factor=@var{blocks}
7633 Set record size to @math{@var{blocks} * 512} bytes.
7634
7635 This option is used to specify a @dfn{blocking factor} for the archive.
7636 When reading or writing the archive, @command{tar}, will do reads and writes
7637 of the archive in records of @math{@var{block}*512} bytes. This is true
7638 even when the archive is compressed. Some devices requires that all
7639 write operations be a multiple of a certain size, and so, @command{tar}
7640 pads the archive out to the next record boundary.
7641
7642 The default blocking factor is set when @command{tar} is compiled, and is
7643 typically 20. Blocking factors larger than 20 cannot be read by very
7644 old versions of @command{tar}, or by some newer versions of @command{tar}
7645 running on old machines with small address spaces.
7646
7647 With a magnetic tape, larger records give faster throughput and fit
7648 more data on a tape (because there are fewer inter-record gaps).
7649 If the archive is in a disk file or a pipe, you may want to specify
7650 a smaller blocking factor, since a large one will result in a large
7651 number of null bytes at the end of the archive.
7652
7653 When writing cartridge or other streaming tapes, a much larger
7654 blocking factor (say 126 or more) will greatly increase performance.
7655 However, you must specify the same blocking factor when reading or
7656 updating the archive.
7657
7658 Apparently, Exabyte drives have a physical block size of 8K bytes.
7659 If we choose our blocksize as a multiple of 8k bytes, then the problem
7660 seems to dissapper. Id est, we are using block size of 112 right
7661 now, and we haven't had the problem since we switched@dots{}
7662
7663 With @sc{gnu} @command{tar} the blocking factor is limited only by the maximum
7664 record size of the device containing the archive, or by the amount of
7665 available virtual memory.
7666
7667 However, deblocking or reblocking is virtually avoided in a special
7668 case which often occurs in practice, but which requires all the
7669 following conditions to be simultaneously true:
7670 @itemize @bullet
7671 @item
7672 the archive is subject to a compression option,
7673 @item
7674 the archive is not handled through standard input or output, nor
7675 redirected nor piped,
7676 @item
7677 the archive is directly handled to a local disk, instead of any special
7678 device,
7679 @item
7680 @value{op-blocking-factor} is not explicitly specified on the @command{tar}
7681 invocation.
7682 @end itemize
7683
7684 In previous versions of @sc{gnu} @command{tar}, the @samp{--compress-block}
7685 option (or even older: @samp{--block-compress}) was necessary to
7686 reblock compressed archives. It is now a dummy option just asking
7687 not to be used, and otherwise ignored. If the output goes directly
7688 to a local disk, and not through stdout, then the last write is
7689 not extended to a full record size. Otherwise, reblocking occurs.
7690 Here are a few other remarks on this topic:
7691
7692 @itemize @bullet
7693
7694 @item
7695 @command{gzip} will complain about trailing garbage if asked to
7696 uncompress a compressed archive on tape, there is an option to turn
7697 the message off, but it breaks the regularity of simply having to use
7698 @samp{@var{prog} -d} for decompression. It would be nice if gzip was
7699 silently ignoring any number of trailing zeros. I'll ask Jean-loup
7700 Gailly, by sending a copy of this message to him.
7701
7702 @item
7703 @command{compress} does not show this problem, but as Jean-loup pointed
7704 out to Michael, @samp{compress -d} silently adds garbage after
7705 the result of decompression, which tar ignores because it already
7706 recognized its end-of-file indicator. So this bug may be safely
7707 ignored.
7708
7709 @item
7710 @samp{gzip -d -q} will be silent about the trailing zeros indeed,
7711 but will still return an exit status of 2 which tar reports in turn.
7712 @command{tar} might ignore the exit status returned, but I hate doing
7713 that, as it weakens the protection @command{tar} offers users against
7714 other possible problems at decompression time. If @command{gzip} was
7715 silently skipping trailing zeros @emph{and} also avoiding setting the
7716 exit status in this innocuous case, that would solve this situation.
7717
7718 @item
7719 @command{tar} should become more solid at not stopping to read a pipe at
7720 the first null block encountered. This inelegantly breaks the pipe.
7721 @command{tar} should rather drain the pipe out before exiting itself.
7722 @end itemize
7723
7724 @item -i
7725 @itemx --ignore-zeros
7726 Ignore blocks of zeros in archive (means EOF).
7727
7728 The @value{op-ignore-zeros} option causes @command{tar} to ignore blocks
7729 of zeros in the archive. Normally a block of zeros indicates the
7730 end of the archive, but when reading a damaged archive, or one which
7731 was created by concatenating several archives together, this option
7732 allows @command{tar} to read the entire archive. This option is not on
7733 by default because many versions of @command{tar} write garbage after
7734 the zeroed blocks.
7735
7736 Note that this option causes @command{tar} to read to the end of the
7737 archive file, which may sometimes avoid problems when multiple files
7738 are stored on a single physical tape.
7739
7740 @item -B
7741 @itemx --read-full-records
7742 Reblock as we read (for reading 4.2BSD pipes).
7743
7744 If @value{op-read-full-records} is used, @command{tar} will not panic if an
7745 attempt to read a record from the archive does not return a full record.
7746 Instead, @command{tar} will keep reading until it has obtained a full
7747 record.
7748
7749 This option is turned on by default when @command{tar} is reading
7750 an archive from standard input, or from a remote machine. This is
7751 because on BSD Unix systems, a read of a pipe will return however
7752 much happens to be in the pipe, even if it is less than @command{tar}
7753 requested. If this option was not used, @command{tar} would fail as
7754 soon as it read an incomplete record from the pipe.
7755
7756 This option is also useful with the commands for updating an archive.
7757
7758 @end table
7759
7760 Tape blocking
7761
7762 @FIXME{Appropriate options should be moved here from elsewhere.}
7763
7764 @cindex blocking factor
7765 @cindex tape blocking
7766
7767 When handling various tapes or cartridges, you have to take care of
7768 selecting a proper blocking, that is, the number of disk blocks you
7769 put together as a single tape block on the tape, without intervening
7770 tape gaps. A @dfn{tape gap} is a small landing area on the tape
7771 with no information on it, used for decelerating the tape to a
7772 full stop, and for later regaining the reading or writing speed.
7773 When the tape driver starts reading a record, the record has to
7774 be read whole without stopping, as a tape gap is needed to stop the
7775 tape motion without loosing information.
7776
7777 @cindex Exabyte blocking
7778 @cindex DAT blocking
7779 Using higher blocking (putting more disk blocks per tape block) will use
7780 the tape more efficiently as there will be less tape gaps. But reading
7781 such tapes may be more difficult for the system, as more memory will be
7782 required to receive at once the whole record. Further, if there is a
7783 reading error on a huge record, this is less likely that the system will
7784 succeed in recovering the information. So, blocking should not be too
7785 low, nor it should be too high. @command{tar} uses by default a blocking of
7786 20 for historical reasons, and it does not really matter when reading or
7787 writing to disk. Current tape technology would easily accommodate higher
7788 blockings. Sun recommends a blocking of 126 for Exabytes and 96 for DATs.
7789 We were told that for some DLT drives, the blocking should be a multiple
7790 of 4Kb, preferably 64Kb (@w{@kbd{-b 128}}) or 256 for decent performance.
7791 Other manufacturers may use different recommendations for the same tapes.
7792 This might also depends of the buffering techniques used inside modern
7793 tape controllers. Some imposes a minimum blocking, or a maximum blocking.
7794 Others request blocking to be some exponent of two.
7795
7796 So, there is no fixed rule for blocking. But blocking at read time
7797 should ideally be the same as blocking used at write time. At one place
7798 I know, with a wide variety of equipment, they found it best to use a
7799 blocking of 32 to guarantee that their tapes are fully interchangeable.
7800
7801 I was also told that, for recycled tapes, prior erasure (by the same
7802 drive unit that will be used to create the archives) sometimes lowers
7803 the error rates observed at rewriting time.
7804
7805 I might also use @samp{--number-blocks} instead of
7806 @samp{--block-number}, so @samp{--block} will then expand to
7807 @samp{--blocking-factor} unambiguously.
7808
7809 @node Many
7810 @section Many Archives on One Tape
7811
7812 @FIXME{Appropriate options should be moved here from elsewhere.}
7813
7814 @findex ntape @r{device}
7815 Most tape devices have two entries in the @file{/dev} directory, or
7816 entries that come in pairs, which differ only in the minor number for
7817 this device. Let's take for example @file{/dev/tape}, which often
7818 points to the only or usual tape device of a given system. There might
7819 be a corresponding @file{/dev/nrtape} or @file{/dev/ntape}. The simpler
7820 name is the @emph{rewinding} version of the device, while the name
7821 having @samp{nr} in it is the @emph{no rewinding} version of the same
7822 device.
7823
7824 A rewinding tape device will bring back the tape to its beginning point
7825 automatically when this device is opened or closed. Since @command{tar}
7826 opens the archive file before using it and closes it afterwards, this
7827 means that a simple:
7828
7829 @example
7830 $ @kbd{tar cf /dev/tape @var{directory}}
7831 @end example
7832
7833 @noindent
7834 will reposition the tape to its beginning both prior and after saving
7835 @var{directory} contents to it, thus erasing prior tape contents and
7836 making it so that any subsequent write operation will destroy what has
7837 just been saved.
7838
7839 @cindex tape positioning
7840 So, a rewinding device is normally meant to hold one and only one file.
7841 If you want to put more than one @command{tar} archive on a given tape, you
7842 will need to avoid using the rewinding version of the tape device. You
7843 will also have to pay special attention to tape positioning. Errors in
7844 positioning may overwrite the valuable data already on your tape. Many
7845 people, burnt by past experiences, will only use rewinding devices and
7846 limit themselves to one file per tape, precisely to avoid the risk of
7847 such errors. Be fully aware that writing at the wrong position on a
7848 tape loses all information past this point and most probably until the
7849 end of the tape, and this destroyed information @emph{cannot} be
7850 recovered.
7851
7852 To save @var{directory-1} as a first archive at the beginning of a
7853 tape, and leave that tape ready for a second archive, you should use:
7854
7855 @example
7856 $ @kbd{mt -f /dev/nrtape rewind}
7857 $ @kbd{tar cf /dev/nrtape @var{directory-1}}
7858 @end example
7859
7860 @cindex tape marks
7861 @dfn{Tape marks} are special magnetic patterns written on the tape
7862 media, which are later recognizable by the reading hardware. These
7863 marks are used after each file, when there are many on a single tape.
7864 An empty file (that is to say, two tape marks in a row) signal the
7865 logical end of the tape, after which no file exist. Usually,
7866 non-rewinding tape device drivers will react to the close request issued
7867 by @command{tar} by first writing two tape marks after your archive, and by
7868 backspacing over one of these. So, if you remove the tape at that time
7869 from the tape drive, it is properly terminated. But if you write
7870 another file at the current position, the second tape mark will be
7871 erased by the new information, leaving only one tape mark between files.
7872
7873 So, you may now save @var{directory-2} as a second archive after the
7874 first on the same tape by issuing the command:
7875
7876 @example
7877 $ @kbd{tar cf /dev/nrtape @var{directory-2}}
7878 @end example
7879
7880 @noindent
7881 and so on for all the archives you want to put on the same tape.
7882
7883 Another usual case is that you do not write all the archives the same
7884 day, and you need to remove and store the tape between two archive
7885 sessions. In general, you must remember how many files are already
7886 saved on your tape. Suppose your tape already has 16 files on it, and
7887 that you are ready to write the 17th. You have to take care of skipping
7888 the first 16 tape marks before saving @var{directory-17}, say, by using
7889 these commands:
7890
7891 @example
7892 $ @kbd{mt -f /dev/nrtape rewind}
7893 $ @kbd{mt -f /dev/nrtape fsf 16}
7894 $ @kbd{tar cf /dev/nrtape @var{directory-17}}
7895 @end example
7896
7897 In all the previous examples, we put aside blocking considerations, but
7898 you should do the proper things for that as well. @xref{Blocking}.
7899
7900 @menu
7901 * Tape Positioning:: Tape Positions and Tape Marks
7902 * mt:: The @command{mt} Utility
7903 @end menu
7904
7905 @node Tape Positioning
7906 @subsection Tape Positions and Tape Marks
7907 @UNREVISED
7908
7909 Just as archives can store more than one file from the file system,
7910 tapes can store more than one archive file. To keep track of where
7911 archive files (or any other type of file stored on tape) begin and
7912 end, tape archive devices write magnetic @dfn{tape marks} on the
7913 archive media. Tape drives write one tape mark between files,
7914 two at the end of all the file entries.
7915
7916 If you think of data as a series of records "rrrr"'s, and tape marks as
7917 "*"'s, a tape might look like the following:
7918
7919 @example
7920 rrrr*rrrrrr*rrrrr*rr*rrrrr**-------------------------
7921 @end example
7922
7923 Tape devices read and write tapes using a read/write @dfn{tape
7924 head}---a physical part of the device which can only access one
7925 point on the tape at a time. When you use @command{tar} to read or
7926 write archive data from a tape device, the device will begin reading
7927 or writing from wherever on the tape the tape head happens to be,
7928 regardless of which archive or what part of the archive the tape
7929 head is on. Before writing an archive, you should make sure that no
7930 data on the tape will be overwritten (unless it is no longer needed).
7931 Before reading an archive, you should make sure the tape head is at
7932 the beginning of the archive you want to read. (The @code{restore}
7933 script will find the archive automatically. @FIXME{There is no such
7934 restore script!}@FIXME-xref{Scripted Restoration}@xref{mt}, for
7935 an explanation of the tape moving utility.
7936
7937 If you want to add new archive file entries to a tape, you should
7938 advance the tape to the end of the existing file entries, backspace
7939 over the last tape mark, and write the new archive file. If you were
7940 to add two archives to the example above, the tape might look like the
7941 following:
7942
7943 @example
7944 rrrr*rrrrrr*rrrrr*rr*rrrrr*rrr*rrrr**----------------
7945 @end example
7946
7947 @node mt
7948 @subsection The @command{mt} Utility
7949 @UNREVISED
7950
7951 @FIXME{Is it true that this only works on non-block devices?
7952 should explain the difference, (fixed or variable).}
7953 @value{xref-blocking-factor}.
7954
7955 You can use the @command{mt} utility to advance or rewind a tape past a
7956 specified number of archive files on the tape. This will allow you
7957 to move to the beginning of an archive before extracting or reading
7958 it, or to the end of all the archives before writing a new one.
7959 @FIXME{Why isn't there an "advance 'til you find two tape marks
7960 together"?}
7961
7962 The syntax of the @command{mt} command is:
7963
7964 @example
7965 @kbd{mt [-f @var{tapename}] @var{operation} [@var{number}]}
7966 @end example
7967
7968 where @var{tapename} is the name of the tape device, @var{number} is
7969 the number of times an operation is performed (with a default of one),
7970 and @var{operation} is one of the following:
7971
7972 @FIXME{is there any use for record operations?}
7973
7974 @table @kbd
7975 @item eof
7976 @itemx weof
7977 Writes @var{number} tape marks at the current position on the tape.
7978
7979 @item fsf
7980 Moves tape position forward @var{number} files.
7981
7982 @item bsf
7983 Moves tape position back @var{number} files.
7984
7985 @item rewind
7986 Rewinds the tape. (Ignores @var{number}).
7987
7988 @item offline
7989 @itemx rewoff1
7990 Rewinds the tape and takes the tape device off-line. (Ignores @var{number}).
7991
7992 @item status
7993 Prints status information about the tape unit.
7994
7995 @end table
7996
7997 @FIXME{Is there a better way to frob the spacing on the list?}
7998
7999 If you don't specify a @var{tapename}, @command{mt} uses the environment
8000 variable @env{TAPE}; if @env{TAPE} is not set, @command{mt} uses the device
8001 @file{/dev/rmt12}.
8002
8003 @command{mt} returns a 0 exit status when the operation(s) were
8004 successful, 1 if the command was unrecognized, and 2 if an operation
8005 failed.
8006
8007 @FIXME{New node on how to find an archive?}
8008
8009 If you use @value{op-extract} with the @value{op-label} option specified,
8010 @command{tar} will read an archive label (the tape head has to be positioned
8011 on it) and print an error if the archive label doesn't match the
8012 @var{archive-name} specified. @var{archive-name} can be any regular
8013 expression. If the labels match, @command{tar} extracts the archive.
8014 @value{xref-label}.
8015 @FIXME-xref{Matching Format Parameters}@FIXME{fix cross
8016 references}@samp{tar --list --label} will cause @command{tar} to print the
8017 label.
8018
8019 @FIXME{Program to list all the labels on a tape?}
8020
8021 @node Using Multiple Tapes
8022 @section Using Multiple Tapes
8023 @UNREVISED
8024
8025 Often you might want to write a large archive, one larger than will fit
8026 on the actual tape you are using. In such a case, you can run multiple
8027 @command{tar} commands, but this can be inconvenient, particularly if you
8028 are using options like @value{op-exclude} or dumping entire filesystems.
8029 Therefore, @command{tar} supports multiple tapes automatically.
8030
8031 Use @value{op-multi-volume} on the command line, and then @command{tar} will,
8032 when it reaches the end of the tape, prompt for another tape, and
8033 continue the archive. Each tape will have an independent archive, and
8034 can be read without needing the other. (As an exception to this, the
8035 file that @command{tar} was archiving when it ran out of tape will usually
8036 be split between the two archives; in this case you need to extract from
8037 the first archive, using @value{op-multi-volume}, and then put in the
8038 second tape when prompted, so @command{tar} can restore both halves of the
8039 file.)
8040
8041 @sc{gnu} @command{tar} multi-volume archives do not use a truly portable format.
8042 You need @sc{gnu} @command{tar} at both end to process them properly.
8043
8044 When prompting for a new tape, @command{tar} accepts any of the following
8045 responses:
8046
8047 @table @kbd
8048 @item ?
8049 Request @command{tar} to explain possible responses
8050 @item q
8051 Request @command{tar} to exit immediately.
8052 @item n @var{file name}
8053 Request @command{tar} to write the next volume on the file @var{file name}.
8054 @item !
8055 Request @command{tar} to run a subshell.
8056 @item y
8057 Request @command{tar} to begin writing the next volume.
8058 @end table
8059
8060 (You should only type @samp{y} after you have changed the tape;
8061 otherwise @command{tar} will write over the volume it just finished.)
8062
8063 If you want more elaborate behavior than this, give @command{tar} the
8064 @value{op-info-script} option. The file @var{script-name} is expected
8065 to be a program (or shell script) to be run instead of the normal
8066 prompting procedure. If the program fails, @command{tar} exits;
8067 otherwise, @command{tar} begins writing the next volume. The behavior
8068 of the
8069 @samp{n} response to the normal tape-change prompt is not available
8070 if you use @value{op-info-script}.
8071
8072 The method @command{tar} uses to detect end of tape is not perfect, and
8073 fails on some operating systems or on some devices. You can use the
8074 @value{op-tape-length} option if @command{tar} can't detect the end of the
8075 tape itself. This option selects @value{op-multi-volume} automatically.
8076 The @var{size} argument should then be the usable size of the tape.
8077 But for many devices, and floppy disks in particular, this option is
8078 never required for real, as far as we know.
8079
8080 The volume number used by @command{tar} in its tape-change prompt
8081 can be changed; if you give the @value{op-volno-file} option, then
8082 @var{file-of-number} should be an unexisting file to be created, or else,
8083 a file already containing a decimal number. That number will be used
8084 as the volume number of the first volume written. When @command{tar} is
8085 finished, it will rewrite the file with the now-current volume number.
8086 (This does not change the volume number written on a tape label, as
8087 per @value{ref-label}, it @emph{only} affects the number used in
8088 the prompt.)
8089
8090 If you want @command{tar} to cycle through a series of tape drives, then
8091 you can use the @samp{n} response to the tape-change prompt. This is
8092 error prone, however, and doesn't work at all with @value{op-info-script}.
8093 Therefore, if you give @command{tar} multiple @value{op-file} options, then
8094 the specified files will be used, in sequence, as the successive volumes
8095 of the archive. Only when the first one in the sequence needs to be
8096 used again will @command{tar} prompt for a tape change (or run the info
8097 script).
8098
8099 Multi-volume archives
8100
8101 With @value{op-multi-volume}, @command{tar} will not abort when it cannot
8102 read or write any more data. Instead, it will ask you to prepare a new
8103 volume. If the archive is on a magnetic tape, you should change tapes
8104 now; if the archive is on a floppy disk, you should change disks, etc.
8105
8106 Each volume of a multi-volume archive is an independent @command{tar}
8107 archive, complete in itself. For example, you can list or extract any
8108 volume alone; just don't specify @value{op-multi-volume}. However, if one
8109 file in the archive is split across volumes, the only way to extract
8110 it successfully is with a multi-volume extract command @samp{--extract
8111 --multi-volume} (@samp{-xM}) starting on or before the volume where
8112 the file begins.
8113
8114 For example, let's presume someone has two tape drives on a system
8115 named @file{/dev/tape0} and @file{/dev/tape1}. For having @sc{gnu}
8116 @command{tar} to switch to the second drive when it needs to write the
8117 second tape, and then back to the first tape, etc., just do either of:
8118
8119 @smallexample
8120 $ @kbd{tar --create --multi-volume --file=/dev/tape0 --file=/dev/tape1 @var{files}}
8121 $ @kbd{tar cMff /dev/tape0 /dev/tape1 @var{files}}
8122 @end smallexample
8123
8124 @menu
8125 * Multi-Volume Archives:: Archives Longer than One Tape or Disk
8126 * Tape Files:: Tape Files
8127 @end menu
8128
8129 @node Multi-Volume Archives
8130 @subsection Archives Longer than One Tape or Disk
8131 @cindex Multi-volume archives
8132 @UNREVISED
8133
8134 To create an archive that is larger than will fit on a single unit of
8135 the media, use the @value{op-multi-volume} option in conjunction with
8136 the @value{op-create} option (@pxref{create}). A
8137 @dfn{multi-volume} archive can be manipulated like any other archive
8138 (provided the @value{op-multi-volume} option is specified), but is
8139 stored on more than one tape or disk.
8140
8141 When you specify @value{op-multi-volume}, @command{tar} does not report an
8142 error when it comes to the end of an archive volume (when reading), or
8143 the end of the media (when writing). Instead, it prompts you to load
8144 a new storage volume. If the archive is on a magnetic tape, you
8145 should change tapes when you see the prompt; if the archive is on a
8146 floppy disk, you should change disks; etc.
8147
8148 You can read each individual volume of a multi-volume archive as if it
8149 were an archive by itself. For example, to list the contents of one
8150 volume, use @value{op-list}, without @value{op-multi-volume} specified.
8151 To extract an archive member from one volume (assuming it is described
8152 that volume), use @value{op-extract}, again without
8153 @value{op-multi-volume}.
8154
8155 If an archive member is split across volumes (ie. its entry begins on
8156 one volume of the media and ends on another), you need to specify
8157 @value{op-multi-volume} to extract it successfully. In this case, you
8158 should load the volume where the archive member starts, and use
8159 @samp{tar --extract --multi-volume}---@command{tar} will prompt for later
8160 volumes as it needs them. @xref{extracting archives}, for more
8161 information about extracting archives.
8162
8163 @value{op-info-script} is like @value{op-multi-volume}, except that
8164 @command{tar} does not prompt you directly to change media volumes when
8165 a volume is full---instead, @command{tar} runs commands you have stored
8166 in @var{script-name}. For example, this option can be used to eject
8167 cassettes, or to broadcast messages such as @samp{Someone please come
8168 change my tape} when performing unattended backups. When @var{script-name}
8169 is done, @command{tar} will assume that the media has been changed.
8170
8171 Multi-volume archives can be modified like any other archive. To add
8172 files to a multi-volume archive, you need to only mount the last
8173 volume of the archive media (and new volumes, if needed). For all
8174 other operations, you need to use the entire archive.
8175
8176 If a multi-volume archive was labeled using @value{op-label}
8177 (@value{pxref-label}) when it was created, @command{tar} will not
8178 automatically label volumes which are added later. To label subsequent
8179 volumes, specify @value{op-label} again in conjunction with the
8180 @value{op-append}, @value{op-update} or @value{op-concatenate} operation.
8181
8182 @cindex Labeling multi-volume archives
8183 @FIXME{example}
8184
8185 @FIXME{There should be a sample program here, including an exit
8186 before end. Is the exit status even checked in tar? :-(}
8187
8188 @table @kbd
8189 @item --multi-volume
8190 @itemx -M
8191 Creates a multi-volume archive, when used in conjunction with
8192 @value{op-create}. To perform any other operation on a multi-volume
8193 archive, specify @value{op-multi-volume} in conjunction with that
8194 operation.
8195
8196 @item --info-script=@var{program-file}
8197 @itemx -F @var{program-file}
8198 Creates a multi-volume archive via a script. Used in conjunction with
8199 @value{op-create}.
8200 @end table
8201
8202 Beware that there is @emph{no} real standard about the proper way, for a
8203 @command{tar} archive, to span volume boundaries. If you have a multi-volume
8204 created by some vendor's @command{tar}, there is almost no chance you could
8205 read all the volumes with @sc{gnu} @command{tar}. The converse is also true:
8206 you may not expect multi-volume archives created by @sc{gnu} @command{tar} to
8207 be fully recovered by vendor's @command{tar}. Since there is little chance
8208 that, in mixed system configurations, some vendor's @command{tar} will work on
8209 another vendor's machine, and there is a great chance that @sc{gnu} @command{tar}
8210 will work on most of them, your best bet is to install @sc{gnu} @command{tar}
8211 on all machines between which you know exchange of files is possible.
8212
8213 @node Tape Files
8214 @subsection Tape Files
8215 @UNREVISED
8216
8217 To give the archive a name which will be recorded in it, use the
8218 @value{op-label} option. This will write a special block identifying
8219 @var{volume-label} as the name of the archive to the front of the archive
8220 which will be displayed when the archive is listed with @value{op-list}.
8221 If you are creating a multi-volume archive with
8222 @value{op-multi-volume}@FIXME-pxref{Using Multiple Tapes}, then the
8223 volume label will have
8224 @samp{Volume @var{nnn}} appended to the name you give, where @var{nnn} is
8225 the number of the volume of the archive. (If you use the @value{op-label}
8226 option when reading an archive, it checks to make sure the label on the
8227 tape matches the one you give. @value{xref-label}.
8228
8229 When @command{tar} writes an archive to tape, it creates a single
8230 tape file. If multiple archives are written to the same tape, one
8231 after the other, they each get written as separate tape files. When
8232 extracting, it is necessary to position the tape at the right place
8233 before running @command{tar}. To do this, use the @command{mt} command.
8234 For more information on the @command{mt} command and on the organization
8235 of tapes into a sequence of tape files, see @ref{mt}.
8236
8237 People seem to often do:
8238
8239 @example
8240 @kbd{--label="@var{some-prefix} `date +@var{some-format}`"}
8241 @end example
8242
8243 or such, for pushing a common date in all volumes or an archive set.
8244
8245 @node label
8246 @section Including a Label in the Archive
8247 @cindex Labeling an archive
8248 @cindex Labels on the archive media
8249 @UNREVISED
8250
8251 @table @kbd
8252 @item -V @var{name}
8253 @itemx --label=@var{name}
8254 Create archive with volume name @var{name}.
8255 @end table
8256
8257 This option causes @command{tar} to write out a @dfn{volume header} at
8258 the beginning of the archive. If @value{op-multi-volume} is used, each
8259 volume of the archive will have a volume header of @samp{@var{name}
8260 Volume @var{n}}, where @var{n} is 1 for the first volume, 2 for the
8261 next, and so on.
8262
8263 @FIXME{Should the arg to --label be a quoted string?? No.}
8264
8265 To avoid problems caused by misplaced paper labels on the archive
8266 media, you can include a @dfn{label} entry---an archive member which
8267 contains the name of the archive---in the archive itself. Use the
8268 @value{op-label} option in conjunction with the @value{op-create} operation
8269 to include a label entry in the archive as it is being created.
8270
8271 If you create an archive using both @value{op-label} and
8272 @value{op-multi-volume}, each volume of the archive will have an
8273 archive label of the form @samp{@var{archive-label} Volume @var{n}},
8274 where @var{n} is 1 for the first volume, 2 for the next, and so on.
8275 @FIXME-xref{Multi-Volume Archives, for information on creating multiple
8276 volume archives.}
8277
8278 If you list or extract an archive using @value{op-label}, @command{tar} will
8279 print an error if the archive label doesn't match the @var{archive-label}
8280 specified, and will then not list nor extract the archive. In those cases,
8281 @var{archive-label} argument is interpreted as a globbing-style pattern
8282 which must match the actual magnetic volume label. @xref{exclude}, for
8283 a precise description of how match is attempted@footnote{Previous versions
8284 of @command{tar} used full regular expression matching, or before that, only
8285 exact string matching, instead of wildcard matchers. We decided for the
8286 sake of simplicity to use a uniform matching device through @command{tar}.}.
8287 If the switch @value{op-multi-volume} is being used, the volume label
8288 matcher will also suffix @var{archive-label} by @w{@samp{ Volume [1-9]*}}
8289 if the initial match fails, before giving up. Since the volume numbering
8290 is automatically added in labels at creation time, it sounded logical to
8291 equally help the user taking care of it when the archive is being read.
8292
8293 The @value{op-label} was once called @samp{--volume}, but is not available
8294 under that name anymore.
8295
8296 To find out an archive's label entry (or to find out if an archive has
8297 a label at all), use @samp{tar --list --verbose}. @command{tar} will print the
8298 label first, and then print archive member information, as in the
8299 example below:
8300
8301 @example
8302 $ @kbd{tar --verbose --list --file=iamanarchive}
8303 V--------- 0 0 0 1992-03-07 12:01 iamalabel--Volume Header--
8304 -rw-rw-rw- ringo user 40 1990-05-21 13:30 iamafilename
8305 @end example
8306
8307 @table @kbd
8308 @item --label=@var{archive-label}
8309 @itemx -V @var{archive-label}
8310 Includes an @dfn{archive-label} at the beginning of the archive when
8311 the archive is being created, when used in conjunction with the
8312 @value{op-create} option. Checks to make sure the archive label
8313 matches the one specified (when used in conjunction with the
8314 @value{op-extract} option.
8315 @end table
8316
8317 To get a common information on all tapes of a series, use the
8318 @value{op-label} option. For having this information different in each
8319 series created through a single script used on a regular basis, just
8320 manage to get some date string as part of the label. For example:
8321
8322 @example
8323 $ @kbd{tar cfMV /dev/tape "Daily backup for `date +%Y-%m-%d`"}
8324 $ @kbd{tar --create --file=/dev/tape --multi-volume \
8325 --volume="Daily backup for `date +%Y-%m-%d`"}
8326 @end example
8327
8328 Also note that each label has its own date and time, which corresponds
8329 to when @sc{gnu} @command{tar} initially attempted to write it, often soon
8330 after the operator launches @command{tar} or types the carriage return
8331 telling that the next tape is ready. Comparing date labels does give
8332 an idea of tape throughput only if the delays for rewinding tapes
8333 and the operator switching them were negligible, which is usually
8334 not the case.
8335
8336 @FIXME{was --volume}
8337
8338 @node verify
8339 @section Verifying Data as It is Stored
8340 @cindex Verifying a write operation
8341 @cindex Double-checking a write operation
8342
8343 @table @kbd
8344 @item -W
8345 @itemx --verify
8346 Attempt to verify the archive after writing.
8347 @end table
8348
8349 This option causes @command{tar} to verify the archive after writing it.
8350 Each volume is checked after it is written, and any discrepancies
8351 are recorded on the standard error output.
8352
8353 Verification requires that the archive be on a back-space-able medium.
8354 This means pipes, some cartridge tape drives, and some other devices
8355 cannot be verified.
8356
8357 You can insure the accuracy of an archive by comparing files in the
8358 system with archive members. @command{tar} can compare an archive to the
8359 file system as the archive is being written, to verify a write
8360 operation, or can compare a previously written archive, to insure that
8361 it is up to date.
8362
8363 To check for discrepancies in an archive immediately after it is
8364 written, use the @value{op-verify} option in conjunction with
8365 the @value{op-create} operation. When this option is
8366 specified, @command{tar} checks archive members against their counterparts
8367 in the file system, and reports discrepancies on the standard error.
8368
8369 To verify an archive, you must be able to read it from before the end
8370 of the last written entry. This option is useful for detecting data
8371 errors on some tapes. Archives written to pipes, some cartridge tape
8372 drives, and some other devices cannot be verified.
8373
8374 One can explicitly compare an already made archive with the file system
8375 by using the @value{op-compare} option, instead of using the more automatic
8376 @value{op-verify} option. @value{xref-compare}.
8377
8378 Note that these two options have a slightly different intent. The
8379 @value{op-compare} option how identical are the logical contents of some
8380 archive with what is on your disks, while the @value{op-verify} option is
8381 really for checking if the physical contents agree and if the recording
8382 media itself is of dependable quality. So, for the @value{op-verify}
8383 operation, @command{tar} tries to defeat all in-memory cache pertaining to
8384 the archive, while it lets the speed optimization undisturbed for the
8385 @value{op-compare} option. If you nevertheless use @value{op-compare} for
8386 media verification, you may have to defeat the in-memory cache yourself,
8387 maybe by opening and reclosing the door latch of your recording unit,
8388 forcing some doubt in your operating system about the fact this is really
8389 the same volume as the one just written or read.
8390
8391 The @value{op-verify} option would not be necessary if drivers were indeed
8392 able to detect dependably all write failures. This sometimes require many
8393 magnetic heads, some able to read after the writes occurred. One would
8394 not say that drivers unable to detect all cases are necessarily flawed,
8395 as long as programming is concerned.
8396
8397 The @value{op-verify} option will not work in conjunction with the
8398 @value{op-multi-volume} option or the @value{op-append},
8399 @value{op-update} and @value{op-delete} operations. @xref{Operations},
8400 for more information on these operations.
8401
8402 Also, since @command{tar} normally strips leading @samp{/} from file
8403 names (@pxref{absolute}), a command like @samp{tar --verify -cf
8404 /tmp/foo.tar /etc} will work as desired only if the working directory is
8405 @file{/}, as @command{tar} uses the archive's relative member names
8406 (e.g., @file{etc/motd}) when verifying the archive.
8407
8408 @node Write Protection
8409 @section Write Protection
8410
8411 Almost all tapes and diskettes, and in a few rare cases, even disks can
8412 be @dfn{write protected}, to protect data on them from being changed.
8413 Once an archive is written, you should write protect the media to prevent
8414 the archive from being accidentally overwritten or deleted. (This will
8415 protect the archive from being changed with a tape or floppy drive---it
8416 will not protect it from magnet fields or other physical hazards).
8417
8418 The write protection device itself is usually an integral part of the
8419 physical media, and can be a two position (write enabled/write
8420 disabled) switch, a notch which can be popped out or covered, a ring
8421 which can be removed from the center of a tape reel, or some other
8422 changeable feature.
8423
8424 @node Copying This Manual
8425 @appendix Copying This Manual
8426
8427 @menu
8428 * GNU Free Documentation License:: License for copying this manual
8429 @end menu
8430
8431 @include fdl.texi
8432
8433 @node Index
8434 @appendix Index
8435
8436 @printindex cp
8437
8438 @summarycontents
8439 @contents
8440 @bye
8441
8442 @c Local variables:
8443 @c texinfo-column-for-description: 32
8444 @c End:
This page took 0.447921 seconds and 5 git commands to generate.