]> 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 Various options cause @code{tar} to extract more than just file
640 contents, such as the owner, the permissions, the modification date, and
641 so forth.
642
643 XXX
644 The @samp{--same-permissions} (or @samp{--preserve-permissions}, or
645 @samp{-p}) options cause @code{tar} to cause the new file to have the
646 same permissions as the original file did when it was placed in the
647 archive. Without this option, the current @code{umask} is used to
648 affect the permissions.
649
650 When extrating, @code{tar} normally sets the modification time of the
651 file to the value recorded in the archive. The
652 @samp{--modification-time} option causes @code{tar} to omit doing this.
653 XXX
654
655 @section Updating an Archive
656
657 The @samp{--update} (or @samp{-u}) option updates a @code{tar} archive
658 by comparing the date of the specified archive members against the date
659 of the file with the same name. If the file has been modified more
660 recently than the archive member, then the archive member is deleted (as
661 with @samp{--delete}) and then the file is added to the archive (as with
662 @samp{--append}). On media where the @samp{--delete} option cannot be
663 performed (such as magnetic tapes), the @samp{--update} option similarly
664 fails.
665
666 If no archive members are named (either on the command line or via
667 @samp{--files-from}), then the entire archive is processed in this
668 manner.
669
670 @section Comparing Archives Members with Files
671
672 The @samp{--compare} (or @samp{--diff}, or @samp{-d}) option compares
673 the contents of the specified archive members against the files with the
674 same names, and reports its findings. If no members are named on the
675 command line (or through @samp{--files-from}), then the entire archive
676 is so compared.
677
678 @chapter Specifying Names to @code{tar}
679
680 When specifying the names of files or members to @code{tar}, it by
681 default takes the names of the files from the command line. There are
682 other ways, however, to specify file or member names, or to modify the
683 manner in which @code{tar} selects the files or members upon which to
684 operate. In general, these methods work both for specifying the names
685 of files and archive members.
686
687 @section Reading Names from a File
688
689 Instead of giving the names of files or archive members on the command
690 line, you can put the names into a file, and then use the
691 @samp{--files-from=@var{file-name-list}} (@samp{-T
692 @var{file-name-list}}) option to @code{tar}. Give the name of the file
693 which contains the list as the argument to @samp{--files-from}. The
694 file names should be separated by newlines in the list. If you give a
695 single dash as a filename for @samp{--files-from} (that is, you specify
696 @samp{--files-from=-} or @samp{-T -}), then the filenames are read from
697 standard input.
698
699 If you want to specify names that might contain newlines, use the
700 @samp{--null} option. Then, the filenames should be separated by NUL
701 characters (ASCII 000) instead of newlines. In addition, the
702 @samp{--null} option turns off the @samp{-C} option (@pxref{Changing
703 Directory}).
704
705 @section Excluding Some Files
706
707 The @samp{--exclude=@var{pattern}} option will prevent any file or
708 member which matches the regular expression @var{pattern} from being
709 operated on. For example, if you want to create an archive with all the
710 contents of @file{/tmp} except the file @file{/tmp/foo}, you can use the
711 command @samp{tar --create --file=arch.tar --exclude=foo}.
712
713 If there are many files you want to exclude, you can use the
714 @samp{--exclude-from=@var{exclude-list}} (@samp{-X @var{exclude-list}})
715 option. This works just like the
716 @samp{--files-from=@var{file-name-list}} option: specify the name of a
717 file as @var{exclude-list} which contains the list of patterns you want
718 to exclude.
719
720 @xref{Regular Expressions} for more information on the syntax and
721 meaning of regular expressions.
722
723 @section Operating Only on New Files
724
725 The @samp{--newer=@var{date}} (@samp{--after-date=@var{date}} or
726 @samp{-N @var{date}}) limits @code{tar} to only operating on files which
727 have been modified after the date specified. (For more information on
728 how to specify a date, @xref{Date Formats}.) A file is considered to
729 have changed if the contents have been modified, or if the owner,
730 permissions, and so forth, have been changed.
731
732 If you only want @code{tar} make the date comparison on the basis of the
733 actual contents of the file's modification, then use the
734 @samp{--newer-mtime=@var{date}} option.
735
736 You should never use this option for making incremental dumps. To learn
737 how to use @code{tar} to make backups, @ref{Making Backups}.
738
739 @section Crossing Filesystem Boundaries
740
741 The @samp{--one-file-system} option causes @code{tar} to modify its
742 normal behavior in archiving the contents of directories. If a file in
743 a directory is not on the same filesystem as the directory itself
744 (because it is a mounted filesystem in its own right), then @code{tar}
745 will not archive that file, or (if it is a directory itself) anything
746 beneath it.
747
748 This does not necessarily limit @code{tar} to only archiving the
749 contents of a single filesystem, because all files named on the command
750 line (or through the @samp{--files-from} option) will always be
751 archived.
752
753 @chapter Changing the Names of Members when Archiving
754
755 @section Changing Directory
756
757 The @samp{--directory=@var{directory}} (@samp{-C @var{directory}})
758 option causes @code{tar} to change its current working directory to
759 @var{directory}. Unlike most options, this one is processed at the
760 point it occurs within the list of files to be processed. Consider the
761 following command:
762 @example
763 tar --create --file=foo.tar -C /etc passwd hosts -C /lib libc.a
764 @end example
765
766 This command will place the files @file{/etc/passwd}, @file{/etc/hosts},
767 and @file{/lib/libc.a} into the archive. However, the names of the
768 archive members will be exactly what they were on the command line:
769 @file{passwd}, @file{hosts}, and @file{libc.a}. The @samp{--directory}
770 option is frequently used to make the archive independent of the
771 original name of the directory holding the files.
772
773 Note that @samp{--directory} options are interpreted consecutively. If
774 @samp{--directory} option specifies a relative pathname, it is
775 interpreted relative to the then current directory, which might not be
776 the same as the original current working directory of @code{tar}, due to
777 a previous @samp{--directory} option.
778
779 When using @samp{--files-from} (@pxref{Reading Names from a File}), you
780 can put @samp{-C} options in the file list. Unfortunately, you cannot
781 put @samp{--directory} options in the file list. (This interpretation
782 can be disabled by using the @samp{--null} option.)
783
784 @section Absolute Path Names
785
786 When @code{tar} extracts archive members from an archive, it strips any
787 leading slashes (@code{/}) from the member name. This causes absolute
788 member names in the archive to be treated as relative file names. This
789 allows you to have such members extracted wherever you want, instead of
790 being restricted to extracting the member in the exact directory named
791 in the archive. For example, if the archive member has the name
792 @file{/etc/passwd}, @code{tar} will extract it as if the name were
793 really @file{etc/passwd}.
794
795 Other @code{tar} programs do not do this. As a result, if you create an
796 archive whose member names start with a slash, they will be difficult
797 for other people with an inferior @code{tar} program to use. Therefore,
798 GNU @code{tar} also strips leading slashes from member names when
799 putting members into the archive. For example, if you ask @code{tar} to
800 add the file @file{/bin/ls} to an archive, it will do so, but the member
801 name will be @file{bin/ls}.
802
803 If you use the @samp{--absolute-paths} option, @code{tar} will do
804 neither of these transformations.
805
806 @section Symbolic Links
807
808 Normally, when @code{tar} archives a symbolic link, it writes a record
809 to the archive naming the target of the link. In that way, the
810 @code{tar} archive is a faithful record of the filesystem contents.
811 However, if you want @code{tar} to actually dump the contents of the
812 target of the symbolic link, then use the @samp{--dereference} option.
813
814 @chapter Making @code{tar} More Verbose
815
816 Various options cause @code{tar} to print information as it progresses
817 in its job.
818
819 The @samp{--verbose} (or @samp{-v}) option causes @code{tar} to print
820 the name of each archive member or file as it is processed. Since
821 @samp{--list} already prints the names of the members, @samp{--verbose}
822 used with @samp{--list} causes @code{tar} to print a longer listing
823 (reminiscent of @samp{ls -l}) for each member.
824
825 To see the progress of @code{tar} through the archive, the
826 @samp{--record-number} option prints a message for each record read or
827 writted. (@xref{Archive Structure}.) This option can be very helpful
828 when trying to figure out where in the archive an error occurs.
829
830 The @samp{--totals} option (which is only meaningful when used with
831 @samp{--create}) causes @code{tar} to print the total amount written to
832 the archive, after it has been fully created.
833
834 The @samp{--checkpoint} option prints an occasional message as
835 @code{tar} reads or writes the archive. It is designed for those who
836 don't need the more detailed (and voluminous) output of
837 @samp{--record-number}, but do want visual confirmation that @code{tar}
838 is actually making forward progress.
839
840 The @samp{--version} option will generate a message with the version of
841 GNU @code{tar} you are using.
842
843 @chapter Input and Output
844
845 @section Changing the Archive Name
846
847 By default, @code{tar} uses an archive file name compiled in when
848 @code{tar} was built. Usually this refers to some physical tape drive
849 on the machine. Often, the installer of @code{tar} didn't set the
850 default to anything meaningful at all.
851
852 As a result, most uses of @code{tar} need to tell @code{tar} where to
853 find (or create) the archive. The @samp{--file=@var{archive-name}} (or
854 @samp{-f @var{archive-name}} option selects another file to use as the
855 archive.
856
857 If the archive file name includes a colon (@samp{:}), then it is assumed
858 to be a file on another machine. If the archive file is
859 @samp{@var{user}@@@var{host}:@var{file}}, then @var{file} is used on the
860 host @var{host}. The remote host is accessed using the @code{rsh}
861 program, with a username of @var{user}. If the username is omitted
862 (along with the @samp{@@} sign), then your user name will be used.
863 (This is the normal @code{rsh} behavior.) It is necessary for the
864 remote machine, in addition to permitting your @code{rsh} access, to
865 have the @code{/usr/ucb/rmt} program installed. If you need to use a
866 file whose name includes a colon, then the remote tape drive behavior
867 can be inhibited by using the @samp{--force-local} option.
868
869 If the filename you give to @samp{--file} is a single dash (@samp{-}),
870 then @code{tar} will read the archive from (or write it to) standard
871 input (or standard output).
872
873 @section Extracting Members to Standard Output
874
875 An archive member in normally extracted into a file with the same name
876 as the archive member. However, you can use the @samp{--to-stdout} to
877 cause @code{tar} to write extracted archive members to standard output.
878 If you extract multiple members, they appear on standard output
879 concatenated, in the order they are found in the archive.
880
881 @section Dealing with Compressed Archives
882
883 You can have archives be compressed by using the @samp{--gzip} (or
884 @samp{-z}) option. This will arrange for @code{tar} to use the
885 @code{gzip} program to be used to compress or uncompress the archive
886 wren writing or reading it.
887
888 To use the older, obsolete, @code{compress} program, use the
889 @samp{--compress} (or @samp{-Z}) option. The GNU Project recommends you
890 not use @code{compress}, because there is a patent covering the
891 algorithm it uses. Merely by running @code{compress} you could be sued
892 for patent infringment.
893
894 When using either @samp{--gzip} or @samp{--compress}, @code{tar} does
895 not do blocking (@pxref{Blocking}) correctly. Use @samp{--gzip-block}
896 or @samp{--compress-block} instead when using real tape drives.
897
898 @chapter Being More Careful
899
900 When using @code{tar} with many options, particularly ones with
901 complicated or difficult-to-predict behavior, it is possible to make
902 serious mistakes. As a result, @code{tar} provides several options that
903 make observing @code{tar} easier.
904
905 The @samp{--verbose} option causes @code{tar} to print the name of each
906 file or archive member as it is processed. This and the other options
907 which make tar print status information can be useful in monitoring
908 @code{tar}. @xref{Making @code{tar} More Verbose}.
909
910 If you use @samp{--interactive} (or {@samp--confirm}), then @code{tar}
911 will ask you for confirmation before each operation. For example, when
912 extracting, it will prompt you before each archive member is extracted,
913 and you can select that member for extraction or pass over to the next.
914
915 The @samp{--verify} option, when using @samp{--create}, causes
916 @code{tar}, after having finished creating the archive, to go back over
917 it and compare its contents against the files that were placed in the
918 archive.
919
920 The @samp{--show-omitted-dirs} option, when reading an archive (with
921 @samp{--list} or @samp{--extract}, for example), causes a message to be
922 printed for each directory in the archive which is skipped. This
923 happens regardless of the reason for skipping: the directory might not
924 have been named on the command line (implicitly or explicitly), it might
925 be excluded by the use of the @samp{--exclude} option, or some other
926 reason.
927
928 @chapter Using Real Tape Drives
929
930 Many complexities surround the use of @code{tar} on tape drives. Since
931 the creation and manipulation of archives located on magnetic tape was
932 the original purpose of @code{tar}, it contains many features making
933 such manipulation easier.
934
935 @section Blocking
936
937 When writing to tapes, @code{tar} writes the contents of the archive in
938 chunks known as @dfn{blocks}. To change the default blocksize, use the
939 @samp{--block-size=@var{blocking-factor}} (@samp{-b
940 @var{blocking-factor}) option. Each block will then be composed of
941 @var{blocking-factor} records. (Each @code{tar} record is 512 bytes.
942 @xref{Archive Format}.) Each file written to the archive uses at least
943 one full block. As a result, using a larger block size can result in
944 more wasted space for small files. On the other hand, a larger block
945 size can ofter be read and written much more efficiently.
946
947 Further complicating the problem is that some tape drives ignore the
948 blocking entirely. For these, a larger block size can still improve
949 performance (because the software layers above the tape drive still
950 honor the blocking), but not as dramatically as on tape drives that
951 honor blocking.
952
953 Wher reading an archive, @code{tar} can usually figure out the block
954 size on itself. When this is the case, and a non-standard block size
955 was used when the archive was created, @code{tar} will print a message
956 about a non-standard blocking factor, and then operate normally. On
957 some tape devices, however, @code{tar} cannot figure out the block size
958 itself. On most of those, you can specify a blocking factor (with
959 @samp{--block-size) larger than the actual blocking factor, and then use
960 the @samp{--read-full-blocks} option. (If you specify a blocking factor
961 with @samp{--block-size} and don't use the @samp{--read-full-blocks}
962 option, then @code{tar} will not attempt to figure out the blocking size
963 itself.) On some devices, you must always specify the block size
964 exactly with @samp{--block-size} when reading, because @code{tar} cannot
965 figure it out. In any case, use @samp{--list} before doing any
966 extractions to see whether @code{tar} is reading the archive correctly.
967
968 If you use a blocking factor larger than 20, older @code{tar} programs
969 might not be able to read the archive, so we recommend this as a limit
970 to use in practice. GNU @code{tar}, however, will support arbitrarily
971 large block sizes, limited only by the amount of virtual memory or the
972 physical characteristics of the tape device.
973
974 If you are writing a compressed archive to tape with @samp{--compress}
975 or @samp{--gzip} (@pxref{Input and Output}), @code{tar} will not block
976 the archive correctly. This doesn't matter if you are writing the
977 archive to a normal file or through a pipe, but if you are writing it to
978 a tape drive, then this causes problems. Use @samp{--compress-block} or
979 @samp{--gzip-block} instead, to cause @code{tar} to arrange to have
980 blocking work correctly.
981
982 @section Using Multiple Tapes
983
984 Often you might want to write a large archive, one larger than will fit
985 on the actual tape you are using. In such a case, you can run multiple
986 @code{tar} commands, but this can be inconvenient, particularly if you
987 are using options like @samp{--exclude} or dumping entire filesystems.
988 Therefore, @code{tar} supports multiple tapes automatically.
989
990 Use @samp{--multi-volume} on the command line, and then @code{tar} will,
991 when it reaches the end of the tape, prompt for another tape, and
992 continue the archive. Each tape will have an independent archive, and
993 can be read without needing the other. (As an exception to this, the
994 file that @code{tar} was archiving when it ran out of tape will usually
995 be split between the two archives; in this case you need to extract from
996 the first archive, using @samp{--multi-volume}, and then put in the
997 second tape when prompted, so @code{tar} can restore both halves of the
998 file.)
999
1000 When prompting for a new tape, @code{tar} accepts any of the following
1001 responses:
1002
1003 @table @samp
1004 @item ?
1005 Request @code{tar} to explain possible responses
1006 @item q
1007 Request @code{tar} to exit immediately.
1008 @item n @var{file-name}
1009 Request @code{tar} to write the next volume on the file @var{file-name}.
1010 @item !
1011 Request @code{tar} to run a subshell.
1012 @item y
1013 Request @code{tar} to begin writing the next volume.
1014 @end table
1015
1016 (You should only type @samp{y} after you have changed the tape;
1017 otherwise @code{tar} will write over the volume it just finished.)
1018
1019 If you want more elaborate behavior than this, give @code{tar} the
1020 @samp{--info-script=@var{script-name}} option. The file
1021 @var{script-name} is expected to be a program (or shell script) to be
1022 run instead of the normal prompting procedure. When the program
1023 finishes, @code{tar} will immediately begin writing the next volume.
1024 (The behavior of the @samp{n} response to the normal tape-change prompt
1025 is not available if you use @samp{--info-script}.)
1026
1027 The method @code{tar} uses to detect end of tape is not perfect, and
1028 fails on some operating systems or on some devices. You can use the
1029 @samp{--tape-length=@var{size}} (or @samp{-L @var{size}}) option if
1030 @code{tar} can't detect the end of the tape itself. The @var{size}
1031 argument should be the size of the tape.
1032
1033 The volume number used by @code{tar} in its tape-change prompt can be
1034 changed; if you give the @samp{--volno-file=@var{file-name}} option,
1035 then @var{file-name} should contain a decimal number. That number will
1036 be used as the volume number of the first volume written. When
1037 @code{tar} is finished, it will rewrite the file with the now--current
1038 volume number. (This does not change the volume number written on a
1039 tape label (@pxref{Special Options for Archiving}; it @emph{only}
1040 affects the number used in the prompt.)
1041
1042 If you want @code{tar} to cycle through a series of tape drives, then
1043 you can use the @samp{n} response to the tape-change prompt. This is
1044 error prone, however, and doesn't work at all with @samp{--info-script}.
1045 Therefore, if you give @code{tar} multiple @samp{--file} options, then
1046 the specified files will be used, in sequence, as the successive volumes
1047 of the archive. Only when the first one in the sequence needs to be
1048 used again will @code{tar} prompt for a tape change (or run the info
1049 script).
1050
1051 @section Tape Files
1052
1053 When @code{tar} writes an archive to tape, it creates a single tape
1054 file. If multiple archives are written to the same tape, one after the
1055 other, they each get written as separate tape files. When extracting,
1056 it is necessary to position the tape at the right place before running
1057 @code{tar}. To do this, use the @code{mt} command. For more
1058 information on the @code{mt} command and on the organization of tapes
1059 into a sequence of tape files, see XXX.
1060
1061 @chapter Special Options for Archiving
1062
1063 To give the archive a name which will be recorded in it, use the
1064 @samp{--label=@var{volume-label}} (or @samp{-V}) option. This will
1065 write a special record identifying @var{volume-label} as the name of the
1066 archive to the front of the archive which will be displayed when the
1067 archive is listed with @samp{--list}. If you are creating a
1068 multi-volume archive with @samp{--multi-volume} (@pxref{Using Multiple
1069 Tapes}), then the volume label will have @same{ Volume @var{nnn}}
1070 appended to the name you give, where @var{nnn} is the number of the
1071 volume of the archive. (If you use the @samp{--label} option when
1072 reading an archive, it checks to make sure the label on the tape matches
1073 the one you give. @xref{Special Options for Archiving}.)
1074
1075 Files in the filesystem occasionally have ``holes.'' A hole in a file
1076 is a section of the file's contents which was never written. The
1077 contents of a hole read as all zeros. On many operating systems, actual@c
1078 disk storage is not allocated for holes, but they are counted in the
1079 length of the file. If you archive such a file, @code{tar} could create
1080 an archive longer than the original. To have @code{tar} attempt to
1081 recognize the holes in a file, use @samp{--sparse}. When you use the
1082 @samp{--sparse} option, then, for any file using less disk space than
1083 would be expected from its length, @code{tar} searches the file for
1084 consecutive stretches of zeros. It then records in the archive for the
1085 file where the consecutive stretches of zeros are, and only archives the
1086 ``real contents'' of the file. On extraction (using @samp{--sparse} is
1087 not needed on extraction) any such files have hols created wherever the
1088 continuous stretches of zeros were found. Thus, if you use
1089 @samp{--sparse}, @code{tar} archives won't take more space than the
1090 original.
1091
1092 When @code{tar} reads files, this causes them to have the access times
1093 updated. To have @code{tar} attempt to set the access times back to
1094 what they were before they were read, use the @samp{--atime-preserve}
1095 option. This doesn't work for files that you don't own, unless you're
1096 root, and it doesn't interact with incremental dumps nicely
1097 (@pxref{Making Backups}), but it is good enough for some purposes.
1098
1099 @chapter Special Options for Reading Archives
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109 XXXX MIB XXXX
1110
1111
1112
1113 @node Wizardry, Archive Structure, Tutorial, Top
1114 @chapter Wizardry
1115
1116 <<<This section needs to be written -ringo
1117
1118 @strong{To come:} using Unix file linking capability to recreate directory
1119 structures---linking files into one subdirectory and then tarring that
1120 directory.
1121
1122 @strong{to come:} nice hairy example using absolute-paths, newer, etc.
1123
1124
1125 Piping one @code{tar} to another is an easy way to copy a directory's
1126 contents from one disk to another, while preserving the dates, modes, owners
1127 and link-structure of all the files therein.
1128
1129 @example
1130 cd sourcedirectory; tar cf - . | (cd targetdir; tar xf -)
1131 @end example
1132
1133 @noindent
1134 or
1135
1136 <<< the following using standard input/output correct??
1137 @example
1138 cd sourcedirectory; tar --create --file=- . | (cd targetdir; tar --extract --file=-)
1139 @end example
1140
1141 @noindent
1142
1143 Archive files can be used for transporting a group of files from one system
1144 to another: put all relevant files into an archive on one computer system,
1145 transfer the archive to another, and extract the contents there. The basic
1146 transfer medium might be magnetic tape, Internet FTP, or even electronic
1147 mail (though you must encode the archive with @code{uuencode} in order to
1148 transport it properly by mail). Both machines do not have to use the same
1149 operating system, as long as they both support the @code{tar} program.
1150 @findex uuencode
1151 <<< mention uuencode on a paragraph of its own
1152
1153 <<<<<end construction>>>>>
1154
1155 @node Archive Structure, Reading and Writing, Wizardry, Top
1156 @chapter The Structure of an Archive
1157
1158 While an archive may contain many files, the archive itself is a
1159 single ordinary file. Like any other file, an archive file can be
1160 written to a storage device such as a tape or disk, sent through a
1161 pipe or over a network, saved on the active file system, or even
1162 stored in another archive. An archive file is not easy to read or
1163 manipulate without using the @code{tar} utility or Tar mode in Emacs.
1164
1165
1166 Physically, an archive consists of a series of file entries terminated
1167 by an end-of-archive entry, which consists of 512 zero bytes. A file
1168 entry usually describes one of the files in the archive (an
1169 @dfn{archive member}), and consists of a file header and the contents
1170 of the file. File headers contain file names and statistics, checksum
1171 information which @code{tar} uses to detect file corruption, and
1172 information about file types.
1173
1174 More than archive member can have the same file name. One way this
1175 situation can occur is if more than one version of a file has been
1176 stored in the archive. For information about adding new versions of a
1177 file to an archive, @pxref{Modifying}.
1178
1179 In addition to entries describing archive members, an archive may contain
1180 entries which @code{tar} itself uses to store information.
1181 @xref{Archive Label}, for an example of such an archive entry.
1182
1183 @menu
1184 * Old Style File Information:: Old Style File Information
1185 * Archive Label::
1186 * Format Variations::
1187 @end menu
1188
1189 @node Old Style File Information, Archive Label, Archive Structure, Archive Structure
1190 @section Old Style File Information
1191 @cindex Format, old style
1192 @cindex Old style format
1193 @cindex Old style archives
1194
1195 Archives record not only an archive member's contents, but also its
1196 file name or names, its access permissions, user and group, size in
1197 bytes, and last modification time. Some archives also record the file
1198 names in each archived directory, as well as other file and directory
1199 information.
1200
1201 Certain old versions of @code{tar} cannot handle additional
1202 information recorded by newer @code{tar} programs. To create an
1203 archive which can be read by these old versions, specify the
1204 @samp{--old-archive} option in conjunction with the @samp{tar --create}
1205 operation. When you specify this option, @code{tar} leaves out
1206 information about directories, pipes, fifos, contiguous files, and
1207 device files, and specifies file ownership by group and user ids
1208 instead of names.
1209
1210 The @samp{--old-archive} option is needed only if the archive must be
1211 readable by an older tape archive program which cannot handle the new format.
1212 Most @code{tar} programs do not have this limitation, so this option
1213 is seldom needed.
1214
1215 @table @samp
1216 @item --old-archive
1217 @itemx -o
1218 @itemx --old
1219 @itemx --portable
1220 @c has portability been changed to portable?
1221 Creates an archive that can be read by an old @code{tar} program.
1222 Used in conjunction with the @samp{tar --create} operation.
1223 @end table
1224
1225 @node Archive Label, Format Variations, Old Style File Information, Archive Structure
1226 @section Including a Label in the Archive
1227 @cindex Labeling an archive
1228 @cindex Labels on the archive media
1229
1230 @c !! Should the arg to --label be a quoted string?? no - ringo
1231 To avoid problems caused by misplaced paper labels on the archive
1232 media, you can include a @dfn{label} entry---an archive member which
1233 contains the name of the archive---in the archive itself. Use the
1234 @samp{--label=@var{archive-label}} option in conjunction with the
1235 @samp{--create} operation to include a label entry in the archive as it
1236 is being created.
1237
1238 If you create an archive using both @samp{--label=@var{archive-label}}
1239 and @samp{--multi-volume}, each volume of the archive will have an
1240 archive label of the form @samp{@var{archive-label} Volume @var{n}},
1241 where @var{n} is 1 for the first volume, 2 for the next, and so on.
1242 @xref{Multi-Volume Archives}, for information on creating multiple
1243 volume archives.
1244
1245 If you extract an archive using @samp{--label=@var{archive-label}},
1246 @code{tar} will print an error if the archive label doesn't match the
1247 @var{archive-label} specified, and will then not extract the archive.
1248 You can include a regular expression in @var{archive-label}, in this
1249 case only.
1250 @c >>> why is a reg. exp. useful here? (to limit extraction to a
1251 @c >>>specific group? ie for multi-volume??? -ringo
1252
1253 To find out an archive's label entry (or to find out if an archive has
1254 a label at all), use @samp{tar --list --verbose}. @code{tar} will print the
1255 label first, and then print archive member information, as in the
1256 example below:
1257
1258 @example
1259 % tar --verbose --list --file=iamanarchive
1260 V--------- 0/0 0 Mar 7 12:01 1992 iamalabel--Volume Header--
1261 -rw-rw-rw- ringo/user 40 May 21 13:30 1990 iamafilename
1262 @end example
1263
1264 @table @samp
1265 @item --label=@var{archive-label}
1266 @itemx -V @var{archive-label}
1267 Includes an @dfn{archive-label} at the beginning of the archive when
1268 the archive is being created (when used in conjunction with the
1269 @samp{tar --create} operation). Checks to make sure the archive label
1270 matches the one specified (when used in conjunction with the @samp{tar
1271 --extract} operation.
1272 @end table
1273 @c was --volume
1274
1275 @node Format Variations, , Archive Label, Archive Structure
1276 @section Format Variations
1277 @cindex Format Parameters
1278 @cindex Format Options
1279 @cindex Options to specify archive format.
1280
1281 Format parameters specify how an archive is written on the archive
1282 media. The best choice of format parameters will vary depending on
1283 the type and number of files being archived, and on the media used to
1284 store the archive.
1285
1286 To specify format parameters when accessing or creating an archive,
1287 you can use the options described in the following sections. If you
1288 do not specify any format parameters, @code{tar} uses default
1289 parameters. You cannot modify a compressed archive. If you create an
1290 archive with the @samp{--block-size} option specified (@pxref{Blocking
1291 Factor}), you must specify that block-size when operating on the
1292 archive. @xref{Matching Format Parameters}, for other examples of
1293 format parameter considerations.
1294
1295
1296 @menu
1297 * Multi-Volume Archives::
1298 * Sparse Files::
1299 * Blocking Factor::
1300 * Compressed Archives::
1301 @end menu
1302
1303 @node Multi-Volume Archives, Sparse Files, Format Variations, Format Variations
1304 @subsection Archives Longer than One Tape or Disk
1305 @cindex Multi-volume archives
1306
1307 To create an archive that is larger than will fit on a single unit of
1308 the media, use the @samp{--multi-volume} option in conjunction with the
1309 @samp{tar --create} operation (@pxref{Creating Archives}). A
1310 @dfn{multi-volume} archive can be manipulated like any other archive
1311 (provided the @samp{--multi-volume} option is specified), but is stored
1312 on more than one tape or disk.
1313
1314 When you specify @samp{--multi-volume}, @code{tar} does not report an
1315 error when it comes to the end of an archive volume (when reading), or
1316 the end of the media (when writing). Instead, it prompts you to load
1317 a new storage volume. If the archive is on a magnetic tape, you
1318 should change tapes when you see the prompt; if the archive is on a
1319 floppy disk, you should change disks; etc.
1320
1321 You can read each individual volume of a multi-volume archive as if it
1322 were an archive by itself. For example, to list the contents of one
1323 volume, use @samp{tar --list}, without @samp{--multi-volume} specified.
1324 To extract an archive member from one volume (assuming it is described
1325 that volume), use @samp{tar --extract}, again without
1326 @samp{--multi-volume}.
1327
1328 If an archive member is split across volumes (ie. its entry begins on
1329 one volume of the media and ends on another), you need to specify
1330 @samp{--multi-volume} to extract it successfully. In this case, you
1331 should load the volume where the archive member starts, and use
1332 @samp{tar --extract --multi-volume}---@code{tar} will prompt for later
1333 volumes as it needs them. @xref{Extracting From Archives} for more
1334 information about extracting archives.
1335
1336 @samp{--info-script=@var{program-file}} is like @samp{--multi-volume},
1337 except that @code{tar} does not prompt you directly to change media
1338 volumes when a volume is full---instead, @code{tar} runs commands you
1339 have stored in @var{program-file}. This option can be used to
1340 broadcast messages such as @samp{someone please come change my tape}
1341 when performing unattended backups. When @var{program-file} is done,
1342 @code{tar} will assume that the media has been changed.
1343
1344
1345 <<< There should be a sample program here, including an exit before
1346 <<< end.
1347
1348 @table @samp
1349 @item --multi-volume
1350 @itemx -M
1351 Creates a multi-volume archive, when used in conjunction with
1352 @samp{tar --create}. To perform any other operation on a multi-volume
1353 archive, specify @samp{--multi-volume} in conjunction with that
1354 operation.
1355
1356 @item --info-script=@var{program-file}
1357 @itemx -F @var{program-file}
1358 Creates a multi-volume archive via a script. Used in conjunction with
1359 @samp{tar --create}.
1360 @end table
1361
1362 @node Sparse Files, Blocking Factor, Multi-Volume Archives, Format Variations
1363 @subsection Archiving Sparse Files
1364 @cindex Sparse Files
1365
1366 A file is sparse if it contains blocks of zeros whose existance is
1367 recorded, but that have no space allocated on disk. When you specify
1368 the @samp{--sparse} option in conjunction with the @samp{--create}
1369 operation, @code{tar} tests all files for sparseness while archiving.
1370 If @code{tar} finds a file to be sparse, it uses a sparse
1371 representation of the file in the archive. @xref{Creating Archives},
1372 for more information about creating archives.
1373
1374 @samp{--sparse} is useful when archiving files, such as dbm files,
1375 likely to contain many nulls. This option dramatically
1376 decreases the amount of space needed to store such an archive.
1377
1378 @quotation
1379 @strong{Please Note:} Always use @samp{--sparse} when performing file
1380 system backups, to avoid archiving the expanded forms of files stored
1381 sparsely in the system.@refill
1382
1383 Even if your system has no no sparse files currently, some may be
1384 created in the future. If you use @samp{--sparse} while making file
1385 system backups as a matter of course, you can be assured the archive
1386 will always take no more space on the media than the files take on
1387 disk (otherwise, archiving a disk filled with sparse files might take
1388 hundreds of tapes).@refill
1389 <<< xref incremental when node name is set.
1390 @end quotation
1391
1392 @code{tar} ignores the @samp{--sparse} option when reading an archive.
1393
1394 @table @samp
1395 @item --sparse
1396 @itemx -S
1397 Files stored sparsely in the file system are represented sparsely in
1398 the archive. Use in conjunction with write operations.
1399 @end table
1400
1401 @node Blocking Factor, Compressed Archives, Sparse Files, Format Variations
1402 @subsection The Blocking Factor of an Archive
1403 @cindex Blocking Factor
1404 @cindex Block Size
1405 @cindex Number of records per block
1406 @cindex Number of bytes per block
1407 @cindex Bytes per block
1408 @cindex Records per block
1409
1410 The data in an archive is grouped into records, which are 512 bytes.
1411 Records are read and written in whole number multiples called
1412 @dfn{blocks}. The number of records in a block (ie. the size of a
1413 block in units of 512 bytes) is called the @dfn{blocking factor}. The
1414 @samp{--block-size=@var{number}} option specifies the blocking factor
1415 of an archive. The default blocking factor is typically 20 (ie.@:
1416 10240 bytes), but can be specified at installation. To find out the
1417 blocking factor of an existing archive, use @samp {tar --list
1418 --file=@var{archive-name}}. This may not work on some devices.
1419
1420 Blocks are seperated by gaps, which waste space on the archive media.
1421 If you are archiving on magnetic tape, using a larger blocking factor
1422 (and therefore larger blocks) provides faster throughput and allows
1423 you to fit more data on a tape (because there are fewer gaps). If you
1424 are archiving on cartridge, a very large blocking factor (say 126 or
1425 more) greatly increases performance. A
1426 smaller blocking factor, on the other hand, may be usefull when
1427 archiving small files, to avoid archiving lots of nulls as @code{tar}
1428 fills out the archive to the end of the block. In general, the ideal block size
1429 depends on the size of the inter-block gaps on the tape you are using,
1430 and the average size of the files you are archiving. @xref{Creating
1431 Archives}, for information on writing archives.
1432
1433 Archives with blocking factors larger than 20 cannot be read by very
1434 old versions of @code{tar}, or by some newer versions of @code{tar}
1435 running on old machines with small address spaces. With GNU
1436 @code{tar}, the blocking factor of an archive is limited only by the
1437 maximum block size of the device containing the archive, or by the
1438 amount of available virtual memory.
1439
1440 If you use a non-default blocking factor when you create an archive,
1441 you must specify the same blocking factor when you modify that
1442 archive. Some archive devices will also require you to specify the
1443 blocking factor when reading that archive, however this is not
1444 typically the case. Usually, you can use @samp{tar --list} without
1445 specifying a blocking factor---@code{tar} reports a non-default block
1446 size and then lists the archive members as it would normally. To
1447 extract files from an archive with a non-standard blocking factor
1448 (particularly if you're not sure what the blocking factor is), you can
1449 usually use the {--read-full-blocks} option while specifying a blocking
1450 factor larger then the blocking factor of the archive (ie. @samp{tar
1451 --extract --read-full-blocks --block-size=300}. @xref{Listing Contents}
1452 for more information on the @samp{--list} operation.
1453 @xref{read-full-blocks} for a more detailed explanation of that
1454 option.
1455
1456 @table @samp
1457 @item --block-size=@var{number}
1458 @itemx -b @var{number}
1459 Specifies the blocking factor of an archive. Can be used with any
1460 operation, but is usually not necessary with @samp{tar --list}.
1461 @end table
1462
1463 @node Compressed Archives, , Blocking Factor, Format Variations
1464 @subsection Creating and Reading Compressed Archives
1465 @cindex Compressed archives
1466 @cindex Storing archives in compressed format
1467
1468 @samp{--compress} indicates an archive stored in compressed format.
1469 The @samp{--compress} option is useful in saving time over networks and
1470 space in pipes, and when storage space is at a premium.
1471 @samp{--compress} causes @code{tar} to compress when writing the
1472 archive, or to uncompress when reading the archive.
1473
1474 To perform compression and uncompression on the archive, @code{tar}
1475 runs the @code{compress} utility. @code{tar} uses the default
1476 compression parameters; if you need to override them, avoid the
1477 @samp{--compress} option and run the @code{compress} utility
1478 explicitly. It is useful to be able to call the @code{compress}
1479 utility from within @code{tar} because the @code{compress} utility by
1480 itself cannot access remote tape drives.
1481
1482 The @samp{--compress} option will not work in conjunction with the
1483 @samp{--multi-volume} option or the @samp{--add-file}, @samp{--update},
1484 @samp{--add-file} and @samp{--delete} operations. @xref{Modifying}, for
1485 more information on these operations.
1486
1487 If there is no compress utility available, @code{tar} will report an
1488 error.
1489
1490 @samp{--compress-block} is like @samp{--compress}, but when used in
1491 conjunction with @samp{--create} also causes @code{tar} to pad the last
1492 block of the archive out to the next block boundary as it is written.
1493 This is useful with certain devices which require all write operations
1494 be a multiple of a specific size.
1495
1496 @quotation
1497 @strong{Please Note:} The @code{compress} program may be covered by a patent,
1498 and therefore we recommend you stop using it. We hope to have a
1499 different compress program in the future. We may change the name of
1500 this option at that time.
1501 @end quotation
1502
1503 @table @samp
1504 @item --compress
1505 @itemx --uncompress
1506 @itemx -z
1507 @itemx -Z
1508 When this option is specified, @code{tar} will compress (when writing
1509 an archive), or uncompress (when reading an archive). Used in
1510 conjunction with the @samp{--create}, @samp{--extract}, @samp{--list} and
1511 @samp{--compare} operations.
1512
1513 @item --compress-block
1514 @itemx -z -z
1515 Acts like @samp{--compress}, but pads the archive out to the next block
1516 boundary as it is written when used in conjunction with the
1517 @samp{--create} operation.
1518 @end table
1519
1520 @c >>> MIB -- why not use -Z instead of -z -z ? -ringo
1521
1522 @node Reading and Writing, Insuring Accuracy, Archive Structure, Top
1523 @chapter Reading and Writing Archives
1524
1525 The @samp{--create} operation writes a new archive, and the
1526 @samp{--extract} operation reads files from an archive and writes them
1527 into the file system. You can use other @code{tar} operations to
1528 write new information into an existing archive (adding files to it,
1529 adding another archive to it, or deleting files from it), and you can
1530 read a list of the files in an archive without extracting it using the
1531 @samp{--list} operation.
1532
1533 @menu
1534 * Archive Name:: The name of an archive
1535 * Creating in Detail:: Creating in detail
1536 * Modifying:: Modifying archives
1537 * Listing Contents:: Listing the contents of an archive
1538 * Extracting From Archives:: Extracting files from an archive
1539 @end menu
1540
1541 @node Archive Name, Creating in Detail, Reading and Writing, Reading and Writing
1542 @section The Name of an Archive
1543 @cindex Naming an archive
1544 @cindex Archive Name
1545 @cindex Directing output
1546 @cindex Where is the archive?
1547
1548 An archive can be saved as a file in the file system, sent through a
1549 pipe or over a network, or written to an I/O device such as a tape or
1550 disk drive. To specify the name of the archive, use the
1551 @samp{--file=@var{archive-name}} option.
1552
1553 An archive name can be the name of an ordinary file or the name of an
1554 I/O device. @code{tar} always needs an archive name---if you do not
1555 specify an archive name, the archive name comes from the environment
1556 variable @code{TAPE} or, if that variable is not specified, a default
1557 archive name, which is usually the name of tape unit zero (ie.
1558 /dev/tu00).
1559
1560 If you use @file{-} as an @var{archive-name}, @code{tar} reads the
1561 archive from standard input (when listing or extracting files), or
1562 writes it to standard output (when creating an archive). If you use
1563 @file{-} as an @var{archive-name} when modifying an archive,
1564 @code{tar} reads the original archive from its standard input and
1565 writes the entire new archive to its standard output.
1566
1567 @c >>> MIB--does standard input and output redirection work with all
1568 @c >>> operations?
1569 @c >>> need example for standard input and output (screen and keyboard?)
1570
1571 @cindex Standard input and output
1572 @cindex tar to standard input and output
1573
1574 To specify an archive file on a device attached to a remote machine,
1575 use the following:
1576
1577 @example
1578 --file=@var{hostname}:/@var{dev}/@var{file name}
1579 @end example
1580
1581 @noindent
1582 @code{tar} will complete the remote connection, if possible, and
1583 prompt you for a username and password. If you use
1584 @samp{--file=@@@var{hostname}:/@var{dev}/@var{file-name}}, @code{tar}
1585 will complete the remote connection, if possible, using your username
1586 as the username on the remote machine.
1587
1588 @c >>>MIB --- is this clear?
1589
1590 @table @samp
1591 @item --file=@var{archive-name}
1592 @itemx -f @var{archive-name}
1593 Names the archive to create or operate on. Use in conjunction with
1594 any operation.
1595 @end table
1596
1597 @node Creating in Detail, Modifying, Archive Name, Reading and Writing
1598 @section Creating in Detail
1599 @c operations should probably have examples, not tables.
1600 @cindex Writing new archives
1601 @cindex Archive creation
1602
1603 To create an archive, use @samp{tar --create}. To name the archive,
1604 use @samp{--file=@var{archive-name}} in conjunction with the
1605 @samp{--create} operation (@pxref{Archive Name}). If you do not name
1606 the archive, @code{tar} uses the value of the environment variable
1607 @code{TAPE} as the file name for the archive, or, if that is not
1608 available, @code{tar} uses a default archive name, usually that for tape
1609 unit zero. @xref{Archive Name}, for more information about specifying
1610 an archive name.
1611
1612 The following example creates an archive named @file{stooges},
1613 containing the files @file{larry}, @file{moe} and @file{curley}:
1614
1615 @example
1616 tar --create --file=stooges larry moe curley
1617 @end example
1618
1619 If you specify a directory name as a file-name argument, @code{tar}
1620 will archive all the files in that directory. The following example
1621 creates an archive named @file{hail/hail/fredonia}, containing the
1622 contents of the directory @file{marx}:
1623
1624 @example
1625 tar --create --file=hail/hail/fredonia marx
1626 @end example
1627
1628 If you don't specify files to put in the archive, @code{tar} archives
1629 all the files in the working directory. The following example creates
1630 an archive named @file{home} containing all the files in the working
1631 directory:
1632
1633 @example
1634 tar --create --file=home
1635 @end example
1636
1637 @xref{File Name Lists}, for other ways to specify files to archive.
1638
1639 Note: In the example above, an archive containing all the files in the
1640 working directory is being written to the working directory. GNU
1641 @code{tar} stores files in the working directory in an archive which
1642 is itself in the working directory without falling into an infinite
1643 loop. Other versions of @code{tar} may fall into this trap.
1644
1645 @node Modifying, Listing Contents, Creating in Detail, Reading and Writing
1646 @section Modifying Archives
1647 @cindex Modifying archives
1648
1649 Once an archive is created, you can add new archive members to it, add
1650 the contents of another archive, add newer versions of members already
1651 stored, or delete archive members already stored.
1652
1653 To find out what files are already stored in an archive, use @samp{tar
1654 --list --file=@var{archive-name}}. @xref{Listing Contents}.
1655
1656 @menu
1657 * Adding Files::
1658 * Appending Archives::
1659 * Deleting Archive Files:: Deleting Files From an Archive
1660 * Matching Format Parameters::
1661 @end menu
1662
1663 @node Adding Files, Appending Archives, Modifying, Modifying
1664 @subsection Adding Files to an Archive
1665 @cindex Adding files to an archive
1666 @cindex Updating an archive
1667
1668 To add files to an archive, use @samp{tar --add-file}. The archive to
1669 be added to must already exist and be in proper archive format (which
1670 normally means it was created previously using @code{tar}). If the
1671 archive was created with a different block size than now specified,
1672 @code{tar} will report an error (@pxref{Blocking Factor}). If the
1673 archive is not a valid @code{tar} archive, the results will be
1674 unpredictable. You cannot add files to a compressed archive, however
1675 you can add files to the last volume of a multi-volume archive.
1676 @xref{Matching Format Parameters}.
1677
1678 The following example adds the file @file{shemp} to the archive
1679 @file{stooges} created above:
1680
1681 @example
1682 tar --add-file --file=stooges shemp
1683 @end example
1684
1685 You must specify the files to be added; there is no default.
1686
1687 @samp{tar --update} acts like @samp{tar --add-file}, but does not add
1688 files to the archive if there is already a file entry with that name
1689 in the archive that has the same modification time.
1690
1691 Both @samp{--update} and @samp{--add-file} work by adding to the end of
1692 the archive. When you extract a file from the archive, only the
1693 version stored last will wind up in the file system. Because
1694 @samp{tar --extract} extracts files from an archive in sequence, and
1695 overwrites files with the same name in the file system, if a file name
1696 appears more than once in an archive the last version of the file will
1697 overwrite the previous versions which have just been extracted. You
1698 should avoid storing older versions of a file later in the archive.
1699
1700 Note: @samp{--update} is not suitable for performing backups, because
1701 it doesn't change directory content entries, and because it lengthens
1702 the archive every time it is used.
1703 @c <<< xref to scripted backup, listed incremental, for info on backups.
1704
1705 @node Appending Archives, Deleting Archive Files, Adding Files, Modifying
1706 @subsection Appending One Archive's Contents to Another Archive
1707 @cindex Adding archives to an archive
1708 @cindex Concatenating Archives
1709
1710 To append copies of an archive or archives to the end of another
1711 archive, use @samp{tar --add-archive}. The source and target archives
1712 must already exist and have been created using compatable format
1713 parameters (@pxref{Matching Format Parameters}).
1714
1715 @code{tar} will stop reading an archive if it encounters an
1716 end-of-archive marker. The @code{cat} utility does not remove
1717 end-of-archive markers, and is therefore unsuitable for concatenating
1718 archives. @samp{tar --add-archive} removes the end-of-archive marker
1719 from the target archive before each new archive is appended.
1720 @c <<< xref ignore-zeros
1721
1722 You must specify the source archives using
1723 @samp{--file=@var{archive-name}} (@pxref{Archive Name}). If you do not
1724 specify the target archive , @code{tar} uses the value of the
1725 environment variable @code{TAPE}, or, if this has not been set, the
1726 default archive name.
1727
1728 The following example adds the contents of the archive
1729 @file{hail/hail/fredonia} to the archive @file{stooges} (both archives
1730 were created in examples above):
1731
1732 @example
1733 tar --add-archive --file=stooges hail/hail/fredonia
1734 @end example
1735
1736 If you need to retrieve files from an archive that was added to using
1737 the @code{cat} utility, use the @samp{--ignore-zeros} option
1738 (@pxref{Archive Reading Options}).
1739
1740 @node Deleting Archive Files, Matching Format Parameters, Appending Archives, Modifying
1741 @subsection Deleting Files From an Archive
1742 @cindex Deleting files from an archive
1743 @cindex Removing files from an archive
1744
1745 To delete archive members from an archive, use @samp{tar --delete}.
1746 You must specify the file names of the members to be deleted. All
1747 archive members with the specified file names will be removed from the
1748 archive.
1749
1750 The following example removes the file @file{curley} from the archive
1751 @file{stooges}:
1752
1753 @example
1754 tar --delete --file=stooges curley
1755 @end example
1756
1757 You can only use @samp{tar --delete} on an archive if the archive
1758 device allows you to write to any point on the media.
1759
1760 @quotation
1761 @strong{Warning:} Don't try to delete an archive member from a
1762 magnetic tape, lest you scramble the archive. There is no safe way
1763 (except by completely re-writing the archive) to delete files from
1764 most kinds of magnetic tape.
1765 @end quotation
1766
1767 @c <<< MIB -- how about automatic detection of archive media? give error
1768 @c <<< unless the archive device is either an ordinary file or different
1769 @c <<< input and output (--file=-).
1770
1771 @node Matching Format Parameters, , Deleting Archive Files, Modifying
1772 @subsection Matching the Format Parameters
1773
1774 Some format parameters must be taken into consideration when modifying
1775 an archive:
1776
1777 Compressed archives cannot be modified.
1778
1779 You have to specify the block size of the archive when modifying an
1780 archive with a non-default block size.
1781
1782 Multi-volume archives can be modified like any other archive. To add
1783 files to a multi-volume archive, you need to only mount the last
1784 volume of the archive media (and new volumes, if needed). For all
1785 other operations, you need to use the entire archive.
1786
1787 If a multi-volume archive was labeled using @samp{--label}
1788 (@pxref{Archive Label}) when it was created, @code{tar} will not
1789 automatically label volumes which are added later. To label
1790 subsequent volumes, specify @samp{--label=@var{archive-label}} again in
1791 conjunction with the @samp{--add-file}, @samp{--update} or
1792 @samp{--add-archive} operation.
1793 @cindex Labelling multi-volume archives
1794 @c <<< example
1795
1796 @c <<< xref somewhere, for more information about format parameters.
1797
1798 @node Listing Contents, Extracting From Archives, Modifying, Reading and Writing
1799 @section Listing the Contents of an Archive
1800 @cindex Names of the files in an archive
1801 @cindex Archive contents, list of
1802 @cindex Archive members, list of
1803
1804 @samp{tar --list} prints a list of the file names of the archive
1805 members on the standard output. If you specify @var{file-name}
1806 arguments on the command line (or using the @samp{--files-from} option,
1807 @pxref{File Name Lists}), only the files you specify will be listed,
1808 and only if they exist in the archive. Files not specified will be
1809 ignored, unless they are under a specific directory.
1810
1811 If you include the @samp{--verbose} option, @code{tar} prints an
1812 @samp{ls -l} type listing for the archive. @pxref{Additional
1813 Information}, for a description of the @samp{--verbose} option.
1814
1815 If the blocking factor of the archive differs from the default,
1816 @code{tar} reports this. @xref{Blocking Factor}.
1817
1818 @xref{Archive Reading Options} for a list of options which can be used
1819 to modify @samp{--list}'s operation.
1820
1821 This example prints a list of the archive members of the archive
1822 @file{stooges}:
1823
1824 @example
1825 tar --list --file=stooges
1826 @end example
1827
1828 @noindent
1829 @code{tar} responds:
1830
1831 @example
1832 larry
1833 moe
1834 shemp
1835 marx/julius
1836 marx/alexander
1837 marx/karl
1838 @end example
1839
1840 This example generates a verbose list of the archive members of the
1841 archive file @file{dwarves}, which has a blocking factor of two:
1842
1843 @example
1844 tar --list -v --file=blocks
1845 @end example
1846
1847 @noindent
1848 @code{tar} responds:
1849
1850 @example
1851 tar: Blocksize = 2 records
1852 -rw------- ringo/user 42 May 1 13:29 1990 .bashful
1853 -rw-rw-rw- ringo/user 42 Oct 4 13:29 1990 doc
1854 -rw-rw-rw- ringo/user 42 Jul 20 18:01 1969 dopey
1855 -rw-rw---- ringo/user 42 Nov 26 13:42 1963 grumpy
1856 -rw-rw-rw- ringo/user 42 May 5 13:29 1990 happy
1857 -rw-rw-rw- ringo/user 42 May 1 12:00 1868 sleepy
1858 -rw-rw-rw- ringo/user 42 Jul 4 17:29 1776 sneezy
1859 @end example
1860
1861 @node Extracting From Archives, , Listing Contents, Reading and Writing
1862 @section Extracting Files from an Archive
1863 @cindex Extraction
1864 @cindex Retrieving files from an archive
1865 @cindex Resurrecting files from an archive
1866
1867 To read archive members from the archive and write them into the file
1868 system, use @samp{tar --extract}. The archive itself is left
1869 unchanged.
1870
1871 If you do not specify the files to extract, @code{tar} extracts all
1872 the files in the archive. If you specify the name of a directory as a
1873 file-name argument, @code{tar} will extract all files which have been
1874 stored as part of that directory. If a file was stored with a
1875 directory name as part of its file name, and that directory does not
1876 exist under the working directory when the file is extracted,
1877 @code{tar} will create the directory. @xref{Selecting Archive
1878 Members}, for information on specifying files to extract.
1879
1880 The following example shows the extraction of the archive
1881 @file{stooges} into an empty directory:
1882
1883 @example
1884 tar --extract --file=stooges
1885 @end example
1886
1887 @noindent
1888 Generating a listing of the directory (@samp{ls}) produces:
1889
1890 @example
1891 larry
1892 moe
1893 shemp
1894 marx
1895 @end example
1896
1897 @noindent
1898 The subdirectory @file{marx} contains the files @file{julius},
1899 @file{alexander} and @file{karl}.
1900
1901 If you wanted to just extract the files in the subdirectory
1902 @file{marx}, you could specify that directory as a file-name argument
1903 in conjunction with the @samp{--extract} operation:
1904
1905 @example
1906 tar --extract --file=stooges marx
1907 @end example
1908
1909 @quotation
1910 @strong{Warning:} Extraction can overwrite files in the file system.
1911 To avoid losing files in the file system when extracting files from
1912 the archive with the same name, use the @samp{--keep-old-files} option
1913 (@pxref{File Writing Options}).
1914 @end quotation
1915
1916 If the archive was created using @samp{--block-size}, @samp{--compress}
1917 or @samp{--multi-volume}, you must specify those format options again
1918 when extracting files from the archive (@pxref{Format Variations}).
1919
1920 @menu
1921 * Archive Reading Options::
1922 * File Writing Options::
1923 * Scarce Disk Space:: Recovering From Scarce Disk Space
1924 @end menu
1925
1926 @node Archive Reading Options, File Writing Options, Extracting From Archives, Extracting From Archives
1927 @subsection Options to Help Read Archives
1928 @cindex Options when reading archives
1929 @cindex Reading incomplete blocks
1930 @cindex Blocks, incomplete
1931 @cindex End of archive markers, ignoring
1932 @cindex Ignoring end of archive markers
1933 @cindex Large lists of file names on small machines
1934 @cindex Small memory
1935 @cindex Running out of space
1936
1937 @c <<< each option wants its own node. summary after menu
1938
1939 Normally, @code{tar} will request data in full block increments from
1940 an archive storage device. If the device cannot return a full block,
1941 @code{tar} will report an error. However, some devices do not always
1942 return full blocks, or do not require the last block of an archive to
1943 be padded out to the next block boundary. To keep reading until you
1944 obtain a full block, or to accept an incomplete block if it contains
1945 an end-of-archive marker, specify the @samp{--read-full-blocks} option
1946 in conjunction with the @samp{--extract} or @samp{--list} operations.
1947 @xref{Listing Contents}.
1948
1949 The @samp{--read-full-blocks} option is turned on by default when
1950 @code{tar} reads an archive from standard input, or from a remote
1951 machine. This is because on BSD Unix systems, attempting to read a
1952 pipe returns however much happens to be in the pipe, even if it is
1953 less than was requested. If this option were not enabled, @code{tar}
1954 would fail as soon as it read an incomplete block from the pipe.
1955
1956 If you're not sure of the blocking factor of an archive, you can read
1957 the archive by specifying @samp{--read-full-blocks} and
1958 @samp{--block-size=@var{n}}, where @var{n} is a blocking factor larger
1959 than the blocking factor of the archive. This lets you avoid having
1960 to determine the blocking factor of an archive. @xref{Blocking
1961 Factor}.
1962
1963 @table @samp
1964 @item --read-full-blocks
1965 @item -B
1966 Use in conjunction with @samp{tar --extract} to read an archive which
1967 contains incomplete blocks, or one which has a blocking factor less
1968 than the one specified.
1969 @end table
1970
1971 Normally @code{tar} stops reading when it encounters a block of zeros
1972 between file entries (which usually indicates the end of the archive).
1973 @samp{--ignore-zeros} allows @code{tar} to completely read an archive
1974 which contains a block of zeros before the end (i.e.@: a damaged
1975 archive, or one which was created by @code{cat}-ing several archives
1976 together).
1977
1978 The @samp{--ignore-zeros} option is turned off by default because many
1979 versions of @code{tar} write garbage after the end of archive entry,
1980 since that part of the media is never supposed to be read. GNU
1981 @code{tar} does not write after the end of an archive, but seeks to
1982 maintain compatablity among archiving utilities.
1983
1984 @table @samp
1985 @item --ignore-zeros
1986 @itemx -i
1987 To ignore blocks of zeros (ie.@: end-of-archive entries) which may be
1988 encountered while reading an archive. Use in conjunction with
1989 @samp{tar --extract} or @samp{tar --list}.
1990 @end table
1991
1992 If you are using a machine with a small amount of memory, and you need
1993 to process large list of file-names, you can reduce the amount of
1994 space @code{tar} needs to process the list. To do so, specify the
1995 @samp{--same-order} option and provide an ordered list of file names.
1996 This option tells @code{tar} that the @file{file-name} arguments
1997 (provided on the command line, or read from a file using the
1998 @samp{--files-from} option) are listed in the same order as the files
1999 in the archive.
2000
2001 You can create a file containing an ordered list of files in the
2002 archive by storing the output produced by @samp{tar --list
2003 --file=@var{archive-name}}. @xref{Listing Contents}, for information
2004 on the @samp{--list} operation.
2005
2006 This option is probably never needed on modern computer systems.
2007
2008 @table @samp
2009 @item --same-order
2010 @itemx --preserve-order
2011 @itemx -s
2012 To process large lists of file-names on machines with small amounts of
2013 memory. Use in conjunction with @samp{tar --compare}, @samp{tar --list}
2014 or @samp{tar --extract}.
2015 @end table
2016
2017 @c we don't need/want --preserve to exist any more
2018
2019 @node File Writing Options, Scarce Disk Space, Archive Reading Options, Extracting From Archives
2020 @subsection Changing How @code{tar} Writes Files
2021 @c <<< find a better title
2022 @cindex Overwriting old files, prevention
2023 @cindex Protecting old files
2024 @cindex Modification times of extracted files
2025 @cindex Permissions of extracted files
2026 @cindex Modes of extracted files
2027 @cindex Writing extracted files to standard output
2028 @cindex Standard output, writing extracted files to
2029
2030 Normally, @code{tar} writes extracted files into the file system
2031 without regard to the files already on the system---files with the
2032 same name as archive members are overwritten. To prevent @code{tar}
2033 from extracting an archive member from an archive, if doing so will
2034 overwrite a file in the file system, use @samp{--keep-old-files} in
2035 conjunction with the @samp{--extract} operation. When this option is
2036 specified, @code{tar} reports an error stating the name of the files
2037 in conflict, instead of writing the file from the archive.
2038
2039 @table @samp
2040 @item --keep-old files
2041 @itemx -k
2042 Prevents @code{tar} from overwriting files in the file system during
2043 extraction.
2044 @end table
2045
2046 Normally, @code{tar} sets the modification times of extracted files to
2047 the modification times recorded for the files in the archive, but
2048 limits the permissions of extracted files by the current @code{umask}
2049 setting.
2050
2051 To set the modification times of extracted files to the time when
2052 the files were extracted, use the @samp{--modification-time} option in
2053 conjunction with @samp{tar --extract}.
2054
2055 @table @samp
2056 @item --modification-time
2057 @itemx -m
2058 Sets the modification time of extracted archive members to the time
2059 they were extracted, not the time recorded for them in the archive.
2060 Use in conjunction with @samp{--extract}.
2061 @end table
2062
2063 To set the modes (access permissions) of extracted files to those
2064 recorded for those files in the archive, use the
2065 @samp{--preserve-permissions} option in conjunction with the
2066 @samp{--extract} operation.
2067 @c <<<mib --- should be aliased to ignore-umask.
2068
2069 @table @samp
2070 @item --preserve-permission
2071 @itemx --same-permission
2072 @itemx --ignore-umask
2073 @itemx -p
2074 Set modes of extracted archive members to those recorded in the
2075 archive, instead of current umask settings. Use in conjunction with
2076 @samp{--extract}.
2077 @end table
2078
2079 @c <<< following paragraph needs to be rewritten:
2080 @c <<< why doesnt' this cat files together, why is this useful. is it
2081 @c <<< really useful with more than one file?
2082 To write the files extracted to the standard output, instead of
2083 creating the files on the file system, use @samp{--to-stdout} in
2084 conjunction with @samp{tar --extract}. This option is useful if you
2085 are extracting files to send them through a pipe, and do not need to
2086 preserve them in the file system.
2087
2088 @table @samp
2089 @item --to-stdout
2090 @itemx -O
2091 Writes files to the standard output. Used in conjunction with
2092 @samp{--extract}.
2093 @end table
2094
2095 @c <<< why would you want to do such a thing, how are files separated on
2096 @c <<< the standard output? is this useful with more that one file? are
2097 @c <<< pipes the real reason?
2098
2099 @node Scarce Disk Space, , File Writing Options, Extracting From Archives
2100 @subsection Recovering From Scarce Disk Space
2101 @cindex Middle of the archive, starting in the
2102 @cindex Running out of space during extraction
2103 @cindex Disk space, running out of
2104 @cindex Space on the disk, recovering from lack of
2105
2106 If a previous attempt to extract files failed due to lack of disk
2107 space, you can use @samp{--starting-file=@var{file-name}} to start
2108 extracting only after file @var{file-name} when extracting files from
2109 the archive. This assumes, of course, that there is now free space,
2110 or that you are now extracting into a different file system.
2111
2112 @table @samp
2113 @item --starting-file=@var{file-name}
2114 @itemx -K @var{file-name}
2115 Starts an operation in the middle of an archive. Use in conjunction
2116 with @samp{--extract} or @samp{--list}.
2117 @end table
2118
2119 If you notice you are running out of disk space during an extraction
2120 operation, you can also suspend @code{tar}, remove unnecessary files
2121 from the file system, and then restart the same @code{tar} operation.
2122 In this case, @samp{--starting-file} is not necessary.
2123
2124 @c <<< xref incremental, xref --interactive, xref --exclude
2125
2126 @node Insuring Accuracy, Selecting Archive Members, Reading and Writing, Top
2127 @chapter Insuring the Accuracy of an Archive
2128
2129 You can insure the accuracy of an archive by comparing files in the
2130 system with archive members. @code{tar} can compare an archive to the
2131 file system as the archive is being written, to verify a write
2132 operation, or can compare a previously written archive, to insure that
2133 it is up to date.
2134
2135 @menu
2136 * Write Verification::
2137 * Comparing::
2138 @end menu
2139
2140 @node Write Verification, Comparing, Insuring Accuracy, Insuring Accuracy
2141 @section Verifying Data as It is Stored
2142 @cindex Verifying a write operation
2143 @cindex Double-checking a write operation
2144
2145 To check for discrepancies in an archive immediately after it is
2146 written, use the @samp{--verify} option in conjunction with the
2147 @samp{tar --create} operation. When this option is specified,
2148 @code{tar} checks archive members against their counterparts in the file
2149 system, and reports discrepancies on the standard error. In
2150 multi-volume archives, each volume is verified after it is written,
2151 before the next volume is written.
2152
2153 To verify an archive, you must be able to read it from before the end
2154 of the last written entry. This option is useful for detecting data
2155 errors on some tapes. Archives written to pipes, some cartridge tape
2156 drives, and some other devices cannot be verified.
2157
2158 @table @samp
2159 @item --verify
2160 @itemx -W
2161 Checks for discrepancies in the archive immediately after it is
2162 written. Use in conjunction with @samp{tar --create}.
2163 @end table
2164
2165 @node Comparing, , Write Verification, Insuring Accuracy
2166 @section Comparing an Archive with the File System
2167 @cindex Verifying the currency of an archive
2168
2169 @samp{tar --compare} compares archive members in an existing archive
2170 with their counterparts in the file system, and reports differences in
2171 file size, mode, owner, modification date and contents. If a file is
2172 represented in the archive but does not exist in the file system,
2173 @code{tar} reports a difference.
2174
2175 If you use @var{file-name} arguments in conjunction with @samp{tar
2176 --compare}, @code{tar} compares the archived versions of the files
2177 specified with their counterparts in the file system. If you specify
2178 a file that is not in the archive, @code{tar} will report an error. If
2179 you don't specify any files, @code{tar} compares all the files in the
2180 archive.
2181
2182 Because @code{tar} only checks files in the archive against files in
2183 the file system, and not vice versa, it ignores files in the file
2184 system that do not exist in the archive.
2185
2186 The following example compares the archive members @file{larry},
2187 @file{moe} and @file{curly} in the archive @file{stooges} with files
2188 of the same name in the file system.
2189
2190 @example
2191 tar --compare --file=stooges larry moe curly
2192 @end example
2193
2194 @noindent
2195 If a file, for example @file{curly}, did not exist in the archive,
2196 @code{tar} would report an error, as follows:
2197
2198 @example
2199 curly: does not exist
2200 @end example
2201
2202 @node Selecting Archive Members, User Interaction, Insuring Accuracy, Top
2203 @chapter Selecting Archive Members
2204 @cindex Specifying files to act on
2205 @cindex Specifying archive members
2206
2207 @dfn{File-name arguments} specify which files in the file system
2208 @code{tar} operates on, when creating or adding to an archive, or
2209 which archive members @code{tar} operates on, when reading or
2210 deleting from an archive. (@pxref{Reading and Writing}.)
2211
2212 To specify file names, you can include them as the last arguments on
2213 the command line, as follows:
2214 @example
2215 tar @var{operation} [@var{option1} @var{option2} ..] [@var{file-name-1} @var{file-name-2} ...]
2216 @end example
2217
2218 If you specify a directory name as a file name argument, all the files
2219 in that directory are operated on by @code{tar}.
2220
2221 If you do not specify files when @code{tar} is invoked, @code{tar}
2222 operates on all the non-directory files in the working directory (if
2223 the operation is @samp{--create}), all the archive members in the
2224 archive (if a read operation is specified), or does nothing (if any
2225 other operation is specified).
2226
2227 @menu
2228 * File Name Lists:: Reading File Names from a File
2229 * File Name Interpretation:: this needs a better title
2230 * File Exclusion:: so does this
2231 @end menu
2232
2233 @node File Name Lists, File Name Interpretation, Selecting Archive Members, Selecting Archive Members
2234 @section Reading a List of File Names from a File
2235 @cindex Lists of file names
2236 @cindex File-name arguments, alternatives
2237
2238 To read file names from a file on the file system, instead of from the
2239 command line, use the @samp{--files-from=@var{file}} option. If you
2240 specify @samp{-} as @var{file}, the file names are read from standard
2241 input. Note that using both @samp{--files-from=-} and @samp{--file=-}
2242 in the same command will not work unless the operation is
2243 @samp{--create}. @xref{Archive Name}, for an explanation of the
2244 @samp{--file} option.
2245
2246 @table @samp
2247 @item --files-from=@var{file}
2248 @itemx -T @var{file}
2249 Reads file-name arguments from a file on the file system, instead of
2250 from the command line. Use in conjunction with any operation.
2251 @end table
2252
2253 @node File Name Interpretation, File Exclusion, File Name Lists, Selecting Archive Members
2254 @section File Name Interpretation
2255 @cindex File Names, interpreting
2256
2257 @c <<<<add some text -ringo
2258
2259 @menu
2260 * Absolute File Names::
2261 * Changing Working Directory::
2262 * Archiving with Symbolic Links:: Archiving Using Symbolic Links
2263 @end menu
2264
2265 @node Absolute File Names, Changing Working Directory, File Name Interpretation, File Name Interpretation
2266 @subsection Storing and Extracting Files Relative to Root
2267
2268 @c <<< is this what this does, or does it just preserve the slash?
2269 @c <<< is it still called --absolute-paths?
2270
2271 @c To archive or extract files relative to the root directory, specify
2272 @c the @samp{--absolute-paths} option.
2273
2274 @c Normally, @code{tar} acts on files relative to the working
2275 @c directory---ignoring superior directory names when archiving, and
2276 @c ignoring leading slashes when extracting.
2277
2278 @c When you specify @samp{--absolute-paths}, @code{tar} stores file names
2279 @c including all superior directory names, and preserves leading slashes.
2280 @c If you only invoked @code{tar} from the root directory you would never
2281 @c need the @samp{--absolute-paths} option, but using this option may be
2282 @c more convenient than switching to root.
2283
2284 @c >>> should be an example in the tutorial/wizardry section using this
2285 @c >>> to transfer files between systems.
2286
2287 @c >>> is write access an issue?
2288
2289 @table @samp
2290 @item --absolute-paths
2291 Preserves full file names (inclusing superior dirctory names) when
2292 archiving files. Preserves leading slash when extracting files.
2293 @end table
2294
2295 @node Changing Working Directory, Archiving with Symbolic Links, Absolute File Names, File Name Interpretation
2296 @subsection Changing the Working Directory Within a List of File-names
2297 @cindex Directory, changing in mid-stream
2298 @cindex Working directory, specifying
2299
2300 To change working directory in the middle of a list of file names,
2301 (either on the command line or in a file specified using
2302 @samp{--files-from}), use @samp{--directory=@var{directory}}. This will
2303 change the working directory to the directory @var{directory} after
2304 that point in the list. For example,
2305
2306 @example
2307 tar --create iggy ziggy --directory=baz melvin
2308 @end example
2309
2310 @noindent
2311 will place the files @file{iggy} and @file{ziggy} from the current
2312 directory into the archive, followed by the file @file{melvin} from
2313 the directory @file{baz}. This option is especially useful when you
2314 have several widely separated files that you want to store in the same
2315 directory in the archive.
2316
2317 Note that the file @file{melvin} is recorded in the archive under the
2318 precise name @file{melvin}, @emph{not} @file{baz/melvin}. Thus, the
2319 archive will contain three files that all appear to have come from the
2320 same directory; if the archive is extracted with plain @samp{tar
2321 --extract}, all three files will be written in the current directory.
2322
2323 Contrast this with the command
2324
2325 @example
2326 tar -c iggy ziggy bar/melvin
2327 @end example
2328
2329 @noindent
2330 which records the third file in the archive under the name
2331 @file{bar/melvin} so that, if the archive is extracted using @samp{tar
2332 --extract}, the third file will be written in a subdirectory named
2333 @file{bar}.
2334
2335 @table @samp
2336 @item --directory=@file{directory}
2337 @itemx -C @file{directory}
2338 Changes the working directory.
2339 @end table
2340
2341 @c <<<need to test how extract deals with this, and add an example -ringo
2342
2343 @node Archiving with Symbolic Links, , Changing Working Directory, File Name Interpretation
2344 @subsection Archiving Using Symbolic Links
2345 @cindex File names, using symbolic links
2346 @cindex Symbolic link as file name
2347
2348 @samp{--dereference} is used with @samp{tar --create}, and causes
2349 @code{tar} to archive files which are referenced by a symbolic link,
2350 using the name of the link as the file name.
2351
2352 <<<this needs to be checked by MIB and then re-written, with an example
2353 The name under which the file is stored in the file system is not
2354 recorded in the archive. To record both the symbolic link name and
2355 the file name in the system, archive the file under both names. If
2356 all links were recorded automatically by @code{tar}, an extracted file
2357 might be linked to a file name that no longer exists in the file
2358 system.
2359
2360 @c <<< is the following still true? - ringo
2361 If a linked-to file is encountered again by @code{tar} while creating
2362 the same archive, an entire second copy of it will be stored. This
2363 could be considered a bug.
2364
2365 @table @samp
2366 @item --dereference
2367 @itemx -h
2368 Stores files referenced by a symbolic link, using the name of the link
2369 as the file name. Use in conjunction with any write operation.
2370 @end table
2371
2372 @node File Exclusion, , File Name Interpretation, Selecting Archive Members
2373 @section Selecting Files by Characteristic
2374 @cindex File names, excluding files by
2375 @cindex Excluding files by name and pattern
2376 @cindex Excluding files by file system
2377 @cindex File system boundaries, not crossing
2378 @cindex Excluding file by age
2379 @cindex Modification time, excluding files by
2380 @cindex Age, excluding files by
2381
2382 To avoid crossing file system boundaries when archiving parts of a
2383 directory tree, use @samp{--one-file-system}. This option only affects
2384 files that are archived because they are in a directory that is being
2385 archived; files explicitly named on the command line are archived
2386 regardless of where they reside.
2387
2388 This option is useful for making full or incremental archival backups
2389 of a file system.
2390
2391 If this option is used in conjunction with @samp{--verbose}, files that
2392 are excluded are mentioned by name on the standard error.
2393
2394 @table @samp
2395 @item --one-file-system
2396 @itemx -l
2397 Prevents @code{tar} from crossing file system boundaries when
2398 archiving. Use in conjunction with any write operation.
2399 @end table
2400
2401 To avoid operating on files whose names match a particular pattern,
2402 use the @samp{--exclude=@var{pattern}} or
2403 @samp{--exclude-from=@var{file}} options.
2404
2405 When you specify the @samp{--exclude=@var{pattern}} option, @code{tar}
2406 ignores files which match the @var{pattern}, which can be a single
2407 file name or a more complex expression. Thus, if you invoke
2408 @code{tar} with @samp{tar --create --exclude=*.o}, no files whose names
2409 end in @file{.o} are included in the archive.
2410 @c <<< what other things can you use besides "*"?
2411
2412 @samp{--exclude-from=@var{file}} acts like @samp{--exclude}, but
2413 specifies a file @var{file} containing a list of patterns. @code{tar}
2414 ignores files with names that fit any of these patterns.
2415
2416 You can use either option more than once in a single command.
2417
2418 @table @samp
2419 @item --exclude=@var{pattern}
2420 Causes @code{tar} to ignore files that match the @var{pattern}.
2421
2422 @item --exclude-from=@var{file}
2423 Causes @code{tar} to ignore files that match the patterns listed in
2424 @var{file}.
2425 @end table
2426 @c --exclude-from used to be "--exclude", --exclude didn't used to exist.
2427
2428 To operate only on files with modification or status-change times
2429 after a particular date, use @samp{--after-date=@var{date}}. You can
2430 use this option with @samp{tar --create} or @samp{tar --add-file} to
2431 insure only new files are archived, or with @samp{tar --extract} to
2432 insure only recent files are resurrected. @refill
2433 @c --after-date @var{date} or --newer @var{date}
2434
2435 @samp{--newer-mtime=@var{date}} acts like @samp{--after-date=@var{date}},
2436 but tests just the modification times of the files, ignoring
2437 status-change times.
2438
2439 @c <<<need example of --newer-mtime with quoted argument
2440 Remember that the entire date argument should be quoted if it contains
2441 any spaces.
2442
2443
2444 @strong{Please Note:} @samp{--after-date} and @samp{--newer-mtime}
2445 should not be used for incremental backups. Some files (such as those
2446 in renamed directories) are not selected up properly by these options.
2447 @c xref to incremental backup chapter when node name is decided.
2448
2449 @table @samp
2450 @item --after-date=@var{date}
2451 @itemx --newer=@var{date}
2452 @itemx -N @var{date}
2453 Acts on files only if their modification or inode-changed times are
2454 later than @var{date}. Use in conjunction with any operation.
2455 @item --newer-mtime=@var{date}
2456 Acts like @samp{--after-date}, but only looks at modification times.
2457 @end table
2458
2459 @c <<< following is the getdate date format --- needs to be re-written,
2460 @c <<< made a sub-node:
2461
2462 Time/Date Formats Accepted by getdate
2463 (omitting obscure constructions)
2464
2465 The input consists of one or more of: time zone day date year
2466 in any order.
2467
2468 Those in turn consist of (`|' and `/' mean `or', `[]' means `optional'):
2469
2470 time: H am/pm | H:M [am/pm] | H:M:S [am/pm]
2471 zone: timezone-name | timezone-name dst
2472 day: day-name | day-name, | N day-name
2473 date: M/D | M/D/Y | month-name D | month-name D, Y | D month-name | D month-name Y
2474 year: Y
2475
2476 am can also be a.m., pm can also be p.m.
2477 case and spaces around punctuation are not significant.
2478 month and day names can be abbreviated. >>>
2479
2480 @node User Interaction, Backups and Restoration, Selecting Archive Members, Top
2481 @chapter User Interaction
2482 @cindex Getting more information during the operation
2483 @cindex Information during operation
2484 @cindex Feedback from @code{tar}
2485
2486 Once you have typed a @code{tar}command, it is usually performed
2487 without any further information required of the user, or provided by
2488 @code{tar}. The following options allow you to generate progress and
2489 status information during an operation, or to confirm operations on
2490 files as they are performed.
2491
2492 @menu
2493 * Additional Information::
2494 * Interactive Operation::
2495 @end menu
2496
2497 @node Additional Information, Interactive Operation, User Interaction, User Interaction
2498 @section Progress and Status Information
2499 @cindex Progress information
2500 @cindex Status information
2501 @cindex Information on progress and status of operations
2502 @cindex Verbose operation
2503 @cindex Record number where error occured
2504 @cindex Error message, record number of
2505 @cindex Version of the @code{tar} program
2506
2507 Typically, @code{tar} performs most operations without reporting any
2508 information to the user except error messages. If you have
2509 encountered a problem when operating on an archive, however, you may
2510 need more information than just an error message in order to solve the
2511 problem. The following options can be helpful diagnostic tools.
2512
2513 When used with most operations, @samp{--verbose} causes @code{tar} to
2514 print the file names of the files or archive members it is operating
2515 on. When used with @samp{tar --list}, the verbose option causes
2516 @code{tar} to print out an @samp{ls -l} type listing of the files in
2517 the archive.
2518
2519 Verbose output appears on the standard output except when an archive
2520 is being written to the standard output (as with @samp{tar --create
2521 --file=- --verbose}). In that case @code{tar} writes verbose output to
2522 the standard error stream.
2523
2524 @table @samp
2525 @item --verbose
2526 @itemx -v
2527 Prints the names of files or archive members as they are being
2528 operated on. Can be used in conjunction with any operation. When
2529 used with @samp{--list}, generates an @samp{ls -l} type listing.
2530 @end table
2531
2532 To find out where in an archive a message was triggered, use
2533 @samp{--record-number}. @samp{--record-number} causes @code{tar} to
2534 print, along with every message it produces, the record number within
2535 the archive where the message was triggered.
2536
2537 This option is especially useful when reading damaged archives, since
2538 it helps pinpoint the damaged sections. It can also be used with
2539 @samp{tar --list} when listing a file-system backup tape, allowing you
2540 to choose among several backup tapes when retrieving a file later, in
2541 favor of the tape where the file appears earliest (closest to the
2542 front of the tape).
2543 @c <<< xref when the node name is set and the backup section written
2544
2545 @table @samp
2546 @item --record-number
2547 @itemx -R
2548 Prints the record number whenever a message is generated by
2549 @code{tar}. Use in conjunction with any operation.
2550 @end table
2551
2552 @c rewrite below
2553 To print the version number of the @code{tar} program, use @samp{tar
2554 --version}. @code{tar} prints the version number to the standard
2555 error. For example:
2556
2557 @example
2558 tar --version
2559 @end example
2560
2561 @noindent
2562 might return:
2563
2564 @example
2565 GNU tar version 1.09
2566 @end example
2567 @c used to be an option. has been fixed.
2568
2569 @node Interactive Operation, , Additional Information, User Interaction
2570 @section Asking for Confirmation During Operations
2571 @cindex Interactive operation
2572
2573 Typically, @code{tar} carries out a command without stopping for
2574 further instructions. In some situations however, you
2575 may want to exclude some files and archive members from the operation
2576 (for instance if disk or storage space is tight). You can do this by
2577 excluding certain files automatically (@pxref{File Exclusion}), or by
2578 performing an operation interactively, using the @samp{--interactive}
2579 operation.
2580
2581 When the @samp{--interactive} option is specified, @code{tar} asks for
2582 confirmation before reading, writing, or deleting each file it
2583 encounters while carrying out an operation. To confirm the action you
2584 must type a line of input beginning with @samp{y}. If your input line
2585 begins with anything other than @samp{y}, @code{tar} skips that file.
2586
2587 Commands which might be useful to perform interactively include
2588 appending files to an archive, extracting files from an archive,
2589 deleting a file from an archive, and deleting a file from disk during
2590 an incremental restore.
2591
2592 If @code{tar} is reading the archive from the standard input,
2593 @code{tar} opens the file @file{/dev/tty} to support the interactive
2594 communications.
2595 <<< this aborts if you won't OK the working directory. this is a bug. -ringo
2596
2597 @table @samp
2598 @item --interactive
2599 @itemx --confirmation
2600 @itemx -w
2601 Asks for confirmation before reading, writing or deleting an archive
2602 member (when listing, comparing or writing an archive or deleting
2603 archive members), or before writing or deleting a file (when
2604 extracting an archive).
2605 @end table
2606
2607 @node Backups and Restoration, Media, User Interaction, Top
2608 @chapter Performing Backups and Restoring Files
2609
2610 To @dfn{back up} a file system means to create archives that contain
2611 all the files in that file system. Those archives can then be used to
2612 restore any or all of those files (for instance if a disk crashes or a
2613 file is accidently deleted). File system @dfn{backups} are also
2614 called @dfn{dumps}.
2615
2616 @menu
2617 * Backup Levels:: Levels of backups
2618 * Backup Scripts:: Using scripts to perform backups
2619 and restoration
2620 * incremental and listed-incremental:: The --incremental
2621 and --listed-incremental Options
2622 * Problems:: Some common problems and their solutions
2623 @end menu
2624
2625 @node Backup Levels, Backup Scripts, Backups and Restoration, Backups and Restoration
2626 @section Levels of Backups
2627
2628 An archive containing all the files in the file system is called a
2629 @dfn{full backup} or @dfn{full dump}. You could insure your data by
2630 creating a full dump every day. This strategy, however, would waste a
2631 substantial amount of archive media and user time, as unchanged files
2632 are daily re-archived.
2633
2634 It is more efficient to do a full dump only occasionally. To back up
2635 files between full dumps, you can a incremental dump. A @dfn{level
2636 one} dump archives all the files that have changed since the last full
2637 dump.
2638
2639 A typical dump strategy would be to perform a full dump once a week,
2640 and a level one dump once a day. This means some versions of files
2641 will in fact be archived more than once, but this dump strategy makes
2642 it possible to restore a file system to within one day of accuracy by
2643 only extracting two archives---the last weekly (full) dump and the
2644 last daily (level one) dump. The only information lost would be in
2645 files changed or created since the last daily backup. (Doing dumps
2646 more than once a day is usually not worth the trouble).
2647
2648 @node Backup Scripts, incremental and listed-incremental, Backup Levels, Backups and Restoration
2649 @section Using Scripts to Perform Backups and Restoration
2650
2651 GNU @code{tar} comes with scripts you can use to do full and level-one
2652 dumps. Using scripts (shell programs) to perform backups and
2653 restoration is a convenient and reliable alternative to typing out
2654 file name lists and @code{tar} commands by hand.
2655
2656 Before you use these scripts, you need to edit the file
2657 @file{backup-specs}, which specifies parameters used by the backup
2658 scripts and by the restore script. @xref{Script Syntax}.
2659 Once the backup parameters are set, you can perform backups or
2660 restoration by running the appropriate script.
2661
2662 The name of the restore script is @code{restore}. The names of the
2663 level one and full backup scripts are, respectively, @code{level-1} and
2664 @code{level-0}. The @code{level-0} script also exists under the name
2665 @code{weekly}, and the @code{level-1} under the name
2666 @code{daily}---these additional names can be changed according to your
2667 backup schedule. @xref{Scripted Restoration}, for more information
2668 on running the restoration script. @xref{Scripted Backups}, for more
2669 information on running the backup scripts.
2670
2671 @emph{Please Note:} The backup scripts and the restoration scripts are
2672 designed to be used together. While it is possible to restore files
2673 by hand from an archive which was created using a backup script, and
2674 to create an archive by hand which could then be extracted using the
2675 restore script, it is easier to use the scripts. @xref{incremental
2676 and listed-incremental}, before making such an attempt.
2677
2678 @c shorten node names
2679 @menu
2680 * Backup Parameters:: Setting parameters for backups and restoration
2681 * Scripted Backups:: Using the backup scripts
2682 * Scripted Restoration:: Using the restore script
2683 @end menu
2684
2685 @node Backup Parameters, Scripted Backups, Backup Scripts, Backup Scripts
2686 @subsection Setting Parameters for Backups and Restoration
2687
2688 The file @file{backup-specs} specifies backup parameters for the
2689 backup and restoration scripts provided with @code{tar}. You must
2690 edit @file{backup-specs} to fit your system configuration and schedule
2691 before using these scripts.
2692
2693 @c <<< This about backup scripts needs to be written:
2694 @c <<<BS is a shell script .... thus ... @file{backup-specs} is in shell
2695 @c script syntax. @xref{Script Syntax}, for an explanation of this
2696 @c syntax.
2697
2698 @c whats a parameter .... looked at by the backup scripts ... which will
2699 @c be expecting to find ... now syntax ... value is linked to lame ...
2700 @c @file{backup-specs} specifies the following parameters:
2701
2702
2703 @table @code
2704 @item ADMINISTRATOR
2705 The user name of the backup administrator.
2706
2707 @item BACKUP_HOUR
2708 The hour at which the backups are done. This can be a number from 0
2709 to 23, or the string @samp{now}.
2710
2711 @item TAPE_FILE
2712 The device @code{tar} writes the archive to. This device should be
2713 attached to the host on which the dump scripts are run.
2714 @c <<< examples for all ...
2715
2716 @item TAPE_STATUS
2717 The command to use to obtain the status of the archive device,
2718 including error count. On some tape drives there may not be such a
2719 command; in that case, simply use `TAPE_STATUS=false'.
2720
2721 @item BLOCKING
2722 The blocking factor @code{tar} will use when writing the dump archive.
2723 @xref{Blocking Factor}.
2724
2725 @item BACKUP_DIRS
2726 A list of file systems to be dumped. You can include any directory
2727 name in the list---subdirectories on that file system will be
2728 included, regardless of how they may look to other networked machines.
2729 Subdirectories on other file systems will be ignored.
2730
2731 The host name specifies which host to run @code{tar} on, and should
2732 normally be the host that actually contains the file system. However,
2733 the host machine must have GNU @code{tar} installed, and must be able
2734 to access the directory containing the backup scripts and their
2735 support files using the same file name that is used on the machine
2736 where the scripts are run (ie. what @code{pwd} will print when in that
2737 directory on that machine). If the host that contains the file system
2738 does not have this capability, you can specify another host as long as
2739 it can access the file system through NFS.
2740
2741 @item BACKUP_FILES
2742 A list of individual files to be dumped. These should be accessible
2743 from the machine on which the backup script is run.
2744 @c <<<same file name, be specific. through nfs ...
2745 @end table
2746
2747 @menu
2748 * backup-specs example:: An Example Text of @file{Backup-specs}
2749 * Script Syntax:: Syntax for @file{Backup-specs}
2750 @end menu
2751
2752 @node backup-specs example, Script Syntax, Backup Parameters, Backup Parameters
2753 @subsubsection An Example Text of @file{Backup-specs}
2754
2755 The following is the text of @file{backup-specs} as it appears at FSF:
2756
2757 @example
2758 # site-specific parameters for file system backup.
2759
2760 ADMINISTRATOR=friedman
2761 BACKUP_HOUR=1
2762 TAPE_FILE=/dev/nrsmt0
2763 TAPE_STATUS="mts -t $TAPE_FILE"
2764 BLOCKING=124
2765 BACKUP_DIRS="
2766 albert:/fs/fsf
2767 apple-gunkies:/gd
2768 albert:/fs/gd2
2769 albert:/fs/gp
2770 geech:/usr/jla
2771 churchy:/usr/roland
2772 albert:/
2773 albert:/usr
2774 apple-gunkies:/
2775 apple-gunkies:/usr
2776 gnu:/hack
2777 gnu:/u
2778 apple-gunkies:/com/mailer/gnu
2779 apple-gunkies:/com/archive/gnu"
2780
2781 BACKUP_FILES="/com/mailer/aliases /com/mailer/league*[a-z]"
2782
2783 @end example
2784
2785 @node Script Syntax, , backup-specs example, Backup Parameters
2786 @subsubsection Syntax for @file{Backup-specs}
2787
2788 @file{backup-specs} is in shell script syntax. The following
2789 conventions should be considered when editing the script:
2790 @c <<< "conventions?"
2791
2792 A quoted string is considered to be contiguous, even if it is on more
2793 than one line. Therefore, you cannot include commented-out lines
2794 within a multi-line quoted string. BACKUP_FILES and BACKUP_DIRS are
2795 the two most likely parameters to be multi-line.
2796
2797 A quoted string typically cannot contain wildcards. In
2798 @file{backup-specs}, however, the parameters BACKUP_DIRS and
2799 BACKUP_FILES can contain wildcards.
2800
2801 @node Scripted Backups, Scripted Restoration, Backup Parameters, Backup Scripts
2802 @subsection Using the Backup Scripts
2803
2804 The syntax for running a backup script is:
2805
2806 @example
2807 @file{script-name} [@var{time-to-be-run}]
2808 @end example
2809
2810 where @var{time-to-be-run} can be a specific system time, or can be
2811 @kbd{now}. If you do not specify a time, the script runs at the time
2812 specified in @file{backup-specs} (@pxref{Script Syntax}).
2813
2814 You should start a script with a tape or disk mounted. Once you start
2815 a script, it prompts you for new tapes or disks as it needs them.
2816 Media volumes don't have to correspond to archive files---a
2817 multi-volume archive can be started in the middle of a tape that
2818 already contains the end of another multi-volume archive. The
2819 @code{restore} script prompts for media by its archive volume, so to
2820 avoid an error message you should keep track of which tape (or disk)
2821 contains which volume of the archive. @xref{Scripted Restoration}.
2822
2823 @c <<<have file names changed? -ringo
2824 The backup scripts write two files on the file system. The first is a
2825 record file in @file{/etc/tar-backup/}, which is used by the scripts
2826 to store and retrieve information about which files were dumped. This
2827 file is not meant to be read by humans, and should not be deleted by
2828 them. @xref{incremental and listed-incremental}, for a more
2829 detailed explanation of this file.
2830
2831 The second file is a log file containing the names of the file systems
2832 and files dumped, what time the backup was made, and any error
2833 messages that were generated, as well as how much space was left in
2834 the media volume after the last volume of the archive was written.
2835 You should check this log file after every backup. The file name is
2836 @file{log-@var{mmm-ddd-yyyy}-level-1} or
2837 @file{log-@var{mmm-ddd-yyyy}-full}.
2838
2839 The script also prints the name of each system being dumped to the
2840 standard output.
2841 @c <<<the section on restore scripts is commented out.
2842 @c <<< a section on non-scripted testore mya be a good idea
2843 @ignore
2844 @node Scripted Restoration, , Scripted Backups, Backup Scripts
2845 @subsection Using the Restore Script
2846 @c subject to change as things develop
2847
2848 To restore files that were archived using a scripted backup, use the
2849 @code{restore} script. The syntax for the script is:
2850
2851
2852 where ##### are the file systems to restore from, and
2853 ##### is a regular expression which specifies which files to
2854 restore. If you specify --all, the script restores all the files
2855 in the file system.
2856
2857 You should start the restore script with the media containing the
2858 first volume of the archive mounted. The script will prompt for other
2859 volumes as they are needed. If the archive is on tape, you don't need
2860 to rewind the tape to to its beginning---if the tape head is
2861 positioned past the beginning of the archive, the script will rewind
2862 the tape as needed. @xref{Media}, for a discussion of tape
2863 positioning.
2864
2865 If you specify @samp{--all} as the @var{files} argument, the
2866 @code{restore} script extracts all the files in the archived file
2867 system into the active file system.
2868
2869 @quotation
2870 @strong{Warning:}The script will delete files from the active file
2871 system if they were not in the file system when the archive was made.
2872 @end quotation
2873
2874 @xref{incremental and listed-incremental}, for an explanation of how
2875 the script makes that determination.
2876 @c this may be an option, not a given
2877 @end ignore
2878
2879 @node incremental and listed-incremental, Problems, Backup Scripts, Backups and Restoration
2880 @section The @code{--incremental} and @code{--listed-incremental} Options
2881
2882 @samp{--incremental} is used in conjunction with @samp{--create},
2883 @samp{--extract} or @samp{--list} when backing up and restoring file
2884 systems. An archive cannot be extracted or listed with the
2885 @samp{--incremental} option specified unless it was created with the
2886 option specified. This option should only be used by a script, not by
2887 the user, and is usually disregarded in favor of
2888 @samp{--listed-incremental}, which is described below.
2889
2890 @samp{--incremental} in conjunction with @samp{--create} causes
2891 @code{tar} to write, at the beginning of the archive, an entry for
2892 each of the directories that will be archived. The entry for a
2893 directory includes a list of all the files in the directory at the
2894 time the archive was created and a flag for each file indicating
2895 whether or not the file is going to be put in the archive.
2896
2897 Note that this option causes @code{tar} to create a non-standard
2898 archive that may not be readable by non-GNU versions of the @code{tar}
2899 program.
2900
2901 @samp{--incremental} in conjunction with @samp{--extract} causes
2902 @code{tar} to read the lists of directory contents previously stored
2903 in the archive, @emph{delete} files in the file system that did not
2904 exist in their directories when the archive was created, and then
2905 extract the files in the archive.
2906
2907 This behavior is convenient when restoring a damaged file system from
2908 a succession of incremental backups: it restores the entire state of
2909 the file system to that which obtained when the backup was made. If
2910 @samp{--incremental} isn't specified, the file system will probably
2911 fill up with files that shouldn't exist any more.
2912
2913 @samp{--incremental} in conjunction with @samp{--list}, causes
2914 @code{tar} to print, for each directory in the archive, the list of
2915 files in that directory at the time the archive was created. This
2916 information is put out in a format that is not easy for humans to
2917 read, but which is unambiguous for a program: each file name is
2918 preceded by either a @samp{Y} if the file is present in the archive,
2919 an @samp{N} if the file is not included in the archive, or a @samp{D}
2920 if the file is a directory (and is included in the archive). Each
2921 file name is terminated by a null character. The last file is followed
2922 by an additional null and a newline to indicate the end of the data.
2923
2924 @samp{--listed-incremental}=@var{file} acts like @samp{--incremental},
2925 but when used in conjunction with @samp{--create} will also cause
2926 @code{tar} to use the file @var{file}, which contains information
2927 about the state of the file system at the time of the last backup, to
2928 decide which files to include in the archive being created. That file
2929 will then be updated by @code{tar}. If the file @var{file} does not
2930 exist when this option is specified, @code{tar} will create it, and
2931 include all appropriate files in the archive.
2932
2933 The file @var{file}, which is archive independent, contains the date
2934 it was last modified and a list of devices, inode numbers and
2935 directory names. @code{tar} will archive files with newer mod dates
2936 or inode change times, and directories with an unchanged inode number
2937 and device but a changed directory name. The file is updated after
2938 the files to be archived are determined, but before the new archive is
2939 actually created.
2940
2941 @c <<< this section needs to be written
2942 @node Problems, , incremental and listed-incremental, Backups and Restoration
2943 @section Some Common Problems and their Solutions
2944
2945 errors from system:
2946 permission denied
2947 no such file or directory
2948 not owner
2949
2950 errors from tar:
2951 directory checksum error
2952 header format error
2953
2954 errors from media/system:
2955 i/o error
2956 device busy
2957
2958 @node Media, Quick Reference, Backups and Restoration, Top
2959 @chapter Tapes and Other Archive Media
2960
2961 Archives are usually written on dismountable media---tape cartridges,
2962 mag tapes, or floppy disks.
2963
2964 The amount of data a tape or disk holds depends not only on its size,
2965 but also on how it is formatted. A 2400 foot long reel of mag tape
2966 holds 40 megabytes of data when formated at 1600 bits per inch. The
2967 physically smaller EXABYTE tape cartridge holds 2.3 gigabytes.
2968
2969 Magnetic media are re-usable---once the archive on a tape is no longer
2970 needed, the archive can be erased and the tape or disk used over.
2971 Media quality does deteriorate with use, however. Most tapes or disks
2972 should be disgarded when they begin to produce data errors. EXABYTE
2973 tape cartridges should be disgarded when they generate an @dfn{error
2974 count} (number of non-usable bits) of more than 10k.
2975
2976 Magnetic media are written and erased using magnetic fields, and
2977 should be protected from such fields to avoid damage to stored data.
2978 Sticking a floppy disk to a filing cabinet using a magnet is probably
2979 not a good idea.
2980
2981
2982 @menu
2983 * Write Protection:: Write Protection
2984 * Tape Positioning:: Tape Positions and Tape Marks
2985 @end menu
2986
2987 @node Write Protection, Tape Positioning, Media, Media
2988 @section Write Protection
2989
2990 All tapes and disks can be @dfn{write protected}, to protect data on
2991 them from being changed. Once an archive is written, you should write
2992 protect the media to prevent the archive from being accidently
2993 overwritten or deleted. (This will protect the archive from being
2994 changed with a tape or floppy drive---it will not protect it from
2995 magnet fields or other physical hazards).
2996
2997 The write protection device itself is usually an integral part of the
2998 physical media, and can be a two position (write enabled/write
2999 disabled) switch, a notch which can be popped out or covered, a ring
3000 which can be removed from the center of a tape reel, or some other
3001 changeable feature.
3002
3003 @node Tape Positioning, , Write Protection, Media
3004 @section Tape Positions and Tape Marks
3005
3006 Just as archives can store more than one file from the file system,
3007 tapes can store more than one archive file. To keep track of where
3008 archive files (or any other type of file stored on tape) begin and
3009 end, tape archive devices write magnetic @dfn{tape marks} on the
3010 archive media. Tape drives write one tape mark between files,
3011 two at the end of all the file entries.
3012
3013 If you think of data as a series of "0000"'s, and tape marks as "x"'s,
3014 a tape might look like the following:
3015
3016 @example
3017 0000x000000x00000x00x00000xx-------------------------
3018 @end example
3019
3020 Tape devices read and write tapes using a read/write @dfn{tape
3021 head}---a physical part of the device which can only access one point
3022 on the tape at a time. When you use @code{tar} to read or write
3023 archive data from a tape device, the device will begin reading or
3024 writing from wherever on the tape the tape head happens to be,
3025 regardless of which archive or what part of the archive the tape head
3026 is on. Before writing an archive, you should make sure that no data
3027 on the tape will be overwritten (unless it is no longer needed).
3028 Before reading an archive, you should make sure the tape head is at
3029 the beginning of the archive you want to read. (The @code{restore}
3030 script will find the archive automatically. @xref{Scripted
3031 Restoration}). @xref{mt}, for an explanation of the tape moving
3032 utility.
3033
3034 If you want to add new archive file entries to a tape, you should
3035 advance the tape to the end of the existing file entries, backspace
3036 over the last tape mark, and write the new archive file. If you were
3037 to add two archives to the example above, the tape might look like the
3038 following:
3039
3040 @example
3041 0000x000000x00000x00x00000x000x0000xx----------------
3042 @end example
3043
3044 @menu
3045 * mt:: The @code{mt} Utility
3046 @end menu
3047
3048 @node mt, , Tape Positioning, Tape Positioning
3049 @subsection The @code{mt} Utility
3050
3051 <<< is it true that this only works on non-block devices? should
3052 <<< explain the difference, xref to block-size (fixed or variable).
3053
3054 You can use the @code{mt} utility to advance or rewind a tape past a
3055 specified number of archive files on the tape. This will allow you to
3056 move to the beginning of an archive before extracting or reading it,
3057 or to the end of all the archives before writing a new one.
3058 @c why isn't there an "advance 'til you find two tape marks together"?
3059
3060 The syntax of the @code{mt} command is:
3061
3062 @example
3063 mt [-f @var{tapename}] @var{operation} [@var{number}]
3064 @end example
3065
3066 where @var{tapename} is the name of the tape device, @var{number} is
3067 the number of times an operation is performed (with a default of one),
3068 and @var{operation} is one of the following:
3069
3070 @table @code
3071 @item eof
3072 @itemx weof
3073 Writes @var{number} tape marks at the current position on the tape.
3074
3075
3076 @item fsf
3077 Moves tape position forward @var{number} files.
3078
3079
3080 @item bsf
3081 Moves tape position back @var{number} files.
3082
3083
3084 @item rewind
3085 Rewinds the tape. (Ignores @var{number}).
3086
3087
3088 @item offline
3089 @itemx rewoff1
3090 Rewinds the tape and takes the tape device off-line. (Ignores @var{number}).
3091
3092
3093 @item status
3094 Prints status information about the tape unit.
3095 @end table
3096 <<< is there a better way to frob the spacing on the list? -ringo
3097
3098 If you don't specify a @var{tapename}, @code{mt} uses the environment
3099 variable TAPE; if TAPE does not exist, @code{mt} uses the device
3100 @file{/dev/rmt12}.
3101
3102 @code{mt} returns a 0 exit status when the operation(s) were
3103 successful, 1 if the command was unrecognized, and 2 if an operation
3104 failed.
3105
3106 @c <<< new node on how to find an archive? -ringo
3107 If you use @code{tar --extract} with the
3108 @samp{--label=@var{archive-name}} option specified, @code{tar} will
3109 read an archive label (the tape head has to be positioned on it) and
3110 print an error if the archive label doesn't match the
3111 @var{archive-name} specified. @var{archive-name} can be any regular
3112 expression. If the labels match, @code{tar} extracts the archive.
3113 @xref{Archive Label}. @xref{Matching Format Parameters}.
3114 <<< fix cross references
3115
3116 @code{tar --list --label} will cause @code{tar} to print the label.
3117
3118 @c <<< MIB -- program to list all the labels on a tape?
3119
3120 @node Quick Reference, Data Format Details, Media, Top
3121 @appendix A Quick Reference Guide to @code{tar} Operations and Options
3122 @c put in proper form for appendix. (unnumbered?)
3123
3124 @menu
3125 * Operations:: A Table of Operations
3126 * Options:: Table of Options
3127 @end menu
3128
3129 @node Operations, Options, Quick Reference, Quick Reference
3130 @appendixsec A Table of Operations
3131 @c add xrefs, note synonyms
3132
3133 The operation argument to @code{tar} specifies which action you want to
3134 take.
3135
3136 @table @samp
3137 @item -A
3138 Adds copies of an archive or archives to the end of another archive.
3139
3140 @item -c
3141 Creates a new archive.
3142
3143 @item -d
3144 Compares files in the archive with their counterparts in the file
3145 system, and reports differences in file size, mode, owner,
3146 modification date and contents.
3147
3148 @item -r
3149 Adds files to the end of the archive.
3150
3151 @item -t
3152 Prints a list of the contents of the archive.
3153
3154 @item -x
3155 Reads files from the archive and writes them into the active file
3156 system.
3157
3158 @item -u
3159 Adds files to the end of the archive, but only if they are newer than
3160 their counterparts already in the archive, or if they do not already
3161 exist in the archive.
3162
3163 @item --add-archive
3164 Adds copies of an archive or archives to the end of another archive.
3165
3166 @item --add-file
3167 Adds files to the end of the archive.
3168
3169 @item --append
3170 Adds files to the end of the archive.
3171
3172 @item --catenate
3173 Adds copies of an archive or archives to the end of another archive.
3174
3175 @item --compare
3176 Compares files in the archive with their counterparts in the file
3177 system, and reports differences in file size, mode, owner,
3178 modification date and contents.
3179
3180 @item --concatenate
3181 Adds copies of an archive or archives to the end of another archive.
3182
3183 @item --create
3184 Creates a new archive.
3185
3186 @item --delete
3187 Deletes files from the archive. All versions of the files are deleted.
3188
3189 @item --diff
3190 Compares files in the archive with their counterparts in the file
3191 system, and reports differences in file size, mode, owner,
3192 modification date and contents.
3193
3194 @item --extract
3195 Reads files from the archive and writes them into the active file
3196 system.
3197
3198 @item --get
3199 Reads files from the archive and writes them into the active file
3200 system.
3201
3202 @item --help
3203 Prints a list of @code{tar} operations and options.
3204
3205 @item --list
3206 Prints a list of the contents of the archive.
3207
3208 @item --update
3209 Adds files to the end of the archive, but only if they are newer than
3210 their counterparts already in the archive, or if they do not already
3211 exist in the archive.
3212
3213 @item --version
3214 Prints the version number of the @code{tar} program to the standard
3215 error.
3216 @end table
3217
3218 @node Options, , Operations, Quick Reference
3219 @appendixsec Table of Options
3220
3221 Options change the way @code{tar} performs an operation.
3222
3223 @table @samp
3224 @item --absolute-paths
3225 WILL BE INPUT WHEN QUESTION IS RESOLVED
3226
3227 @item --after-date=@var{date}
3228 Limit the operation to files changed after the given date.
3229 @xref{File Exclusion}.
3230
3231 @item --block-size=@var{number}
3232 Specify the blocking factor of an archive. @xref{Blocking Factor}.
3233
3234 @item --compress
3235 Specify a compressed archive. @xref{Compressed Archives}.
3236
3237 @item --compress-block.
3238 Create a whole block sized compressed archive. @xref{Compressed Archives}.
3239
3240 @item --confirmation
3241 Solicit confirmation for each file. @xref{Interactive Operation}
3242 <<< --selective should be a synonym.
3243
3244 @item --dereference
3245 Treat a symbolic link as an alternate name for the file the link
3246 points to. @xref{Symbolic Links}.
3247
3248 @item --directory=@file{directory}
3249 Change the working directory. @xref{Changing Working Directory}.
3250
3251 @item --exclude=@var{pattern}
3252 Exclude files which match the regular expression @var{pattern}.
3253 @xref{File Exclusion}.
3254
3255 @item --exclude-from=@file{file}
3256 Exclude files which match any of the regular expressions listed in
3257 the file @file{file}. @xref{File Exclusion}.
3258
3259 @item --file=@var{archive-name}
3260 Name the archive. @xref{Archive Name}).
3261
3262 @item --files-from=@file{file}
3263 Read file-name arguments from a file on the file system.
3264 @xref{File Name Lists}.
3265
3266 @item --ignore-umask
3267 Set modes of extracted files to those recorded in the archive.
3268 @xref{File Writing Options}.
3269
3270 @item --ignore-zeros
3271 Ignore end-of-archive entries. @xref{Archive Reading Options}.
3272 <<< this should be changed to --ignore-end
3273
3274 @item --listed-incremental=@var{file-name} (-g)
3275 Take a file name argument always. If the file doesn't exist, run a level
3276 zero dump, creating the file. If the file exists, uses that file to see
3277 what has changed.
3278
3279 @item --incremental (-G)
3280 @c <<<look it up>>>
3281
3282 @item --tape-length=@var{n} (-L)
3283 @c <<<alternate way of doing multi archive, will go to that length and
3284 @c prompts for new tape, automatically turns on multi-volume. >>>
3285 @c <<< this needs to be written into main body as well -ringo
3286
3287 @item --info-script=@var{program-file}
3288 Create a multi-volume archive via a script. @xref{Multi-Volume Archives}.
3289
3290 @item --interactive
3291 Ask for confirmation before performing any operation on a file or
3292 archive member.
3293
3294 @item --keep-old-files
3295 Prevent overwriting during extraction. @xref{File Writing Options}.
3296
3297 @item --label=@var{archive-label}
3298 Include an archive-label in the archive being created. @xref{Archive
3299 Label}.
3300
3301 @item --modification-time
3302 Set the modification time of extracted files to the time they were
3303 extracted. @xref{File Writing Options}.
3304
3305 @item --multi-volume
3306 Specify a multi-volume archive. @xref{Multi-Volume Archives}.
3307
3308 @item --newer=@var{date}
3309 Limit the operation to files changed after the given date.
3310 @xref{File Exclusion}.
3311
3312 @item --newer-mtime=@var{date}
3313 Limit the operation to files modified after the given date. @xref{File
3314 Exclusion}.
3315
3316 @item --old
3317 Create an old format archive. @xref{Old Style File Information}.
3318 @c <<< did we agree this should go away as a synonym?
3319
3320 @item --old-archive
3321 Create an old format archive. @xref{Old Style File Information}.
3322
3323 @item --one-file-system
3324 Prevent @code{tar} from crossing file system boundaries when
3325 archiving. @xref{File Exclusion}.
3326
3327 @item --portable
3328 Create an old format archive. @xref{Old Style File Information}.
3329 @c <<< was portability, may still need to be changed
3330
3331 @item --preserve-order
3332 Help process large lists of file-names on machines with small amounts of
3333 memory. @xref{Archive Reading Options}.
3334
3335 @item --preserve-permission
3336 Set modes of extracted files to those recorded in the archive.
3337 @xref{File Writing Options}.
3338
3339 @item --read-full-blocks
3340 Read an archive with a smaller than specified block size or which
3341 contains incomplete blocks. @xref{Archive Reading Options}).
3342 @c should be --partial-blocks (!!!)
3343
3344 @item --record-number
3345 Print the record number where a message is generated.
3346 @xref{Additional Information}.
3347
3348 @item --same-order
3349 Help process large lists of file-names on machines with small amounts of
3350 memory. @xref{Archive Reading Options}.
3351
3352 @item --same-permission
3353 Set the modes of extracted files to those recorded in the archive.
3354 @xref{File Writing Options}.
3355
3356 @item --sparse
3357 Archive sparse files sparsely. @xref{Sparse Files}.
3358
3359 @item --starting-file=@var{file-name}
3360 Begin reading in the middle of an archive. @xref{Scarce Disk Space}.
3361
3362 @item --to-stdout
3363 Write files to the standard output. @xref{File Writing Options}.
3364
3365 @item --uncompress
3366 Specifdo a compressed archive. @xref{Compressed Archives}.
3367
3368 @item -V @var{archive-label}
3369 Include an archive-label in the archive being created. @xref{Archive
3370 Label}.
3371 @c was --volume
3372
3373 @item --verbose
3374 Print the names of files or archive members as they are being
3375 operated on. @xref{Additional Information}.
3376
3377 @item --verify
3378 Check for discrepancies in the archive immediately after it is
3379 written. @xref{Write Verification}.
3380
3381 @item -B
3382 Read an archive with a smaller than specified block size or which
3383 contains incomplete blocks. @xref{Archive Reading Options}).
3384
3385 @item -K @var{file-name}
3386 Begin reading in the middle of an archive. @xref{Scarce Disk Space}.
3387
3388 @item -M
3389 Specify a multi-volume archive. @xref{Multi-Volume Archives}.
3390
3391 @item -N @var{date}
3392 Limit operation to files changed after the given date. @xref{File Exclusion}.
3393
3394 @item -O
3395 Write files to the standard output. @xref{File Writing Options}.
3396
3397 @c <<<<- P is absolute paths, add when resolved. -ringo>>>
3398
3399 @item -R
3400 Print the record number where a message is generated.
3401 @xref{Additional Information}.
3402
3403 @item -S
3404 Archive sparse files sparsely. @xref{Sparse Files}.
3405
3406 @item -T @var{file}
3407 Read file-name arguments from a file on the file system.
3408 @xref{File Name Lists}.
3409
3410 @item -W
3411 Check for discrepancies in the archive immediately after it is
3412 written. @xref{Write Verification}.
3413
3414 @item -Z
3415 Specify a compressed archive. @xref{Compressed Archives}.
3416
3417 @item -b @var{number}
3418 Specify the blocking factor of an archive. @xref{Blocking Factor}.
3419
3420 @item -f @var{archive-name}
3421 Name the archive. @xref{Archive Name}).
3422
3423 @item -h
3424 Treat a symbolic link as an alternate name for the file the link
3425 points to. @xref{Symbolic Links}.
3426
3427 @item -i
3428 Ignore end-of-archive entries. @xref{Archive Reading Options}.
3429
3430 @item -k
3431 Prevent overwriting during extraction. @xref{File Writing Options}.
3432
3433 @item -l
3434 Prevent @code{tar} from crossing file system boundaries when
3435 archiving. @xref{File Exclusion}.
3436
3437 @item -m
3438 Set the modification time of extracted files to the time they were
3439 extracted. @xref{File Writing Options}.
3440
3441 @item -o
3442 Create an old format archive. @xref{Old Style File Information}.
3443
3444 @item -p
3445 Set the modes of extracted files to those recorded in the archive.
3446 @xref{File Writing Options}.
3447
3448 @item -s
3449 Help process large lists of file-names on machines with small amounts of
3450 memory. @xref{Archive Reading Options}.
3451
3452 @item -v
3453 Print the names of files or archive members they are being operated
3454 on. @xref{Additional Information}.
3455
3456 @item -w
3457 @c <<<see --interactive. WILL BE INPUT WHEN QUESTIONS ARE RESOLVED.>>>
3458
3459 @item -z
3460 Specify a compressed archive. @xref{Compressed Archives}.
3461
3462 @item -z -z
3463 Create a whole block sized compressed archive. @xref{Compressed Archives}.
3464 @c I would rather this were -Z. it is the only double letter short
3465 @c form.
3466
3467 @item -C @file{directory}
3468 Change the working directory. @xref{Changing Working Directory}.
3469
3470 @item -F @var{program-file}
3471 Create a multi-volume archive via a script. @xref{Multi-Volume Archives}.
3472
3473 @item -X @file{file}
3474 Exclude files which match any of the regular expressions listed in
3475 the file @file{file}. @xref{File Exclusion}.
3476 @end table
3477
3478 @node Data Format Details, Concept Index, Quick Reference, Top
3479 @appendix Details of the Archive Data Format
3480
3481 This chapter is based heavily on John Gilmore's @i{tar}(5) manual page
3482 for the public domain @code{tar} that GNU @code{tar} is based on.
3483 @c it's been majorly edited since, we may be able to lose this.
3484
3485 The archive media contains a series of records, each of which contains
3486 512 bytes. Each archive member is represented by a header record,
3487 which describes the file, followed by zero or more records which
3488 represent the contents of the file. At the end of the archive file
3489 there may be a record consisting of a series of binary zeros, as an
3490 end-of-archive marker. GNU @code{tar} writes a record of zeros at the
3491 end of an archive, but does not assume that such a record exists when
3492 reading an archive.
3493
3494 Records may be grouped into @dfn{blocks} for I/O operations. A block
3495 of records is written with a single @code{write()} operation. The
3496 number of records in a block is specified using the @samp{--block-size}
3497 option. @xref{Blocking Factor}, for more information about specifying
3498 block size.
3499
3500 @menu
3501 * Header Data:: The Distribution of Data in the Header
3502 * Header Fields:: The Meaning of Header Fields
3503 * Sparse File Handling:: Fields to Handle Sparse Files
3504 @end menu
3505
3506 @node Header Data, Header Fields, Data Format Details, Data Format Details
3507 @appendixsec The Distribution of Data in the Header
3508
3509 The header record is defined in C as follows:
3510 @c I am taking the following code on faith.
3511
3512 @example
3513 @r{Standard Archive Format - Standard TAR - USTAR}
3514
3515 #define RECORDSIZE 512
3516 #define NAMSIZ 100
3517 #define TUNMLEN 32
3518 #define TGNMLEN 32
3519 #define SPARSE_EXT_HDR 21
3520 #define SPARSE_IN_HDR 4
3521
3522 struct sparse @{
3523 char offset[12];
3524 char numbytes[12];
3525 @};
3526
3527 union record @{
3528 char charptr[RECORDSIZE];
3529 struct header @{
3530 char name[NAMSIZ];
3531 char mode[8];
3532 char uid[8];
3533 char gid[8];
3534 char size[12];
3535 char mtime[12];
3536 char chksum[8];
3537 char linkflag;
3538 char linkname[NAMSIZ];
3539 char magic[8];
3540 char uname[TUNMLEN];
3541 char gname[TGNMLEN];
3542 char devmajor[8];
3543 char devminor[8];
3544
3545 @r{The following fields were added by gnu and are not used by other}
3546 @r{versions of @code{tar}}.
3547 char atime[12];
3548 char ctime[12];
3549 char offset[12];
3550 char longnames[4];
3551 @r{The next three fields were added by gnu to deal with shrinking down}
3552 @r{sparse files.}
3553 struct sparse sp[SPARSE_IN_HDR];
3554 char isextended;
3555 @r{This is the number of nulls at the end of the file, if any.}
3556 char ending_blanks[12];
3557
3558 @} header;
3559
3560 struct extended_header @{
3561 struct sparse sp[21];
3562 char isextended;
3563 @} ext_hdr;
3564
3565 @};
3566 @c <<< this whole thing needs to be put into better english
3567
3568 @r{The checksum field is filled with this while the checksum is computed.}
3569 #define CHKBLANKS " " @r{8 blanks, no null}
3570
3571 @r{Inclusion of this field marks an archive as being in standard}
3572 @r{Posix format (though GNU tar itself is not Posix conforming). GNU}
3573 @r{tar puts "ustar" in this field if uname and gname are valid.}
3574 #define TMAGIC "ustar " @r{7 chars and a null}
3575
3576 @r{The magic field is filled with this if this is a GNU format dump entry.}
3577 #define GNUMAGIC "GNUtar " @r{7 chars and a null}
3578
3579 @r{The linkflag defines the type of file.}
3580 #define LF_OLDNORMAL '\0' @r{Normal disk file, Unix compatible}
3581 #define LF_NORMAL '0' @r{Normal disk file}
3582 #define LF_LINK '1' @r{Link to previously dumped file}
3583 #define LF_SYMLINK '2' @r{Symbolic link}
3584 #define LF_CHR '3' @r{Character special file}
3585 #define LF_BLK '4' @r{Block special file}
3586 #define LF_DIR '5' @r{Directory}
3587 #define LF_FIFO '6' @r{FIFO special file}
3588 #define LF_CONTIG '7' @r{Contiguous file}
3589
3590 @r{hhe following are further link types which were defined later.}
3591
3592 @r{This is a dir entry that contains the names of files that were in}
3593 @r{the dir at the time the dump was made.}
3594 #define LF_DUMPDIR 'D'
3595
3596 @r{This is the continuation of a file that began on another volume}
3597 #define LF_MULTIVOL 'M'
3598
3599 @r{This is for sparse files}
3600 #define LF_SPARSE 'S'
3601
3602 @r{This file is a tape/volume header. Ignore it on extraction.}
3603 #define LF_VOLHDR 'V'
3604
3605 @r{These are bits used in the mode field - the values are in octal}
3606 #define TSUID 04000 @r{Set UID on execution}
3607 #define TSGID 02000 @r{Set GID on execution}
3608 #define TSVTX 01000 @r{Save text (sticky bit)}
3609
3610 @r{These are file permissions}
3611 #define TUREAD 00400 @r{read by owner}
3612 #define TUWRITE 00200 @r{write by owner}
3613 #define TUEXEC 00100 @r{execute/search by owner}
3614 #define TGREAD 00040 @r{read by group}
3615 #define TGWRITE 00020 @r{write by group}
3616 #define TGEXEC 00010 @r{execute/search by group}
3617 #define TOREAD 00004 @r{read by other}
3618 #define TOWRITE 00002 @r{write by other}
3619 #define TOEXEC 00001 @r{execute/search by other}
3620 @end example
3621
3622
3623 All characters in headers are 8-bit characters in the local variant of
3624 ASCII. Each field in the header is contiguous; that is, there is no
3625 padding in the header format.
3626
3627 Data representing the contents of files is not translated in any way
3628 and is not constrained to represent characters in any character set.
3629 @code{tar} does not distinguish between text files and binary files.
3630
3631 The @code{name}, @code{linkname}, @code{magic}, @code{uname}, and
3632 @code{gname} fields contain null-terminated character strings. All
3633 other fields contain zero-filled octal numbers in ASCII. Each numeric
3634 field of width @var{w} contains @var{w} @minus{} 2 digits, a space, and a
3635 null, except @code{size} and @code{mtime}, which do not contain the
3636 trailing null.
3637
3638 @node Header Fields, Sparse File Handling, Header Data, Data Format Details
3639 @appendixsec The Meaning of Header Fields
3640
3641 The @code{name} field contains the name of the file.
3642 <<< how big a name before field overflows?
3643
3644 The @code{mode} field contains nine bits which specify file
3645 permissions, and three bits which specify the Set UID, Set GID, and
3646 Save Text (``stick'') modes. Values for these bits are defined above.
3647 @xref{File Writing Options}, for information on how file permissions
3648 and modes are used by @code{tar}.
3649
3650 The @code{uid} and @code{gid} fields contain the numeric user and
3651 group IDs of the file owners. If the operating system does not
3652 support numeric user or group IDs, these fields should be ignored.
3653 @c but are they?
3654
3655 The @code{size} field contains the size of the file in bytes; this
3656 field contains a zero if the header describes a link to a file.
3657
3658 The @code{mtime} field contains the modification time of the file.
3659 This is the ASCII representation of the octal value of the last time
3660 the file was modified, represented as an integer number of seconds
3661 since January 1, 1970, 00:00 Coordinated Universal Time.
3662 @xref{File Writing Options}, for a description of how @code{tar} uses
3663 this information.
3664
3665 The @code{chksum} field contains the ASCII representation of the octal
3666 value of the simple sum of all bytes in the header record. To
3667 generate this sum, each 8-bit byte in the header is added to an
3668 unsigned integer, which has been initialized to zero. The precision
3669 of the integer is seventeen bits. When calculating the checksum, the
3670 @code{chksum} field itself is treated as blank.
3671
3672 The @code{atime} and @code{ctime} fields are used when making
3673 incremental backups; they store, respectively, the file's access time
3674 and last inode-change time.
3675
3676 The value in the @code{offset} field is used when making a
3677 multi-volume archive. The offset is number of bytes into the file
3678 that we need to go to pick up where we left off in the previous
3679 volume, i.e the location that a continued file is continued from.
3680
3681 The @code{longnames} field supports a feature that is not yet
3682 implemented. This field should be empty.
3683
3684 The @code{magic} field indicates that this archive was output in the
3685 P1003 archive format. If this field contains @code{TMAGIC}, the
3686 @code{uname} and @code{gname} fields will contain the ASCII
3687 representation of the owner and group of the file respectively. If
3688 found, the user and group IDs are used rather than the values in the
3689 @code{uid} and @code{gid} fields.
3690
3691 The @code{sp} field is used to archive sparse files efficiently.
3692 @xref{Sparse File Handling}, for a description of this field, and
3693 other fields it may imply.
3694
3695 The @code{typeflag} field specifies the file's type. If a particular
3696 implementation does not recognize or permit the specified type,
3697 @code{tar} extracts the file as if it were a regular file, and reports
3698 the discrepancy on the standard error. @xref{File Types}. @xref{GNU
3699 File Types}.
3700
3701 @menu
3702 * File Types:: File Types
3703 * GNU File Types:: Additional File Types Supported by GNU
3704 @end menu
3705
3706 @node File Types, GNU File Types, Header Fields, Header Fields
3707 @appendixsubsec File Types
3708
3709 The following flags are used to describe file types:
3710
3711 @table @code
3712 @item LF_NORMAL
3713 @itemx LF_OLDNORMAL
3714 Indicates a regular file. In order to be compatible with older
3715 versions of @code{tar}, a @code{typeflag} value of @code{LF_OLDNORMAL}
3716 should be silently recognized as a regular file. New archives should
3717 be created using @code{LF_NORMAL} for regular files. For backward
3718 compatibility, @code{tar} treats a regular file whose name ends with a
3719 slash as a directory.
3720
3721 @item LF_LINK
3722 Indicates a link to another file, of any type, which has been
3723 previously archived. @code{tar} identifies linked files in Unix by
3724 matching device and inode numbers. The linked-to name is specified in
3725 the @code{linkname} field with a trailing null.
3726
3727 @item LF_SYMLINK
3728 Indicates a symbolic link to another file. The linked-to
3729 name is specified in the @code{linkname} field with a trailing null.
3730 @xref{File Writing Options}, for information on archiving files
3731 referenced by a symbolic link.
3732
3733 @item LF_CHR
3734 @itemx LF_BLK
3735 Indicate character special files and block special files,
3736 respectively. In this case the @code{devmajor} and @code{devminor}
3737 fields will contain the major and minor device numbers. Operating
3738 systems may map the device specifications to their own local
3739 specification, or may ignore the entry.
3740
3741 @item LF_DIR
3742 Indicates a directory or sub-directory. The directory name in the
3743 @code{name} field should end with a slash. On systems where disk
3744 allocation is performed on a directory basis, the @code{size} field
3745 will contain the maximum number of bytes (which may be rounded to the
3746 nearest disk block allocation unit) that the directory can hold. A
3747 @code{size} field of zero indicates no size limitations. Systems that
3748 do not support size limiting in this manner should ignore the
3749 @code{size} field.
3750
3751 @item LF_FIFO
3752 Indicates a FIFO special file. Note that archiving a FIFO file
3753 archives the existence of the file and not its contents.
3754
3755 @item LF_CONTIG
3756 Indicates a contiguous file. Contiguous files are the same as normal
3757 files except that, in operating systems that support it, all the
3758 files' disk space is allocated contiguously. Operating systems which
3759 do not allow contiguous allocation should silently treat this type as
3760 a normal file.
3761
3762 @item 'A' @dots{}
3763 @itemx 'Z'
3764 These are reserved for custom implementations. Some of these are used
3765 in the GNU modified format, which is described below. @xref{GNU File
3766 Types}.
3767 @end table
3768
3769 Certain other flag values are reserved for specification in future
3770 revisions of the P1003 standard, and should not be used by any
3771 @code{tar} program.
3772
3773 @node GNU File Types, , File Types, Header Fields
3774 @appendixsubsec Additional File Types Supported by GNU
3775
3776 GNU @code{tar} uses additional file types to describe new types of
3777 files in an archive. These are listed below.
3778
3779 @table @code
3780 @item LF_DUMPDIR
3781 @itemx 'D'
3782 Indicates a directory and a list of files created by the
3783 @samp{--incremental} option. The @code{size} field gives the total
3784 size of the associated list of files. Each file name is preceded by
3785 either a @code{'Y'} (the file should be in this archive) or an
3786 @code{'N'} (the file is a directory, or is not stored in the archive).
3787 Each file name is terminated by a null. There is an additional null
3788 after the last file name.
3789
3790 @item LF_MULTIVOL
3791 @itemx 'M'
3792 Indicates a file continued from another volume of a multi-volume
3793 archive (@pxref{Multi-Volume Archives}). The original type of the file is not
3794 given here. The @code{size} field gives the maximum size of this
3795 piece of the file (assuming the volume does not end before the file is
3796 written out). The @code{offset} field gives the offset from the
3797 beginning of the file where this part of the file begins. Thus
3798 @code{size} plus @code{offset} should equal the original size of the
3799 file.
3800
3801 @item LF_SPARSE
3802 @itemx 'S'
3803 Indicates a sparse file. @xref{Sparse Files}. @xref{Sparse File
3804 Handling}.
3805
3806 @item LF_VOLHDR
3807 @itemx 'V'
3808 Marks an archive label that was created using the @samp{--label} option
3809 when the archive was created (@pxref{Archive Label}. The @code{name}
3810 field contains the argument to the option. The @code{size} field is
3811 zero. Only the first file in each volume of an archive should have
3812 this type.
3813 @end table
3814
3815 @node Sparse File Handling, , Header Fields, Data Format Details
3816 @appendixsec Fields to Handle Sparse Files
3817
3818 The following header information was added to deal with sparse files
3819 (@pxref{Sparse Files}):
3820
3821 @c TALK TO MIB
3822 The @code{sp} field (fields? something else?) is an array of
3823 @code{struct sparse}. Each @code{struct sparse} contains two
3824 12-character strings, which represent the offset into the file and the
3825 number of bytes to be written at that offset. The offset is absolute,
3826 and not relative to the offset in preceding array elements.
3827
3828 The header can contain four of these @code{struct sparse}; if more are
3829 needed, they are not stored in the header, instead, the flag
3830 @code{isextended} is set and the next record is an
3831 @code{extended_header}.
3832 @c @code{extended_header} or @dfn{extended_header} ??? the next
3833 @c record after the header, or in the middle of it.
3834
3835 The @code{isextended} flag is only set for sparse files, and then only
3836 if extended header records are needed when archiving the file.
3837
3838 Each extended header record can contain an array of 21 sparse
3839 structures, as well as another @code{isextended} flag. There is no
3840 limit (except that implied by the archive media) on the number of
3841 extended header records that can be used to describe a sparse file.
3842
3843 @c so is @code{extended_header} the right way to write this?
3844
3845 @node Concept Index, , Data Format Details, Top
3846 @unnumbered Concept Index
3847
3848 @printindex cp
3849
3850 @summarycontents
3851 @contents
3852 @bye
3853
3854
This page took 0.193703 seconds and 5 git commands to generate.