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