]> Dogcows Code - chaz/tar/blob - doc/tar.texi
*** empty log message ***
[chaz/tar] / doc / tar.texi
1 \input texinfo @c -*-texinfo-*-
2 @c %**start of header
3 @setfilename tar.info
4 @settitle The Tar Manual: DRAFT
5 @setchapternewpage odd
6 @c %**end of header
7
8 @c Note: the edition number and date is listed in *two* places; please update.
9 @c subtitle and top node; search for !!set
10
11 @c Search for comments marked with !! or <<< (or >>>)
12
13 @smallbook
14
15 @iftex
16 @c finalout
17 @end iftex
18
19 @ifinfo
20 This file documents @code{tar}, a utility used to store, backup, and
21 transport files.
22
23 Copyright (C) 1992 Free Software Foundation, Inc. DRAFT!
24 @c Need to put distribution information here when ready.
25 @end ifinfo
26
27 @c !!set edition number and date here
28 @titlepage
29 @title @code{tar}
30 @subtitle The GNU Tape Archiver
31 @subtitle Edition 0.01, for @code{tar} Version 1.10
32 @subtitle @today{}
33 @c remove preceding today line when ready
34 @sp 1
35 @subtitle DRAFT
36 @c subtitle insert month here when ready
37
38 @author Michael I. Bushnell and Amy Gorin
39
40 @page
41 @vskip 0pt plus 1filll
42 Copyright @copyright{} 1992 Free Software Foundation, Inc.
43
44 @sp 2
45 This draft is not yet ready for distribution.
46 @end titlepage
47
48 @ifinfo
49 @node Top, Introduction, (dir), (dir)
50 @top @code{tar}
51
52 This file documents @code{tar}, a utility used to store, backup, and
53 transport files.
54
55 @c !!set edition number and date here
56 This is DRAFT Edition 0.01 of the @code{tar} documentation, @today{}, for @code{tar}
57 version 1.12.
58 @end ifinfo
59
60 @c <<< The menus need to be gone over, and node names fixed.
61 @menu
62 * Introduction:: @code{tar}: The GNU Tape Archiver
63 * Invoking @code{tar}:: How to invoke @code{tar}
64 * Tutorial:: Getting started
65 * Wizardry:: Some More Advanced Uses for @code{tar}
66 * Archive Structure:: The structure of an archive
67 * Reading and Writing:: Reading and writing archives
68 * Insuring Accuracy:: How to insure the accuracy of an archive
69 * Selecting Archive Members:: How to select archive members
70 * User Interaction:: How @code{tar} interacts with people.
71 * Backups and Restoration:: How to restore files and perform backups
72 * Media:: Using tapes and other archive media
73 * Quick Reference:: A quick reference guide to
74 @code{tar} operations and options
75 * Data Format Details:: Details of the archive data format
76 * Concept Index:: Concept Index
77 @end menu
78
79 @chapter Tutorial Introduction to @code{tar}
80
81 This chapter guides you through some basic examples of @code{tar}
82 operations. If you already know how to use some other version of
83 @code{tar}, then you probably don't need to read this chapter. This
84 chapter omits complicated details about many of the ways @code{tar}
85 works. See later chapters for full information.
86
87 @menu
88 * Creating Archives:: Creating Archives
89 * Extracting Files:: Extracting Files from an Archive
90 * Listing Archive Contents:: Listing the Contents of an Archive
91 * Comparing Files:: Comparing Archives with the File System
92 * Adding to Archives:: Adding Files to Existing Archives
93 * Concatenate:: Concatenating Archives
94 * Deleting Files:: Deleting Files From an Archive
95 @end menu
96
97 @section What @code{tar} Does
98
99 The @code{tar} program is used to create and manipulate @code{tar}
100 archives. An @dfn{archive} is a single file which contains within it
101 the contents of many files. In addition, the archive identifies the
102 names of the files, their owner, and so forth.
103
104 You can use @code{tar} archives in many ways. Initially, @code{tar}
105 archives were used to store files conveniently on magnetic tape. The
106 name @samp{tar} comes from this use; it stands for Tape ARchiver.
107 Often, @code{tar} archives are used to store related files for
108 convenient file transfer over a network. For example, the GNU Project
109 distributes its software bundled into @code{tar} archives, so that all
110 the files relating to a particular program (or set of related programs)
111 can be transferred as a single unit.
112
113 The files inside an archive are called @dfn{members}. Within this
114 manual, we use the term @dfn{file} to refer only to files accessible in
115 the normal ways (by @code{ls}, @code{cat}, and so forth), and the term
116 @dfn{members} to refer only to the members of an archive. Similarly, a
117 @dfn{file name} is the name of a file, as it resides in the filesystem,
118 and a @dfn{member name} is the name of an archive member within the
119 archive.
120
121 The @code{tar} program provides the ability to create @code{tar}
122 archives, as well as for various other kinds of manipulation. The term
123 @dfn{extraction} is used to refer to the process of copying an archive
124 member into a file in the filesystem. One might speak of extracting a
125 single member. Extracting all the members of an archive is often called
126 extracting the archive. Often the term @dfn{unpack} is used to refer to
127 the extraction of many or all the members of an archive.
128
129 Conventionally, @code{tar} archives are given names ending with
130 @samp{.tar}. This is not necessary for @code{tar} to operate properly,
131 but this manual follows the convention in order to get the reader used
132 to seeing it.
133
134 Occasionally archive members are referred to as files. For people
135 familiar with the operation of @code{tar}, this causes no difficulty.
136 However, this manual consistently uses the terminology above in
137 referring to files and archive members, to make it easier to learn how
138 to use @code{tar}.
139
140 @section How to Create Archives
141
142 To create a new archive, use @samp{tar --create}. You should generally
143 use the @samp{--file} option to specify the name the tar archive will
144 have. Then specify the names of the files you wish to place in the new
145 archive. For example, to place the files @file{apple}, @file{angst},
146 and @file{asparagus} into an archive named @file{afiles.tar}, use the
147 following command:
148
149 @example
150 tar --create --file=afiles.tar apple angst asparagus
151 @end example
152
153 The order of the arguments is not important. You could also say:
154
155 @example
156 tar apple --create angst --file=afiles.tar asparagus
157 @end example
158
159 This order is harder to understand however. In this manual, we will
160 list the arguments in a reasonable order to make the commands easier to
161 understand, but you can type them in any order you wish.
162
163 If you don't specify the names of any files to put in the archive, then
164 tar will create an empty archive. So, the following command will create
165 an archive with nothing in it:
166
167 @example
168 tar --create --file=empty-archive.tar
169 @end example
170
171 Whenever you use @samp{tar --create}, @code{tar} will erase the current
172 contents of the file named by @samp{--file} if it exists. To add files
173 to an existing archive, you need to use a different option.
174 @xref{Adding to Archives} for information on how to do this.
175
176 When @samp{tar --create} creates an archive, the member names of the
177 members of the archive are exactly the same as the file names as you
178 typed them in the @code{tar} command. So, the member names of
179 @file{afiles} (as created by the first example above) are @file{apple},
180 @file{angst}, and @file{asparagus}. However, suppose an archive were
181 created with this command:
182
183 @example
184 tar --create --file=bfiles.tar ./balloons baboon ./bodacious
185 @end example
186
187 Then, the three files @file{balloons}, @file{baboon}, and
188 @file{bodacious} would get placed in the archive (because @file{./} is a
189 synonym for the current directory), but their member names would be
190 @file{./balloons}, @file{baboon}, and @file{./bodacious}.
191
192 If you want to see the progress of tar as it writes files into the
193 archive, you can use the @samp{--verbose} option.
194
195 If one of the files named to @samp{tar --create} is a directory, then
196 the operation of tar is more complicated. @xref{Tar and Directories},
197 the last section of this tutorial, for more information.
198
199 If you don't specify the @samp{--file} option, then @code{tar} will use
200 a default. Usually this default is some physical tape drive attached to
201 your machine. If there is no tape drive attached, or the default is not
202 meaningful, then tar will print an error message. This error message
203 might look roughly like one of the following:
204
205 @example
206 tar: can't open /dev/rmt8 : No such device or address
207 tar: can't open /dev/rsmt0 : I/O error
208 @end example
209
210 If you get an error like this, mentioning a file you didn't specify
211 (@file{/dev/rmt8} or @file{/dev/rsmt0} in the examples above), then @code{tar}
212 is using a default value for @samp{--file}. You should generally specify a
213 @samp{--file} argument whenever you use @code{tar}, rather than relying
214 on a default.
215
216 @section How to List Archives
217
218 Use @samp{tar --list} to print the names of members stored in an
219 archive. Use a @samp{--file} option just as with @samp{tar --create} to
220 specify the name of the archive. For example, the archive
221 @file{afiles.tar} created in the last section could be examined with the
222 command @samp{tar --list --file=afiles.tar}. The output of tar would
223 then be:
224
225 @example
226 apple
227 angst
228 asparagus
229 @end example
230
231 The archive @file{bfiles.tar} would list as follows:
232
233 @example
234 ./baloons
235 baboon
236 ./bodacious
237 @end example
238
239 (Of course, @samp{tar --list --file=empty-archive.tar} would produce no
240 output.)
241
242 If you use the @samp{--verbose} option with @samp{tar --list}, then tar
243 will print out a listing reminiscent of @samp{ls -l}, showing owner,
244 file size, and so forth.
245
246 You can also specify member names when using @samp{tar --list}. In this
247 case, tar will only list the names of members you identify. For
248 example, @samp{tar --list --file=afiles.tar apple} would only print
249 @samp{apple}. It is essential when specifying member names to tar that
250 you give the exact member names. For example, @samp{tar --list
251 --file=bfiles baloons} would produce no output, because there is no
252 member named @file{baloons}, only one named @file{./baloons}. While the
253 file names @file{baloons} and @file{./baloons} name the same file,
254 member names are compared using a simplistic name comparison, in which
255 an exact match is necessary.
256
257 @section How to Extract Members from an Archive
258
259 In order to extract members from an archive, use @samp{tar --extract}.
260 Specify the name of the archive with @samp{--file}. To extract specific
261 archive members, give their member names as arguments. It essential to
262 give their exact member name, as printed by @samp{tar --list}. This
263 will create a copy of the archive member, with a file name the same as
264 its name in the archive.
265
266 Keeping the example of the two archives created at the beginning of this
267 tutorial, @samp{tar --extract --file=afiles.tar apple} would create a
268 file @file{apple} in the current directory with the contents of the
269 archive member @file{apple}. It would remove any file named
270 @file{apple} already present in the directory, but it would not change
271 the archive in any way.
272
273 Remember that specifying the exact member name is important. @samp{tar
274 --extract --file=bfiles.tar baloons} will fail, because there is no
275 member named @file{baloons}. To extract the member named
276 @file{./baloons} you would need to specify @samp{tar --extract
277 --file=bfiles.tar ./baloons}. To find the exact member names of the
278 members of an archive, use @samp{tar --list} (@pxref{Listing
279 Archives}).
280
281 If you do not list any archive member names, then @samp{tar --extract}
282 will extract all the members of the archive.
283
284 If you give the @samp{--verbose} option, then @samp{tar --extract} will
285 print the names of the archive members as it extracts them.
286
287 @section How to Add Files to Existing Archives
288
289 If you want to add files to an existing archive, then don't use
290 @samp{tar --create}. That will erase the archive and create a new one
291 in its place. Instead, use @samp{tar --append}. The command @samp{tar
292 --append --file=afiles.tar arbalest} would add the file @file{arbalest}
293 to the existing archive @file{afiles.tar}. The archive must already
294 exist in order to use @samp{tar --append}.
295
296 As with @samp{tar --create}, the member names of the newly added files
297 will be the exact same as their names given on the command line. The
298 @samp{--verbose} option will print out the names of the files as they
299 are written into the archive.
300
301 If you add a file to an archive using @samp{tar --append} with the
302 same name as an archive member already present in the archive, then the
303 old member is not deleted. What does happen, however, is somewhat
304 complex. @xref{Multiple Members with the Same Name}. If you want to
305 replace an archive member, use @samp{tar --delete} first, and then use
306 @samp{tar --append}.
307
308 @section How to Delete Members from Archives
309
310 You can delete members from an archive using @samp{tar --delete}.
311 Specify the name of the archive with @samp{--file}. List the member
312 names of the members to be deleted. (If you list no member names, then
313 nothing will be deleted.) The @samp{--verbose} option will cause
314 @code{tar} to print the names of the members as they are deleted. As
315 with @samp{tar --extract}, it is important that you give the exact
316 member names when using @samp{tar --delete}. Use @samp{tar --list} to
317 find out the exact member names in an archive (@pxref{Listing
318 Archives}).
319
320 The @samp{tar --delete} command only works with archives stored on disk.
321 You cannot delete members from an archive stored on a tape.
322
323 @section How to Archive Directories
324
325 When the names of files or members specify directories, the operation of
326 @code{tar} is more complex. Generally, when a directory is named,
327 @code{tar} also operates on all the contents of the directory,
328 recursively. Thus, to @code{tar}, the file name @file{/} names the
329 entire file system.
330
331 To archive the entire contents of a directory, use @samp{tar --create}
332 (or @samp{tar --append}) as usual, and specify the name of the
333 directory. For example, to archive all the contents of the current
334 directory, use @samp{tar --create --file=@var{archive-name} .}. Doing
335 this will give the archive members names starting with @samp{./}. To
336 archive the contents of a directory named @file{foodir}, use @samp{tar
337 --create --file=@var{archive-name} foodir}. In this case, the member
338 names will all start with @samp{foodir/}.
339
340 If you give @code{tar} a command such as @samp{tar --create
341 --file=foo.tar .}, it will report @samp{tar: foo.tar is the archive; not
342 dumped}. This happens because the archive @file{foo.tar} is created
343 before putting any files into it. Then, when @code{tar} attempts to add
344 all the files in the directory @file{.} to the archive, it notices that
345 the file @file{foo.tar} is the same as the archive, and skips it. (It
346 makes no sense to put an archive into itself.) GNU @code{tar} will
347 continue in this case, and create the archive as normal, except for the
348 exclusion of that one file. Other versions of @code{tar}, however, are
349 not so clever, and will enter an infinite loop when this happens, so you
350 should not depend on this behavior. In general, make sure that the
351 archive is not inside a directory being dumped.
352
353 When extracting files, you can also name directory archive members on
354 the command line. In this case, @code{tar} extracts all the archive
355 members whose names begin with the name of the directory. As usual,
356 @code{tar} is not particularly clever about interpreting member names.
357 The command @samp{tar --extract --file=@var{archive-name} .} will not
358 extract all the contents of the archive, but only those members whose
359 member names begin with @samp{./}.
360
361 @section Shorthand Names
362
363 Most of the options to @code{tar} come in both long forms and short
364 forms. The options described in this tutorial have the following
365 abbreviations (except @samp{--delete}, which has no shorthand form):
366
367 @table @samp
368 @item --create
369 @samp{-c}
370 @item --list
371 @samp{-t}
372 @item --extract
373 @samp{-x}
374 @item --append
375 @samp{-r}
376 @item --verbose
377 @samp{-v}
378 @item --file=@var{archive-name}
379 @samp{-f @var{archive-name}}
380 @end table
381
382 These options make typing long @code{tar} commands easier. For example,
383 instead of typing
384 @example
385 tar --create --file=/tmp/afiles.tar --verbose apple angst asparagus
386 @end example
387 you can type
388 @example
389 tar -c -f /tmp/afiles.tar -v apple angst asparagus
390 @end example
391
392 For more information on option syntax, @ref{Invoking @code{tar}}. In
393 the remainder of this manual, short forms and long forms are given
394 together when an option is discussed.
395
396 @chapter Invoking @code{tar}
397
398 The usual way to invoke tar is
399
400 @example
401 @code{tar} @var{options}... [@var{file-or-member-names}...]
402 @end example
403
404 All the options start with @samp{-}. You can actually type in arguments
405 in any order, but in this manual the options always precede the other
406 arguments, to make examples easier to understand.
407
408 @menu
409 * Option Form:: The Forms of Arguments
410 * Argument Functions:: The Functions of Arguments
411 * Old Syntax for Commands:: An Old, but Still Supported, Syntax
412 for @code{tar} Commands
413 @end menu
414
415 @section The Forms of Arguments
416
417 Most options of @code{tar} have a single letter form (a single letter
418 preceded by @samp{-}), and at least one mnemonic form (a word or
419 abbreviation preceded by @samp{--}). The forms are absolutely
420 identical in function. For example, you can use either @samp{tar -t}
421 or @samp{tar --list} to list the contents of an archive. In addition,
422 mnemonic names can be given unique abbreviations. For example,
423 @samp{--cre} can be used in place of @samp{--create} because there is
424 no other option which begins with @samp{cre}.
425
426 Some options require an additional argument. Single letter options
427 which require arguments use the immediately following argument.
428 Mnemonic options are separated from their arguments by an @samp{=}
429 sign. For example, to create an an archive file named
430 @file{george.tar}, use either @samp{tar --create --file=george.tar} or
431 @samp{tar --create -f george.tar}. Both
432 @samp{--file=@var{archive-name}} and @samp{-f @var{archive-name}} denote
433 the option to give the archive a non-default name, which in the example
434 is @file{george.tar}.
435
436 You can mix single letter and mnemonic forms in the same command. You
437 could type the above example as @samp{tar -c --file=george} or
438 @samp{tar --create -f george}. However, @code{tar} operations and
439 options are case sensitive. You would not type the above example as
440 @samp{tar -C --file=george}, because @samp{-C} is an option that
441 causes @code{tar} to change directories, not an operation that creates
442 an archive. In fact, @samp{-C} requires a further argument (the name
443 of the directory which to change to). In this case, tar would think
444 it needs to change to a directory named @samp{--file=george}, and
445 wouldn't interpret @samp{--file-george} as an option at all!
446
447 @section The Functions of Arguments
448
449 You must give exactly one option from the following list to tar. This
450 option specifies the basic operation for @code{tar} to perform.
451
452 @table samp
453 @item --help
454 Print a summary of the options to @code{tar} and do nothing else
455
456 @item --create
457 @item -c
458 Create a new archive
459
460 @item --catenate
461 @item --concatenate
462 @item -A
463 Add the contents of one or more archives to another archive
464
465 @item --append
466 @item -a
467 Add files to an existing archive
468
469 @item --list
470 @item -t
471 List the members in an archive
472
473 @item --delete
474 Delete members from an archive
475
476 @item --extract
477 @item --get
478 @item -x
479 Extract members from an archive
480
481 @item --compare
482 @item --diff
483 @item -d
484 Compare members in an archive with files in the file system
485
486 @item --update
487 @item -u
488 Update an archive by appending newer versions of already stored files
489 @end itemize
490
491 The remaining options to @code{tar} change details of the operation,
492 such as archive format, archive name, or level of user interaction.
493 You can specify more than one option.
494
495 The remaining arguments are interpreted either as file names or as
496 member names, depending on the basic operation @code{tar} is
497 performing. For @samp{--append} and @samp{--create} these arguments
498 specify the names of files (which must already exist) to place in the
499 archive. For the remaining operation types, the additional arguments
500 specify archive members to compare, delete, extract, list, or update.
501 When naming archive members, you must give the exact name of the member
502 in the archive, as it is printed by @code{tar --list}. When naming
503 files, the normal file name rules apply.
504
505 If you don't use any additional arguments, @samp{--append},
506 @samp{--catenate}, and @samp{--delete} will do nothing. Naturally,
507 @samp{--create} will make an empty archive if given no files to add.
508 The other operations of @code{tar} (@samp{--list}, @samp{--extract},
509 @samp{--compare}, and @samp{--update}) will act on the entire contents
510 of the archive.
511
512 If you give the name of a directory as either a file name or a member
513 name, then @code{tar} acts recursively on all the files and directories
514 beneath that directory. For example, the name @file{/} identifies all
515 the files in the filesystem to @code{tar}.
516
517 @section An Old, but Still Supported, Syntax for @code{tar} Commands
518
519 For historical reasons, GNU @code{tar} also accepts a syntax for
520 commands which splits options that require additional arguments into
521 two parts. That syntax is of the form:
522
523 @example
524 @code{tar} @var{option-letters}... [@var{option-arguments}...] [@var{file-names}...]@refill
525 @end example
526
527 @noindent
528 where arguments to the options appear in the same order as the letters
529 to which they correspond, and the operation and all the option letters
530 appear as a single argument, without separating spaces.
531
532 This command syntax is useful because it lets you type the single
533 letter forms of the operation and options as a single argument to
534 @code{tar}, without writing preceding @samp{-}s or inserting spaces
535 between letters. @samp{tar cv} or @samp{tar -cv} are equivalent to
536 @samp{tar -c -v}.
537
538 On the other hand, this old style syntax makes it difficult to match
539 option letters with their corresponding arguments, and is often
540 confusing. In the command @samp{tar cvbf 20 /dev/rmt0}, for example,
541 @samp{20} is the argument for @samp{-b}, @samp{/dev/rmt0} is the
542 argument for @samp{-f}, and @samp{-v} does not have a corresponding
543 argument. The modern syntax---@samp{tar -c -v -b 20 -f
544 /dev/rmt0}---is clearer.
545
546 @chapter Basic @code{tar} Operations
547
548 This chapter describes the basic operations supported by the @code{tar}
549 program. A given invocation of @code{tar} will do exactly one of these
550 operations.
551
552 @section Creating a New Archive
553
554 The @samp{--create} (@code{-c}) option causes @code{tar} to create a new
555 archive. The files to be archived are then named on the command line.
556 Each file will be added to the archive with a member name exactly the
557 same as the name given on the command line. (When you give an absolute
558 file name @code{tar} actually modifies it slightly, @ref{Absolute
559 Paths}.) If you list no files to be archived, then an empty archive is
560 created.
561
562 If there are two many files to conveniently list on the command line,
563 you can list the names in a file, and @code{tar} will read that file.
564 @xref{Reading Names from a File}.
565
566 If you name a directory, then @code{tar} will archive not only the
567 directory, but all its contents, recursively. For example, if you name
568 @file{/}, then @code{tar} will archive the entire filesystem.
569
570 Do not use the option to add files to an existing archive; it will
571 delete the archive and write a new one. Use @samp{--append} instead.
572 (@xref{Adding to an Existing Archive}.)
573
574 There are various ways of causing @code{tar} to skip over some files,
575 and not archive them. @xref{Specifying Names to @code{tar}}.
576
577 @section Adding to an Existing Archive
578
579 The @samp{--append} (@code{-r}) option will case @code{tar} to add new
580 files to an existing archive. It interprets file names and member names
581 in exactly the same manner as @samp{--create}. Nothing happens if you
582 don't list any names.
583
584 This option never deletes members. If a new member is added under the
585 same name as an existing member, then both will be in the archive, with
586 the new member after the old one. For information on how this affects
587 reading the archive, @ref{Multiple Members with the Same Name}.
588
589 This operation cannot be performed on some tape drives, unfortunately,
590 due to deficiencies in the formats thoes tape drives use.
591
592 @section Combining Archives
593
594 The @samp{--catenate} (or @code{--concatenate}, or @code{-A}) causes
595 @code{tar} to add the contents of several archives to an existing
596 archive.
597
598 Name the archives to be catenated on the command line. (Nothing happens
599 if you don't list any.) The members, and their member names, will be
600 copied verbatim from those archives. If this causes multiple members to
601 have the same name, it does not delete either; all the members with the
602 same name coexist. For information on how this affects reading the
603 archive, @ref{Multiple Members with the Same Name}.
604
605 You must use this option to concatenate archives. If you just combine
606 them with @code{cat}, the result will not be a valid @code{tar} format
607 archive.
608
609 This operation cannot be performed on some tape drives, unfortunately,
610 due to deficiencies in the formats thoes tape drives use.
611
612 @section Removing Archive Members
613
614 You can use the @samp{--delete} option to remove members from an
615 archive. Name the members on the command line to be deleted. This
616 option will rewrite the archive; because of this, it does not work on
617 tape drives. If you list no members to be deleted, nothing happens.
618
619 @section Listing Archive Members
620
621 The @samp{--list} (@samp{-t}) option will list the names of members of
622 the archive. Name the members to be listed on the command line (to
623 modify the way these names are interpreted, @pxref{Specifying Names to
624 @code{tar}}). If you name no members, then @samp{--list} will list the
625 names of all the members of the archive.
626
627 To see more than just the names of the members, use the @samp{--verbose}
628 option to cause @code{tar} to print out a listing similar to that of
629 @samp{ls -l}.
630
631 @section Extracting Archive Members
632
633 Use @samp{--extract} (or @samp{--get}, or @samp{-x}) to extract members
634 from an archive. For each member named (or for the entire archive if no
635 members are named) on the command line (or with @samp{--files-from}) the
636 a file is created with the contents of the archive member. The name of
637 the file is the same as the member name.
638
639 The @samp{--same-permissions} (or @samp{--preserve-permissions}, or
640 @samp{-p}) options cause @code{tar} to cause the new file to have the
641 same permissions, owner, and so forth, as the original file did when it
642 was placed in the archive.
643
644 The @samp{--mo
645
646
647 @chapter Specifying Names to @code{tar}
648
649 When specifying the names of files or members to @code{tar}, it by
650 default takes the names of the files from the command line. There are
651 other ways, however, to specify file or member names, or to modify the
652 manner in which @code{tar} selects the files or members upon which to
653 operate. In general, these methods work both for specifying the names
654 of files and archive members.
655
656 @section Reading Names from a File
657
658 Instead of giving the names of files or archive members on the command
659 line, you can put the names into a file, and then use the
660 @samp{--files-from=@var{file-name-list}} (@samp{-T
661 @var{file-name-list}}) option to @code{tar}. Give the name of the file
662 which contains the list as the argument to @samp{--files-from}. The
663 file names should be separated by newlines in the list.
664
665 If you want to specify names that might contain newlines, use the
666 @samp{--null} option. Then, the filenames should be separated by NUL
667 characters (ASCII 000) instead of newlines. In addition, the
668 @samp{--null} option turns off the @samp{-C} option (@pxref{Changing
669 Directory}).
670
671 @section Excluding Some Files
672
673 The @samp{--exclude=@var{pattern}} option will prevent any file or
674 member which matches the regular expression @var{pattern} from being
675 operated on. For example, if you want to create an archive with all the
676 contents of @file{/tmp} except the file @file{/tmp/foo}, you can use the
677 command @samp{tar --create --file=arch.tar --exclude=foo}.
678
679 If there are many files you want to exclude, you can use the
680 @samp{--exclude-from=@var{exclude-list}} (@samp{-X @var{exclude-list}})
681 option. This works just like the
682 @samp{--files-from=@var{file-name-list}} option: specify the name of a
683 file as @var{exclude-list} which contains the list of patterns you want
684 to exclude.
685
686 @xref{Regular Expressions} for more information on the syntax and
687 meaning of regular expressions.
688
689 @section Operating Only on New Files
690
691 The @samp{--newer=@var{date}} (@samp{--after-date=@var{date}} or
692 @samp{-N @var{date}}) limits @code{tar} to only operating on files which
693 have been modified after the date specified. (For more information on
694 how to specify a date, @xref{Date Formats}.) A file is considered to
695 have changed if the contents have been modified, or if the owner,
696 permissions, and so forth, have been changed.
697
698 If you only want @code{tar} make the date comparison on the basis of the
699 actual contents of the file's modification, then use the
700 @samp{--newer-mtime=@var{date}} option.
701
702 You should never use this option for making incremental dumps. To learn
703 how to use @code{tar} to make backups, @ref{Making Backups}.
704
705 @section Crossing Filesystem Boundaries
706
707 The @samp{--one-file-system} option causes @code{tar} to modify its
708 normal behavior in archiving the contents of directories. If a file in
709 a directory is not on the same filesystem as the directory itself
710 (because it is a mounted filesystem in its own right), then @code{tar}
711 will not archive that file, or (if it is a directory itself) anything
712 beneath it.
713
714 This does not necessarily limit @code{tar} to only archiving the
715 contents of a single filesystem, because all files named on the command
716 line (or through the @samp{--files-from} option) will always be
717 archived.
718
719 @chapter Changing the Names of Members when Archiing
720
721 @section Changing Directory
722
723 The @samp{--directory=@var{directory}} (@samp{-C @var{directory}})
724 option causes @code{tar} to change its current working directory to
725 @var{directory}. Unlike most options, this one is processed at the
726 point it occurs within the list of files to be processed. Consider the
727 following command:
728 @example
729 tar --create --file=foo.tar -C /etc passwd hosts -C /lib libc.a
730 @end example
731
732 This command will place the files @file{/etc/passwd}, @file{/etc/hosts},
733 and @file{/lib/libc.a} into the archive. However, the names of the
734 archive members will be exactly what they were on the command line:
735 @file{passwd}, @file{hosts}, and @file{libc.a}. The @samp{--directory}
736 option is frequently used to make the archive independent of the
737 original name of the directory holding the files.
738
739 Note that @samp{--directory} options are interpreted consecutively. If
740 @samp{--directory} option specifies a relative pathname, it is
741 interpreted relative to the then current directory, which might not be
742 the same as the original current working directory of @code{tar}, due to
743 a previous @samp{--directory} option.
744
745 When using @samp{--files-from} (@pxref{Reading Names from a File}), you
746 can put @samp{-C} options in the file list. Unfortunately, you cannot
747 put @samp{--directory} options in the file list. (This interpretation
748 can be disabled by using the @samp{--null} option.)
749
750 @section Absolute Path Names
751
752 When @code{tar} extracts archive members from an archive, it strips any
753 leading slashes (@code{/}) from the member name. This causes absolute
754 member names in the archive to be treated as relative file names. This
755 allows you to have such members extracted wherever you want, instead of
756 being restricted to extracting the member in the exact directory named
757 in the archive. For example, if the archive member has the name
758 @file{/etc/passwd}, @code{tar} will extract it as if the name were
759 really @file{etc/passwd}.
760
761 Other @code{tar} programs do not do this. As a result, if you create an
762 archive whose member names start with a slash, they will be difficult
763 for other people with an inferior @code{tar} program to use. Therefore,
764 GNU @code{tar} also strips leading slashes from member names when
765 putting members into the archive. For example, if you ask @code{tar} to
766 add the file @file{/bin/ls} to an archive, it will do so, but the member
767 name will be @file{bin/ls}.
768
769 If you use the @samp{--absolute-paths} option, @code{tar} will do
770 neither of these transformations.
771
772 @section Symbolic Links
773
774 Normally, when @code{tar} archives a symbolic link, it writes a record
775 to the archive naming the target of the link. In that way, the
776 @code{tar} archive is a faithful record of the filesystem contents.
777 However, if you want @code{tar} to actually dump the contents of the
778 target of the symbolic link, then use the @samp{--dereference} option.
779
780
781
782 XXXX MIB XXXX
783
784
785
786 @node Wizardry, Archive Structure, Tutorial, Top
787 @chapter Wizardry
788
789 <<<This section needs to be written -ringo
790
791 @strong{To come:} using Unix file linking capability to recreate directory
792 structures---linking files into one subdirectory and then tarring that
793 directory.
794
795 @strong{to come:} nice hairy example using absolute-paths, newer, etc.
796
797
798 Piping one @code{tar} to another is an easy way to copy a directory's
799 contents from one disk to another, while preserving the dates, modes, owners
800 and link-structure of all the files therein.
801
802 @example
803 cd sourcedirectory; tar cf - . | (cd targetdir; tar xf -)
804 @end example
805
806 @noindent
807 or
808
809 <<< the following using standard input/output correct??
810 @example
811 cd sourcedirectory; tar --create --file=- . | (cd targetdir; tar --extract --file=-)
812 @end example
813
814 @noindent
815
816 Archive files can be used for transporting a group of files from one system
817 to another: put all relevant files into an archive on one computer system,
818 transfer the archive to another, and extract the contents there. The basic
819 transfer medium might be magnetic tape, Internet FTP, or even electronic
820 mail (though you must encode the archive with @code{uuencode} in order to
821 transport it properly by mail). Both machines do not have to use the same
822 operating system, as long as they both support the @code{tar} program.
823 @findex uuencode
824 <<< mention uuencode on a paragraph of its own
825
826 <<<<<end construction>>>>>
827
828 @node Archive Structure, Reading and Writing, Wizardry, Top
829 @chapter The Structure of an Archive
830
831 While an archive may contain many files, the archive itself is a
832 single ordinary file. Like any other file, an archive file can be
833 written to a storage device such as a tape or disk, sent through a
834 pipe or over a network, saved on the active file system, or even
835 stored in another archive. An archive file is not easy to read or
836 manipulate without using the @code{tar} utility or Tar mode in Emacs.
837
838
839 Physically, an archive consists of a series of file entries terminated
840 by an end-of-archive entry, which consists of 512 zero bytes. A file
841 entry usually describes one of the files in the archive (an
842 @dfn{archive member}), and consists of a file header and the contents
843 of the file. File headers contain file names and statistics, checksum
844 information which @code{tar} uses to detect file corruption, and
845 information about file types.
846
847 More than archive member can have the same file name. One way this
848 situation can occur is if more than one version of a file has been
849 stored in the archive. For information about adding new versions of a
850 file to an archive, @pxref{Modifying}.
851
852 In addition to entries describing archive members, an archive may contain
853 entries which @code{tar} itself uses to store information.
854 @xref{Archive Label}, for an example of such an archive entry.
855
856 @menu
857 * Old Style File Information:: Old Style File Information
858 * Archive Label::
859 * Format Variations::
860 @end menu
861
862 @node Old Style File Information, Archive Label, Archive Structure, Archive Structure
863 @section Old Style File Information
864 @cindex Format, old style
865 @cindex Old style format
866 @cindex Old style archives
867
868 Archives record not only an archive member's contents, but also its
869 file name or names, its access permissions, user and group, size in
870 bytes, and last modification time. Some archives also record the file
871 names in each archived directory, as well as other file and directory
872 information.
873
874 Certain old versions of @code{tar} cannot handle additional
875 information recorded by newer @code{tar} programs. To create an
876 archive which can be read by these old versions, specify the
877 @samp{--old-archive} option in conjunction with the @samp{tar --create}
878 operation. When you specify this option, @code{tar} leaves out
879 information about directories, pipes, fifos, contiguous files, and
880 device files, and specifies file ownership by group and user ids
881 instead of names.
882
883 The @samp{--old-archive} option is needed only if the archive must be
884 readable by an older tape archive program which cannot handle the new format.
885 Most @code{tar} programs do not have this limitation, so this option
886 is seldom needed.
887
888 @table @samp
889 @item --old-archive
890 @itemx -o
891 @itemx --old
892 @itemx --portable
893 @c has portability been changed to portable?
894 Creates an archive that can be read by an old @code{tar} program.
895 Used in conjunction with the @samp{tar --create} operation.
896 @end table
897
898 @node Archive Label, Format Variations, Old Style File Information, Archive Structure
899 @section Including a Label in the Archive
900 @cindex Labeling an archive
901 @cindex Labels on the archive media
902
903 @c !! Should the arg to --label be a quoted string?? no - ringo
904 To avoid problems caused by misplaced paper labels on the archive
905 media, you can include a @dfn{label} entry---an archive member which
906 contains the name of the archive---in the archive itself. Use the
907 @samp{--label=@var{archive-label}} option in conjunction with the
908 @samp{--create} operation to include a label entry in the archive as it
909 is being created.
910
911 If you create an archive using both @samp{--label=@var{archive-label}}
912 and @samp{--multi-volume}, each volume of the archive will have an
913 archive label of the form @samp{@var{archive-label} Volume @var{n}},
914 where @var{n} is 1 for the first volume, 2 for the next, and so on.
915 @xref{Multi-Volume Archives}, for information on creating multiple
916 volume archives.
917
918 If you extract an archive using @samp{--label=@var{archive-label}},
919 @code{tar} will print an error if the archive label doesn't match the
920 @var{archive-label} specified, and will then not extract the archive.
921 You can include a regular expression in @var{archive-label}, in this
922 case only.
923 @c >>> why is a reg. exp. useful here? (to limit extraction to a
924 @c >>>specific group? ie for multi-volume??? -ringo
925
926 To find out an archive's label entry (or to find out if an archive has
927 a label at all), use @samp{tar --list --verbose}. @code{tar} will print the
928 label first, and then print archive member information, as in the
929 example below:
930
931 @example
932 % tar --verbose --list --file=iamanarchive
933 V--------- 0/0 0 Mar 7 12:01 1992 iamalabel--Volume Header--
934 -rw-rw-rw- ringo/user 40 May 21 13:30 1990 iamafilename
935 @end example
936
937 @table @samp
938 @item --label=@var{archive-label}
939 @itemx -V @var{archive-label}
940 Includes an @dfn{archive-label} at the beginning of the archive when
941 the archive is being created (when used in conjunction with the
942 @samp{tar --create} operation). Checks to make sure the archive label
943 matches the one specified (when used in conjunction with the @samp{tar
944 --extract} operation.
945 @end table
946 @c was --volume
947
948 @node Format Variations, , Archive Label, Archive Structure
949 @section Format Variations
950 @cindex Format Parameters
951 @cindex Format Options
952 @cindex Options to specify archive format.
953
954 Format parameters specify how an archive is written on the archive
955 media. The best choice of format parameters will vary depending on
956 the type and number of files being archived, and on the media used to
957 store the archive.
958
959 To specify format parameters when accessing or creating an archive,
960 you can use the options described in the following sections. If you
961 do not specify any format parameters, @code{tar} uses default
962 parameters. You cannot modify a compressed archive. If you create an
963 archive with the @samp{--block-size} option specified (@pxref{Blocking
964 Factor}), you must specify that block-size when operating on the
965 archive. @xref{Matching Format Parameters}, for other examples of
966 format parameter considerations.
967
968
969 @menu
970 * Multi-Volume Archives::
971 * Sparse Files::
972 * Blocking Factor::
973 * Compressed Archives::
974 @end menu
975
976 @node Multi-Volume Archives, Sparse Files, Format Variations, Format Variations
977 @subsection Archives Longer than One Tape or Disk
978 @cindex Multi-volume archives
979
980 To create an archive that is larger than will fit on a single unit of
981 the media, use the @samp{--multi-volume} option in conjunction with the
982 @samp{tar --create} operation (@pxref{Creating Archives}). A
983 @dfn{multi-volume} archive can be manipulated like any other archive
984 (provided the @samp{--multi-volume} option is specified), but is stored
985 on more than one tape or disk.
986
987 When you specify @samp{--multi-volume}, @code{tar} does not report an
988 error when it comes to the end of an archive volume (when reading), or
989 the end of the media (when writing). Instead, it prompts you to load
990 a new storage volume. If the archive is on a magnetic tape, you
991 should change tapes when you see the prompt; if the archive is on a
992 floppy disk, you should change disks; etc.
993
994 You can read each individual volume of a multi-volume archive as if it
995 were an archive by itself. For example, to list the contents of one
996 volume, use @samp{tar --list}, without @samp{--multi-volume} specified.
997 To extract an archive member from one volume (assuming it is described
998 that volume), use @samp{tar --extract}, again without
999 @samp{--multi-volume}.
1000
1001 If an archive member is split across volumes (ie. its entry begins on
1002 one volume of the media and ends on another), you need to specify
1003 @samp{--multi-volume} to extract it successfully. In this case, you
1004 should load the volume where the archive member starts, and use
1005 @samp{tar --extract --multi-volume}---@code{tar} will prompt for later
1006 volumes as it needs them. @xref{Extracting From Archives} for more
1007 information about extracting archives.
1008
1009 @samp{--info-script=@var{program-file}} is like @samp{--multi-volume},
1010 except that @code{tar} does not prompt you directly to change media
1011 volumes when a volume is full---instead, @code{tar} runs commands you
1012 have stored in @var{program-file}. This option can be used to
1013 broadcast messages such as @samp{someone please come change my tape}
1014 when performing unattended backups. When @var{program-file} is done,
1015 @code{tar} will assume that the media has been changed.
1016
1017
1018 <<< There should be a sample program here, including an exit before
1019 <<< end.
1020
1021 @table @samp
1022 @item --multi-volume
1023 @itemx -M
1024 Creates a multi-volume archive, when used in conjunction with
1025 @samp{tar --create}. To perform any other operation on a multi-volume
1026 archive, specify @samp{--multi-volume} in conjunction with that
1027 operation.
1028
1029 @item --info-script=@var{program-file}
1030 @itemx -F @var{program-file}
1031 Creates a multi-volume archive via a script. Used in conjunction with
1032 @samp{tar --create}.
1033 @end table
1034
1035 @node Sparse Files, Blocking Factor, Multi-Volume Archives, Format Variations
1036 @subsection Archiving Sparse Files
1037 @cindex Sparse Files
1038
1039 A file is sparse if it contains blocks of zeros whose existance is
1040 recorded, but that have no space allocated on disk. When you specify
1041 the @samp{--sparse} option in conjunction with the @samp{--create}
1042 operation, @code{tar} tests all files for sparseness while archiving.
1043 If @code{tar} finds a file to be sparse, it uses a sparse
1044 representation of the file in the archive. @xref{Creating Archives},
1045 for more information about creating archives.
1046
1047 @samp{--sparse} is useful when archiving files, such as dbm files,
1048 likely to contain many nulls. This option dramatically
1049 decreases the amount of space needed to store such an archive.
1050
1051 @quotation
1052 @strong{Please Note:} Always use @samp{--sparse} when performing file
1053 system backups, to avoid archiving the expanded forms of files stored
1054 sparsely in the system.@refill
1055
1056 Even if your system has no no sparse files currently, some may be
1057 created in the future. If you use @samp{--sparse} while making file
1058 system backups as a matter of course, you can be assured the archive
1059 will always take no more space on the media than the files take on
1060 disk (otherwise, archiving a disk filled with sparse files might take
1061 hundreds of tapes).@refill
1062 <<< xref incremental when node name is set.
1063 @end quotation
1064
1065 @code{tar} ignores the @samp{--sparse} option when reading an archive.
1066
1067 @table @samp
1068 @item --sparse
1069 @itemx -S
1070 Files stored sparsely in the file system are represented sparsely in
1071 the archive. Use in conjunction with write operations.
1072 @end table
1073
1074 @node Blocking Factor, Compressed Archives, Sparse Files, Format Variations
1075 @subsection The Blocking Factor of an Archive
1076 @cindex Blocking Factor
1077 @cindex Block Size
1078 @cindex Number of records per block
1079 @cindex Number of bytes per block
1080 @cindex Bytes per block
1081 @cindex Records per block
1082
1083 The data in an archive is grouped into records, which are 512 bytes.
1084 Records are read and written in whole number multiples called
1085 @dfn{blocks}. The number of records in a block (ie. the size of a
1086 block in units of 512 bytes) is called the @dfn{blocking factor}. The
1087 @samp{--block-size=@var{number}} option specifies the blocking factor
1088 of an archive. The default blocking factor is typically 20 (ie.@:
1089 10240 bytes), but can be specified at installation. To find out the
1090 blocking factor of an existing archive, use @samp {tar --list
1091 --file=@var{archive-name}}. This may not work on some devices.
1092
1093 Blocks are seperated by gaps, which waste space on the archive media.
1094 If you are archiving on magnetic tape, using a larger blocking factor
1095 (and therefore larger blocks) provides faster throughput and allows
1096 you to fit more data on a tape (because there are fewer gaps). If you
1097 are archiving on cartridge, a very large blocking factor (say 126 or
1098 more) greatly increases performance. A
1099 smaller blocking factor, on the other hand, may be usefull when
1100 archiving small files, to avoid archiving lots of nulls as @code{tar}
1101 fills out the archive to the end of the block. In general, the ideal block size
1102 depends on the size of the inter-block gaps on the tape you are using,
1103 and the average size of the files you are archiving. @xref{Creating
1104 Archives}, for information on writing archives.
1105
1106 Archives with blocking factors larger than 20 cannot be read by very
1107 old versions of @code{tar}, or by some newer versions of @code{tar}
1108 running on old machines with small address spaces. With GNU
1109 @code{tar}, the blocking factor of an archive is limited only by the
1110 maximum block size of the device containing the archive, or by the
1111 amount of available virtual memory.
1112
1113 If you use a non-default blocking factor when you create an archive,
1114 you must specify the same blocking factor when you modify that
1115 archive. Some archive devices will also require you to specify the
1116 blocking factor when reading that archive, however this is not
1117 typically the case. Usually, you can use @samp{tar --list} without
1118 specifying a blocking factor---@code{tar} reports a non-default block
1119 size and then lists the archive members as it would normally. To
1120 extract files from an archive with a non-standard blocking factor
1121 (particularly if you're not sure what the blocking factor is), you can
1122 usually use the {--read-full-blocks} option while specifying a blocking
1123 factor larger then the blocking factor of the archive (ie. @samp{tar
1124 --extract --read-full-blocks --block-size=300}. @xref{Listing Contents}
1125 for more information on the @samp{--list} operation.
1126 @xref{read-full-blocks} for a more detailed explanation of that
1127 option.
1128
1129 @table @samp
1130 @item --block-size=@var{number}
1131 @itemx -b @var{number}
1132 Specifies the blocking factor of an archive. Can be used with any
1133 operation, but is usually not necessary with @samp{tar --list}.
1134 @end table
1135
1136 @node Compressed Archives, , Blocking Factor, Format Variations
1137 @subsection Creating and Reading Compressed Archives
1138 @cindex Compressed archives
1139 @cindex Storing archives in compressed format
1140
1141 @samp{--compress} indicates an archive stored in compressed format.
1142 The @samp{--compress} option is useful in saving time over networks and
1143 space in pipes, and when storage space is at a premium.
1144 @samp{--compress} causes @code{tar} to compress when writing the
1145 archive, or to uncompress when reading the archive.
1146
1147 To perform compression and uncompression on the archive, @code{tar}
1148 runs the @code{compress} utility. @code{tar} uses the default
1149 compression parameters; if you need to override them, avoid the
1150 @samp{--compress} option and run the @code{compress} utility
1151 explicitly. It is useful to be able to call the @code{compress}
1152 utility from within @code{tar} because the @code{compress} utility by
1153 itself cannot access remote tape drives.
1154
1155 The @samp{--compress} option will not work in conjunction with the
1156 @samp{--multi-volume} option or the @samp{--add-file}, @samp{--update},
1157 @samp{--add-file} and @samp{--delete} operations. @xref{Modifying}, for
1158 more information on these operations.
1159
1160 If there is no compress utility available, @code{tar} will report an
1161 error.
1162
1163 @samp{--compress-block} is like @samp{--compress}, but when used in
1164 conjunction with @samp{--create} also causes @code{tar} to pad the last
1165 block of the archive out to the next block boundary as it is written.
1166 This is useful with certain devices which require all write operations
1167 be a multiple of a specific size.
1168
1169 @quotation
1170 @strong{Please Note:} The @code{compress} program may be covered by a patent,
1171 and therefore we recommend you stop using it. We hope to have a
1172 different compress program in the future. We may change the name of
1173 this option at that time.
1174 @end quotation
1175
1176 @table @samp
1177 @item --compress
1178 @itemx --uncompress
1179 @itemx -z
1180 @itemx -Z
1181 When this option is specified, @code{tar} will compress (when writing
1182 an archive), or uncompress (when reading an archive). Used in
1183 conjunction with the @samp{--create}, @samp{--extract}, @samp{--list} and
1184 @samp{--compare} operations.
1185
1186 @item --compress-block
1187 @itemx -z -z
1188 Acts like @samp{--compress}, but pads the archive out to the next block
1189 boundary as it is written when used in conjunction with the
1190 @samp{--create} operation.
1191 @end table
1192
1193 @c >>> MIB -- why not use -Z instead of -z -z ? -ringo
1194
1195 @node Reading and Writing, Insuring Accuracy, Archive Structure, Top
1196 @chapter Reading and Writing Archives
1197
1198 The @samp{--create} operation writes a new archive, and the
1199 @samp{--extract} operation reads files from an archive and writes them
1200 into the file system. You can use other @code{tar} operations to
1201 write new information into an existing archive (adding files to it,
1202 adding another archive to it, or deleting files from it), and you can
1203 read a list of the files in an archive without extracting it using the
1204 @samp{--list} operation.
1205
1206 @menu
1207 * Archive Name:: The name of an archive
1208 * Creating in Detail:: Creating in detail
1209 * Modifying:: Modifying archives
1210 * Listing Contents:: Listing the contents of an archive
1211 * Extracting From Archives:: Extracting files from an archive
1212 @end menu
1213
1214 @node Archive Name, Creating in Detail, Reading and Writing, Reading and Writing
1215 @section The Name of an Archive
1216 @cindex Naming an archive
1217 @cindex Archive Name
1218 @cindex Directing output
1219 @cindex Where is the archive?
1220
1221 An archive can be saved as a file in the file system, sent through a
1222 pipe or over a network, or written to an I/O device such as a tape or
1223 disk drive. To specify the name of the archive, use the
1224 @samp{--file=@var{archive-name}} option.
1225
1226 An archive name can be the name of an ordinary file or the name of an
1227 I/O device. @code{tar} always needs an archive name---if you do not
1228 specify an archive name, the archive name comes from the environment
1229 variable @code{TAPE} or, if that variable is not specified, a default
1230 archive name, which is usually the name of tape unit zero (ie.
1231 /dev/tu00).
1232
1233 If you use @file{-} as an @var{archive-name}, @code{tar} reads the
1234 archive from standard input (when listing or extracting files), or
1235 writes it to standard output (when creating an archive). If you use
1236 @file{-} as an @var{archive-name} when modifying an archive,
1237 @code{tar} reads the original archive from its standard input and
1238 writes the entire new archive to its standard output.
1239
1240 @c >>> MIB--does standard input and output redirection work with all
1241 @c >>> operations?
1242 @c >>> need example for standard input and output (screen and keyboard?)
1243
1244 @cindex Standard input and output
1245 @cindex tar to standard input and output
1246
1247 To specify an archive file on a device attached to a remote machine,
1248 use the following:
1249
1250 @example
1251 --file=@var{hostname}:/@var{dev}/@var{file name}
1252 @end example
1253
1254 @noindent
1255 @code{tar} will complete the remote connection, if possible, and
1256 prompt you for a username and password. If you use
1257 @samp{--file=@@@var{hostname}:/@var{dev}/@var{file-name}}, @code{tar}
1258 will complete the remote connection, if possible, using your username
1259 as the username on the remote machine.
1260
1261 @c >>>MIB --- is this clear?
1262
1263 @table @samp
1264 @item --file=@var{archive-name}
1265 @itemx -f @var{archive-name}
1266 Names the archive to create or operate on. Use in conjunction with
1267 any operation.
1268 @end table
1269
1270 @node Creating in Detail, Modifying, Archive Name, Reading and Writing
1271 @section Creating in Detail
1272 @c operations should probably have examples, not tables.
1273 @cindex Writing new archives
1274 @cindex Archive creation
1275
1276 To create an archive, use @samp{tar --create}. To name the archive,
1277 use @samp{--file=@var{archive-name}} in conjunction with the
1278 @samp{--create} operation (@pxref{Archive Name}). If you do not name
1279 the archive, @code{tar} uses the value of the environment variable
1280 @code{TAPE} as the file name for the archive, or, if that is not
1281 available, @code{tar} uses a default archive name, usually that for tape
1282 unit zero. @xref{Archive Name}, for more information about specifying
1283 an archive name.
1284
1285 The following example creates an archive named @file{stooges},
1286 containing the files @file{larry}, @file{moe} and @file{curley}:
1287
1288 @example
1289 tar --create --file=stooges larry moe curley
1290 @end example
1291
1292 If you specify a directory name as a file-name argument, @code{tar}
1293 will archive all the files in that directory. The following example
1294 creates an archive named @file{hail/hail/fredonia}, containing the
1295 contents of the directory @file{marx}:
1296
1297 @example
1298 tar --create --file=hail/hail/fredonia marx
1299 @end example
1300
1301 If you don't specify files to put in the archive, @code{tar} archives
1302 all the files in the working directory. The following example creates
1303 an archive named @file{home} containing all the files in the working
1304 directory:
1305
1306 @example
1307 tar --create --file=home
1308 @end example
1309
1310 @xref{File Name Lists}, for other ways to specify files to archive.
1311
1312 Note: In the example above, an archive containing all the files in the
1313 working directory is being written to the working directory. GNU
1314 @code{tar} stores files in the working directory in an archive which
1315 is itself in the working directory without falling into an infinite
1316 loop. Other versions of @code{tar} may fall into this trap.
1317
1318 @node Modifying, Listing Contents, Creating in Detail, Reading and Writing
1319 @section Modifying Archives
1320 @cindex Modifying archives
1321
1322 Once an archive is created, you can add new archive members to it, add
1323 the contents of another archive, add newer versions of members already
1324 stored, or delete archive members already stored.
1325
1326 To find out what files are already stored in an archive, use @samp{tar
1327 --list --file=@var{archive-name}}. @xref{Listing Contents}.
1328
1329 @menu
1330 * Adding Files::
1331 * Appending Archives::
1332 * Deleting Archive Files:: Deleting Files From an Archive
1333 * Matching Format Parameters::
1334 @end menu
1335
1336 @node Adding Files, Appending Archives, Modifying, Modifying
1337 @subsection Adding Files to an Archive
1338 @cindex Adding files to an archive
1339 @cindex Updating an archive
1340
1341 To add files to an archive, use @samp{tar --add-file}. The archive to
1342 be added to must already exist and be in proper archive format (which
1343 normally means it was created previously using @code{tar}). If the
1344 archive was created with a different block size than now specified,
1345 @code{tar} will report an error (@pxref{Blocking Factor}). If the
1346 archive is not a valid @code{tar} archive, the results will be
1347 unpredictable. You cannot add files to a compressed archive, however
1348 you can add files to the last volume of a multi-volume archive.
1349 @xref{Matching Format Parameters}.
1350
1351 The following example adds the file @file{shemp} to the archive
1352 @file{stooges} created above:
1353
1354 @example
1355 tar --add-file --file=stooges shemp
1356 @end example
1357
1358 You must specify the files to be added; there is no default.
1359
1360 @samp{tar --update} acts like @samp{tar --add-file}, but does not add
1361 files to the archive if there is already a file entry with that name
1362 in the archive that has the same modification time.
1363
1364 Both @samp{--update} and @samp{--add-file} work by adding to the end of
1365 the archive. When you extract a file from the archive, only the
1366 version stored last will wind up in the file system. Because
1367 @samp{tar --extract} extracts files from an archive in sequence, and
1368 overwrites files with the same name in the file system, if a file name
1369 appears more than once in an archive the last version of the file will
1370 overwrite the previous versions which have just been extracted. You
1371 should avoid storing older versions of a file later in the archive.
1372
1373 Note: @samp{--update} is not suitable for performing backups, because
1374 it doesn't change directory content entries, and because it lengthens
1375 the archive every time it is used.
1376 @c <<< xref to scripted backup, listed incremental, for info on backups.
1377
1378 @node Appending Archives, Deleting Archive Files, Adding Files, Modifying
1379 @subsection Appending One Archive's Contents to Another Archive
1380 @cindex Adding archives to an archive
1381 @cindex Concatenating Archives
1382
1383 To append copies of an archive or archives to the end of another
1384 archive, use @samp{tar --add-archive}. The source and target archives
1385 must already exist and have been created using compatable format
1386 parameters (@pxref{Matching Format Parameters}).
1387
1388 @code{tar} will stop reading an archive if it encounters an
1389 end-of-archive marker. The @code{cat} utility does not remove
1390 end-of-archive markers, and is therefore unsuitable for concatenating
1391 archives. @samp{tar --add-archive} removes the end-of-archive marker
1392 from the target archive before each new archive is appended.
1393 @c <<< xref ignore-zeros
1394
1395 You must specify the source archives using
1396 @samp{--file=@var{archive-name}} (@pxref{Archive Name}). If you do not
1397 specify the target archive , @code{tar} uses the value of the
1398 environment variable @code{TAPE}, or, if this has not been set, the
1399 default archive name.
1400
1401 The following example adds the contents of the archive
1402 @file{hail/hail/fredonia} to the archive @file{stooges} (both archives
1403 were created in examples above):
1404
1405 @example
1406 tar --add-archive --file=stooges hail/hail/fredonia
1407 @end example
1408
1409 If you need to retrieve files from an archive that was added to using
1410 the @code{cat} utility, use the @samp{--ignore-zeros} option
1411 (@pxref{Archive Reading Options}).
1412
1413 @node Deleting Archive Files, Matching Format Parameters, Appending Archives, Modifying
1414 @subsection Deleting Files From an Archive
1415 @cindex Deleting files from an archive
1416 @cindex Removing files from an archive
1417
1418 To delete archive members from an archive, use @samp{tar --delete}.
1419 You must specify the file names of the members to be deleted. All
1420 archive members with the specified file names will be removed from the
1421 archive.
1422
1423 The following example removes the file @file{curley} from the archive
1424 @file{stooges}:
1425
1426 @example
1427 tar --delete --file=stooges curley
1428 @end example
1429
1430 You can only use @samp{tar --delete} on an archive if the archive
1431 device allows you to write to any point on the media.
1432
1433 @quotation
1434 @strong{Warning:} Don't try to delete an archive member from a
1435 magnetic tape, lest you scramble the archive. There is no safe way
1436 (except by completely re-writing the archive) to delete files from
1437 most kinds of magnetic tape.
1438 @end quotation
1439
1440 @c <<< MIB -- how about automatic detection of archive media? give error
1441 @c <<< unless the archive device is either an ordinary file or different
1442 @c <<< input and output (--file=-).
1443
1444 @node Matching Format Parameters, , Deleting Archive Files, Modifying
1445 @subsection Matching the Format Parameters
1446
1447 Some format parameters must be taken into consideration when modifying
1448 an archive:
1449
1450 Compressed archives cannot be modified.
1451
1452 You have to specify the block size of the archive when modifying an
1453 archive with a non-default block size.
1454
1455 Multi-volume archives can be modified like any other archive. To add
1456 files to a multi-volume archive, you need to only mount the last
1457 volume of the archive media (and new volumes, if needed). For all
1458 other operations, you need to use the entire archive.
1459
1460 If a multi-volume archive was labeled using @samp{--label}
1461 (@pxref{Archive Label}) when it was created, @code{tar} will not
1462 automatically label volumes which are added later. To label
1463 subsequent volumes, specify @samp{--label=@var{archive-label}} again in
1464 conjunction with the @samp{--add-file}, @samp{--update} or
1465 @samp{--add-archive} operation.
1466 @cindex Labelling multi-volume archives
1467 @c <<< example
1468
1469 @c <<< xref somewhere, for more information about format parameters.
1470
1471 @node Listing Contents, Extracting From Archives, Modifying, Reading and Writing
1472 @section Listing the Contents of an Archive
1473 @cindex Names of the files in an archive
1474 @cindex Archive contents, list of
1475 @cindex Archive members, list of
1476
1477 @samp{tar --list} prints a list of the file names of the archive
1478 members on the standard output. If you specify @var{file-name}
1479 arguments on the command line (or using the @samp{--files-from} option,
1480 @pxref{File Name Lists}), only the files you specify will be listed,
1481 and only if they exist in the archive. Files not specified will be
1482 ignored, unless they are under a specific directory.
1483
1484 If you include the @samp{--verbose} option, @code{tar} prints an
1485 @samp{ls -l} type listing for the archive. @pxref{Additional
1486 Information}, for a description of the @samp{--verbose} option.
1487
1488 If the blocking factor of the archive differs from the default,
1489 @code{tar} reports this. @xref{Blocking Factor}.
1490
1491 @xref{Archive Reading Options} for a list of options which can be used
1492 to modify @samp{--list}'s operation.
1493
1494 This example prints a list of the archive members of the archive
1495 @file{stooges}:
1496
1497 @example
1498 tar --list --file=stooges
1499 @end example
1500
1501 @noindent
1502 @code{tar} responds:
1503
1504 @example
1505 larry
1506 moe
1507 shemp
1508 marx/julius
1509 marx/alexander
1510 marx/karl
1511 @end example
1512
1513 This example generates a verbose list of the archive members of the
1514 archive file @file{dwarves}, which has a blocking factor of two:
1515
1516 @example
1517 tar --list -v --file=blocks
1518 @end example
1519
1520 @noindent
1521 @code{tar} responds:
1522
1523 @example
1524 tar: Blocksize = 2 records
1525 -rw------- ringo/user 42 May 1 13:29 1990 .bashful
1526 -rw-rw-rw- ringo/user 42 Oct 4 13:29 1990 doc
1527 -rw-rw-rw- ringo/user 42 Jul 20 18:01 1969 dopey
1528 -rw-rw---- ringo/user 42 Nov 26 13:42 1963 grumpy
1529 -rw-rw-rw- ringo/user 42 May 5 13:29 1990 happy
1530 -rw-rw-rw- ringo/user 42 May 1 12:00 1868 sleepy
1531 -rw-rw-rw- ringo/user 42 Jul 4 17:29 1776 sneezy
1532 @end example
1533
1534 @node Extracting From Archives, , Listing Contents, Reading and Writing
1535 @section Extracting Files from an Archive
1536 @cindex Extraction
1537 @cindex Retrieving files from an archive
1538 @cindex Resurrecting files from an archive
1539
1540 To read archive members from the archive and write them into the file
1541 system, use @samp{tar --extract}. The archive itself is left
1542 unchanged.
1543
1544 If you do not specify the files to extract, @code{tar} extracts all
1545 the files in the archive. If you specify the name of a directory as a
1546 file-name argument, @code{tar} will extract all files which have been
1547 stored as part of that directory. If a file was stored with a
1548 directory name as part of its file name, and that directory does not
1549 exist under the working directory when the file is extracted,
1550 @code{tar} will create the directory. @xref{Selecting Archive
1551 Members}, for information on specifying files to extract.
1552
1553 The following example shows the extraction of the archive
1554 @file{stooges} into an empty directory:
1555
1556 @example
1557 tar --extract --file=stooges
1558 @end example
1559
1560 @noindent
1561 Generating a listing of the directory (@samp{ls}) produces:
1562
1563 @example
1564 larry
1565 moe
1566 shemp
1567 marx
1568 @end example
1569
1570 @noindent
1571 The subdirectory @file{marx} contains the files @file{julius},
1572 @file{alexander} and @file{karl}.
1573
1574 If you wanted to just extract the files in the subdirectory
1575 @file{marx}, you could specify that directory as a file-name argument
1576 in conjunction with the @samp{--extract} operation:
1577
1578 @example
1579 tar --extract --file=stooges marx
1580 @end example
1581
1582 @quotation
1583 @strong{Warning:} Extraction can overwrite files in the file system.
1584 To avoid losing files in the file system when extracting files from
1585 the archive with the same name, use the @samp{--keep-old-files} option
1586 (@pxref{File Writing Options}).
1587 @end quotation
1588
1589 If the archive was created using @samp{--block-size}, @samp{--compress}
1590 or @samp{--multi-volume}, you must specify those format options again
1591 when extracting files from the archive (@pxref{Format Variations}).
1592
1593 @menu
1594 * Archive Reading Options::
1595 * File Writing Options::
1596 * Scarce Disk Space:: Recovering From Scarce Disk Space
1597 @end menu
1598
1599 @node Archive Reading Options, File Writing Options, Extracting From Archives, Extracting From Archives
1600 @subsection Options to Help Read Archives
1601 @cindex Options when reading archives
1602 @cindex Reading incomplete blocks
1603 @cindex Blocks, incomplete
1604 @cindex End of archive markers, ignoring
1605 @cindex Ignoring end of archive markers
1606 @cindex Large lists of file names on small machines
1607 @cindex Small memory
1608 @cindex Running out of space
1609
1610 @c <<< each option wants its own node. summary after menu
1611
1612 Normally, @code{tar} will request data in full block increments from
1613 an archive storage device. If the device cannot return a full block,
1614 @code{tar} will report an error. However, some devices do not always
1615 return full blocks, or do not require the last block of an archive to
1616 be padded out to the next block boundary. To keep reading until you
1617 obtain a full block, or to accept an incomplete block if it contains
1618 an end-of-archive marker, specify the @samp{--read-full-blocks} option
1619 in conjunction with the @samp{--extract} or @samp{--list} operations.
1620 @xref{Listing Contents}.
1621
1622 The @samp{--read-full-blocks} option is turned on by default when
1623 @code{tar} reads an archive from standard input, or from a remote
1624 machine. This is because on BSD Unix systems, attempting to read a
1625 pipe returns however much happens to be in the pipe, even if it is
1626 less than was requested. If this option were not enabled, @code{tar}
1627 would fail as soon as it read an incomplete block from the pipe.
1628
1629 If you're not sure of the blocking factor of an archive, you can read
1630 the archive by specifying @samp{--read-full-blocks} and
1631 @samp{--block-size=@var{n}}, where @var{n} is a blocking factor larger
1632 than the blocking factor of the archive. This lets you avoid having
1633 to determine the blocking factor of an archive. @xref{Blocking
1634 Factor}.
1635
1636 @table @samp
1637 @item --read-full-blocks
1638 @item -B
1639 Use in conjunction with @samp{tar --extract} to read an archive which
1640 contains incomplete blocks, or one which has a blocking factor less
1641 than the one specified.
1642 @end table
1643
1644 Normally @code{tar} stops reading when it encounters a block of zeros
1645 between file entries (which usually indicates the end of the archive).
1646 @samp{--ignore-zeros} allows @code{tar} to completely read an archive
1647 which contains a block of zeros before the end (i.e.@: a damaged
1648 archive, or one which was created by @code{cat}-ing several archives
1649 together).
1650
1651 The @samp{--ignore-zeros} option is turned off by default because many
1652 versions of @code{tar} write garbage after the end of archive entry,
1653 since that part of the media is never supposed to be read. GNU
1654 @code{tar} does not write after the end of an archive, but seeks to
1655 maintain compatablity among archiving utilities.
1656
1657 @table @samp
1658 @item --ignore-zeros
1659 @itemx -i
1660 To ignore blocks of zeros (ie.@: end-of-archive entries) which may be
1661 encountered while reading an archive. Use in conjunction with
1662 @samp{tar --extract} or @samp{tar --list}.
1663 @end table
1664
1665 If you are using a machine with a small amount of memory, and you need
1666 to process large list of file-names, you can reduce the amount of
1667 space @code{tar} needs to process the list. To do so, specify the
1668 @samp{--same-order} option and provide an ordered list of file names.
1669 This option tells @code{tar} that the @file{file-name} arguments
1670 (provided on the command line, or read from a file using the
1671 @samp{--files-from} option) are listed in the same order as the files
1672 in the archive.
1673
1674 You can create a file containing an ordered list of files in the
1675 archive by storing the output produced by @samp{tar --list
1676 --file=@var{archive-name}}. @xref{Listing Contents}, for information
1677 on the @samp{--list} operation.
1678
1679 This option is probably never needed on modern computer systems.
1680
1681 @table @samp
1682 @item --same-order
1683 @itemx --preserve-order
1684 @itemx -s
1685 To process large lists of file-names on machines with small amounts of
1686 memory. Use in conjunction with @samp{tar --compare}, @samp{tar --list}
1687 or @samp{tar --extract}.
1688 @end table
1689
1690 @c we don't need/want --preserve to exist any more
1691
1692 @node File Writing Options, Scarce Disk Space, Archive Reading Options, Extracting From Archives
1693 @subsection Changing How @code{tar} Writes Files
1694 @c <<< find a better title
1695 @cindex Overwriting old files, prevention
1696 @cindex Protecting old files
1697 @cindex Modification times of extracted files
1698 @cindex Permissions of extracted files
1699 @cindex Modes of extracted files
1700 @cindex Writing extracted files to standard output
1701 @cindex Standard output, writing extracted files to
1702
1703 Normally, @code{tar} writes extracted files into the file system
1704 without regard to the files already on the system---files with the
1705 same name as archive members are overwritten. To prevent @code{tar}
1706 from extracting an archive member from an archive, if doing so will
1707 overwrite a file in the file system, use @samp{--keep-old-files} in
1708 conjunction with the @samp{--extract} operation. When this option is
1709 specified, @code{tar} reports an error stating the name of the files
1710 in conflict, instead of writing the file from the archive.
1711
1712 @table @samp
1713 @item --keep-old files
1714 @itemx -k
1715 Prevents @code{tar} from overwriting files in the file system during
1716 extraction.
1717 @end table
1718
1719 Normally, @code{tar} sets the modification times of extracted files to
1720 the modification times recorded for the files in the archive, but
1721 limits the permissions of extracted files by the current @code{umask}
1722 setting.
1723
1724 To set the modification times of extracted files to the time when
1725 the files were extracted, use the @samp{--modification-time} option in
1726 conjunction with @samp{tar --extract}.
1727
1728 @table @samp
1729 @item --modification-time
1730 @itemx -m
1731 Sets the modification time of extracted archive members to the time
1732 they were extracted, not the time recorded for them in the archive.
1733 Use in conjunction with @samp{--extract}.
1734 @end table
1735
1736 To set the modes (access permissions) of extracted files to those
1737 recorded for those files in the archive, use the
1738 @samp{--preserve-permissions} option in conjunction with the
1739 @samp{--extract} operation.
1740 @c <<<mib --- should be aliased to ignore-umask.
1741
1742 @table @samp
1743 @item --preserve-permission
1744 @itemx --same-permission
1745 @itemx --ignore-umask
1746 @itemx -p
1747 Set modes of extracted archive members to those recorded in the
1748 archive, instead of current umask settings. Use in conjunction with
1749 @samp{--extract}.
1750 @end table
1751
1752 @c <<< following paragraph needs to be rewritten:
1753 @c <<< why doesnt' this cat files together, why is this useful. is it
1754 @c <<< really useful with more than one file?
1755 To write the files extracted to the standard output, instead of
1756 creating the files on the file system, use @samp{--to-stdout} in
1757 conjunction with @samp{tar --extract}. This option is useful if you
1758 are extracting files to send them through a pipe, and do not need to
1759 preserve them in the file system.
1760
1761 @table @samp
1762 @item --to-stdout
1763 @itemx -O
1764 Writes files to the standard output. Used in conjunction with
1765 @samp{--extract}.
1766 @end table
1767
1768 @c <<< why would you want to do such a thing, how are files separated on
1769 @c <<< the standard output? is this useful with more that one file? are
1770 @c <<< pipes the real reason?
1771
1772 @node Scarce Disk Space, , File Writing Options, Extracting From Archives
1773 @subsection Recovering From Scarce Disk Space
1774 @cindex Middle of the archive, starting in the
1775 @cindex Running out of space during extraction
1776 @cindex Disk space, running out of
1777 @cindex Space on the disk, recovering from lack of
1778
1779 If a previous attempt to extract files failed due to lack of disk
1780 space, you can use @samp{--starting-file=@var{file-name}} to start
1781 extracting only after file @var{file-name} when extracting files from
1782 the archive. This assumes, of course, that there is now free space,
1783 or that you are now extracting into a different file system.
1784
1785 @table @samp
1786 @item --starting-file=@var{file-name}
1787 @itemx -K @var{file-name}
1788 Starts an operation in the middle of an archive. Use in conjunction
1789 with @samp{--extract} or @samp{--list}.
1790 @end table
1791
1792 If you notice you are running out of disk space during an extraction
1793 operation, you can also suspend @code{tar}, remove unnecessary files
1794 from the file system, and then restart the same @code{tar} operation.
1795 In this case, @samp{--starting-file} is not necessary.
1796
1797 @c <<< xref incremental, xref --interactive, xref --exclude
1798
1799 @node Insuring Accuracy, Selecting Archive Members, Reading and Writing, Top
1800 @chapter Insuring the Accuracy of an Archive
1801
1802 You can insure the accuracy of an archive by comparing files in the
1803 system with archive members. @code{tar} can compare an archive to the
1804 file system as the archive is being written, to verify a write
1805 operation, or can compare a previously written archive, to insure that
1806 it is up to date.
1807
1808 @menu
1809 * Write Verification::
1810 * Comparing::
1811 @end menu
1812
1813 @node Write Verification, Comparing, Insuring Accuracy, Insuring Accuracy
1814 @section Verifying Data as It is Stored
1815 @cindex Verifying a write operation
1816 @cindex Double-checking a write operation
1817
1818 To check for discrepancies in an archive immediately after it is
1819 written, use the @samp{--verify} option in conjunction with the
1820 @samp{tar --create} operation. When this option is specified,
1821 @code{tar} checks archive members against their counterparts in the file
1822 system, and reports discrepancies on the standard error. In
1823 multi-volume archives, each volume is verified after it is written,
1824 before the next volume is written.
1825
1826 To verify an archive, you must be able to read it from before the end
1827 of the last written entry. This option is useful for detecting data
1828 errors on some tapes. Archives written to pipes, some cartridge tape
1829 drives, and some other devices cannot be verified.
1830
1831 @table @samp
1832 @item --verify
1833 @itemx -W
1834 Checks for discrepancies in the archive immediately after it is
1835 written. Use in conjunction with @samp{tar --create}.
1836 @end table
1837
1838 @node Comparing, , Write Verification, Insuring Accuracy
1839 @section Comparing an Archive with the File System
1840 @cindex Verifying the currency of an archive
1841
1842 @samp{tar --compare} compares archive members in an existing archive
1843 with their counterparts in the file system, and reports differences in
1844 file size, mode, owner, modification date and contents. If a file is
1845 represented in the archive but does not exist in the file system,
1846 @code{tar} reports a difference.
1847
1848 If you use @var{file-name} arguments in conjunction with @samp{tar
1849 --compare}, @code{tar} compares the archived versions of the files
1850 specified with their counterparts in the file system. If you specify
1851 a file that is not in the archive, @code{tar} will report an error. If
1852 you don't specify any files, @code{tar} compares all the files in the
1853 archive.
1854
1855 Because @code{tar} only checks files in the archive against files in
1856 the file system, and not vice versa, it ignores files in the file
1857 system that do not exist in the archive.
1858
1859 The following example compares the archive members @file{larry},
1860 @file{moe} and @file{curly} in the archive @file{stooges} with files
1861 of the same name in the file system.
1862
1863 @example
1864 tar --compare --file=stooges larry moe curly
1865 @end example
1866
1867 @noindent
1868 If a file, for example @file{curly}, did not exist in the archive,
1869 @code{tar} would report an error, as follows:
1870
1871 @example
1872 curly: does not exist
1873 @end example
1874
1875 @node Selecting Archive Members, User Interaction, Insuring Accuracy, Top
1876 @chapter Selecting Archive Members
1877 @cindex Specifying files to act on
1878 @cindex Specifying archive members
1879
1880 @dfn{File-name arguments} specify which files in the file system
1881 @code{tar} operates on, when creating or adding to an archive, or
1882 which archive members @code{tar} operates on, when reading or
1883 deleting from an archive. (@pxref{Reading and Writing}.)
1884
1885 To specify file names, you can include them as the last arguments on
1886 the command line, as follows:
1887 @example
1888 tar @var{operation} [@var{option1} @var{option2} ..] [@var{file-name-1} @var{file-name-2} ...]
1889 @end example
1890
1891 If you specify a directory name as a file name argument, all the files
1892 in that directory are operated on by @code{tar}.
1893
1894 If you do not specify files when @code{tar} is invoked, @code{tar}
1895 operates on all the non-directory files in the working directory (if
1896 the operation is @samp{--create}), all the archive members in the
1897 archive (if a read operation is specified), or does nothing (if any
1898 other operation is specified).
1899
1900 @menu
1901 * File Name Lists:: Reading File Names from a File
1902 * File Name Interpretation:: this needs a better title
1903 * File Exclusion:: so does this
1904 @end menu
1905
1906 @node File Name Lists, File Name Interpretation, Selecting Archive Members, Selecting Archive Members
1907 @section Reading a List of File Names from a File
1908 @cindex Lists of file names
1909 @cindex File-name arguments, alternatives
1910
1911 To read file names from a file on the file system, instead of from the
1912 command line, use the @samp{--files-from=@var{file}} option. If you
1913 specify @samp{-} as @var{file}, the file names are read from standard
1914 input. Note that using both @samp{--files-from=-} and @samp{--file=-}
1915 in the same command will not work unless the operation is
1916 @samp{--create}. @xref{Archive Name}, for an explanation of the
1917 @samp{--file} option.
1918
1919 @table @samp
1920 @item --files-from=@var{file}
1921 @itemx -T @var{file}
1922 Reads file-name arguments from a file on the file system, instead of
1923 from the command line. Use in conjunction with any operation.
1924 @end table
1925
1926 @node File Name Interpretation, File Exclusion, File Name Lists, Selecting Archive Members
1927 @section File Name Interpretation
1928 @cindex File Names, interpreting
1929
1930 @c <<<<add some text -ringo
1931
1932 @menu
1933 * Absolute File Names::
1934 * Changing Working Directory::
1935 * Archiving with Symbolic Links:: Archiving Using Symbolic Links
1936 @end menu
1937
1938 @node Absolute File Names, Changing Working Directory, File Name Interpretation, File Name Interpretation
1939 @subsection Storing and Extracting Files Relative to Root
1940
1941 @c <<< is this what this does, or does it just preserve the slash?
1942 @c <<< is it still called --absolute-paths?
1943
1944 @c To archive or extract files relative to the root directory, specify
1945 @c the @samp{--absolute-paths} option.
1946
1947 @c Normally, @code{tar} acts on files relative to the working
1948 @c directory---ignoring superior directory names when archiving, and
1949 @c ignoring leading slashes when extracting.
1950
1951 @c When you specify @samp{--absolute-paths}, @code{tar} stores file names
1952 @c including all superior directory names, and preserves leading slashes.
1953 @c If you only invoked @code{tar} from the root directory you would never
1954 @c need the @samp{--absolute-paths} option, but using this option may be
1955 @c more convenient than switching to root.
1956
1957 @c >>> should be an example in the tutorial/wizardry section using this
1958 @c >>> to transfer files between systems.
1959
1960 @c >>> is write access an issue?
1961
1962 @table @samp
1963 @item --absolute-paths
1964 Preserves full file names (inclusing superior dirctory names) when
1965 archiving files. Preserves leading slash when extracting files.
1966 @end table
1967
1968 @node Changing Working Directory, Archiving with Symbolic Links, Absolute File Names, File Name Interpretation
1969 @subsection Changing the Working Directory Within a List of File-names
1970 @cindex Directory, changing in mid-stream
1971 @cindex Working directory, specifying
1972
1973 To change working directory in the middle of a list of file names,
1974 (either on the command line or in a file specified using
1975 @samp{--files-from}), use @samp{--directory=@var{directory}}. This will
1976 change the working directory to the directory @var{directory} after
1977 that point in the list. For example,
1978
1979 @example
1980 tar --create iggy ziggy --directory=baz melvin
1981 @end example
1982
1983 @noindent
1984 will place the files @file{iggy} and @file{ziggy} from the current
1985 directory into the archive, followed by the file @file{melvin} from
1986 the directory @file{baz}. This option is especially useful when you
1987 have several widely separated files that you want to store in the same
1988 directory in the archive.
1989
1990 Note that the file @file{melvin} is recorded in the archive under the
1991 precise name @file{melvin}, @emph{not} @file{baz/melvin}. Thus, the
1992 archive will contain three files that all appear to have come from the
1993 same directory; if the archive is extracted with plain @samp{tar
1994 --extract}, all three files will be written in the current directory.
1995
1996 Contrast this with the command
1997
1998 @example
1999 tar -c iggy ziggy bar/melvin
2000 @end example
2001
2002 @noindent
2003 which records the third file in the archive under the name
2004 @file{bar/melvin} so that, if the archive is extracted using @samp{tar
2005 --extract}, the third file will be written in a subdirectory named
2006 @file{bar}.
2007
2008 @table @samp
2009 @item --directory=@file{directory}
2010 @itemx -C @file{directory}
2011 Changes the working directory.
2012 @end table
2013
2014 @c <<<need to test how extract deals with this, and add an example -ringo
2015
2016 @node Archiving with Symbolic Links, , Changing Working Directory, File Name Interpretation
2017 @subsection Archiving Using Symbolic Links
2018 @cindex File names, using symbolic links
2019 @cindex Symbolic link as file name
2020
2021 @samp{--dereference} is used with @samp{tar --create}, and causes
2022 @code{tar} to archive files which are referenced by a symbolic link,
2023 using the name of the link as the file name.
2024
2025 <<<this needs to be checked by MIB and then re-written, with an example
2026 The name under which the file is stored in the file system is not
2027 recorded in the archive. To record both the symbolic link name and
2028 the file name in the system, archive the file under both names. If
2029 all links were recorded automatically by @code{tar}, an extracted file
2030 might be linked to a file name that no longer exists in the file
2031 system.
2032
2033 @c <<< is the following still true? - ringo
2034 If a linked-to file is encountered again by @code{tar} while creating
2035 the same archive, an entire second copy of it will be stored. This
2036 could be considered a bug.
2037
2038 @table @samp
2039 @item --dereference
2040 @itemx -h
2041 Stores files referenced by a symbolic link, using the name of the link
2042 as the file name. Use in conjunction with any write operation.
2043 @end table
2044
2045 @node File Exclusion, , File Name Interpretation, Selecting Archive Members
2046 @section Selecting Files by Characteristic
2047 @cindex File names, excluding files by
2048 @cindex Excluding files by name and pattern
2049 @cindex Excluding files by file system
2050 @cindex File system boundaries, not crossing
2051 @cindex Excluding file by age
2052 @cindex Modification time, excluding files by
2053 @cindex Age, excluding files by
2054
2055 To avoid crossing file system boundaries when archiving parts of a
2056 directory tree, use @samp{--one-file-system}. This option only affects
2057 files that are archived because they are in a directory that is being
2058 archived; files explicitly named on the command line are archived
2059 regardless of where they reside.
2060
2061 This option is useful for making full or incremental archival backups
2062 of a file system.
2063
2064 If this option is used in conjunction with @samp{--verbose}, files that
2065 are excluded are mentioned by name on the standard error.
2066
2067 @table @samp
2068 @item --one-file-system
2069 @itemx -l
2070 Prevents @code{tar} from crossing file system boundaries when
2071 archiving. Use in conjunction with any write operation.
2072 @end table
2073
2074 To avoid operating on files whose names match a particular pattern,
2075 use the @samp{--exclude=@var{pattern}} or
2076 @samp{--exclude-from=@var{file}} options.
2077
2078 When you specify the @samp{--exclude=@var{pattern}} option, @code{tar}
2079 ignores files which match the @var{pattern}, which can be a single
2080 file name or a more complex expression. Thus, if you invoke
2081 @code{tar} with @samp{tar --create --exclude=*.o}, no files whose names
2082 end in @file{.o} are included in the archive.
2083 @c <<< what other things can you use besides "*"?
2084
2085 @samp{--exclude-from=@var{file}} acts like @samp{--exclude}, but
2086 specifies a file @var{file} containing a list of patterns. @code{tar}
2087 ignores files with names that fit any of these patterns.
2088
2089 You can use either option more than once in a single command.
2090
2091 @table @samp
2092 @item --exclude=@var{pattern}
2093 Causes @code{tar} to ignore files that match the @var{pattern}.
2094
2095 @item --exclude-from=@var{file}
2096 Causes @code{tar} to ignore files that match the patterns listed in
2097 @var{file}.
2098 @end table
2099 @c --exclude-from used to be "--exclude", --exclude didn't used to exist.
2100
2101 To operate only on files with modification or status-change times
2102 after a particular date, use @samp{--after-date=@var{date}}. You can
2103 use this option with @samp{tar --create} or @samp{tar --add-file} to
2104 insure only new files are archived, or with @samp{tar --extract} to
2105 insure only recent files are resurrected. @refill
2106 @c --after-date @var{date} or --newer @var{date}
2107
2108 @samp{--newer-mtime=@var{date}} acts like @samp{--after-date=@var{date}},
2109 but tests just the modification times of the files, ignoring
2110 status-change times.
2111
2112 @c <<<need example of --newer-mtime with quoted argument
2113 Remember that the entire date argument should be quoted if it contains
2114 any spaces.
2115
2116
2117 @strong{Please Note:} @samp{--after-date} and @samp{--newer-mtime}
2118 should not be used for incremental backups. Some files (such as those
2119 in renamed directories) are not selected up properly by these options.
2120 @c xref to incremental backup chapter when node name is decided.
2121
2122 @table @samp
2123 @item --after-date=@var{date}
2124 @itemx --newer=@var{date}
2125 @itemx -N @var{date}
2126 Acts on files only if their modification or inode-changed times are
2127 later than @var{date}. Use in conjunction with any operation.
2128 @item --newer-mtime=@var{date}
2129 Acts like @samp{--after-date}, but only looks at modification times.
2130 @end table
2131
2132 @c <<< following is the getdate date format --- needs to be re-written,
2133 @c <<< made a sub-node:
2134
2135 Time/Date Formats Accepted by getdate
2136 (omitting obscure constructions)
2137
2138 The input consists of one or more of: time zone day date year
2139 in any order.
2140
2141 Those in turn consist of (`|' and `/' mean `or', `[]' means `optional'):
2142
2143 time: H am/pm | H:M [am/pm] | H:M:S [am/pm]
2144 zone: timezone-name | timezone-name dst
2145 day: day-name | day-name, | N day-name
2146 date: M/D | M/D/Y | month-name D | month-name D, Y | D month-name | D month-name Y
2147 year: Y
2148
2149 am can also be a.m., pm can also be p.m.
2150 case and spaces around punctuation are not significant.
2151 month and day names can be abbreviated. >>>
2152
2153 @node User Interaction, Backups and Restoration, Selecting Archive Members, Top
2154 @chapter User Interaction
2155 @cindex Getting more information during the operation
2156 @cindex Information during operation
2157 @cindex Feedback from @code{tar}
2158
2159 Once you have typed a @code{tar}command, it is usually performed
2160 without any further information required of the user, or provided by
2161 @code{tar}. The following options allow you to generate progress and
2162 status information during an operation, or to confirm operations on
2163 files as they are performed.
2164
2165 @menu
2166 * Additional Information::
2167 * Interactive Operation::
2168 @end menu
2169
2170 @node Additional Information, Interactive Operation, User Interaction, User Interaction
2171 @section Progress and Status Information
2172 @cindex Progress information
2173 @cindex Status information
2174 @cindex Information on progress and status of operations
2175 @cindex Verbose operation
2176 @cindex Record number where error occured
2177 @cindex Error message, record number of
2178 @cindex Version of the @code{tar} program
2179
2180 Typically, @code{tar} performs most operations without reporting any
2181 information to the user except error messages. If you have
2182 encountered a problem when operating on an archive, however, you may
2183 need more information than just an error message in order to solve the
2184 problem. The following options can be helpful diagnostic tools.
2185
2186 When used with most operations, @samp{--verbose} causes @code{tar} to
2187 print the file names of the files or archive members it is operating
2188 on. When used with @samp{tar --list}, the verbose option causes
2189 @code{tar} to print out an @samp{ls -l} type listing of the files in
2190 the archive.
2191
2192 Verbose output appears on the standard output except when an archive
2193 is being written to the standard output (as with @samp{tar --create
2194 --file=- --verbose}). In that case @code{tar} writes verbose output to
2195 the standard error stream.
2196
2197 @table @samp
2198 @item --verbose
2199 @itemx -v
2200 Prints the names of files or archive members as they are being
2201 operated on. Can be used in conjunction with any operation. When
2202 used with @samp{--list}, generates an @samp{ls -l} type listing.
2203 @end table
2204
2205 To find out where in an archive a message was triggered, use
2206 @samp{--record-number}. @samp{--record-number} causes @code{tar} to
2207 print, along with every message it produces, the record number within
2208 the archive where the message was triggered.
2209
2210 This option is especially useful when reading damaged archives, since
2211 it helps pinpoint the damaged sections. It can also be used with
2212 @samp{tar --list} when listing a file-system backup tape, allowing you
2213 to choose among several backup tapes when retrieving a file later, in
2214 favor of the tape where the file appears earliest (closest to the
2215 front of the tape).
2216 @c <<< xref when the node name is set and the backup section written
2217
2218 @table @samp
2219 @item --record-number
2220 @itemx -R
2221 Prints the record number whenever a message is generated by
2222 @code{tar}. Use in conjunction with any operation.
2223 @end table
2224
2225 @c rewrite below
2226 To print the version number of the @code{tar} program, use @samp{tar
2227 --version}. @code{tar} prints the version number to the standard
2228 error. For example:
2229
2230 @example
2231 tar --version
2232 @end example
2233
2234 @noindent
2235 might return:
2236
2237 @example
2238 GNU tar version 1.09
2239 @end example
2240 @c used to be an option. has been fixed.
2241
2242 @node Interactive Operation, , Additional Information, User Interaction
2243 @section Asking for Confirmation During Operations
2244 @cindex Interactive operation
2245
2246 Typically, @code{tar} carries out a command without stopping for
2247 further instructions. In some situations however, you
2248 may want to exclude some files and archive members from the operation
2249 (for instance if disk or storage space is tight). You can do this by
2250 excluding certain files automatically (@pxref{File Exclusion}), or by
2251 performing an operation interactively, using the @samp{--interactive}
2252 operation.
2253
2254 When the @samp{--interactive} option is specified, @code{tar} asks for
2255 confirmation before reading, writing, or deleting each file it
2256 encounters while carrying out an operation. To confirm the action you
2257 must type a line of input beginning with @samp{y}. If your input line
2258 begins with anything other than @samp{y}, @code{tar} skips that file.
2259
2260 Commands which might be useful to perform interactively include
2261 appending files to an archive, extracting files from an archive,
2262 deleting a file from an archive, and deleting a file from disk during
2263 an incremental restore.
2264
2265 If @code{tar} is reading the archive from the standard input,
2266 @code{tar} opens the file @file{/dev/tty} to support the interactive
2267 communications.
2268 <<< this aborts if you won't OK the working directory. this is a bug. -ringo
2269
2270 @table @samp
2271 @item --interactive
2272 @itemx --confirmation
2273 @itemx -w
2274 Asks for confirmation before reading, writing or deleting an archive
2275 member (when listing, comparing or writing an archive or deleting
2276 archive members), or before writing or deleting a file (when
2277 extracting an archive).
2278 @end table
2279
2280 @node Backups and Restoration, Media, User Interaction, Top
2281 @chapter Performing Backups and Restoring Files
2282
2283 To @dfn{back up} a file system means to create archives that contain
2284 all the files in that file system. Those archives can then be used to
2285 restore any or all of those files (for instance if a disk crashes or a
2286 file is accidently deleted). File system @dfn{backups} are also
2287 called @dfn{dumps}.
2288
2289 @menu
2290 * Backup Levels:: Levels of backups
2291 * Backup Scripts:: Using scripts to perform backups
2292 and restoration
2293 * incremental and listed-incremental:: The --incremental
2294 and --listed-incremental Options
2295 * Problems:: Some common problems and their solutions
2296 @end menu
2297
2298 @node Backup Levels, Backup Scripts, Backups and Restoration, Backups and Restoration
2299 @section Levels of Backups
2300
2301 An archive containing all the files in the file system is called a
2302 @dfn{full backup} or @dfn{full dump}. You could insure your data by
2303 creating a full dump every day. This strategy, however, would waste a
2304 substantial amount of archive media and user time, as unchanged files
2305 are daily re-archived.
2306
2307 It is more efficient to do a full dump only occasionally. To back up
2308 files between full dumps, you can a incremental dump. A @dfn{level
2309 one} dump archives all the files that have changed since the last full
2310 dump.
2311
2312 A typical dump strategy would be to perform a full dump once a week,
2313 and a level one dump once a day. This means some versions of files
2314 will in fact be archived more than once, but this dump strategy makes
2315 it possible to restore a file system to within one day of accuracy by
2316 only extracting two archives---the last weekly (full) dump and the
2317 last daily (level one) dump. The only information lost would be in
2318 files changed or created since the last daily backup. (Doing dumps
2319 more than once a day is usually not worth the trouble).
2320
2321 @node Backup Scripts, incremental and listed-incremental, Backup Levels, Backups and Restoration
2322 @section Using Scripts to Perform Backups and Restoration
2323
2324 GNU @code{tar} comes with scripts you can use to do full and level-one
2325 dumps. Using scripts (shell programs) to perform backups and
2326 restoration is a convenient and reliable alternative to typing out
2327 file name lists and @code{tar} commands by hand.
2328
2329 Before you use these scripts, you need to edit the file
2330 @file{backup-specs}, which specifies parameters used by the backup
2331 scripts and by the restore script. @xref{Script Syntax}.
2332 Once the backup parameters are set, you can perform backups or
2333 restoration by running the appropriate script.
2334
2335 The name of the restore script is @code{restore}. The names of the
2336 level one and full backup scripts are, respectively, @code{level-1} and
2337 @code{level-0}. The @code{level-0} script also exists under the name
2338 @code{weekly}, and the @code{level-1} under the name
2339 @code{daily}---these additional names can be changed according to your
2340 backup schedule. @xref{Scripted Restoration}, for more information
2341 on running the restoration script. @xref{Scripted Backups}, for more
2342 information on running the backup scripts.
2343
2344 @emph{Please Note:} The backup scripts and the restoration scripts are
2345 designed to be used together. While it is possible to restore files
2346 by hand from an archive which was created using a backup script, and
2347 to create an archive by hand which could then be extracted using the
2348 restore script, it is easier to use the scripts. @xref{incremental
2349 and listed-incremental}, before making such an attempt.
2350
2351 @c shorten node names
2352 @menu
2353 * Backup Parameters:: Setting parameters for backups and restoration
2354 * Scripted Backups:: Using the backup scripts
2355 * Scripted Restoration:: Using the restore script
2356 @end menu
2357
2358 @node Backup Parameters, Scripted Backups, Backup Scripts, Backup Scripts
2359 @subsection Setting Parameters for Backups and Restoration
2360
2361 The file @file{backup-specs} specifies backup parameters for the
2362 backup and restoration scripts provided with @code{tar}. You must
2363 edit @file{backup-specs} to fit your system configuration and schedule
2364 before using these scripts.
2365
2366 @c <<< This about backup scripts needs to be written:
2367 @c <<<BS is a shell script .... thus ... @file{backup-specs} is in shell
2368 @c script syntax. @xref{Script Syntax}, for an explanation of this
2369 @c syntax.
2370
2371 @c whats a parameter .... looked at by the backup scripts ... which will
2372 @c be expecting to find ... now syntax ... value is linked to lame ...
2373 @c @file{backup-specs} specifies the following parameters:
2374
2375
2376 @table @code
2377 @item ADMINISTRATOR
2378 The user name of the backup administrator.
2379
2380 @item BACKUP_HOUR
2381 The hour at which the backups are done. This can be a number from 0
2382 to 23, or the string @samp{now}.
2383
2384 @item TAPE_FILE
2385 The device @code{tar} writes the archive to. This device should be
2386 attached to the host on which the dump scripts are run.
2387 @c <<< examples for all ...
2388
2389 @item TAPE_STATUS
2390 The command to use to obtain the status of the archive device,
2391 including error count. On some tape drives there may not be such a
2392 command; in that case, simply use `TAPE_STATUS=false'.
2393
2394 @item BLOCKING
2395 The blocking factor @code{tar} will use when writing the dump archive.
2396 @xref{Blocking Factor}.
2397
2398 @item BACKUP_DIRS
2399 A list of file systems to be dumped. You can include any directory
2400 name in the list---subdirectories on that file system will be
2401 included, regardless of how they may look to other networked machines.
2402 Subdirectories on other file systems will be ignored.
2403
2404 The host name specifies which host to run @code{tar} on, and should
2405 normally be the host that actually contains the file system. However,
2406 the host machine must have GNU @code{tar} installed, and must be able
2407 to access the directory containing the backup scripts and their
2408 support files using the same file name that is used on the machine
2409 where the scripts are run (ie. what @code{pwd} will print when in that
2410 directory on that machine). If the host that contains the file system
2411 does not have this capability, you can specify another host as long as
2412 it can access the file system through NFS.
2413
2414 @item BACKUP_FILES
2415 A list of individual files to be dumped. These should be accessible
2416 from the machine on which the backup script is run.
2417 @c <<<same file name, be specific. through nfs ...
2418 @end table
2419
2420 @menu
2421 * backup-specs example:: An Example Text of @file{Backup-specs}
2422 * Script Syntax:: Syntax for @file{Backup-specs}
2423 @end menu
2424
2425 @node backup-specs example, Script Syntax, Backup Parameters, Backup Parameters
2426 @subsubsection An Example Text of @file{Backup-specs}
2427
2428 The following is the text of @file{backup-specs} as it appears at FSF:
2429
2430 @example
2431 # site-specific parameters for file system backup.
2432
2433 ADMINISTRATOR=friedman
2434 BACKUP_HOUR=1
2435 TAPE_FILE=/dev/nrsmt0
2436 TAPE_STATUS="mts -t $TAPE_FILE"
2437 BLOCKING=124
2438 BACKUP_DIRS="
2439 albert:/fs/fsf
2440 apple-gunkies:/gd
2441 albert:/fs/gd2
2442 albert:/fs/gp
2443 geech:/usr/jla
2444 churchy:/usr/roland
2445 albert:/
2446 albert:/usr
2447 apple-gunkies:/
2448 apple-gunkies:/usr
2449 gnu:/hack
2450 gnu:/u
2451 apple-gunkies:/com/mailer/gnu
2452 apple-gunkies:/com/archive/gnu"
2453
2454 BACKUP_FILES="/com/mailer/aliases /com/mailer/league*[a-z]"
2455
2456 @end example
2457
2458 @node Script Syntax, , backup-specs example, Backup Parameters
2459 @subsubsection Syntax for @file{Backup-specs}
2460
2461 @file{backup-specs} is in shell script syntax. The following
2462 conventions should be considered when editing the script:
2463 @c <<< "conventions?"
2464
2465 A quoted string is considered to be contiguous, even if it is on more
2466 than one line. Therefore, you cannot include commented-out lines
2467 within a multi-line quoted string. BACKUP_FILES and BACKUP_DIRS are
2468 the two most likely parameters to be multi-line.
2469
2470 A quoted string typically cannot contain wildcards. In
2471 @file{backup-specs}, however, the parameters BACKUP_DIRS and
2472 BACKUP_FILES can contain wildcards.
2473
2474 @node Scripted Backups, Scripted Restoration, Backup Parameters, Backup Scripts
2475 @subsection Using the Backup Scripts
2476
2477 The syntax for running a backup script is:
2478
2479 @example
2480 @file{script-name} [@var{time-to-be-run}]
2481 @end example
2482
2483 where @var{time-to-be-run} can be a specific system time, or can be
2484 @kbd{now}. If you do not specify a time, the script runs at the time
2485 specified in @file{backup-specs} (@pxref{Script Syntax}).
2486
2487 You should start a script with a tape or disk mounted. Once you start
2488 a script, it prompts you for new tapes or disks as it needs them.
2489 Media volumes don't have to correspond to archive files---a
2490 multi-volume archive can be started in the middle of a tape that
2491 already contains the end of another multi-volume archive. The
2492 @code{restore} script prompts for media by its archive volume, so to
2493 avoid an error message you should keep track of which tape (or disk)
2494 contains which volume of the archive. @xref{Scripted Restoration}.
2495
2496 @c <<<have file names changed? -ringo
2497 The backup scripts write two files on the file system. The first is a
2498 record file in @file{/etc/tar-backup/}, which is used by the scripts
2499 to store and retrieve information about which files were dumped. This
2500 file is not meant to be read by humans, and should not be deleted by
2501 them. @xref{incremental and listed-incremental}, for a more
2502 detailed explanation of this file.
2503
2504 The second file is a log file containing the names of the file systems
2505 and files dumped, what time the backup was made, and any error
2506 messages that were generated, as well as how much space was left in
2507 the media volume after the last volume of the archive was written.
2508 You should check this log file after every backup. The file name is
2509 @file{log-@var{mmm-ddd-yyyy}-level-1} or
2510 @file{log-@var{mmm-ddd-yyyy}-full}.
2511
2512 The script also prints the name of each system being dumped to the
2513 standard output.
2514 @c <<<the section on restore scripts is commented out.
2515 @c <<< a section on non-scripted testore mya be a good idea
2516 @ignore
2517 @node Scripted Restoration, , Scripted Backups, Backup Scripts
2518 @subsection Using the Restore Script
2519 @c subject to change as things develop
2520
2521 To restore files that were archived using a scripted backup, use the
2522 @code{restore} script. The syntax for the script is:
2523
2524
2525 where ##### are the file systems to restore from, and
2526 ##### is a regular expression which specifies which files to
2527 restore. If you specify --all, the script restores all the files
2528 in the file system.
2529
2530 You should start the restore script with the media containing the
2531 first volume of the archive mounted. The script will prompt for other
2532 volumes as they are needed. If the archive is on tape, you don't need
2533 to rewind the tape to to its beginning---if the tape head is
2534 positioned past the beginning of the archive, the script will rewind
2535 the tape as needed. @xref{Media}, for a discussion of tape
2536 positioning.
2537
2538 If you specify @samp{--all} as the @var{files} argument, the
2539 @code{restore} script extracts all the files in the archived file
2540 system into the active file system.
2541
2542 @quotation
2543 @strong{Warning:}The script will delete files from the active file
2544 system if they were not in the file system when the archive was made.
2545 @end quotation
2546
2547 @xref{incremental and listed-incremental}, for an explanation of how
2548 the script makes that determination.
2549 @c this may be an option, not a given
2550 @end ignore
2551
2552 @node incremental and listed-incremental, Problems, Backup Scripts, Backups and Restoration
2553 @section The @code{--incremental} and @code{--listed-incremental} Options
2554
2555 @samp{--incremental} is used in conjunction with @samp{--create},
2556 @samp{--extract} or @samp{--list} when backing up and restoring file
2557 systems. An archive cannot be extracted or listed with the
2558 @samp{--incremental} option specified unless it was created with the
2559 option specified. This option should only be used by a script, not by
2560 the user, and is usually disregarded in favor of
2561 @samp{--listed-incremental}, which is described below.
2562
2563 @samp{--incremental} in conjunction with @samp{--create} causes
2564 @code{tar} to write, at the beginning of the archive, an entry for
2565 each of the directories that will be archived. The entry for a
2566 directory includes a list of all the files in the directory at the
2567 time the archive was created and a flag for each file indicating
2568 whether or not the file is going to be put in the archive.
2569
2570 Note that this option causes @code{tar} to create a non-standard
2571 archive that may not be readable by non-GNU versions of the @code{tar}
2572 program.
2573
2574 @samp{--incremental} in conjunction with @samp{--extract} causes
2575 @code{tar} to read the lists of directory contents previously stored
2576 in the archive, @emph{delete} files in the file system that did not
2577 exist in their directories when the archive was created, and then
2578 extract the files in the archive.
2579
2580 This behavior is convenient when restoring a damaged file system from
2581 a succession of incremental backups: it restores the entire state of
2582 the file system to that which obtained when the backup was made. If
2583 @samp{--incremental} isn't specified, the file system will probably
2584 fill up with files that shouldn't exist any more.
2585
2586 @samp{--incremental} in conjunction with @samp{--list}, causes
2587 @code{tar} to print, for each directory in the archive, the list of
2588 files in that directory at the time the archive was created. This
2589 information is put out in a format that is not easy for humans to
2590 read, but which is unambiguous for a program: each file name is
2591 preceded by either a @samp{Y} if the file is present in the archive,
2592 an @samp{N} if the file is not included in the archive, or a @samp{D}
2593 if the file is a directory (and is included in the archive). Each
2594 file name is terminated by a null character. The last file is followed
2595 by an additional null and a newline to indicate the end of the data.
2596
2597 @samp{--listed-incremental}=@var{file} acts like @samp{--incremental},
2598 but when used in conjunction with @samp{--create} will also cause
2599 @code{tar} to use the file @var{file}, which contains information
2600 about the state of the file system at the time of the last backup, to
2601 decide which files to include in the archive being created. That file
2602 will then be updated by @code{tar}. If the file @var{file} does not
2603 exist when this option is specified, @code{tar} will create it, and
2604 include all appropriate files in the archive.
2605
2606 The file @var{file}, which is archive independent, contains the date
2607 it was last modified and a list of devices, inode numbers and
2608 directory names. @code{tar} will archive files with newer mod dates
2609 or inode change times, and directories with an unchanged inode number
2610 and device but a changed directory name. The file is updated after
2611 the files to be archived are determined, but before the new archive is
2612 actually created.
2613
2614 @c <<< this section needs to be written
2615 @node Problems, , incremental and listed-incremental, Backups and Restoration
2616 @section Some Common Problems and their Solutions
2617
2618 errors from system:
2619 permission denied
2620 no such file or directory
2621 not owner
2622
2623 errors from tar:
2624 directory checksum error
2625 header format error
2626
2627 errors from media/system:
2628 i/o error
2629 device busy
2630
2631 @node Media, Quick Reference, Backups and Restoration, Top
2632 @chapter Tapes and Other Archive Media
2633
2634 Archives are usually written on dismountable media---tape cartridges,
2635 mag tapes, or floppy disks.
2636
2637 The amount of data a tape or disk holds depends not only on its size,
2638 but also on how it is formatted. A 2400 foot long reel of mag tape
2639 holds 40 megabytes of data when formated at 1600 bits per inch. The
2640 physically smaller EXABYTE tape cartridge holds 2.3 gigabytes.
2641
2642 Magnetic media are re-usable---once the archive on a tape is no longer
2643 needed, the archive can be erased and the tape or disk used over.
2644 Media quality does deteriorate with use, however. Most tapes or disks
2645 should be disgarded when they begin to produce data errors. EXABYTE
2646 tape cartridges should be disgarded when they generate an @dfn{error
2647 count} (number of non-usable bits) of more than 10k.
2648
2649 Magnetic media are written and erased using magnetic fields, and
2650 should be protected from such fields to avoid damage to stored data.
2651 Sticking a floppy disk to a filing cabinet using a magnet is probably
2652 not a good idea.
2653
2654
2655 @menu
2656 * Write Protection:: Write Protection
2657 * Tape Positioning:: Tape Positions and Tape Marks
2658 @end menu
2659
2660 @node Write Protection, Tape Positioning, Media, Media
2661 @section Write Protection
2662
2663 All tapes and disks can be @dfn{write protected}, to protect data on
2664 them from being changed. Once an archive is written, you should write
2665 protect the media to prevent the archive from being accidently
2666 overwritten or deleted. (This will protect the archive from being
2667 changed with a tape or floppy drive---it will not protect it from
2668 magnet fields or other physical hazards).
2669
2670 The write protection device itself is usually an integral part of the
2671 physical media, and can be a two position (write enabled/write
2672 disabled) switch, a notch which can be popped out or covered, a ring
2673 which can be removed from the center of a tape reel, or some other
2674 changeable feature.
2675
2676 @node Tape Positioning, , Write Protection, Media
2677 @section Tape Positions and Tape Marks
2678
2679 Just as archives can store more than one file from the file system,
2680 tapes can store more than one archive file. To keep track of where
2681 archive files (or any other type of file stored on tape) begin and
2682 end, tape archive devices write magnetic @dfn{tape marks} on the
2683 archive media. Tape drives write one tape mark between files,
2684 two at the end of all the file entries.
2685
2686 If you think of data as a series of "0000"'s, and tape marks as "x"'s,
2687 a tape might look like the following:
2688
2689 @example
2690 0000x000000x00000x00x00000xx-------------------------
2691 @end example
2692
2693 Tape devices read and write tapes using a read/write @dfn{tape
2694 head}---a physical part of the device which can only access one point
2695 on the tape at a time. When you use @code{tar} to read or write
2696 archive data from a tape device, the device will begin reading or
2697 writing from wherever on the tape the tape head happens to be,
2698 regardless of which archive or what part of the archive the tape head
2699 is on. Before writing an archive, you should make sure that no data
2700 on the tape will be overwritten (unless it is no longer needed).
2701 Before reading an archive, you should make sure the tape head is at
2702 the beginning of the archive you want to read. (The @code{restore}
2703 script will find the archive automatically. @xref{Scripted
2704 Restoration}). @xref{mt}, for an explanation of the tape moving
2705 utility.
2706
2707 If you want to add new archive file entries to a tape, you should
2708 advance the tape to the end of the existing file entries, backspace
2709 over the last tape mark, and write the new archive file. If you were
2710 to add two archives to the example above, the tape might look like the
2711 following:
2712
2713 @example
2714 0000x000000x00000x00x00000x000x0000xx----------------
2715 @end example
2716
2717 @menu
2718 * mt:: The @code{mt} Utility
2719 @end menu
2720
2721 @node mt, , Tape Positioning, Tape Positioning
2722 @subsection The @code{mt} Utility
2723
2724 <<< is it true that this only works on non-block devices? should
2725 <<< explain the difference, xref to block-size (fixed or variable).
2726
2727 You can use the @code{mt} utility to advance or rewind a tape past a
2728 specified number of archive files on the tape. This will allow you to
2729 move to the beginning of an archive before extracting or reading it,
2730 or to the end of all the archives before writing a new one.
2731 @c why isn't there an "advance 'til you find two tape marks together"?
2732
2733 The syntax of the @code{mt} command is:
2734
2735 @example
2736 mt [-f @var{tapename}] @var{operation} [@var{number}]
2737 @end example
2738
2739 where @var{tapename} is the name of the tape device, @var{number} is
2740 the number of times an operation is performed (with a default of one),
2741 and @var{operation} is one of the following:
2742
2743 @table @code
2744 @item eof
2745 @itemx weof
2746 Writes @var{number} tape marks at the current position on the tape.
2747
2748
2749 @item fsf
2750 Moves tape position forward @var{number} files.
2751
2752
2753 @item bsf
2754 Moves tape position back @var{number} files.
2755
2756
2757 @item rewind
2758 Rewinds the tape. (Ignores @var{number}).
2759
2760
2761 @item offline
2762 @itemx rewoff1
2763 Rewinds the tape and takes the tape device off-line. (Ignores @var{number}).
2764
2765
2766 @item status
2767 Prints status information about the tape unit.
2768 @end table
2769 <<< is there a better way to frob the spacing on the list? -ringo
2770
2771 If you don't specify a @var{tapename}, @code{mt} uses the environment
2772 variable TAPE; if TAPE does not exist, @code{mt} uses the device
2773 @file{/dev/rmt12}.
2774
2775 @code{mt} returns a 0 exit status when the operation(s) were
2776 successful, 1 if the command was unrecognized, and 2 if an operation
2777 failed.
2778
2779 @c <<< new node on how to find an archive? -ringo
2780 If you use @code{tar --extract} with the
2781 @samp{--label=@var{archive-name}} option specified, @code{tar} will
2782 read an archive label (the tape head has to be positioned on it) and
2783 print an error if the archive label doesn't match the
2784 @var{archive-name} specified. @var{archive-name} can be any regular
2785 expression. If the labels match, @code{tar} extracts the archive.
2786 @xref{Archive Label}. @xref{Matching Format Parameters}.
2787 <<< fix cross references
2788
2789 @code{tar --list --label} will cause @code{tar} to print the label.
2790
2791 @c <<< MIB -- program to list all the labels on a tape?
2792
2793 @node Quick Reference, Data Format Details, Media, Top
2794 @appendix A Quick Reference Guide to @code{tar} Operations and Options
2795 @c put in proper form for appendix. (unnumbered?)
2796
2797 @menu
2798 * Operations:: A Table of Operations
2799 * Options:: Table of Options
2800 @end menu
2801
2802 @node Operations, Options, Quick Reference, Quick Reference
2803 @appendixsec A Table of Operations
2804 @c add xrefs, note synonyms
2805
2806 The operation argument to @code{tar} specifies which action you want to
2807 take.
2808
2809 @table @samp
2810 @item -A
2811 Adds copies of an archive or archives to the end of another archive.
2812
2813 @item -c
2814 Creates a new archive.
2815
2816 @item -d
2817 Compares files in the archive with their counterparts in the file
2818 system, and reports differences in file size, mode, owner,
2819 modification date and contents.
2820
2821 @item -r
2822 Adds files to the end of the archive.
2823
2824 @item -t
2825 Prints a list of the contents of the archive.
2826
2827 @item -x
2828 Reads files from the archive and writes them into the active file
2829 system.
2830
2831 @item -u
2832 Adds files to the end of the archive, but only if they are newer than
2833 their counterparts already in the archive, or if they do not already
2834 exist in the archive.
2835
2836 @item --add-archive
2837 Adds copies of an archive or archives to the end of another archive.
2838
2839 @item --add-file
2840 Adds files to the end of the archive.
2841
2842 @item --append
2843 Adds files to the end of the archive.
2844
2845 @item --catenate
2846 Adds copies of an archive or archives to the end of another archive.
2847
2848 @item --compare
2849 Compares files in the archive with their counterparts in the file
2850 system, and reports differences in file size, mode, owner,
2851 modification date and contents.
2852
2853 @item --concatenate
2854 Adds copies of an archive or archives to the end of another archive.
2855
2856 @item --create
2857 Creates a new archive.
2858
2859 @item --delete
2860 Deletes files from the archive. All versions of the files are deleted.
2861
2862 @item --diff
2863 Compares files in the archive with their counterparts in the file
2864 system, and reports differences in file size, mode, owner,
2865 modification date and contents.
2866
2867 @item --extract
2868 Reads files from the archive and writes them into the active file
2869 system.
2870
2871 @item --get
2872 Reads files from the archive and writes them into the active file
2873 system.
2874
2875 @item --help
2876 Prints a list of @code{tar} operations and options.
2877
2878 @item --list
2879 Prints a list of the contents of the archive.
2880
2881 @item --update
2882 Adds files to the end of the archive, but only if they are newer than
2883 their counterparts already in the archive, or if they do not already
2884 exist in the archive.
2885
2886 @item --version
2887 Prints the version number of the @code{tar} program to the standard
2888 error.
2889 @end table
2890
2891 @node Options, , Operations, Quick Reference
2892 @appendixsec Table of Options
2893
2894 Options change the way @code{tar} performs an operation.
2895
2896 @table @samp
2897 @item --absolute-paths
2898 WILL BE INPUT WHEN QUESTION IS RESOLVED
2899
2900 @item --after-date=@var{date}
2901 Limit the operation to files changed after the given date.
2902 @xref{File Exclusion}.
2903
2904 @item --block-size=@var{number}
2905 Specify the blocking factor of an archive. @xref{Blocking Factor}.
2906
2907 @item --compress
2908 Specify a compressed archive. @xref{Compressed Archives}.
2909
2910 @item --compress-block.
2911 Create a whole block sized compressed archive. @xref{Compressed Archives}.
2912
2913 @item --confirmation
2914 Solicit confirmation for each file. @xref{Interactive Operation}
2915 <<< --selective should be a synonym.
2916
2917 @item --dereference
2918 Treat a symbolic link as an alternate name for the file the link
2919 points to. @xref{Symbolic Links}.
2920
2921 @item --directory=@file{directory}
2922 Change the working directory. @xref{Changing Working Directory}.
2923
2924 @item --exclude=@var{pattern}
2925 Exclude files which match the regular expression @var{pattern}.
2926 @xref{File Exclusion}.
2927
2928 @item --exclude-from=@file{file}
2929 Exclude files which match any of the regular expressions listed in
2930 the file @file{file}. @xref{File Exclusion}.
2931
2932 @item --file=@var{archive-name}
2933 Name the archive. @xref{Archive Name}).
2934
2935 @item --files-from=@file{file}
2936 Read file-name arguments from a file on the file system.
2937 @xref{File Name Lists}.
2938
2939 @item --ignore-umask
2940 Set modes of extracted files to those recorded in the archive.
2941 @xref{File Writing Options}.
2942
2943 @item --ignore-zeros
2944 Ignore end-of-archive entries. @xref{Archive Reading Options}.
2945 <<< this should be changed to --ignore-end
2946
2947 @item --listed-incremental=@var{file-name} (-g)
2948 Take a file name argument always. If the file doesn't exist, run a level
2949 zero dump, creating the file. If the file exists, uses that file to see
2950 what has changed.
2951
2952 @item --incremental (-G)
2953 @c <<<look it up>>>
2954
2955 @item --tape-length=@var{n} (-L)
2956 @c <<<alternate way of doing multi archive, will go to that length and
2957 @c prompts for new tape, automatically turns on multi-volume. >>>
2958 @c <<< this needs to be written into main body as well -ringo
2959
2960 @item --info-script=@var{program-file}
2961 Create a multi-volume archive via a script. @xref{Multi-Volume Archives}.
2962
2963 @item --interactive
2964 Ask for confirmation before performing any operation on a file or
2965 archive member.
2966
2967 @item --keep-old-files
2968 Prevent overwriting during extraction. @xref{File Writing Options}.
2969
2970 @item --label=@var{archive-label}
2971 Include an archive-label in the archive being created. @xref{Archive
2972 Label}.
2973
2974 @item --modification-time
2975 Set the modification time of extracted files to the time they were
2976 extracted. @xref{File Writing Options}.
2977
2978 @item --multi-volume
2979 Specify a multi-volume archive. @xref{Multi-Volume Archives}.
2980
2981 @item --newer=@var{date}
2982 Limit the operation to files changed after the given date.
2983 @xref{File Exclusion}.
2984
2985 @item --newer-mtime=@var{date}
2986 Limit the operation to files modified after the given date. @xref{File
2987 Exclusion}.
2988
2989 @item --old
2990 Create an old format archive. @xref{Old Style File Information}.
2991 @c <<< did we agree this should go away as a synonym?
2992
2993 @item --old-archive
2994 Create an old format archive. @xref{Old Style File Information}.
2995
2996 @item --one-file-system
2997 Prevent @code{tar} from crossing file system boundaries when
2998 archiving. @xref{File Exclusion}.
2999
3000 @item --portable
3001 Create an old format archive. @xref{Old Style File Information}.
3002 @c <<< was portability, may still need to be changed
3003
3004 @item --preserve-order
3005 Help process large lists of file-names on machines with small amounts of
3006 memory. @xref{Archive Reading Options}.
3007
3008 @item --preserve-permission
3009 Set modes of extracted files to those recorded in the archive.
3010 @xref{File Writing Options}.
3011
3012 @item --read-full-blocks
3013 Read an archive with a smaller than specified block size or which
3014 contains incomplete blocks. @xref{Archive Reading Options}).
3015 @c should be --partial-blocks (!!!)
3016
3017 @item --record-number
3018 Print the record number where a message is generated.
3019 @xref{Additional Information}.
3020
3021 @item --same-order
3022 Help process large lists of file-names on machines with small amounts of
3023 memory. @xref{Archive Reading Options}.
3024
3025 @item --same-permission
3026 Set the modes of extracted files to those recorded in the archive.
3027 @xref{File Writing Options}.
3028
3029 @item --sparse
3030 Archive sparse files sparsely. @xref{Sparse Files}.
3031
3032 @item --starting-file=@var{file-name}
3033 Begin reading in the middle of an archive. @xref{Scarce Disk Space}.
3034
3035 @item --to-stdout
3036 Write files to the standard output. @xref{File Writing Options}.
3037
3038 @item --uncompress
3039 Specifdo a compressed archive. @xref{Compressed Archives}.
3040
3041 @item -V @var{archive-label}
3042 Include an archive-label in the archive being created. @xref{Archive
3043 Label}.
3044 @c was --volume
3045
3046 @item --verbose
3047 Print the names of files or archive members as they are being
3048 operated on. @xref{Additional Information}.
3049
3050 @item --verify
3051 Check for discrepancies in the archive immediately after it is
3052 written. @xref{Write Verification}.
3053
3054 @item -B
3055 Read an archive with a smaller than specified block size or which
3056 contains incomplete blocks. @xref{Archive Reading Options}).
3057
3058 @item -K @var{file-name}
3059 Begin reading in the middle of an archive. @xref{Scarce Disk Space}.
3060
3061 @item -M
3062 Specify a multi-volume archive. @xref{Multi-Volume Archives}.
3063
3064 @item -N @var{date}
3065 Limit operation to files changed after the given date. @xref{File Exclusion}.
3066
3067 @item -O
3068 Write files to the standard output. @xref{File Writing Options}.
3069
3070 @c <<<<- P is absolute paths, add when resolved. -ringo>>>
3071
3072 @item -R
3073 Print the record number where a message is generated.
3074 @xref{Additional Information}.
3075
3076 @item -S
3077 Archive sparse files sparsely. @xref{Sparse Files}.
3078
3079 @item -T @var{file}
3080 Read file-name arguments from a file on the file system.
3081 @xref{File Name Lists}.
3082
3083 @item -W
3084 Check for discrepancies in the archive immediately after it is
3085 written. @xref{Write Verification}.
3086
3087 @item -Z
3088 Specify a compressed archive. @xref{Compressed Archives}.
3089
3090 @item -b @var{number}
3091 Specify the blocking factor of an archive. @xref{Blocking Factor}.
3092
3093 @item -f @var{archive-name}
3094 Name the archive. @xref{Archive Name}).
3095
3096 @item -h
3097 Treat a symbolic link as an alternate name for the file the link
3098 points to. @xref{Symbolic Links}.
3099
3100 @item -i
3101 Ignore end-of-archive entries. @xref{Archive Reading Options}.
3102
3103 @item -k
3104 Prevent overwriting during extraction. @xref{File Writing Options}.
3105
3106 @item -l
3107 Prevent @code{tar} from crossing file system boundaries when
3108 archiving. @xref{File Exclusion}.
3109
3110 @item -m
3111 Set the modification time of extracted files to the time they were
3112 extracted. @xref{File Writing Options}.
3113
3114 @item -o
3115 Create an old format archive. @xref{Old Style File Information}.
3116
3117 @item -p
3118 Set the modes of extracted files to those recorded in the archive.
3119 @xref{File Writing Options}.
3120
3121 @item -s
3122 Help process large lists of file-names on machines with small amounts of
3123 memory. @xref{Archive Reading Options}.
3124
3125 @item -v
3126 Print the names of files or archive members they are being operated
3127 on. @xref{Additional Information}.
3128
3129 @item -w
3130 @c <<<see --interactive. WILL BE INPUT WHEN QUESTIONS ARE RESOLVED.>>>
3131
3132 @item -z
3133 Specify a compressed archive. @xref{Compressed Archives}.
3134
3135 @item -z -z
3136 Create a whole block sized compressed archive. @xref{Compressed Archives}.
3137 @c I would rather this were -Z. it is the only double letter short
3138 @c form.
3139
3140 @item -C @file{directory}
3141 Change the working directory. @xref{Changing Working Directory}.
3142
3143 @item -F @var{program-file}
3144 Create a multi-volume archive via a script. @xref{Multi-Volume Archives}.
3145
3146 @item -X @file{file}
3147 Exclude files which match any of the regular expressions listed in
3148 the file @file{file}. @xref{File Exclusion}.
3149 @end table
3150
3151 @node Data Format Details, Concept Index, Quick Reference, Top
3152 @appendix Details of the Archive Data Format
3153
3154 This chapter is based heavily on John Gilmore's @i{tar}(5) manual page
3155 for the public domain @code{tar} that GNU @code{tar} is based on.
3156 @c it's been majorly edited since, we may be able to lose this.
3157
3158 The archive media contains a series of records, each of which contains
3159 512 bytes. Each archive member is represented by a header record,
3160 which describes the file, followed by zero or more records which
3161 represent the contents of the file. At the end of the archive file
3162 there may be a record consisting of a series of binary zeros, as an
3163 end-of-archive marker. GNU @code{tar} writes a record of zeros at the
3164 end of an archive, but does not assume that such a record exists when
3165 reading an archive.
3166
3167 Records may be grouped into @dfn{blocks} for I/O operations. A block
3168 of records is written with a single @code{write()} operation. The
3169 number of records in a block is specified using the @samp{--block-size}
3170 option. @xref{Blocking Factor}, for more information about specifying
3171 block size.
3172
3173 @menu
3174 * Header Data:: The Distribution of Data in the Header
3175 * Header Fields:: The Meaning of Header Fields
3176 * Sparse File Handling:: Fields to Handle Sparse Files
3177 @end menu
3178
3179 @node Header Data, Header Fields, Data Format Details, Data Format Details
3180 @appendixsec The Distribution of Data in the Header
3181
3182 The header record is defined in C as follows:
3183 @c I am taking the following code on faith.
3184
3185 @example
3186 @r{Standard Archive Format - Standard TAR - USTAR}
3187
3188 #define RECORDSIZE 512
3189 #define NAMSIZ 100
3190 #define TUNMLEN 32
3191 #define TGNMLEN 32
3192 #define SPARSE_EXT_HDR 21
3193 #define SPARSE_IN_HDR 4
3194
3195 struct sparse @{
3196 char offset[12];
3197 char numbytes[12];
3198 @};
3199
3200 union record @{
3201 char charptr[RECORDSIZE];
3202 struct header @{
3203 char name[NAMSIZ];
3204 char mode[8];
3205 char uid[8];
3206 char gid[8];
3207 char size[12];
3208 char mtime[12];
3209 char chksum[8];
3210 char linkflag;
3211 char linkname[NAMSIZ];
3212 char magic[8];
3213 char uname[TUNMLEN];
3214 char gname[TGNMLEN];
3215 char devmajor[8];
3216 char devminor[8];
3217
3218 @r{The following fields were added by gnu and are not used by other}
3219 @r{versions of @code{tar}}.
3220 char atime[12];
3221 char ctime[12];
3222 char offset[12];
3223 char longnames[4];
3224 @r{The next three fields were added by gnu to deal with shrinking down}
3225 @r{sparse files.}
3226 struct sparse sp[SPARSE_IN_HDR];
3227 char isextended;
3228 @r{This is the number of nulls at the end of the file, if any.}
3229 char ending_blanks[12];
3230
3231 @} header;
3232
3233 struct extended_header @{
3234 struct sparse sp[21];
3235 char isextended;
3236 @} ext_hdr;
3237
3238 @};
3239 @c <<< this whole thing needs to be put into better english
3240
3241 @r{The checksum field is filled with this while the checksum is computed.}
3242 #define CHKBLANKS " " @r{8 blanks, no null}
3243
3244 @r{Inclusion of this field marks an archive as being in standard}
3245 @r{Posix format (though GNU tar itself is not Posix conforming). GNU}
3246 @r{tar puts "ustar" in this field if uname and gname are valid.}
3247 #define TMAGIC "ustar " @r{7 chars and a null}
3248
3249 @r{The magic field is filled with this if this is a GNU format dump entry.}
3250 #define GNUMAGIC "GNUtar " @r{7 chars and a null}
3251
3252 @r{The linkflag defines the type of file.}
3253 #define LF_OLDNORMAL '\0' @r{Normal disk file, Unix compatible}
3254 #define LF_NORMAL '0' @r{Normal disk file}
3255 #define LF_LINK '1' @r{Link to previously dumped file}
3256 #define LF_SYMLINK '2' @r{Symbolic link}
3257 #define LF_CHR '3' @r{Character special file}
3258 #define LF_BLK '4' @r{Block special file}
3259 #define LF_DIR '5' @r{Directory}
3260 #define LF_FIFO '6' @r{FIFO special file}
3261 #define LF_CONTIG '7' @r{Contiguous file}
3262
3263 @r{hhe following are further link types which were defined later.}
3264
3265 @r{This is a dir entry that contains the names of files that were in}
3266 @r{the dir at the time the dump was made.}
3267 #define LF_DUMPDIR 'D'
3268
3269 @r{This is the continuation of a file that began on another volume}
3270 #define LF_MULTIVOL 'M'
3271
3272 @r{This is for sparse files}
3273 #define LF_SPARSE 'S'
3274
3275 @r{This file is a tape/volume header. Ignore it on extraction.}
3276 #define LF_VOLHDR 'V'
3277
3278 @r{These are bits used in the mode field - the values are in octal}
3279 #define TSUID 04000 @r{Set UID on execution}
3280 #define TSGID 02000 @r{Set GID on execution}
3281 #define TSVTX 01000 @r{Save text (sticky bit)}
3282
3283 @r{These are file permissions}
3284 #define TUREAD 00400 @r{read by owner}
3285 #define TUWRITE 00200 @r{write by owner}
3286 #define TUEXEC 00100 @r{execute/search by owner}
3287 #define TGREAD 00040 @r{read by group}
3288 #define TGWRITE 00020 @r{write by group}
3289 #define TGEXEC 00010 @r{execute/search by group}
3290 #define TOREAD 00004 @r{read by other}
3291 #define TOWRITE 00002 @r{write by other}
3292 #define TOEXEC 00001 @r{execute/search by other}
3293 @end example
3294
3295
3296 All characters in headers are 8-bit characters in the local variant of
3297 ASCII. Each field in the header is contiguous; that is, there is no
3298 padding in the header format.
3299
3300 Data representing the contents of files is not translated in any way
3301 and is not constrained to represent characters in any character set.
3302 @code{tar} does not distinguish between text files and binary files.
3303
3304 The @code{name}, @code{linkname}, @code{magic}, @code{uname}, and
3305 @code{gname} fields contain null-terminated character strings. All
3306 other fields contain zero-filled octal numbers in ASCII. Each numeric
3307 field of width @var{w} contains @var{w} @minus{} 2 digits, a space, and a
3308 null, except @code{size} and @code{mtime}, which do not contain the
3309 trailing null.
3310
3311 @node Header Fields, Sparse File Handling, Header Data, Data Format Details
3312 @appendixsec The Meaning of Header Fields
3313
3314 The @code{name} field contains the name of the file.
3315 <<< how big a name before field overflows?
3316
3317 The @code{mode} field contains nine bits which specify file
3318 permissions, and three bits which specify the Set UID, Set GID, and
3319 Save Text (``stick'') modes. Values for these bits are defined above.
3320 @xref{File Writing Options}, for information on how file permissions
3321 and modes are used by @code{tar}.
3322
3323 The @code{uid} and @code{gid} fields contain the numeric user and
3324 group IDs of the file owners. If the operating system does not
3325 support numeric user or group IDs, these fields should be ignored.
3326 @c but are they?
3327
3328 The @code{size} field contains the size of the file in bytes; this
3329 field contains a zero if the header describes a link to a file.
3330
3331 The @code{mtime} field contains the modification time of the file.
3332 This is the ASCII representation of the octal value of the last time
3333 the file was modified, represented as an integer number of seconds
3334 since January 1, 1970, 00:00 Coordinated Universal Time.
3335 @xref{File Writing Options}, for a description of how @code{tar} uses
3336 this information.
3337
3338 The @code{chksum} field contains the ASCII representation of the octal
3339 value of the simple sum of all bytes in the header record. To
3340 generate this sum, each 8-bit byte in the header is added to an
3341 unsigned integer, which has been initialized to zero. The precision
3342 of the integer is seventeen bits. When calculating the checksum, the
3343 @code{chksum} field itself is treated as blank.
3344
3345 The @code{atime} and @code{ctime} fields are used when making
3346 incremental backups; they store, respectively, the file's access time
3347 and last inode-change time.
3348
3349 The value in the @code{offset} field is used when making a
3350 multi-volume archive. The offset is number of bytes into the file
3351 that we need to go to pick up where we left off in the previous
3352 volume, i.e the location that a continued file is continued from.
3353
3354 The @code{longnames} field supports a feature that is not yet
3355 implemented. This field should be empty.
3356
3357 The @code{magic} field indicates that this archive was output in the
3358 P1003 archive format. If this field contains @code{TMAGIC}, the
3359 @code{uname} and @code{gname} fields will contain the ASCII
3360 representation of the owner and group of the file respectively. If
3361 found, the user and group IDs are used rather than the values in the
3362 @code{uid} and @code{gid} fields.
3363
3364 The @code{sp} field is used to archive sparse files efficiently.
3365 @xref{Sparse File Handling}, for a description of this field, and
3366 other fields it may imply.
3367
3368 The @code{typeflag} field specifies the file's type. If a particular
3369 implementation does not recognize or permit the specified type,
3370 @code{tar} extracts the file as if it were a regular file, and reports
3371 the discrepancy on the standard error. @xref{File Types}. @xref{GNU
3372 File Types}.
3373
3374 @menu
3375 * File Types:: File Types
3376 * GNU File Types:: Additional File Types Supported by GNU
3377 @end menu
3378
3379 @node File Types, GNU File Types, Header Fields, Header Fields
3380 @appendixsubsec File Types
3381
3382 The following flags are used to describe file types:
3383
3384 @table @code
3385 @item LF_NORMAL
3386 @itemx LF_OLDNORMAL
3387 Indicates a regular file. In order to be compatible with older
3388 versions of @code{tar}, a @code{typeflag} value of @code{LF_OLDNORMAL}
3389 should be silently recognized as a regular file. New archives should
3390 be created using @code{LF_NORMAL} for regular files. For backward
3391 compatibility, @code{tar} treats a regular file whose name ends with a
3392 slash as a directory.
3393
3394 @item LF_LINK
3395 Indicates a link to another file, of any type, which has been
3396 previously archived. @code{tar} identifies linked files in Unix by
3397 matching device and inode numbers. The linked-to name is specified in
3398 the @code{linkname} field with a trailing null.
3399
3400 @item LF_SYMLINK
3401 Indicates a symbolic link to another file. The linked-to
3402 name is specified in the @code{linkname} field with a trailing null.
3403 @xref{File Writing Options}, for information on archiving files
3404 referenced by a symbolic link.
3405
3406 @item LF_CHR
3407 @itemx LF_BLK
3408 Indicate character special files and block special files,
3409 respectively. In this case the @code{devmajor} and @code{devminor}
3410 fields will contain the major and minor device numbers. Operating
3411 systems may map the device specifications to their own local
3412 specification, or may ignore the entry.
3413
3414 @item LF_DIR
3415 Indicates a directory or sub-directory. The directory name in the
3416 @code{name} field should end with a slash. On systems where disk
3417 allocation is performed on a directory basis, the @code{size} field
3418 will contain the maximum number of bytes (which may be rounded to the
3419 nearest disk block allocation unit) that the directory can hold. A
3420 @code{size} field of zero indicates no size limitations. Systems that
3421 do not support size limiting in this manner should ignore the
3422 @code{size} field.
3423
3424 @item LF_FIFO
3425 Indicates a FIFO special file. Note that archiving a FIFO file
3426 archives the existence of the file and not its contents.
3427
3428 @item LF_CONTIG
3429 Indicates a contiguous file. Contiguous files are the same as normal
3430 files except that, in operating systems that support it, all the
3431 files' disk space is allocated contiguously. Operating systems which
3432 do not allow contiguous allocation should silently treat this type as
3433 a normal file.
3434
3435 @item 'A' @dots{}
3436 @itemx 'Z'
3437 These are reserved for custom implementations. Some of these are used
3438 in the GNU modified format, which is described below. @xref{GNU File
3439 Types}.
3440 @end table
3441
3442 Certain other flag values are reserved for specification in future
3443 revisions of the P1003 standard, and should not be used by any
3444 @code{tar} program.
3445
3446 @node GNU File Types, , File Types, Header Fields
3447 @appendixsubsec Additional File Types Supported by GNU
3448
3449 GNU @code{tar} uses additional file types to describe new types of
3450 files in an archive. These are listed below.
3451
3452 @table @code
3453 @item LF_DUMPDIR
3454 @itemx 'D'
3455 Indicates a directory and a list of files created by the
3456 @samp{--incremental} option. The @code{size} field gives the total
3457 size of the associated list of files. Each file name is preceded by
3458 either a @code{'Y'} (the file should be in this archive) or an
3459 @code{'N'} (the file is a directory, or is not stored in the archive).
3460 Each file name is terminated by a null. There is an additional null
3461 after the last file name.
3462
3463 @item LF_MULTIVOL
3464 @itemx 'M'
3465 Indicates a file continued from another volume of a multi-volume
3466 archive (@pxref{Multi-Volume Archives}). The original type of the file is not
3467 given here. The @code{size} field gives the maximum size of this
3468 piece of the file (assuming the volume does not end before the file is
3469 written out). The @code{offset} field gives the offset from the
3470 beginning of the file where this part of the file begins. Thus
3471 @code{size} plus @code{offset} should equal the original size of the
3472 file.
3473
3474 @item LF_SPARSE
3475 @itemx 'S'
3476 Indicates a sparse file. @xref{Sparse Files}. @xref{Sparse File
3477 Handling}.
3478
3479 @item LF_VOLHDR
3480 @itemx 'V'
3481 Marks an archive label that was created using the @samp{--label} option
3482 when the archive was created (@pxref{Archive Label}. The @code{name}
3483 field contains the argument to the option. The @code{size} field is
3484 zero. Only the first file in each volume of an archive should have
3485 this type.
3486 @end table
3487
3488 @node Sparse File Handling, , Header Fields, Data Format Details
3489 @appendixsec Fields to Handle Sparse Files
3490
3491 The following header information was added to deal with sparse files
3492 (@pxref{Sparse Files}):
3493
3494 @c TALK TO MIB
3495 The @code{sp} field (fields? something else?) is an array of
3496 @code{struct sparse}. Each @code{struct sparse} contains two
3497 12-character strings, which represent the offset into the file and the
3498 number of bytes to be written at that offset. The offset is absolute,
3499 and not relative to the offset in preceding array elements.
3500
3501 The header can contain four of these @code{struct sparse}; if more are
3502 needed, they are not stored in the header, instead, the flag
3503 @code{isextended} is set and the next record is an
3504 @code{extended_header}.
3505 @c @code{extended_header} or @dfn{extended_header} ??? the next
3506 @c record after the header, or in the middle of it.
3507
3508 The @code{isextended} flag is only set for sparse files, and then only
3509 if extended header records are needed when archiving the file.
3510
3511 Each extended header record can contain an array of 21 sparse
3512 structures, as well as another @code{isextended} flag. There is no
3513 limit (except that implied by the archive media) on the number of
3514 extended header records that can be used to describe a sparse file.
3515
3516 @c so is @code{extended_header} the right way to write this?
3517
3518 @node Concept Index, , Data Format Details, Top
3519 @unnumbered Concept Index
3520
3521 @printindex cp
3522
3523 @summarycontents
3524 @contents
3525 @bye
3526
3527
This page took 0.184119 seconds and 5 git commands to generate.