diff options
Diffstat (limited to 'doc/tar.info-2')
-rw-r--r-- | doc/tar.info-2 | 7007 |
1 files changed, 7007 insertions, 0 deletions
diff --git a/doc/tar.info-2 b/doc/tar.info-2 new file mode 100644 index 0000000..9dc6a87 --- /dev/null +++ b/doc/tar.info-2 @@ -0,0 +1,7007 @@ +This is tar.info, produced by makeinfo version 5.9.93 from tar.texi. + +This manual is for GNU 'tar' (version 1.29, 14 April 2016), which +creates and extracts files from archives. + + Copyright (C) 1992, 1994-1997, 1999-2001, 2003-2016 Free Software +Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation License, + Version 1.3 or any later version published by the Free Software + Foundation; with the Invariant Sections being "GNU General Public + License", with the Front-Cover Texts being "A GNU Manual", and with + the Back-Cover Texts as in (a) below. A copy of the license is + included in the section entitled "GNU Free Documentation License". + + (a) The FSF's Back-Cover Text is: "You have the freedom to copy and + modify this GNU manual." +INFO-DIR-SECTION Archiving +START-INFO-DIR-ENTRY +* Tar: (tar). Making tape (or disk) archives. +END-INFO-DIR-ENTRY + +INFO-DIR-SECTION Individual utilities +START-INFO-DIR-ENTRY +* tar: (tar)tar invocation. Invoking GNU 'tar'. +END-INFO-DIR-ENTRY + + +File: tar.info, Node: one, Prev: recurse, Up: Choosing + +6.10 Crossing File System Boundaries +==================================== + +'tar' will normally automatically cross file system boundaries in order +to archive files which are part of a directory tree. You can change +this behavior by running 'tar' and specifying '--one-file-system'. This +option only affects files that are archived because they are in a +directory that is being archived; 'tar' will still archive files +explicitly named on the command line or through '--files-from', +regardless of where they reside. + +'--one-file-system' + Prevents 'tar' from crossing file system boundaries when archiving. + Use in conjunction with any write operation. + + The '--one-file-system' option causes 'tar' to modify its normal +behavior in archiving the contents of directories. If a file in a +directory is not on the same file system as the directory itself, then +'tar' will not archive that file. If the file is a directory itself, +'tar' will not archive anything beneath it; in other words, 'tar' will +not cross mount points. + + This option is useful for making full or incremental archival backups +of a file system. If this option is used in conjunction with +'--verbose' ('-v'), files that are excluded are mentioned by name on the +standard error. + +* Menu: + +* directory:: Changing Directory +* absolute:: Absolute File Names + + +File: tar.info, Node: directory, Next: absolute, Up: one + +6.10.1 Changing the Working Directory +------------------------------------- + +To change the working directory in the middle of a list of file names, +either on the command line or in a file specified using '--files-from' +('-T'), use '--directory' ('-C'). This will change the working +directory to the specified directory after that point in the list. + +'--directory=DIRECTORY' +'-C DIRECTORY' + Changes the working directory in the middle of a command line. + + For example, + + $ tar -c -f jams.tar grape prune -C food cherry + +will place the files 'grape' and 'prune' from the current directory into +the archive 'jams.tar', followed by the file 'cherry' from the directory +'food'. This option is especially useful when you have several widely +separated files that you want to store in the same archive. + + Note that the file 'cherry' is recorded in the archive under the +precise name 'cherry', _not_ 'food/cherry'. Thus, the archive will +contain three files that all appear to have come from the same +directory; if the archive is extracted with plain 'tar --extract', all +three files will be written in the current directory. + + Contrast this with the command, + + $ tar -c -f jams.tar grape prune -C food red/cherry + +which records the third file in the archive under the name 'red/cherry' +so that, if the archive is extracted using 'tar --extract', the third +file will be written in a subdirectory named 'red'. + + You can use the '--directory' option to make the archive independent +of the original name of the directory holding the files. The following +command places the files '/etc/passwd', '/etc/hosts', and '/lib/libc.a' +into the archive 'foo.tar': + + $ tar -c -f foo.tar -C /etc passwd hosts -C /lib libc.a + +However, the names of the archive members will be exactly what they were +on the command line: 'passwd', 'hosts', and 'libc.a'. They will not +appear to be related by file name to the original directories where +those files were located. + + Note that '--directory' options are interpreted consecutively. If +'--directory' specifies a relative file name, it is interpreted relative +to the then current directory, which might not be the same as the +original current working directory of 'tar', due to a previous +'--directory' option. + + When using '--files-from' (*note files::), you can put various 'tar' +options (including '-C') in the file list. Notice, however, that in +this case the option and its argument may not be separated by +whitespace. If you use short option, its argument must either follow +the option letter immediately, without any intervening whitespace, or +occupy the next line. Otherwise, if you use long option, separate its +argument by an equal sign. + + For instance, the file list for the above example will be: + + -C/etc + passwd + hosts + --directory=/lib + libc.a + +To use it, you would invoke 'tar' as follows: + + $ tar -c -f foo.tar --files-from list + + The interpretation of options in file lists is disabled by +'--verbatim-files-from' and '--null' options. + + +File: tar.info, Node: absolute, Prev: directory, Up: one + +6.10.2 Absolute File Names +-------------------------- + +By default, GNU 'tar' drops a leading '/' on input or output, and +complains about file names containing a '..' component. There is an +option that turns off this behavior: + +'--absolute-names' +'-P' + Do not strip leading slashes from file names, and permit file names + containing a '..' file name component. + + When 'tar' extracts archive members from an archive, it strips any +leading slashes ('/') from the member name. This causes absolute member +names in the archive to be treated as relative file names. This allows +you to have such members extracted wherever you want, instead of being +restricted to extracting the member in the exact directory named in the +archive. For example, if the archive member has the name '/etc/passwd', +'tar' will extract it as if the name were really 'etc/passwd'. + + File names containing '..' can cause problems when extracting, so +'tar' normally warns you about such files when creating an archive, and +rejects attempts to extracts such files. + + Other 'tar' programs do not do this. As a result, if you create an +archive whose member names start with a slash, they will be difficult +for other people with a non-GNU 'tar' program to use. Therefore, GNU +'tar' also strips leading slashes from member names when putting members +into the archive. For example, if you ask 'tar' to add the file +'/bin/ls' to an archive, it will do so, but the member name will be +'bin/ls'(1). + + Symbolic links containing '..' or leading '/' can also cause problems +when extracting, so 'tar' normally extracts them last; it may create +empty files as placeholders during extraction. + + If you use the '--absolute-names' ('-P') option, 'tar' will do none +of these transformations. + + To archive or extract files relative to the root directory, specify +the '--absolute-names' ('-P') option. + + Normally, 'tar' acts on files relative to the working +directory--ignoring superior directory names when archiving, and +ignoring leading slashes when extracting. + + When you specify '--absolute-names' ('-P'), 'tar' stores file names +including all superior directory names, and preserves leading slashes. +If you only invoked 'tar' from the root directory you would never need +the '--absolute-names' option, but using this option may be more +convenient than switching to root. + +'--absolute-names' + Preserves full file names (including superior directory names) when + archiving and extracting files. + + 'tar' prints out a message about removing the '/' from file names. +This message appears once per GNU 'tar' invocation. It represents +something which ought to be told; ignoring what it means can cause very +serious surprises, later. + + Some people, nevertheless, do not want to see this message. Wanting +to play really dangerously, one may of course redirect 'tar' standard +error to the sink. For example, under 'sh': + + $ tar -c -f archive.tar /home 2> /dev/null + +Another solution, both nicer and simpler, would be to change to the '/' +directory first, and then avoid absolute notation. For example: + + $ tar -c -f archive.tar -C / home + + *Note Integrity::, for some of the security-related implications of +using this option. + + ---------- Footnotes ---------- + + (1) A side effect of this is that when '--create' is used with +'--verbose' the resulting output is not, generally speaking, the same as +the one you'd get running 'tar --list' command. This may be important +if you use some scripts for comparing both outputs. *Note listing +member and file names::, for the information on how to handle this case. + + +File: tar.info, Node: Date input formats, Next: Formats, Prev: Choosing, Up: Top + +7 Date input formats +******************** + +First, a quote: + + Our units of temporal measurement, from seconds on up to months, + are so complicated, asymmetrical and disjunctive so as to make + coherent mental reckoning in time all but impossible. Indeed, had + some tyrannical god contrived to enslave our minds to time, to make + it all but impossible for us to escape subjection to sodden + routines and unpleasant surprises, he could hardly have done better + than handing down our present system. It is like a set of + trapezoidal building blocks, with no vertical or horizontal + surfaces, like a language in which the simplest thought demands + ornate constructions, useless particles and lengthy + circumlocutions. Unlike the more successful patterns of language + and science, which enable us to face experience boldly or at least + level-headedly, our system of temporal calculation silently and + persistently encourages our terror of time. + + ... It is as though architects had to measure length in feet, width + in meters and height in ells; as though basic instruction manuals + demanded a knowledge of five different languages. It is no wonder + then that we often look into our own immediate past or future, last + Tuesday or a week from Sunday, with feelings of helpless confusion. + ... + + --Robert Grudin, 'Time and the Art of Living'. + + This section describes the textual date representations that GNU +programs accept. These are the strings you, as a user, can supply as +arguments to the various programs. The C interface (via the +'parse_datetime' function) is not described here. + +* Menu: + +* General date syntax:: Common rules. +* Calendar date items:: 19 Dec 1994. +* Time of day items:: 9:20pm. +* Time zone items:: EST, PDT, UTC, ... +* Combined date and time of day items:: 1972-09-24T20:02:00,000000-0500. +* Day of week items:: Monday and others. +* Relative items in date strings:: next tuesday, 2 years ago. +* Pure numbers in date strings:: 19931219, 1440. +* Seconds since the Epoch:: @1078100502. +* Specifying time zone rules:: TZ="America/New_York", TZ="UTC0". +* Authors of parse_datetime:: Bellovin, Eggert, Salz, Berets, et al. + + +File: tar.info, Node: General date syntax, Next: Calendar date items, Up: Date input formats + +7.1 General date syntax +======================= + +A "date" is a string, possibly empty, containing many items separated by +whitespace. The whitespace may be omitted when no ambiguity arises. +The empty string means the beginning of today (i.e., midnight). Order +of the items is immaterial. A date string may contain many flavors of +items: + + * calendar date items + * time of day items + * time zone items + * combined date and time of day items + * day of the week items + * relative items + * pure numbers. + +We describe each of these item types in turn, below. + + A few ordinal numbers may be written out in words in some contexts. +This is most useful for specifying day of the week items or relative +items (see below). Among the most commonly used ordinal numbers, the +word 'last' stands for -1, 'this' stands for 0, and 'first' and 'next' +both stand for 1. Because the word 'second' stands for the unit of time +there is no way to write the ordinal number 2, but for convenience +'third' stands for 3, 'fourth' for 4, 'fifth' for 5, 'sixth' for 6, +'seventh' for 7, 'eighth' for 8, 'ninth' for 9, 'tenth' for 10, +'eleventh' for 11 and 'twelfth' for 12. + + When a month is written this way, it is still considered to be +written numerically, instead of being "spelled in full"; this changes +the allowed strings. + + In the current implementation, only English is supported for words +and abbreviations like 'AM', 'DST', 'EST', 'first', 'January', 'Sunday', +'tomorrow', and 'year'. + + The output of the 'date' command is not always acceptable as a date +string, not only because of the language problem, but also because there +is no standard meaning for time zone items like 'IST'. When using +'date' to generate a date string intended to be parsed later, specify a +date format that is independent of language and that does not use time +zone items other than 'UTC' and 'Z'. Here are some ways to do this: + + $ LC_ALL=C TZ=UTC0 date + Mon Mar 1 00:21:42 UTC 2004 + $ TZ=UTC0 date +'%Y-%m-%d %H:%M:%SZ' + 2004-03-01 00:21:42Z + $ date --rfc-3339=ns # --rfc-3339 is a GNU extension. + 2004-02-29 16:21:42.692722128-08:00 + $ date --rfc-2822 # a GNU extension + Sun, 29 Feb 2004 16:21:42 -0800 + $ date +'%Y-%m-%d %H:%M:%S %z' # %z is a GNU extension. + 2004-02-29 16:21:42 -0800 + $ date +'@%s.%N' # %s and %N are GNU extensions. + @1078100502.692722128 + + Alphabetic case is completely ignored in dates. Comments may be +introduced between round parentheses, as long as included parentheses +are properly nested. Hyphens not followed by a digit are currently +ignored. Leading zeros on numbers are ignored. + + Invalid dates like '2005-02-29' or times like '24:00' are rejected. +In the typical case of a host that does not support leap seconds, a time +like '23:59:60' is rejected even if it corresponds to a valid leap +second. + + +File: tar.info, Node: Calendar date items, Next: Time of day items, Prev: General date syntax, Up: Date input formats + +7.2 Calendar date items +======================= + +A "calendar date item" specifies a day of the year. It is specified +differently, depending on whether the month is specified numerically or +literally. All these strings specify the same calendar date: + + 1972-09-24 # ISO 8601. + 72-9-24 # Assume 19xx for 69 through 99, + # 20xx for 00 through 68. + 72-09-24 # Leading zeros are ignored. + 9/24/72 # Common U.S. writing. + 24 September 1972 + 24 Sept 72 # September has a special abbreviation. + 24 Sep 72 # Three-letter abbreviations always allowed. + Sep 24, 1972 + 24-sep-72 + 24sep72 + + The year can also be omitted. In this case, the last specified year +is used, or the current year if none. For example: + + 9/24 + sep 24 + + Here are the rules. + + For numeric months, the ISO 8601 format 'YEAR-MONTH-DAY' is allowed, +where YEAR is any positive number, MONTH is a number between 01 and 12, +and DAY is a number between 01 and 31. A leading zero must be present +if a number is less than ten. If YEAR is 68 or smaller, then 2000 is +added to it; otherwise, if YEAR is less than 100, then 1900 is added to +it. The construct 'MONTH/DAY/YEAR', popular in the United States, is +accepted. Also 'MONTH/DAY', omitting the year. + + Literal months may be spelled out in full: 'January', 'February', +'March', 'April', 'May', 'June', 'July', 'August', 'September', +'October', 'November' or 'December'. Literal months may be abbreviated +to their first three letters, possibly followed by an abbreviating dot. +It is also permitted to write 'Sept' instead of 'September'. + + When months are written literally, the calendar date may be given as +any of the following: + + DAY MONTH YEAR + DAY MONTH + MONTH DAY YEAR + DAY-MONTH-YEAR + + Or, omitting the year: + + MONTH DAY + + +File: tar.info, Node: Time of day items, Next: Time zone items, Prev: Calendar date items, Up: Date input formats + +7.3 Time of day items +===================== + +A "time of day item" in date strings specifies the time on a given day. +Here are some examples, all of which represent the same time: + + 20:02:00.000000 + 20:02 + 8:02pm + 20:02-0500 # In EST (U.S. Eastern Standard Time). + + More generally, the time of day may be given as 'HOUR:MINUTE:SECOND', +where HOUR is a number between 0 and 23, MINUTE is a number between 0 +and 59, and SECOND is a number between 0 and 59 possibly followed by '.' +or ',' and a fraction containing one or more digits. Alternatively, +':SECOND' can be omitted, in which case it is taken to be zero. On the +rare hosts that support leap seconds, SECOND may be 60. + + If the time is followed by 'am' or 'pm' (or 'a.m.' or 'p.m.'), HOUR +is restricted to run from 1 to 12, and ':MINUTE' may be omitted (taken +to be zero). 'am' indicates the first half of the day, 'pm' indicates +the second half of the day. In this notation, 12 is the predecessor of +1: midnight is '12am' while noon is '12pm'. (This is the zero-oriented +interpretation of '12am' and '12pm', as opposed to the old tradition +derived from Latin which uses '12m' for noon and '12pm' for midnight.) + + The time may alternatively be followed by a time zone correction, +expressed as 'SHHMM', where S is '+' or '-', HH is a number of zone +hours and MM is a number of zone minutes. The zone minutes term, MM, +may be omitted, in which case the one- or two-digit correction is +interpreted as a number of hours. You can also separate HH from MM with +a colon. When a time zone correction is given this way, it forces +interpretation of the time relative to Coordinated Universal Time (UTC), +overriding any previous specification for the time zone or the local +time zone. For example, '+0530' and '+05:30' both stand for the time +zone 5.5 hours ahead of UTC (e.g., India). This is the best way to +specify a time zone correction by fractional parts of an hour. The +maximum zone correction is 24 hours. + + Either 'am'/'pm' or a time zone correction may be specified, but not +both. + + +File: tar.info, Node: Time zone items, Next: Combined date and time of day items, Prev: Time of day items, Up: Date input formats + +7.4 Time zone items +=================== + +A "time zone item" specifies an international time zone, indicated by a +small set of letters, e.g., 'UTC' or 'Z' for Coordinated Universal Time. +Any included periods are ignored. By following a non-daylight-saving +time zone by the string 'DST' in a separate word (that is, separated by +some white space), the corresponding daylight saving time zone may be +specified. Alternatively, a non-daylight-saving time zone can be +followed by a time zone correction, to add the two values. This is +normally done only for 'UTC'; for example, 'UTC+05:30' is equivalent to +'+05:30'. + + Time zone items other than 'UTC' and 'Z' are obsolescent and are not +recommended, because they are ambiguous; for example, 'EST' has a +different meaning in Australia than in the United States. Instead, it's +better to use unambiguous numeric time zone corrections like '-0500', as +described in the previous section. + + If neither a time zone item nor a time zone correction is supplied, +time stamps are interpreted using the rules of the default time zone +(*note Specifying time zone rules::). + + +File: tar.info, Node: Combined date and time of day items, Next: Day of week items, Prev: Time zone items, Up: Date input formats + +7.5 Combined date and time of day items +======================================= + +The ISO 8601 date and time of day extended format consists of an ISO +8601 date, a 'T' character separator, and an ISO 8601 time of day. This +format is also recognized if the 'T' is replaced by a space. + + In this format, the time of day should use 24-hour notation. +Fractional seconds are allowed, with either comma or period preceding +the fraction. ISO 8601 fractional minutes and hours are not supported. +Typically, hosts support nanosecond timestamp resolution; excess +precision is silently discarded. + + Here are some examples: + + 2012-09-24T20:02:00.052-0500 + 2012-12-31T23:59:59,999999999+1100 + 1970-01-01 00:00Z + + +File: tar.info, Node: Day of week items, Next: Relative items in date strings, Prev: Combined date and time of day items, Up: Date input formats + +7.6 Day of week items +===================== + +The explicit mention of a day of the week will forward the date (only if +necessary) to reach that day of the week in the future. + + Days of the week may be spelled out in full: 'Sunday', 'Monday', +'Tuesday', 'Wednesday', 'Thursday', 'Friday' or 'Saturday'. Days may be +abbreviated to their first three letters, optionally followed by a +period. The special abbreviations 'Tues' for 'Tuesday', 'Wednes' for +'Wednesday' and 'Thur' or 'Thurs' for 'Thursday' are also allowed. + + A number may precede a day of the week item to move forward +supplementary weeks. It is best used in expression like 'third monday'. +In this context, 'last DAY' or 'next DAY' is also acceptable; they move +one week before or after the day that DAY by itself would represent. + + A comma following a day of the week item is ignored. + + +File: tar.info, Node: Relative items in date strings, Next: Pure numbers in date strings, Prev: Day of week items, Up: Date input formats + +7.7 Relative items in date strings +================================== + +"Relative items" adjust a date (or the current date if none) forward or +backward. The effects of relative items accumulate. Here are some +examples: + + 1 year + 1 year ago + 3 years + 2 days + + The unit of time displacement may be selected by the string 'year' or +'month' for moving by whole years or months. These are fuzzy units, as +years and months are not all of equal duration. More precise units are +'fortnight' which is worth 14 days, 'week' worth 7 days, 'day' worth 24 +hours, 'hour' worth 60 minutes, 'minute' or 'min' worth 60 seconds, and +'second' or 'sec' worth one second. An 's' suffix on these units is +accepted and ignored. + + The unit of time may be preceded by a multiplier, given as an +optionally signed number. Unsigned numbers are taken as positively +signed. No number at all implies 1 for a multiplier. Following a +relative item by the string 'ago' is equivalent to preceding the unit by +a multiplier with value -1. + + The string 'tomorrow' is worth one day in the future (equivalent to +'day'), the string 'yesterday' is worth one day in the past (equivalent +to 'day ago'). + + The strings 'now' or 'today' are relative items corresponding to +zero-valued time displacement, these strings come from the fact a +zero-valued time displacement represents the current time when not +otherwise changed by previous items. They may be used to stress other +items, like in '12:00 today'. The string 'this' also has the meaning of +a zero-valued time displacement, but is preferred in date strings like +'this thursday'. + + When a relative item causes the resulting date to cross a boundary +where the clocks were adjusted, typically for daylight saving time, the +resulting date and time are adjusted accordingly. + + The fuzz in units can cause problems with relative items. For +example, '2003-07-31 -1 month' might evaluate to 2003-07-01, because +2003-06-31 is an invalid date. To determine the previous month more +reliably, you can ask for the month before the 15th of the current +month. For example: + + $ date -R + Thu, 31 Jul 2003 13:02:39 -0700 + $ date --date='-1 month' +'Last month was %B?' + Last month was July? + $ date --date="$(date +%Y-%m-15) -1 month" +'Last month was %B!' + Last month was June! + + Also, take care when manipulating dates around clock changes such as +daylight saving leaps. In a few cases these have added or subtracted as +much as 24 hours from the clock, so it is often wise to adopt universal +time by setting the 'TZ' environment variable to 'UTC0' before embarking +on calendrical calculations. + + +File: tar.info, Node: Pure numbers in date strings, Next: Seconds since the Epoch, Prev: Relative items in date strings, Up: Date input formats + +7.8 Pure numbers in date strings +================================ + +The precise interpretation of a pure decimal number depends on the +context in the date string. + + If the decimal number is of the form YYYYMMDD and no other calendar +date item (*note Calendar date items::) appears before it in the date +string, then YYYY is read as the year, MM as the month number and DD as +the day of the month, for the specified calendar date. + + If the decimal number is of the form HHMM and no other time of day +item appears before it in the date string, then HH is read as the hour +of the day and MM as the minute of the hour, for the specified time of +day. MM can also be omitted. + + If both a calendar date and a time of day appear to the left of a +number in the date string, but no relative item, then the number +overrides the year. + + +File: tar.info, Node: Seconds since the Epoch, Next: Specifying time zone rules, Prev: Pure numbers in date strings, Up: Date input formats + +7.9 Seconds since the Epoch +=========================== + +If you precede a number with '@', it represents an internal time stamp +as a count of seconds. The number can contain an internal decimal point +(either '.' or ','); any excess precision not supported by the internal +representation is truncated toward minus infinity. Such a number cannot +be combined with any other date item, as it specifies a complete time +stamp. + + Internally, computer times are represented as a count of seconds +since an epoch--a well-defined point of time. On GNU and POSIX systems, +the epoch is 1970-01-01 00:00:00 UTC, so '@0' represents this time, '@1' +represents 1970-01-01 00:00:01 UTC, and so forth. GNU and most other +POSIX-compliant systems support such times as an extension to POSIX, +using negative counts, so that '@-1' represents 1969-12-31 23:59:59 UTC. + + Traditional Unix systems count seconds with 32-bit two's-complement +integers and can represent times from 1901-12-13 20:45:52 through +2038-01-19 03:14:07 UTC. More modern systems use 64-bit counts of +seconds with nanosecond subcounts, and can represent all the times in +the known lifetime of the universe to a resolution of 1 nanosecond. + + On most hosts, these counts ignore the presence of leap seconds. For +example, on most hosts '@915148799' represents 1998-12-31 23:59:59 UTC, +'@915148800' represents 1999-01-01 00:00:00 UTC, and there is no way to +represent the intervening leap second 1998-12-31 23:59:60 UTC. + + +File: tar.info, Node: Specifying time zone rules, Next: Authors of parse_datetime, Prev: Seconds since the Epoch, Up: Date input formats + +7.10 Specifying time zone rules +=============================== + +Normally, dates are interpreted using the rules of the current time +zone, which in turn are specified by the 'TZ' environment variable, or +by a system default if 'TZ' is not set. To specify a different set of +default time zone rules that apply just to one date, start the date with +a string of the form 'TZ="RULE"'. The two quote characters ('"') must +be present in the date, and any quotes or backslashes within RULE must +be escaped by a backslash. + + For example, with the GNU 'date' command you can answer the question +"What time is it in New York when a Paris clock shows 6:30am on October +31, 2004?" by using a date beginning with 'TZ="Europe/Paris"' as shown +in the following shell transcript: + + $ export TZ="America/New_York" + $ date --date='TZ="Europe/Paris" 2004-10-31 06:30' + Sun Oct 31 01:30:00 EDT 2004 + + In this example, the '--date' operand begins with its own 'TZ' +setting, so the rest of that operand is processed according to +'Europe/Paris' rules, treating the string '2004-10-31 06:30' as if it +were in Paris. However, since the output of the 'date' command is +processed according to the overall time zone rules, it uses New York +time. (Paris was normally six hours ahead of New York in 2004, but this +example refers to a brief Halloween period when the gap was five hours.) + + A 'TZ' value is a rule that typically names a location in the 'tz' +database (http://www.twinsun.com/tz/tz-link.htm). A recent catalog of +location names appears in the TWiki Date and Time Gateway +(http://twiki.org/cgi-bin/xtra/tzdate). A few non-GNU hosts require a +colon before a location name in a 'TZ' setting, e.g., +'TZ=":America/New_York"'. + + The 'tz' database includes a wide variety of locations ranging from +'Arctic/Longyearbyen' to 'Antarctica/South_Pole', but if you are at sea +and have your own private time zone, or if you are using a non-GNU host +that does not support the 'tz' database, you may need to use a POSIX +rule instead. Simple POSIX rules like 'UTC0' specify a time zone +without daylight saving time; other rules can specify simple daylight +saving regimes. *Note Specifying the Time Zone with 'TZ': (libc)TZ +Variable. + + +File: tar.info, Node: Authors of parse_datetime, Prev: Specifying time zone rules, Up: Date input formats + +7.11 Authors of 'parse_datetime' +================================ + +'parse_datetime' started life as 'getdate', as originally implemented by +Steven M. Bellovin (<smb@research.att.com>) while at the University of +North Carolina at Chapel Hill. The code was later tweaked by a couple +of people on Usenet, then completely overhauled by Rich $alz +(<rsalz@bbn.com>) and Jim Berets (<jberets@bbn.com>) in August, 1990. +Various revisions for the GNU system were made by David MacKenzie, Jim +Meyering, Paul Eggert and others, including renaming it to 'get_date' to +avoid a conflict with the alternative Posix function 'getdate', and a +later rename to 'parse_datetime'. The Posix function 'getdate' can +parse more locale-specific dates using 'strptime', but relies on an +environment variable and external file, and lacks the thread-safety of +'parse_datetime'. + + This chapter was originally produced by Franc,ois Pinard +(<pinard@iro.umontreal.ca>) from the 'parse_datetime.y' source code, and +then edited by K. Berry (<kb@cs.umb.edu>). + + +File: tar.info, Node: Formats, Next: Media, Prev: Date input formats, Up: Top + +8 Controlling the Archive Format +******************************** + +Due to historical reasons, there are several formats of tar archives. +All of them are based on the same principles, but have some subtle +differences that often make them incompatible with each other. + + GNU tar is able to create and handle archives in a variety of +formats. The most frequently used formats are (in alphabetical order): + +gnu + Format used by GNU 'tar' versions up to 1.13.25. This format + derived from an early POSIX standard, adding some improvements such + as sparse file handling and incremental archives. Unfortunately + these features were implemented in a way incompatible with other + archive formats. + + Archives in 'gnu' format are able to hold file names of unlimited + length. + +oldgnu + Format used by GNU 'tar' of versions prior to 1.12. + +v7 + Archive format, compatible with the V7 implementation of tar. This + format imposes a number of limitations. The most important of them + are: + + 1. The maximum length of a file name is limited to 99 characters. + 2. The maximum length of a symbolic link is limited to 99 + characters. + 3. It is impossible to store special files (block and character + devices, fifos etc.) + 4. Maximum value of user or group ID is limited to 2097151 + (7777777 octal) + 5. V7 archives do not contain symbolic ownership information + (user and group name of the file owner). + + This format has traditionally been used by Automake when producing + Makefiles. This practice will change in the future, in the + meantime, however this means that projects containing file names + more than 99 characters long will not be able to use GNU 'tar' 1.29 + and Automake prior to 1.9. + +ustar + Archive format defined by POSIX.1-1988 specification. It stores + symbolic ownership information. It is also able to store special + files. However, it imposes several restrictions as well: + + 1. The maximum length of a file name is limited to 256 + characters, provided that the file name can be split at a + directory separator in two parts, first of them being at most + 155 bytes long. So, in most cases the maximum file name + length will be shorter than 256 characters. + 2. The maximum length of a symbolic link name is limited to 100 + characters. + 3. Maximum size of a file the archive is able to accommodate is + 8GB + 4. Maximum value of UID/GID is 2097151. + 5. Maximum number of bits in device major and minor numbers is + 21. + +star + Format used by Jo"rg Schilling 'star' implementation. GNU 'tar' is + able to read 'star' archives but currently does not produce them. + +posix + Archive format defined by POSIX.1-2001 specification. This is the + most flexible and feature-rich format. It does not impose any + restrictions on file sizes or file name lengths. This format is + quite recent, so not all tar implementations are able to handle it + properly. However, this format is designed in such a way that any + tar implementation able to read 'ustar' archives will be able to + read most 'posix' archives as well, with the only exception that + any additional information (such as long file names etc.) will in + such case be extracted as plain text files along with the files it + refers to. + + This archive format will be the default format for future versions + of GNU 'tar'. + + The following table summarizes the limitations of each of these +formats: + +Format UID File Size File Name Devn +-------------------------------------------------------------------- +gnu 1.8e19 Unlimited Unlimited 63 +oldgnu 1.8e19 Unlimited Unlimited 63 +v7 2097151 8GB 99 n/a +ustar 2097151 8GB 256 21 +posix Unlimited Unlimited Unlimited Unlimited + + The default format for GNU 'tar' is defined at compilation time. You +may check it by running 'tar --help', and examining the last lines of +its output. Usually, GNU 'tar' is configured to create archives in +'gnu' format, however, future version will switch to 'posix'. + +* Menu: + +* Compression:: Using Less Space through Compression +* Attributes:: Handling File Attributes +* Portability:: Making 'tar' Archives More Portable +* cpio:: Comparison of 'tar' and 'cpio' + + +File: tar.info, Node: Compression, Next: Attributes, Up: Formats + +8.1 Using Less Space through Compression +======================================== + +* Menu: + +* gzip:: Creating and Reading Compressed Archives +* sparse:: Archiving Sparse Files + + +File: tar.info, Node: gzip, Next: sparse, Up: Compression + +8.1.1 Creating and Reading Compressed Archives +---------------------------------------------- + +GNU 'tar' is able to create and read compressed archives. It supports a +wide variety of compression programs, namely: 'gzip', 'bzip2', 'lzip', +'lzma', 'lzop', 'xz' and traditional 'compress'. The latter is +supported mostly for backward compatibility, and we recommend against +using it, because it is by far less effective than the other compression +programs(1). + + Creating a compressed archive is simple: you just specify a +"compression option" along with the usual archive creation commands. +The compression option is '-z' ('--gzip') to create a 'gzip' compressed +archive, '-j' ('--bzip2') to create a 'bzip2' compressed archive, +'--lzip' to create an lzip compressed archive, '-J' ('--xz') to create +an XZ archive, '--lzma' to create an LZMA compressed archive, '--lzop' +to create an LSOP archive, and '-Z' ('--compress') to use 'compress' +program. For example: + + $ tar czf archive.tar.gz . + + You can also let GNU 'tar' select the compression program based on +the suffix of the archive file name. This is done using +'--auto-compress' ('-a') command line option. For example, the +following invocation will use 'bzip2' for compression: + + $ tar caf archive.tar.bz2 . + +whereas the following one will use 'lzma': + + $ tar caf archive.tar.lzma . + + For a complete list of file name suffixes recognized by GNU 'tar', +see *note auto-compress::. + + Reading compressed archive is even simpler: you don't need to specify +any additional options as GNU 'tar' recognizes its format automatically. +Thus, the following commands will list and extract the archive created +in previous example: + + # List the compressed archive + $ tar tf archive.tar.gz + # Extract the compressed archive + $ tar xf archive.tar.gz + + The format recognition algorithm is based on "signatures", a special +byte sequences in the beginning of file, that are specific for certain +compression formats. If this approach fails, 'tar' falls back to using +archive name suffix to determine its format (*note auto-compress::, for +a list of recognized suffixes). + + Some compression programs are able to handle different compression +formats. GNU 'tar' uses this, if the principal decompressor for the +given format is not available. For example, if 'compress' is not +installed, 'tar' will try to use 'gzip'. As of version 1.29 the +following alternatives are tried(2): + +Format Main decompressor Alternatives +--------------------------------------------------------------------- +compress compress gzip +lzma lzma xz +bzip2 bzip2 lbzip2 + + The only case when you have to specify a decompression option while +reading the archive is when reading from a pipe or from a tape drive +that does not support random access. However, in this case GNU 'tar' +will indicate which option you should use. For example: + + $ cat archive.tar.gz | tar tf - + tar: Archive is compressed. Use -z option + tar: Error is not recoverable: exiting now + + If you see such diagnostics, just add the suggested option to the +invocation of GNU 'tar': + + $ cat archive.tar.gz | tar tzf - + + Notice also, that there are several restrictions on operations on +compressed archives. First of all, compressed archives cannot be +modified, i.e., you cannot update ('--update', alias '-u') them or +delete ('--delete') members from them or add ('--append', alias '-r') +members to them. Likewise, you cannot append another 'tar' archive to a +compressed archive using '--concatenate' ('-A'). Secondly, multi-volume +archives cannot be compressed. + + The following options allow to select a particular compressor +program: + +'-z' +'--gzip' +'--ungzip' + Filter the archive through 'gzip'. + +'-J' +'--xz' + Filter the archive through 'xz'. + +'-j' +'--bzip2' + Filter the archive through 'bzip2'. + +'--lzip' + Filter the archive through 'lzip'. + +'--lzma' + Filter the archive through 'lzma'. + +'--lzop' + Filter the archive through 'lzop'. + +'-Z' +'--compress' +'--uncompress' + Filter the archive through 'compress'. + + When any of these options is given, GNU 'tar' searches the compressor +binary in the current path and invokes it. The name of the compressor +program is specified at compilation time using a corresponding +'--with-COMPNAME' option to 'configure', e.g. '--with-bzip2' to select +a specific 'bzip2' binary. *Note lbzip2::, for a detailed discussion. + + The output produced by 'tar --help' shows the actual compressor names +along with each of these options. + + You can use any of these options on physical devices (tape drives, +etc.) and remote files as well as on normal files; data to or from such +devices or remote files is reblocked by another copy of the 'tar' +program to enforce the specified (or default) record size. The default +compression parameters are used. You can override them by using the +'-I' option (see below), e.g.: + + $ tar -cf archive.tar.gz -I 'gzip -9 -n' subdir + +A more traditional way to do this is to use a pipe: + + $ tar cf - subdir | gzip -9 -n > archive.tar.gz + + Compressed archives are easily corrupted, because compressed files +have little redundancy. The adaptive nature of the compression scheme +means that the compression tables are implicitly spread all over the +archive. If you lose a few blocks, the dynamic construction of the +compression tables becomes unsynchronized, and there is little chance +that you could recover later in the archive. + + Other compression options provide better control over creating +compressed archives. These are: + +'--auto-compress' +'-a' + Select a compression program to use by the archive file name + suffix. The following suffixes are recognized: + + Suffix Compression program + ------------------------------------------------------------------- + '.gz' 'gzip' + '.tgz' 'gzip' + '.taz' 'gzip' + '.Z' 'compress' + '.taZ' 'compress' + '.bz2' 'bzip2' + '.tz2' 'bzip2' + '.tbz2' 'bzip2' + '.tbz' 'bzip2' + '.lz' 'lzip' + '.lzma' 'lzma' + '.tlz' 'lzma' + '.lzo' 'lzop' + '.xz' 'xz' + +'--use-compress-program=COMMAND' +'-I=COMMAND' + Use external compression program COMMAND. Use this option if you + want to specify options for the compression program, or if you are + not happy with the compression program associated with the suffix + at compile time, or if you have a compression program that GNU + 'tar' does not support. The COMMAND argument is a valid command + invocation, as you would type it at the command line prompt, with + any additional options as needed. Enclose it in quotes if it + contains white space (*note Running External Commands: external.). + + The COMMAND should follow two conventions: + + First, when invoked without additional options, it should read data + from standard input, compress it and output it on standard output. + + Secondly, if invoked with the additional '-d' option, it should do + exactly the opposite, i.e., read the compressed data from the + standard input and produce uncompressed data on the standard + output. + + The latter requirement means that you must not use the '-d' option + as a part of the COMMAND itself. + + The '--use-compress-program' option, in particular, lets you +implement your own filters, not necessarily dealing with +compression/decompression. For example, suppose you wish to implement +PGP encryption on top of compression, using 'gpg' (*note gpg: +(gpg)Top.). The following script does that: + + #! /bin/sh + case $1 in + -d) gpg --decrypt - | gzip -d -c;; + '') gzip -c | gpg -s;; + *) echo "Unknown option $1">&2; exit 1;; + esac + + Suppose you name it 'gpgz' and save it somewhere in your 'PATH'. +Then the following command will create a compressed archive signed with +your private key: + + $ tar -cf foo.tar.gpgz -Igpgz . + +Likewise, the command below will list its contents: + + $ tar -tf foo.tar.gpgz -Igpgz . + +* Menu: + +* lbzip2:: Using lbzip2 with GNU 'tar'. + + ---------- Footnotes ---------- + + (1) It also had patent problems in the past. + + (2) To verbosely trace the decompressor selection, use the +'--warning=decompress-program' option (*note decompress-program: +warnings.). + + +File: tar.info, Node: lbzip2, Up: gzip + +8.1.1.1 Using lbzip2 with GNU 'tar'. +.................................... + +'Lbzip2' is a multithreaded utility for handling 'bzip2' compression, +written by Laszlo Ersek. It makes use of multiple processors to speed +up its operation and in general works considerably faster than 'bzip2'. +For a detailed description of 'lbzip2' see +<http://freshmeat.net/projects/lbzip2> and lbzip2: parallel bzip2 +utility +(http://www.linuxinsight.com/lbzip2-parallel-bzip2-utility.html). + + Recent versions of 'lbzip2' are mostly command line compatible with +'bzip2', which makes it possible to automatically invoke it via the +'--bzip2' GNU 'tar' command line option. To do so, GNU 'tar' must be +configured with the '--with-bzip2' command line option, like this: + + $ ./configure --with-bzip2=lbzip2 [OTHER-OPTIONS] + + Once configured and compiled this way, 'tar --help' will show the +following: + + $ tar --help | grep -- --bzip2 + -j, --bzip2 filter the archive through lbzip2 + +which means that running 'tar --bzip2' will invoke 'lbzip2'. + + +File: tar.info, Node: sparse, Prev: gzip, Up: Compression + +8.1.2 Archiving Sparse Files +---------------------------- + +Files in the file system occasionally have "holes". A "hole" in a file +is a section of the file's contents which was never written. The +contents of a hole reads as all zeros. On many operating systems, +actual disk storage is not allocated for holes, but they are counted in +the length of the file. If you archive such a file, 'tar' could create +an archive longer than the original. To have 'tar' attempt to recognize +the holes in a file, use '--sparse' ('-S'). When you use this option, +then, for any file using less disk space than would be expected from its +length, 'tar' searches the file for holes. It then records in the +archive for the file where the holes (consecutive stretches of zeros) +are, and only archives the "real contents" of the file. On extraction +(using '--sparse' is not needed on extraction) any such files have also +holes created wherever the holes were found. Thus, if you use +'--sparse', 'tar' archives won't take more space than the original. + + GNU 'tar' uses two methods for detecting holes in sparse files. +These methods are described later in this subsection. + +'-S' +'--sparse' + This option instructs 'tar' to test each file for sparseness before + attempting to archive it. If the file is found to be sparse it is + treated specially, thus allowing to decrease the amount of space + used by its image in the archive. + + This option is meaningful only when creating or updating archives. + It has no effect on extraction. + + Consider using '--sparse' when performing file system backups, to +avoid archiving the expanded forms of files stored sparsely in the +system. + + Even if your system has no sparse files currently, some may be +created in the future. If you use '--sparse' while making file system +backups as a matter of course, you can be assured the archive will never +take more space on the media than the files take on disk (otherwise, +archiving a disk filled with sparse files might take hundreds of tapes). +*Note Incremental Dumps::. + + However, be aware that '--sparse' option may present a serious +drawback. Namely, in order to determine the positions of holes in a +file 'tar' may have to read it before trying to archive it, so in total +the file may be read *twice*. This may happen when your OS or your FS +does not support "SEEK_HOLE/SEEK_DATA" feature in "lseek" (See +'--hole-detection', below). + + When using 'POSIX' archive format, GNU 'tar' is able to store sparse +files using in three distinct ways, called "sparse formats". A sparse +format is identified by its "number", consisting, as usual of two +decimal numbers, delimited by a dot. By default, format '1.0' is used. +If, for some reason, you wish to use an earlier format, you can select +it using '--sparse-version' option. + +'--sparse-version=VERSION' + Select the format to store sparse files in. Valid VERSION values + are: '0.0', '0.1' and '1.0'. *Note Sparse Formats::, for a + detailed description of each format. + + Using '--sparse-format' option implies '--sparse'. + +'--hole-detection=METHOD' + Enforce concrete hole detection method. Before the real contents + of sparse file are stored, 'tar' needs to gather knowledge about + file sparseness. This is because it needs to have the file's map + of holes stored into tar header before it starts archiving the file + contents. Currently, two methods of hole detection are + implemented: + + * '--hole-detection=seek' Seeking the file for data and holes. + It uses enhancement of the 'lseek' system call ('SEEK_HOLE' + and 'SEEK_DATA') which is able to reuse file system knowledge + about sparse file contents - so the detection is usually very + fast. To use this feature, your file system and operating + system must support it. At the time of this writing (2015) + this feature, in spite of not being accepted by POSIX, is + fairly widely supported by different operating systems. + + * '--hole-detection=raw' Reading byte-by-byte the whole sparse + file before the archiving. This method detects holes like + consecutive stretches of zeroes. Comparing to the previous + method, it is usually much slower, although more portable. + + When no '--hole-detection' option is given, 'tar' uses the 'seek', if +supported by the operating system. + + Using '--hole-detection' option implies '--sparse'. + + +File: tar.info, Node: Attributes, Next: Portability, Prev: Compression, Up: Formats + +8.2 Handling File Attributes +============================ + +When 'tar' reads files, it updates their access times. To avoid this, +use the '--atime-preserve[=METHOD]' option, which can either reset the +access time retroactively or avoid changing it in the first place. + +'--atime-preserve' +'--atime-preserve=replace' +'--atime-preserve=system' + Preserve the access times of files that are read. This works only + for files that you own, unless you have superuser privileges. + + '--atime-preserve=replace' works on most systems, but it also + restores the data modification time and updates the status change + time. Hence it doesn't interact with incremental dumps nicely + (*note Incremental Dumps::), and it can set access or data + modification times incorrectly if other programs access the file + while 'tar' is running. + + '--atime-preserve=system' avoids changing the access time in the + first place, if the operating system supports this. Unfortunately, + this may or may not work on any given operating system or file + system. If 'tar' knows for sure it won't work, it complains right + away. + + Currently '--atime-preserve' with no operand defaults to + '--atime-preserve=replace', but this is intended to change to + '--atime-preserve=system' when the latter is better-supported. + +'-m' +'--touch' + Do not extract data modification time. + + When this option is used, 'tar' leaves the data modification times + of the files it extracts as the times when the files were + extracted, instead of setting it to the times recorded in the + archive. + + This option is meaningless with '--list' ('-t'). + +'--same-owner' + Create extracted files with the same ownership they have in the + archive. + + This is the default behavior for the superuser, so this option is + meaningful only for non-root users, when 'tar' is executed on those + systems able to give files away. This is considered as a security + flaw by many people, at least because it makes quite difficult to + correctly account users for the disk space they occupy. Also, the + 'suid' or 'sgid' attributes of files are easily and silently lost + when files are given away. + + When writing an archive, 'tar' writes the user ID and user name + separately. If it can't find a user name (because the user ID is + not in '/etc/passwd'), then it does not write one. When restoring, + it tries to look the name (if one was written) up in '/etc/passwd'. + If it fails, then it uses the user ID stored in the archive + instead. + +'--no-same-owner' +'-o' + Do not attempt to restore ownership when extracting. This is the + default behavior for ordinary users, so this option has an effect + only for the superuser. + +'--numeric-owner' + The '--numeric-owner' option allows (ANSI) archives to be written + without user/group name information or such information to be + ignored when extracting. It effectively disables the generation + and/or use of user/group name information. This option forces + extraction using the numeric ids from the archive, ignoring the + names. + + This is useful in certain circumstances, when restoring a backup + from an emergency floppy with different passwd/group files for + example. It is otherwise impossible to extract files with the + right ownerships if the password file in use during the extraction + does not match the one belonging to the file system(s) being + extracted. This occurs, for example, if you are restoring your + files after a major crash and had booted from an emergency floppy + with no password file or put your disk into another machine to do + the restore. + + The numeric ids are _always_ saved into 'tar' archives. The + identifying names are added at create time when provided by the + system, unless '--format=oldgnu' is used. Numeric ids could be + used when moving archives between a collection of machines using a + centralized management for attribution of numeric ids to users and + groups. This is often made through using the NIS capabilities. + + When making a 'tar' file for distribution to other sites, it is + sometimes cleaner to use a single owner for all files in the + distribution, and nicer to specify the write permission bits of the + files as stored in the archive independently of their actual value + on the file system. The way to prepare a clean distribution is + usually to have some Makefile rule creating a directory, copying + all needed files in that directory, then setting ownership and + permissions as wanted (there are a lot of possible schemes), and + only then making a 'tar' archive out of this directory, before + cleaning everything out. Of course, we could add a lot of options + to GNU 'tar' for fine tuning permissions and ownership. This is + not the good way, I think. GNU 'tar' is already crowded with + options and moreover, the approach just explained gives you a great + deal of control already. + +'-p' +'--same-permissions' +'--preserve-permissions' + Extract all protection information. + + This option causes 'tar' to set the modes (access permissions) of + extracted files exactly as recorded in the archive. If this option + is not used, the current 'umask' setting limits the permissions on + extracted files. This option is by default enabled when 'tar' is + executed by a superuser. + + This option is meaningless with '--list' ('-t'). + + +File: tar.info, Node: Portability, Next: cpio, Prev: Attributes, Up: Formats + +8.3 Making 'tar' Archives More Portable +======================================= + +Creating a 'tar' archive on a particular system that is meant to be +useful later on many other machines and with other versions of 'tar' is +more challenging than you might think. 'tar' archive formats have been +evolving since the first versions of Unix. Many such formats are +around, and are not always compatible with each other. This section +discusses a few problems, and gives some advice about making 'tar' +archives more portable. + + One golden rule is simplicity. For example, limit your 'tar' +archives to contain only regular files and directories, avoiding other +kind of special files. Do not attempt to save sparse files or +contiguous files as such. Let's discuss a few more problems, in turn. + +* Menu: + +* Portable Names:: Portable Names +* dereference:: Symbolic Links +* hard links:: Hard Links +* old:: Old V7 Archives +* ustar:: Ustar Archives +* gnu:: GNU and old GNU format archives. +* posix:: POSIX archives +* Checksumming:: Checksumming Problems +* Large or Negative Values:: Large files, negative time stamps, etc. +* Other Tars:: How to Extract GNU-Specific Data Using + Other 'tar' Implementations + + +File: tar.info, Node: Portable Names, Next: dereference, Up: Portability + +8.3.1 Portable Names +-------------------- + +Use portable file and member names. A name is portable if it contains +only ASCII letters and digits, '/', '.', '_', and '-'; it cannot be +empty, start with '-' or '//', or contain '/-'. Avoid deep directory +nesting. For portability to old Unix hosts, limit your file name +components to 14 characters or less. + + If you intend to have your 'tar' archives to be read under MSDOS, you +should not rely on case distinction for file names, and you might use +the GNU 'doschk' program for helping you further diagnosing illegal +MSDOS names, which are even more limited than System V's. + + +File: tar.info, Node: dereference, Next: hard links, Prev: Portable Names, Up: Portability + +8.3.2 Symbolic Links +-------------------- + +Normally, when 'tar' archives a symbolic link, it writes a block to the +archive naming the target of the link. In that way, the 'tar' archive +is a faithful record of the file system contents. When '--dereference' +('-h') is used with '--create' ('-c'), 'tar' archives the files symbolic +links point to, instead of the links themselves. + + When creating portable archives, use '--dereference' ('-h'): some +systems do not support symbolic links, and moreover, your distribution +might be unusable if it contains unresolved symbolic links. + + When reading from an archive, the '--dereference' ('-h') option +causes 'tar' to follow an already-existing symbolic link when 'tar' +writes or reads a file named in the archive. Ordinarily, 'tar' does not +follow such a link, though it may remove the link before writing a new +file. *Note Dealing with Old Files::. + + The '--dereference' option is unsafe if an untrusted user can modify +directories while 'tar' is running. *Note Security::. + + +File: tar.info, Node: hard links, Next: old, Prev: dereference, Up: Portability + +8.3.3 Hard Links +---------------- + +Normally, when 'tar' archives a hard link, it writes a block to the +archive naming the target of the link (a '1' type block). In that way, +the actual file contents is stored in file only once. For example, +consider the following two files: + + $ ls -l + -rw-r--r-- 2 gray staff 4 2007-10-30 15:11 one + -rw-r--r-- 2 gray staff 4 2007-10-30 15:11 jeden + + Here, 'jeden' is a link to 'one'. When archiving this directory with +a verbose level 2, you will get an output similar to the following: + + $ tar cvvf ../archive.tar . + drwxr-xr-x gray/staff 0 2007-10-30 15:13 ./ + -rw-r--r-- gray/staff 4 2007-10-30 15:11 ./jeden + hrw-r--r-- gray/staff 0 2007-10-30 15:11 ./one link to ./jeden + + The last line shows that, instead of storing two copies of the file, +'tar' stored it only once, under the name 'jeden', and stored file 'one' +as a hard link to this file. + + It may be important to know that all hard links to the given file are +stored in the archive. For example, this may be necessary for exact +reproduction of the file system. The following option does that: + +'--check-links' +'-l' + Check the number of links dumped for each processed file. If this + number does not match the total number of hard links for the file, + print a warning message. + + For example, trying to archive only file 'jeden' with this option +produces the following diagnostics: + + $ tar -c -f ../archive.tar -l jeden + tar: Missing links to 'jeden'. + + Although creating special records for hard links helps keep a +faithful record of the file system contents and makes archives more +compact, it may present some difficulties when extracting individual +members from the archive. For example, trying to extract file 'one' +from the archive created in previous examples produces, in the absence +of file 'jeden': + + $ tar xf archive.tar ./one + tar: ./one: Cannot hard link to './jeden': No such file or directory + tar: Error exit delayed from previous errors + + The reason for this behavior is that 'tar' cannot seek back in the +archive to the previous member (in this case, 'one'), to extract it(1). +If you wish to avoid such problems at the cost of a bigger archive, use +the following option: + +'--hard-dereference' + Dereference hard links and store the files they refer to. + + For example, trying this option on our two sample files, we get two +copies in the archive, each of which can then be extracted independently +of the other: + + $ tar -c -vv -f ../archive.tar --hard-dereference . + drwxr-xr-x gray/staff 0 2007-10-30 15:13 ./ + -rw-r--r-- gray/staff 4 2007-10-30 15:11 ./jeden + -rw-r--r-- gray/staff 4 2007-10-30 15:11 ./one + + ---------- Footnotes ---------- + + (1) There are plans to fix this in future releases. + + +File: tar.info, Node: old, Next: ustar, Prev: hard links, Up: Portability + +8.3.4 Old V7 Archives +--------------------- + +Certain old versions of 'tar' cannot handle additional information +recorded by newer 'tar' programs. To create an archive in V7 format +(not ANSI), which can be read by these old versions, specify the +'--format=v7' option in conjunction with the '--create' ('-c') ('tar' +also accepts '--portability' or '--old-archive' for this option). When +you specify it, 'tar' leaves out information about directories, pipes, +fifos, contiguous files, and device files, and specifies file ownership +by group and user IDs instead of group and user names. + + When updating an archive, do not use '--format=v7' unless the archive +was created using this option. + + In most cases, a _new_ format archive can be read by an _old_ 'tar' +program without serious trouble, so this option should seldom be needed. +On the other hand, most modern 'tar's are able to read old format +archives, so it might be safer for you to always use '--format=v7' for +your distributions. Notice, however, that 'ustar' format is a better +alternative, as it is free from many of 'v7''s drawbacks. + + +File: tar.info, Node: ustar, Next: gnu, Prev: old, Up: Portability + +8.3.5 Ustar Archive Format +-------------------------- + +The archive format defined by the POSIX.1-1988 specification is called +'ustar'. Although it is more flexible than the V7 format, it still has +many restrictions (*note ustar: Formats, for the detailed description of +'ustar' format). Along with V7 format, 'ustar' format is a good choice +for archives intended to be read with other implementations of 'tar'. + + To create an archive in 'ustar' format, use the '--format=ustar' +option in conjunction with '--create' ('-c'). + + +File: tar.info, Node: gnu, Next: posix, Prev: ustar, Up: Portability + +8.3.6 GNU and old GNU 'tar' format +---------------------------------- + +GNU 'tar' was based on an early draft of the POSIX 1003.1 'ustar' +standard. GNU extensions to 'tar', such as the support for file names +longer than 100 characters, use portions of the 'tar' header record +which were specified in that POSIX draft as unused. Subsequent changes +in POSIX have allocated the same parts of the header record for other +purposes. As a result, GNU 'tar' format is incompatible with the +current POSIX specification, and with 'tar' programs that follow it. + + In the majority of cases, 'tar' will be configured to create this +format by default. This will change in future releases, since we plan +to make 'POSIX' format the default. + + To force creation a GNU 'tar' archive, use option '--format=gnu'. + + +File: tar.info, Node: posix, Next: Checksumming, Prev: gnu, Up: Portability + +8.3.7 GNU 'tar' and POSIX 'tar' +------------------------------- + +Starting from version 1.14 GNU 'tar' features full support for +POSIX.1-2001 archives. + + A POSIX conformant archive will be created if 'tar' was given +'--format=posix' ('--format=pax') option. No special option is required +to read and extract from a POSIX archive. + +* Menu: + +* PAX keywords:: Controlling Extended Header Keywords. + + +File: tar.info, Node: PAX keywords, Up: posix + +8.3.7.1 Controlling Extended Header Keywords +............................................ + +'--pax-option=KEYWORD-LIST' + Handle keywords in PAX extended headers. This option is equivalent + to '-o' option of the 'pax' utility. + + KEYWORD-LIST is a comma-separated list of keyword options, each +keyword option taking one of the following forms: + +'delete=PATTERN' + When used with one of archive-creation commands, this option + instructs 'tar' to omit from extended header records that it + produces any keywords matching the string PATTERN. + + When used in extract or list mode, this option instructs tar to + ignore any keywords matching the given PATTERN in the extended + header records. In both cases, matching is performed using the + pattern matching notation described in POSIX 1003.2, 3.13 (*note + wildcards::). For example: + + --pax-option delete=security.* + + would suppress security-related information. + +'exthdr.name=STRING' + + This keyword allows user control over the name that is written into + the ustar header blocks for the extended headers. The name is + obtained from STRING after making the following substitutions: + + Meta-character Replaced By + ------------------------------------------------------------ + %d The directory name of the file, + equivalent to the result of the + 'dirname' utility on the translated + file name. + %f The name of the file with the + directory information stripped, + equivalent to the result of the + 'basename' utility on the translated + file name. + %p The process ID of the 'tar' process. + %% A '%' character. + + Any other '%' characters in STRING produce undefined results. + + If no option 'exthdr.name=string' is specified, 'tar' will use the + following default value: + + %d/PaxHeaders.%p/%f + +'exthdr.mtime=VALUE' + + This keyword defines the value of the 'mtime' field that is written + into the ustar header blocks for the extended headers. By default, + the 'mtime' field is set to the modification time of the archive + member described by that extended header (or to the value of the + '--mtime' option, if supplied). + +'globexthdr.name=STRING' + This keyword allows user control over the name that is written into + the ustar header blocks for global extended header records. The + name is obtained from the contents of STRING, after making the + following substitutions: + + Meta-character Replaced By + ------------------------------------------------------------ + %n An integer that represents the + sequence number of the global extended + header record in the archive, starting + at 1. + %p The process ID of the 'tar' process. + %% A '%' character. + + Any other '%' characters in STRING produce undefined results. + + If no option 'globexthdr.name=string' is specified, 'tar' will use + the following default value: + + $TMPDIR/GlobalHead.%p.%n + + where '$TMPDIR' represents the value of the TMPDIR environment + variable. If TMPDIR is not set, 'tar' uses '/tmp'. + +'globexthdr.mtime=VALUE' + + This keyword defines the value of the 'mtime' field that is written + into the ustar header blocks for the global extended headers. By + default, the 'mtime' field is set to the time when 'tar' was + invoked. + +'KEYWORD=VALUE' + When used with one of archive-creation commands, these + keyword/value pairs will be included at the beginning of the + archive in a global extended header record. When used with one of + archive-reading commands, 'tar' will behave as if it has + encountered these keyword/value pairs at the beginning of the + archive in a global extended header record. + +'KEYWORD:=VALUE' + When used with one of archive-creation commands, these + keyword/value pairs will be included as records at the beginning of + an extended header for each file. This is effectively equivalent + to KEYWORD=VALUE form except that it creates no global extended + header records. + + When used with one of archive-reading commands, 'tar' will behave + as if these keyword/value pairs were included as records at the end + of each extended header; thus, they will override any global or + file-specific extended header record keywords of the same names. + For example, in the command: + + tar --format=posix --create \ + --file archive --pax-option gname:=user . + + the group name will be forced to a new value for all files stored + in the archive. + + In any of the forms described above, the VALUE may be a string +enclosed in curly braces. In that case, the string between the braces +is understood either as a textual time representation, as described in +*note Date input formats::, or a name of the existing file, starting +with '/' or '.'. In the latter case, the modification time of that file +is used. + + For example, to set all modification times to the current date, you +use the following option: + + --pax-option='mtime:={now}' + + Note quoting of the option's argument. + + As another example, here is the option that ensures that any two +archives created using it, will be binary equivalent if they have the +same contents: + + --pax-option=exthdr.name=%d/PaxHeaders/%f,atime:=0 + +If you extract files from such an archive and recreate the archive from +them, you will also need to eliminate changes due to ctime, as shown in +examples below: + + --pax-option=exthdr.name=%d/PaxHeaders/%f,atime:=0,ctime:=0 + +or + + --pax-option=exthdr.name=%d/PaxHeaders/%f,atime:=0,delete=ctime + + +File: tar.info, Node: Checksumming, Next: Large or Negative Values, Prev: posix, Up: Portability + +8.3.8 Checksumming Problems +--------------------------- + +SunOS and HP-UX 'tar' fail to accept archives created using GNU 'tar' +and containing non-ASCII file names, that is, file names having +characters with the eighth bit set, because they use signed checksums, +while GNU 'tar' uses unsigned checksums while creating archives, as per +POSIX standards. On reading, GNU 'tar' computes both checksums and +accepts either of them. It is somewhat worrying that a lot of people +may go around doing backup of their files using faulty (or at least +non-standard) software, not learning about it until it's time to restore +their missing files with an incompatible file extractor, or vice versa. + + GNU 'tar' computes checksums both ways, and accepts either of them on +read, so GNU tar can read Sun tapes even with their wrong checksums. +GNU 'tar' produces the standard checksum, however, raising +incompatibilities with Sun. That is to say, GNU 'tar' has not been +modified to _produce_ incorrect archives to be read by buggy 'tar''s. +I've been told that more recent Sun 'tar' now read standard archives, so +maybe Sun did a similar patch, after all? + + The story seems to be that when Sun first imported 'tar' sources on +their system, they recompiled it without realizing that the checksums +were computed differently, because of a change in the default signing of +'char''s in their compiler. So they started computing checksums +wrongly. When they later realized their mistake, they merely decided to +stay compatible with it, and with themselves afterwards. Presumably, +but I do not really know, HP-UX has chosen their 'tar' archives to be +compatible with Sun's. The current standards do not favor Sun 'tar' +format. In any case, it now falls on the shoulders of SunOS and HP-UX +users to get a 'tar' able to read the good archives they receive. + + +File: tar.info, Node: Large or Negative Values, Next: Other Tars, Prev: Checksumming, Up: Portability + +8.3.9 Large or Negative Values +------------------------------ + + _(This message will disappear, once this node revised.)_ + + The above sections suggest to use 'oldest possible' archive format if +in doubt. However, sometimes it is not possible. If you attempt to +archive a file whose metadata cannot be represented using required +format, GNU 'tar' will print error message and ignore such a file. You +will than have to switch to a format that is able to handle such values. +The format summary table (*note Formats::) will help you to do so. + + In particular, when trying to archive files larger than 8GB or with +timestamps not in the range 1970-01-01 00:00:00 through 2242-03-16 +12:56:31 UTC, you will have to chose between GNU and POSIX archive +formats. When considering which format to choose, bear in mind that the +GNU format uses two's-complement base-256 notation to store values that +do not fit into standard ustar range. Such archives can generally be +read only by a GNU 'tar' implementation. Moreover, they sometimes +cannot be correctly restored on another hosts even by GNU 'tar'. For +example, using two's complement representation for negative time stamps +that assumes a signed 32-bit 'time_t' generates archives that are not +portable to hosts with differing 'time_t' representations. + + On the other hand, POSIX archives, generally speaking, can be +extracted by any tar implementation that understands older ustar format. +The only exception are files larger than 8GB. + + +File: tar.info, Node: Other Tars, Prev: Large or Negative Values, Up: Portability + +8.3.10 How to Extract GNU-Specific Data Using Other 'tar' Implementations +------------------------------------------------------------------------- + +In previous sections you became acquainted with various quirks necessary +to make your archives portable. Sometimes you may need to extract +archives containing GNU-specific members using some third-party 'tar' +implementation or an older version of GNU 'tar'. Of course your best +bet is to have GNU 'tar' installed, but if it is for some reason +impossible, this section will explain how to cope without it. + + When we speak about "GNU-specific" members we mean two classes of +them: members split between the volumes of a multi-volume archive and +sparse members. You will be able to always recover such members if the +archive is in PAX format. In addition split members can be recovered +from archives in old GNU format. The following subsections describe the +required procedures in detail. + +* Menu: + +* Split Recovery:: Members Split Between Volumes +* Sparse Recovery:: Sparse Members + + +File: tar.info, Node: Split Recovery, Next: Sparse Recovery, Up: Other Tars + +8.3.10.1 Extracting Members Split Between Volumes +................................................. + +If a member is split between several volumes of an old GNU format +archive most third party 'tar' implementation will fail to extract it. +To extract it, use 'tarcat' program (*note Tarcat::). This program is +available from GNU 'tar' home page +(http://www.gnu.org/software/tar/utils/tarcat.html). It concatenates +several archive volumes into a single valid archive. For example, if +you have three volumes named from 'vol-1.tar' to 'vol-3.tar', you can do +the following to extract them using a third-party 'tar': + + $ tarcat vol-1.tar vol-2.tar vol-3.tar | tar xf - + + You could use this approach for most (although not all) PAX format +archives as well. However, extracting split members from a PAX archive +is a much easier task, because PAX volumes are constructed in such a way +that each part of a split member is extracted to a different file by +'tar' implementations that are not aware of GNU extensions. More +specifically, the very first part retains its original name, and all +subsequent parts are named using the pattern: + + %d/GNUFileParts.%p/%f.%n + +where symbols preceded by '%' are "macro characters" that have the +following meaning: + +Meta-character Replaced By +------------------------------------------------------------ +%d The directory name of the file, + equivalent to the result of the + 'dirname' utility on its full name. +%f The file name of the file, equivalent + to the result of the 'basename' + utility on its full name. +%p The process ID of the 'tar' process + that created the archive. +%n Ordinal number of this particular + part. + + For example, if the file 'var/longfile' was split during archive +creation between three volumes, and the creator 'tar' process had +process ID '27962', then the member names will be: + + var/longfile + var/GNUFileParts.27962/longfile.1 + var/GNUFileParts.27962/longfile.2 + + When you extract your archive using a third-party 'tar', these files +will be created on your disk, and the only thing you will need to do to +restore your file in its original form is concatenate them in the proper +order, for example: + + $ cd var + $ cat GNUFileParts.27962/longfile.1 \ + GNUFileParts.27962/longfile.2 >> longfile + $ rm -f GNUFileParts.27962 + + Notice, that if the 'tar' implementation you use supports PAX format +archives, it will probably emit warnings about unknown keywords during +extraction. They will look like this: + + Tar file too small + Unknown extended header keyword 'GNU.volume.filename' ignored. + Unknown extended header keyword 'GNU.volume.size' ignored. + Unknown extended header keyword 'GNU.volume.offset' ignored. + +You can safely ignore these warnings. + + If your 'tar' implementation is not PAX-aware, you will get more +warnings and more files generated on your disk, e.g.: + + $ tar xf vol-1.tar + var/PaxHeaders.27962/longfile: Unknown file type 'x', extracted as + normal file + Unexpected EOF in archive + $ tar xf vol-2.tar + tmp/GlobalHead.27962.1: Unknown file type 'g', extracted as normal file + GNUFileParts.27962/PaxHeaders.27962/sparsefile.1: Unknown file type + 'x', extracted as normal file + + Ignore these warnings. The 'PaxHeaders.*' directories created will +contain files with "extended header keywords" describing the extracted +files. You can delete them, unless they describe sparse members. Read +further to learn more about them. + + +File: tar.info, Node: Sparse Recovery, Prev: Split Recovery, Up: Other Tars + +8.3.10.2 Extracting Sparse Members +.................................. + +Any 'tar' implementation will be able to extract sparse members from a +PAX archive. However, the extracted files will be "condensed", i.e., +any zero blocks will be removed from them. When we restore such a +condensed file to its original form, by adding zero blocks (or "holes") +back to their original locations, we call this process "expanding" a +compressed sparse file. + + To expand a file, you will need a simple auxiliary program called +'xsparse'. It is available in source form from GNU 'tar' home page +(http://www.gnu.org/software/tar/utils/xsparse.html). + + Let's begin with archive members in "sparse format version 1.0"(1), +which are the easiest to expand. The condensed file will contain both +file map and file data, so no additional data will be needed to restore +it. If the original file name was 'DIR/NAME', then the condensed file +will be named 'DIR/GNUSparseFile.N/NAME', where N is a decimal +number(2). + + To expand a version 1.0 file, run 'xsparse' as follows: + + $ xsparse cond-file + +where 'cond-file' is the name of the condensed file. The utility will +deduce the name for the resulting expanded file using the following +algorithm: + + 1. If 'cond-file' does not contain any directories, '../cond-file' + will be used; + + 2. If 'cond-file' has the form 'DIR/T/NAME', where both T and NAME are + simple names, with no '/' characters in them, the output file name + will be 'DIR/NAME'. + + 3. Otherwise, if 'cond-file' has the form 'DIR/NAME', the output file + name will be 'NAME'. + + In the unlikely case when this algorithm does not suit your needs, +you can explicitly specify output file name as a second argument to the +command: + + $ xsparse cond-file out-file + + It is often a good idea to run 'xsparse' in "dry run" mode first. In +this mode, the command does not actually expand the file, but verbosely +lists all actions it would be taking to do so. The dry run mode is +enabled by '-n' command line argument: + + $ xsparse -n /home/gray/GNUSparseFile.6058/sparsefile + Reading v.1.0 sparse map + Expanding file '/home/gray/GNUSparseFile.6058/sparsefile' to + '/home/gray/sparsefile' + Finished dry run + + To actually expand the file, you would run: + + $ xsparse /home/gray/GNUSparseFile.6058/sparsefile + +The program behaves the same way all UNIX utilities do: it will keep +quiet unless it has something important to tell you (e.g. an error +condition or something). If you wish it to produce verbose output, +similar to that from the dry run mode, use '-v' option: + + $ xsparse -v /home/gray/GNUSparseFile.6058/sparsefile + Reading v.1.0 sparse map + Expanding file '/home/gray/GNUSparseFile.6058/sparsefile' to + '/home/gray/sparsefile' + Done + + Additionally, if your 'tar' implementation has extracted the +"extended headers" for this file, you can instruct 'xstar' to use them +in order to verify the integrity of the expanded file. The option '-x' +sets the name of the extended header file to use. Continuing our +example: + + $ xsparse -v -x /home/gray/PaxHeaders.6058/sparsefile \ + /home/gray/GNUSparseFile.6058/sparsefile + Reading extended header file + Found variable GNU.sparse.major = 1 + Found variable GNU.sparse.minor = 0 + Found variable GNU.sparse.name = sparsefile + Found variable GNU.sparse.realsize = 217481216 + Reading v.1.0 sparse map + Expanding file '/home/gray/GNUSparseFile.6058/sparsefile' to + '/home/gray/sparsefile' + Done + + An "extended header" is a special 'tar' archive header that precedes +an archive member and contains a set of "variables", describing the +member properties that cannot be stored in the standard 'ustar' header. +While optional for expanding sparse version 1.0 members, the use of +extended headers is mandatory when expanding sparse members in older +sparse formats: v.0.0 and v.0.1 (The sparse formats are described in +detail in *note Sparse Formats::.) So, for these formats, the question +is: how to obtain extended headers from the archive? + + If you use a 'tar' implementation that does not support PAX format, +extended headers for each member will be extracted as a separate file. +If we represent the member name as 'DIR/NAME', then the extended header +file will be named 'DIR/PaxHeaders.N/NAME', where N is an integer +number. + + Things become more difficult if your 'tar' implementation does +support PAX headers, because in this case you will have to manually +extract the headers. We recommend the following algorithm: + + 1. Consult the documentation of your 'tar' implementation for an + option that prints "block numbers" along with the archive listing + (analogous to GNU 'tar''s '-R' option). For example, 'star' has + '-block-number'. + + 2. Obtain verbose listing using the 'block number' option, and find + block numbers of the sparse member in question and the member + immediately following it. For example, running 'star' on our + archive we obtain: + + $ star -t -v -block-number -f arc.tar + ... + star: Unknown extended header keyword 'GNU.sparse.size' ignored. + star: Unknown extended header keyword 'GNU.sparse.numblocks' ignored. + star: Unknown extended header keyword 'GNU.sparse.name' ignored. + star: Unknown extended header keyword 'GNU.sparse.map' ignored. + block 56: 425984 -rw-r--r-- gray/users Jun 25 14:46 2006 GNUSparseFile.28124/sparsefile + block 897: 65391 -rw-r--r-- gray/users Jun 24 20:06 2006 README + ... + + (as usual, ignore the warnings about unknown keywords.) + + 3. Let SIZE be the size of the sparse member, BS be its block number + and BN be the block number of the next member. Compute: + + N = BS - BN - SIZE/512 - 2 + + This number gives the size of the extended header part in tar + "blocks". In our example, this formula gives: '897 - 56 - 425984 / + 512 - 2 = 7'. + + 4. Use 'dd' to extract the headers: + + dd if=ARCHIVE of=HNAME bs=512 skip=BS count=N + + where ARCHIVE is the archive name, HNAME is a name of the file to + store the extended header in, BS and N are computed in previous + steps. + + In our example, this command will be + + $ dd if=arc.tar of=xhdr bs=512 skip=56 count=7 + + Finally, you can expand the condensed file, using the obtained +header: + + $ xsparse -v -x xhdr GNUSparseFile.6058/sparsefile + Reading extended header file + Found variable GNU.sparse.size = 217481216 + Found variable GNU.sparse.numblocks = 208 + Found variable GNU.sparse.name = sparsefile + Found variable GNU.sparse.map = 0,2048,1050624,2048,... + Expanding file 'GNUSparseFile.28124/sparsefile' to 'sparsefile' + Done + + ---------- Footnotes ---------- + + (1) *Note PAX 1::. + + (2) Technically speaking, N is a "process ID" of the 'tar' process +which created the archive (*note PAX keywords::). + + +File: tar.info, Node: cpio, Prev: Portability, Up: Formats + +8.4 Comparison of 'tar' and 'cpio' +================================== + + _(This message will disappear, once this node revised.)_ + + The 'cpio' archive formats, like 'tar', do have maximum file name +lengths. The binary and old ASCII formats have a maximum file length of +256, and the new ASCII and CRC ASCII formats have a max file length of +1024. GNU 'cpio' can read and write archives with arbitrary file name +lengths, but other 'cpio' implementations may crash unexplainedly trying +to read them. + + 'tar' handles symbolic links in the form in which it comes in BSD; +'cpio' doesn't handle symbolic links in the form in which it comes in +System V prior to SVR4, and some vendors may have added symlinks to +their system without enhancing 'cpio' to know about them. Others may +have enhanced it in a way other than the way I did it at Sun, and which +was adopted by AT&T (and which is, I think, also present in the 'cpio' +that Berkeley picked up from AT&T and put into a later BSD release--I +think I gave them my changes). + + (SVR4 does some funny stuff with 'tar'; basically, its 'cpio' can +handle 'tar' format input, and write it on output, and it probably +handles symbolic links. They may not have bothered doing anything to +enhance 'tar' as a result.) + + 'cpio' handles special files; traditional 'tar' doesn't. + + 'tar' comes with V7, System III, System V, and BSD source; 'cpio' +comes only with System III, System V, and later BSD (4.3-tahoe and +later). + + 'tar''s way of handling multiple hard links to a file can handle file +systems that support 32-bit i-numbers (e.g., the BSD file system); +'cpio's way requires you to play some games (in its "binary" format, +i-numbers are only 16 bits, and in its "portable ASCII" format, they're +18 bits--it would have to play games with the "file system ID" field of +the header to make sure that the file system ID/i-number pairs of +different files were always different), and I don't know which 'cpio's, +if any, play those games. Those that don't might get confused and think +two files are the same file when they're not, and make hard links +between them. + + 'tar's way of handling multiple hard links to a file places only one +copy of the link on the tape, but the name attached to that copy is the +_only_ one you can use to retrieve the file; 'cpio's way puts one copy +for every link, but you can retrieve it using any of the names. + + What type of check sum (if any) is used, and how is this + calculated. + + See the attached manual pages for 'tar' and 'cpio' format. 'tar' +uses a checksum which is the sum of all the bytes in the 'tar' header +for a file; 'cpio' uses no checksum. + + If anyone knows why 'cpio' was made when 'tar' was present at the + unix scene, + + It wasn't. 'cpio' first showed up in PWB/UNIX 1.0; no +generally-available version of UNIX had 'tar' at the time. I don't know +whether any version that was generally available _within AT&T_ had +'tar', or, if so, whether the people within AT&T who did 'cpio' knew +about it. + + On restore, if there is a corruption on a tape 'tar' will stop at +that point, while 'cpio' will skip over it and try to restore the rest +of the files. + + The main difference is just in the command syntax and header format. + + 'tar' is a little more tape-oriented in that everything is blocked to +start on a record boundary. + + Is there any differences between the ability to recover crashed + archives between the two of them. (Is there any chance of + recovering crashed archives at all.) + + Theoretically it should be easier under 'tar' since the blocking lets +you find a header with some variation of 'dd skip=NN'. However, modern +'cpio''s and variations have an option to just search for the next file +header after an error with a reasonable chance of resyncing. However, +lots of tape driver software won't allow you to continue past a media +error which should be the only reason for getting out of sync unless a +file changed sizes while you were writing the archive. + + If anyone knows why 'cpio' was made when 'tar' was present at the + unix scene, please tell me about this too. + + Probably because it is more media efficient (by not blocking +everything and using only the space needed for the headers where 'tar' +always uses 512 bytes per file header) and it knows how to archive +special files. + + You might want to look at the freely available alternatives. The +major ones are 'afio', GNU 'tar', and 'pax', each of which have their +own extensions with some backwards compatibility. + + Sparse files were 'tar'red as sparse files (which you can easily +test, because the resulting archive gets smaller, and GNU 'cpio' can no +longer read it). + + +File: tar.info, Node: Media, Next: Reliability and security, Prev: Formats, Up: Top + +9 Tapes and Other Archive Media +******************************* + + _(This message will disappear, once this node revised.)_ + + A few special cases about tape handling warrant more detailed +description. These special cases are discussed below. + + Many complexities surround the use of 'tar' on tape drives. Since +the creation and manipulation of archives located on magnetic tape was +the original purpose of 'tar', it contains many features making such +manipulation easier. + + Archives are usually written on dismountable media--tape cartridges, +mag tapes, or floppy disks. + + The amount of data a tape or disk holds depends not only on its size, +but also on how it is formatted. A 2400 foot long reel of mag tape +holds 40 megabytes of data when formatted at 1600 bits per inch. The +physically smaller EXABYTE tape cartridge holds 2.3 gigabytes. + + Magnetic media are re-usable--once the archive on a tape is no longer +needed, the archive can be erased and the tape or disk used over. Media +quality does deteriorate with use, however. Most tapes or disks should +be discarded when they begin to produce data errors. EXABYTE tape +cartridges should be discarded when they generate an "error count" +(number of non-usable bits) of more than 10k. + + Magnetic media are written and erased using magnetic fields, and +should be protected from such fields to avoid damage to stored data. +Sticking a floppy disk to a filing cabinet using a magnet is probably +not a good idea. + +* Menu: + +* Device:: Device selection and switching +* Remote Tape Server:: +* Common Problems and Solutions:: +* Blocking:: Blocking +* Many:: Many archives on one tape +* Using Multiple Tapes:: Using Multiple Tapes +* label:: Including a Label in the Archive +* verify:: +* Write Protection:: + + +File: tar.info, Node: Device, Next: Remote Tape Server, Up: Media + +9.1 Device Selection and Switching +================================== + + _(This message will disappear, once this node revised.)_ + +'-f [HOSTNAME:]FILE' +'--file=[HOSTNAME:]FILE' + Use archive file or device FILE on HOSTNAME. + + This option is used to specify the file name of the archive 'tar' +works on. + + If the file name is '-', 'tar' reads the archive from standard input +(when listing or extracting), or writes it to standard output (when +creating). If the '-' file name is given when updating an archive, +'tar' will read the original archive from its standard input, and will +write the entire new archive to its standard output. + + If the file name contains a ':', it is interpreted as 'hostname:file +name'. If the HOSTNAME contains an "at" sign ('@'), it is treated as +'user@hostname:file name'. In either case, 'tar' will invoke the +command 'rsh' (or 'remsh') to start up an '/usr/libexec/rmt' on the +remote machine. If you give an alternate login name, it will be given +to the 'rsh'. Naturally, the remote machine must have an executable +'/usr/libexec/rmt'. This program is free software from the University +of California, and a copy of the source code can be found with the +sources for 'tar'; it's compiled and installed by default. The exact +path to this utility is determined when configuring the package. It is +'PREFIX/libexec/rmt', where PREFIX stands for your installation prefix. +This location may also be overridden at runtime by using the +'--rmt-command=COMMAND' option (*Note --rmt-command: Option Summary, for +detailed description of this option. *Note Remote Tape Server::, for +the description of 'rmt' command). + + If this option is not given, but the environment variable 'TAPE' is +set, its value is used; otherwise, old versions of 'tar' used a default +archive name (which was picked when 'tar' was compiled). The default is +normally set up to be the "first" tape drive or other transportable I/O +medium on the system. + + Starting with version 1.11.5, GNU 'tar' uses standard input and +standard output as the default device, and I will not try anymore +supporting automatic device detection at installation time. This was +failing really in too many cases, it was hopeless. This is now +completely left to the installer to override standard input and standard +output for default device, if this seems preferable. Further, I think +_most_ actual usages of 'tar' are done with pipes or disks, not really +tapes, cartridges or diskettes. + + Some users think that using standard input and output is running +after trouble. This could lead to a nasty surprise on your screen if +you forget to specify an output file name--especially if you are going +through a network or terminal server capable of buffering large amounts +of output. We had so many bug reports in that area of configuring +default tapes automatically, and so many contradicting requests, that we +finally consider the problem to be portably intractable. We could of +course use something like '/dev/tape' as a default, but this is _also_ +running after various kind of trouble, going from hung processes to +accidental destruction of real tapes. After having seen all this mess, +using standard input and output as a default really sounds like the only +clean choice left, and a very useful one too. + + GNU 'tar' reads and writes archive in records, I suspect this is the +main reason why block devices are preferred over character devices. +Most probably, block devices are more efficient too. The installer +could also check for 'DEFTAPE' in '<sys/mtio.h>'. + +'--force-local' + Archive file is local even if it contains a colon. + +'--rsh-command=COMMAND' + Use remote COMMAND instead of 'rsh'. This option exists so that + people who use something other than the standard 'rsh' (e.g., a + Kerberized 'rsh') can access a remote device. + + When this command is not used, the shell command found when the + 'tar' program was installed is used instead. This is the first + found of '/usr/ucb/rsh', '/usr/bin/remsh', '/usr/bin/rsh', + '/usr/bsd/rsh' or '/usr/bin/nsh'. The installer may have + overridden this by defining the environment variable 'RSH' _at + installation time_. + +'-[0-7][lmh]' + Specify drive and density. + +'-M' +'--multi-volume' + Create/list/extract multi-volume archive. + + This option causes 'tar' to write a "multi-volume" archive--one + that may be larger than will fit on the medium used to hold it. + *Note Multi-Volume Archives::. + +'-L NUM' +'--tape-length=SIZE[SUF]' + Change tape after writing SIZE units of data. Unless SUF is given, + SIZE is treated as kilobytes, i.e. 'SIZE x 1024' bytes. The + following suffixes alter this behavior: + + Suffix Units Byte Equivalent + ------------------------------------------------------------- + b Blocks SIZE x 512 + B Kilobytes SIZE x 1024 + c Bytes SIZE + G Gigabytes SIZE x 1024^3 + K Kilobytes SIZE x 1024 + k Kilobytes SIZE x 1024 + M Megabytes SIZE x 1024^2 + P Petabytes SIZE x 1024^5 + T Terabytes SIZE x 1024^4 + w Words SIZE x 2 + + Table 9.1: Size Suffixes + + This option might be useful when your tape drivers do not properly + detect end of physical tapes. By being slightly conservative on + the maximum tape length, you might avoid the problem entirely. + +'-F COMMAND' +'--info-script=COMMAND' +'--new-volume-script=COMMAND' + Execute COMMAND at end of each tape. This implies '--multi-volume' + ('-M'). *Note info-script::, for a detailed description of this + option. + + +File: tar.info, Node: Remote Tape Server, Next: Common Problems and Solutions, Prev: Device, Up: Media + +9.2 Remote Tape Server +====================== + +In order to access the tape drive on a remote machine, 'tar' uses the +remote tape server written at the University of California at Berkeley. +The remote tape server must be installed as 'PREFIX/libexec/rmt' on any +machine whose tape drive you want to use. 'tar' calls 'rmt' by running +an 'rsh' or 'remsh' to the remote machine, optionally using a different +login name if one is supplied. + + A copy of the source for the remote tape server is provided. Its +source code can be freely distributed. It is compiled and installed by +default. + + Unless you use the '--absolute-names' ('-P') option, GNU 'tar' will +not allow you to create an archive that contains absolute file names (a +file name beginning with '/'). If you try, 'tar' will automatically +remove the leading '/' from the file names it stores in the archive. It +will also type a warning message telling you what it is doing. + + When reading an archive that was created with a different 'tar' +program, GNU 'tar' automatically extracts entries in the archive which +have absolute file names as if the file names were not absolute. This +is an important feature. A visitor here once gave a 'tar' tape to an +operator to restore; the operator used Sun 'tar' instead of GNU 'tar', +and the result was that it replaced large portions of our '/bin' and +friends with versions from the tape; needless to say, we were unhappy +about having to recover the file system from backup tapes. + + For example, if the archive contained a file '/usr/bin/computoy', GNU +'tar' would extract the file to 'usr/bin/computoy', relative to the +current directory. If you want to extract the files in an archive to +the same absolute names that they had when the archive was created, you +should do a 'cd /' before extracting the files from the archive, or you +should either use the '--absolute-names' option, or use the command 'tar +-C / ...'. + + Some versions of Unix (Ultrix 3.1 is known to have this problem), can +claim that a short write near the end of a tape succeeded, when it +actually failed. This will result in the -M option not working +correctly. The best workaround at the moment is to use a significantly +larger blocking factor than the default 20. + + In order to update an archive, 'tar' must be able to backspace the +archive in order to reread or rewrite a record that was just read (or +written). This is currently possible only on two kinds of files: normal +disk files (or any other file that can be backspaced with 'lseek'), and +industry-standard 9-track magnetic tape (or any other kind of tape that +can be backspaced with the 'MTIOCTOP' 'ioctl'). + + This means that the '--append', '--concatenate', and '--delete' +commands will not work on any other kind of file. Some media simply +cannot be backspaced, which means these commands and options will never +be able to work on them. These non-backspacing media include pipes and +cartridge tape drives. + + Some other media can be backspaced, and 'tar' will work on them once +'tar' is modified to do so. + + Archives created with the '--multi-volume', '--label', and +'--incremental' ('-G') options may not be readable by other version of +'tar'. In particular, restoring a file that was split over a volume +boundary will require some careful work with 'dd', if it can be done at +all. Other versions of 'tar' may also create an empty file whose name +is that of the volume header. Some versions of 'tar' may create normal +files instead of directories archived with the '--incremental' ('-G') +option. + + +File: tar.info, Node: Common Problems and Solutions, Next: Blocking, Prev: Remote Tape Server, Up: Media + +9.3 Some Common Problems and their Solutions +============================================ + +errors from system: +permission denied +no such file or directory +not owner + +errors from 'tar': +directory checksum error +header format error + +errors from media/system: +i/o error +device busy + + +File: tar.info, Node: Blocking, Next: Many, Prev: Common Problems and Solutions, Up: Media + +9.4 Blocking +============ + +"Block" and "record" terminology is rather confused, and it is also +confusing to the expert reader. On the other hand, readers who are new +to the field have a fresh mind, and they may safely skip the next two +paragraphs, as the remainder of this manual uses those two terms in a +quite consistent way. + + John Gilmore, the writer of the public domain 'tar' from which GNU +'tar' was originally derived, wrote (June 1995): + + The nomenclature of tape drives comes from IBM, where I believe + they were invented for the IBM 650 or so. On IBM mainframes, what + is recorded on tape are tape blocks. The logical organization of + data is into records. There are various ways of putting records + into blocks, including 'F' (fixed sized records), 'V' (variable + sized records), 'FB' (fixed blocked: fixed size records, N to a + block), 'VB' (variable size records, N to a block), 'VSB' (variable + spanned blocked: variable sized records that can occupy more than + one block), etc. The 'JCL' 'DD RECFORM=' parameter specified this + to the operating system. + + The Unix man page on 'tar' was totally confused about this. When I + wrote 'PD TAR', I used the historically correct terminology ('tar' + writes data records, which are grouped into blocks). It appears + that the bogus terminology made it into POSIX (no surprise here), + and now Franc,ois has migrated that terminology back into the + source code too. + + The term "physical block" means the basic transfer chunk from or to a +device, after which reading or writing may stop without anything being +lost. In this manual, the term "block" usually refers to a disk +physical block, _assuming_ that each disk block is 512 bytes in length. +It is true that some disk devices have different physical blocks, but +'tar' ignore these differences in its own format, which is meant to be +portable, so a 'tar' block is always 512 bytes in length, and "block" +always mean a 'tar' block. The term "logical block" often represents +the basic chunk of allocation of many disk blocks as a single entity, +which the operating system treats somewhat atomically; this concept is +only barely used in GNU 'tar'. + + The term "physical record" is another way to speak of a physical +block, those two terms are somewhat interchangeable. In this manual, +the term "record" usually refers to a tape physical block, _assuming_ +that the 'tar' archive is kept on magnetic tape. It is true that +archives may be put on disk or used with pipes, but nevertheless, 'tar' +tries to read and write the archive one "record" at a time, whatever the +medium in use. One record is made up of an integral number of blocks, +and this operation of putting many disk blocks into a single tape block +is called "reblocking", or more simply, "blocking". The term "logical +record" refers to the logical organization of many characters into +something meaningful to the application. The term "unit record" +describes a small set of characters which are transmitted whole to or by +the application, and often refers to a line of text. Those two last +terms are unrelated to what we call a "record" in GNU 'tar'. + + When writing to tapes, 'tar' writes the contents of the archive in +chunks known as "records". To change the default blocking factor, use +the '--blocking-factor=512-SIZE' ('-b 512-SIZE') option. Each record +will then be composed of 512-SIZE blocks. (Each 'tar' block is 512 +bytes. *Note Standard::.) Each file written to the archive uses at +least one full record. As a result, using a larger record size can +result in more wasted space for small files. On the other hand, a +larger record size can often be read and written much more efficiently. + + Further complicating the problem is that some tape drives ignore the +blocking entirely. For these, a larger record size can still improve +performance (because the software layers above the tape drive still +honor the blocking), but not as dramatically as on tape drives that +honor blocking. + + When reading an archive, 'tar' can usually figure out the record size +on itself. When this is the case, and a non-standard record size was +used when the archive was created, 'tar' will print a message about a +non-standard blocking factor, and then operate normally(1). On some +tape devices, however, 'tar' cannot figure out the record size itself. +On most of those, you can specify a blocking factor (with +'--blocking-factor') larger than the actual blocking factor, and then +use the '--read-full-records' ('-B') option. (If you specify a blocking +factor with '--blocking-factor' and don't use the '--read-full-records' +option, then 'tar' will not attempt to figure out the recording size +itself.) On some devices, you must always specify the record size +exactly with '--blocking-factor' when reading, because 'tar' cannot +figure it out. In any case, use '--list' ('-t') before doing any +extractions to see whether 'tar' is reading the archive correctly. + + 'tar' blocks are all fixed size (512 bytes), and its scheme for +putting them into records is to put a whole number of them (one or more) +into each record. 'tar' records are all the same size; at the end of +the file there's a block containing all zeros, which is how you tell +that the remainder of the last record(s) are garbage. + + In a standard 'tar' file (no options), the block size is 512 and the +record size is 10240, for a blocking factor of 20. What the +'--blocking-factor' option does is sets the blocking factor, changing +the record size while leaving the block size at 512 bytes. 20 was fine +for ancient 800 or 1600 bpi reel-to-reel tape drives; most tape drives +these days prefer much bigger records in order to stream and not waste +tape. When writing tapes for myself, some tend to use a factor of the +order of 2048, say, giving a record size of around one megabyte. + + If you use a blocking factor larger than 20, older 'tar' programs +might not be able to read the archive, so we recommend this as a limit +to use in practice. GNU 'tar', however, will support arbitrarily large +record sizes, limited only by the amount of virtual memory or the +physical characteristics of the tape device. + +* Menu: + +* Format Variations:: Format Variations +* Blocking Factor:: The Blocking Factor of an Archive + + ---------- Footnotes ---------- + + (1) If this message is not needed, you can turn it off using the +'--warning=no-record-size' option. + + +File: tar.info, Node: Format Variations, Next: Blocking Factor, Up: Blocking + +9.4.1 Format Variations +----------------------- + + _(This message will disappear, once this node revised.)_ + + Format parameters specify how an archive is written on the archive +media. The best choice of format parameters will vary depending on the +type and number of files being archived, and on the media used to store +the archive. + + To specify format parameters when accessing or creating an archive, +you can use the options described in the following sections. If you do +not specify any format parameters, 'tar' uses default parameters. You +cannot modify a compressed archive. If you create an archive with the +'--blocking-factor' option specified (*note Blocking Factor::), you must +specify that blocking-factor when operating on the archive. *Note +Formats::, for other examples of format parameter considerations. + + +File: tar.info, Node: Blocking Factor, Prev: Format Variations, Up: Blocking + +9.4.2 The Blocking Factor of an Archive +--------------------------------------- + + _(This message will disappear, once this node revised.)_ + + The data in an archive is grouped into blocks, which are 512 bytes. +Blocks are read and written in whole number multiples called "records". +The number of blocks in a record (i.e., the size of a record in units of +512 bytes) is called the "blocking factor". The +'--blocking-factor=512-SIZE' ('-b 512-SIZE') option specifies the +blocking factor of an archive. The default blocking factor is typically +20 (i.e., 10240 bytes), but can be specified at installation. To find +out the blocking factor of an existing archive, use 'tar --list +--file=ARCHIVE-NAME'. This may not work on some devices. + + Records are separated by gaps, which waste space on the archive +media. If you are archiving on magnetic tape, using a larger blocking +factor (and therefore larger records) provides faster throughput and +allows you to fit more data on a tape (because there are fewer gaps). +If you are archiving on cartridge, a very large blocking factor (say 126 +or more) greatly increases performance. A smaller blocking factor, on +the other hand, may be useful when archiving small files, to avoid +archiving lots of nulls as 'tar' fills out the archive to the end of the +record. In general, the ideal record size depends on the size of the +inter-record gaps on the tape you are using, and the average size of the +files you are archiving. *Note create::, for information on writing +archives. + + Archives with blocking factors larger than 20 cannot be read by very +old versions of 'tar', or by some newer versions of 'tar' running on old +machines with small address spaces. With GNU 'tar', the blocking factor +of an archive is limited only by the maximum record size of the device +containing the archive, or by the amount of available virtual memory. + + Also, on some systems, not using adequate blocking factors, as +sometimes imposed by the device drivers, may yield unexpected +diagnostics. For example, this has been reported: + + Cannot write to /dev/dlt: Invalid argument + +In such cases, it sometimes happen that the 'tar' bundled by the system +is aware of block size idiosyncrasies, while GNU 'tar' requires an +explicit specification for the block size, which it cannot guess. This +yields some people to consider GNU 'tar' is misbehaving, because by +comparison, 'the bundle 'tar' works OK'. Adding '-b 256', for example, +might resolve the problem. + + If you use a non-default blocking factor when you create an archive, +you must specify the same blocking factor when you modify that archive. +Some archive devices will also require you to specify the blocking +factor when reading that archive, however this is not typically the +case. Usually, you can use '--list' ('-t') without specifying a +blocking factor--'tar' reports a non-default record size and then lists +the archive members as it would normally. To extract files from an +archive with a non-standard blocking factor (particularly if you're not +sure what the blocking factor is), you can usually use the +'--read-full-records' ('-B') option while specifying a blocking factor +larger then the blocking factor of the archive (i.e., 'tar --extract +--read-full-records --blocking-factor=300'). *Note list::, for more +information on the '--list' ('-t') operation. *Note Reading::, for a +more detailed explanation of that option. + +'--blocking-factor=NUMBER' +'-b NUMBER' + Specifies the blocking factor of an archive. Can be used with any + operation, but is usually not necessary with '--list' ('-t'). + + Device blocking + +'-b BLOCKS' +'--blocking-factor=BLOCKS' + Set record size to BLOCKS*512 bytes. + + This option is used to specify a "blocking factor" for the archive. + When reading or writing the archive, 'tar', will do reads and + writes of the archive in records of BLOCK*512 bytes. This is true + even when the archive is compressed. Some devices requires that + all write operations be a multiple of a certain size, and so, 'tar' + pads the archive out to the next record boundary. + + The default blocking factor is set when 'tar' is compiled, and is + typically 20. Blocking factors larger than 20 cannot be read by + very old versions of 'tar', or by some newer versions of 'tar' + running on old machines with small address spaces. + + With a magnetic tape, larger records give faster throughput and fit + more data on a tape (because there are fewer inter-record gaps). + If the archive is in a disk file or a pipe, you may want to specify + a smaller blocking factor, since a large one will result in a large + number of null bytes at the end of the archive. + + When writing cartridge or other streaming tapes, a much larger + blocking factor (say 126 or more) will greatly increase + performance. However, you must specify the same blocking factor + when reading or updating the archive. + + Apparently, Exabyte drives have a physical block size of 8K bytes. + If we choose our blocksize as a multiple of 8k bytes, then the + problem seems to disappear. Id est, we are using block size of 112 + right now, and we haven't had the problem since we switched... + + With GNU 'tar' the blocking factor is limited only by the maximum + record size of the device containing the archive, or by the amount + of available virtual memory. + + However, deblocking or reblocking is virtually avoided in a special + case which often occurs in practice, but which requires all the + following conditions to be simultaneously true: + * the archive is subject to a compression option, + * the archive is not handled through standard input or output, + nor redirected nor piped, + * the archive is directly handled to a local disk, instead of + any special device, + * '--blocking-factor' is not explicitly specified on the 'tar' + invocation. + + If the output goes directly to a local disk, and not through + stdout, then the last write is not extended to a full record size. + Otherwise, reblocking occurs. Here are a few other remarks on this + topic: + + * 'gzip' will complain about trailing garbage if asked to + uncompress a compressed archive on tape, there is an option to + turn the message off, but it breaks the regularity of simply + having to use 'PROG -d' for decompression. It would be nice + if gzip was silently ignoring any number of trailing zeros. + I'll ask Jean-loup Gailly, by sending a copy of this message + to him. + + * 'compress' does not show this problem, but as Jean-loup + pointed out to Michael, 'compress -d' silently adds garbage + after the result of decompression, which tar ignores because + it already recognized its end-of-file indicator. So this bug + may be safely ignored. + + * 'gzip -d -q' will be silent about the trailing zeros indeed, + but will still return an exit status of 2 which tar reports in + turn. 'tar' might ignore the exit status returned, but I hate + doing that, as it weakens the protection 'tar' offers users + against other possible problems at decompression time. If + 'gzip' was silently skipping trailing zeros _and_ also + avoiding setting the exit status in this innocuous case, that + would solve this situation. + + * 'tar' should become more solid at not stopping to read a pipe + at the first null block encountered. This inelegantly breaks + the pipe. 'tar' should rather drain the pipe out before + exiting itself. + +'-i' +'--ignore-zeros' + Ignore blocks of zeros in archive (means EOF). + + The '--ignore-zeros' ('-i') option causes 'tar' to ignore blocks of + zeros in the archive. Normally a block of zeros indicates the end + of the archive, but when reading a damaged archive, or one which + was created by concatenating several archives together, this option + allows 'tar' to read the entire archive. This option is not on by + default because many versions of 'tar' write garbage after the + zeroed blocks. + + Note that this option causes 'tar' to read to the end of the + archive file, which may sometimes avoid problems when multiple + files are stored on a single physical tape. + +'-B' +'--read-full-records' + Reblock as we read (for reading 4.2BSD pipes). + + If '--read-full-records' is used, 'tar' will not panic if an + attempt to read a record from the archive does not return a full + record. Instead, 'tar' will keep reading until it has obtained a + full record. + + This option is turned on by default when 'tar' is reading an + archive from standard input, or from a remote machine. This is + because on BSD Unix systems, a read of a pipe will return however + much happens to be in the pipe, even if it is less than 'tar' + requested. If this option was not used, 'tar' would fail as soon + as it read an incomplete record from the pipe. + + This option is also useful with the commands for updating an + archive. + + Tape blocking + + When handling various tapes or cartridges, you have to take care of +selecting a proper blocking, that is, the number of disk blocks you put +together as a single tape block on the tape, without intervening tape +gaps. A "tape gap" is a small landing area on the tape with no +information on it, used for decelerating the tape to a full stop, and +for later regaining the reading or writing speed. When the tape driver +starts reading a record, the record has to be read whole without +stopping, as a tape gap is needed to stop the tape motion without losing +information. + + Using higher blocking (putting more disk blocks per tape block) will +use the tape more efficiently as there will be less tape gaps. But +reading such tapes may be more difficult for the system, as more memory +will be required to receive at once the whole record. Further, if there +is a reading error on a huge record, this is less likely that the system +will succeed in recovering the information. So, blocking should not be +too low, nor it should be too high. 'tar' uses by default a blocking of +20 for historical reasons, and it does not really matter when reading or +writing to disk. Current tape technology would easily accommodate +higher blockings. Sun recommends a blocking of 126 for Exabytes and 96 +for DATs. We were told that for some DLT drives, the blocking should be +a multiple of 4Kb, preferably 64Kb ('-b 128') or 256 for decent +performance. Other manufacturers may use different recommendations for +the same tapes. This might also depends of the buffering techniques +used inside modern tape controllers. Some imposes a minimum blocking, +or a maximum blocking. Others request blocking to be some exponent of +two. + + So, there is no fixed rule for blocking. But blocking at read time +should ideally be the same as blocking used at write time. At one place +I know, with a wide variety of equipment, they found it best to use a +blocking of 32 to guarantee that their tapes are fully interchangeable. + + I was also told that, for recycled tapes, prior erasure (by the same +drive unit that will be used to create the archives) sometimes lowers +the error rates observed at rewriting time. + + I might also use '--number-blocks' instead of '--block-number', so +'--block' will then expand to '--blocking-factor' unambiguously. + + +File: tar.info, Node: Many, Next: Using Multiple Tapes, Prev: Blocking, Up: Media + +9.5 Many Archives on One Tape +============================= + +Most tape devices have two entries in the '/dev' directory, or entries +that come in pairs, which differ only in the minor number for this +device. Let's take for example '/dev/tape', which often points to the +only or usual tape device of a given system. There might be a +corresponding '/dev/nrtape' or '/dev/ntape'. The simpler name is the +_rewinding_ version of the device, while the name having 'nr' in it is +the _no rewinding_ version of the same device. + + A rewinding tape device will bring back the tape to its beginning +point automatically when this device is opened or closed. Since 'tar' +opens the archive file before using it and closes it afterwards, this +means that a simple: + + $ tar cf /dev/tape DIRECTORY + +will reposition the tape to its beginning both prior and after saving +DIRECTORY contents to it, thus erasing prior tape contents and making it +so that any subsequent write operation will destroy what has just been +saved. + + So, a rewinding device is normally meant to hold one and only one +file. If you want to put more than one 'tar' archive on a given tape, +you will need to avoid using the rewinding version of the tape device. +You will also have to pay special attention to tape positioning. Errors +in positioning may overwrite the valuable data already on your tape. +Many people, burnt by past experiences, will only use rewinding devices +and limit themselves to one file per tape, precisely to avoid the risk +of such errors. Be fully aware that writing at the wrong position on a +tape loses all information past this point and most probably until the +end of the tape, and this destroyed information _cannot_ be recovered. + + To save DIRECTORY-1 as a first archive at the beginning of a tape, +and leave that tape ready for a second archive, you should use: + + $ mt -f /dev/nrtape rewind + $ tar cf /dev/nrtape DIRECTORY-1 + + "Tape marks" are special magnetic patterns written on the tape media, +which are later recognizable by the reading hardware. These marks are +used after each file, when there are many on a single tape. An empty +file (that is to say, two tape marks in a row) signal the logical end of +the tape, after which no file exist. Usually, non-rewinding tape device +drivers will react to the close request issued by 'tar' by first writing +two tape marks after your archive, and by backspacing over one of these. +So, if you remove the tape at that time from the tape drive, it is +properly terminated. But if you write another file at the current +position, the second tape mark will be erased by the new information, +leaving only one tape mark between files. + + So, you may now save DIRECTORY-2 as a second archive after the first +on the same tape by issuing the command: + + $ tar cf /dev/nrtape DIRECTORY-2 + +and so on for all the archives you want to put on the same tape. + + Another usual case is that you do not write all the archives the same +day, and you need to remove and store the tape between two archive +sessions. In general, you must remember how many files are already +saved on your tape. Suppose your tape already has 16 files on it, and +that you are ready to write the 17th. You have to take care of skipping +the first 16 tape marks before saving DIRECTORY-17, say, by using these +commands: + + $ mt -f /dev/nrtape rewind + $ mt -f /dev/nrtape fsf 16 + $ tar cf /dev/nrtape DIRECTORY-17 + + In all the previous examples, we put aside blocking considerations, +but you should do the proper things for that as well. *Note Blocking::. + +* Menu: + +* Tape Positioning:: Tape Positions and Tape Marks +* mt:: The 'mt' Utility + + +File: tar.info, Node: Tape Positioning, Next: mt, Up: Many + +9.5.1 Tape Positions and Tape Marks +----------------------------------- + + _(This message will disappear, once this node revised.)_ + + Just as archives can store more than one file from the file system, +tapes can store more than one archive file. To keep track of where +archive files (or any other type of file stored on tape) begin and end, +tape archive devices write magnetic "tape marks" on the archive media. +Tape drives write one tape mark between files, two at the end of all the +file entries. + + If you think of data as a series of records "rrrr"'s, and tape marks +as "*"'s, a tape might look like the following: + + rrrr*rrrrrr*rrrrr*rr*rrrrr**------------------------- + + Tape devices read and write tapes using a read/write "tape head"--a +physical part of the device which can only access one point on the tape +at a time. When you use 'tar' to read or write archive data from a tape +device, the device will begin reading or writing from wherever on the +tape the tape head happens to be, regardless of which archive or what +part of the archive the tape head is on. Before writing an archive, you +should make sure that no data on the tape will be overwritten (unless it +is no longer needed). Before reading an archive, you should make sure +the tape head is at the beginning of the archive you want to read. You +can do it manually via 'mt' utility (*note mt::). The 'restore' script +does that automatically (*note Scripted Restoration::). + + If you want to add new archive file entries to a tape, you should +advance the tape to the end of the existing file entries, backspace over +the last tape mark, and write the new archive file. If you were to add +two archives to the example above, the tape might look like the +following: + + rrrr*rrrrrr*rrrrr*rr*rrrrr*rrr*rrrr**---------------- + + +File: tar.info, Node: mt, Prev: Tape Positioning, Up: Many + +9.5.2 The 'mt' Utility +---------------------- + + _(This message will disappear, once this node revised.)_ + + *Note Blocking Factor::. + + You can use the 'mt' utility to advance or rewind a tape past a +specified number of archive files on the tape. This will allow you to +move to the beginning of an archive before extracting or reading it, or +to the end of all the archives before writing a new one. + + The syntax of the 'mt' command is: + + mt [-f TAPENAME] OPERATION [NUMBER] + + where TAPENAME is the name of the tape device, NUMBER is the number +of times an operation is performed (with a default of one), and +OPERATION is one of the following: + +'eof' +'weof' + Writes NUMBER tape marks at the current position on the tape. + +'fsf' + Moves tape position forward NUMBER files. + +'bsf' + Moves tape position back NUMBER files. + +'rewind' + Rewinds the tape. (Ignores NUMBER.) + +'offline' +'rewoff1' + Rewinds the tape and takes the tape device off-line. (Ignores + NUMBER.) + +'status' + Prints status information about the tape unit. + + If you don't specify a TAPENAME, 'mt' uses the environment variable +'TAPE'; if 'TAPE' is not set, 'mt' will use the default device specified +in your 'sys/mtio.h' file ('DEFTAPE' variable). If this is not defined, +the program will display a descriptive error message and exit with code +1. + + 'mt' returns a 0 exit status when the operation(s) were successful, 1 +if the command was unrecognized, and 2 if an operation failed. + + +File: tar.info, Node: Using Multiple Tapes, Next: label, Prev: Many, Up: Media + +9.6 Using Multiple Tapes +======================== + +Often you might want to write a large archive, one larger than will fit +on the actual tape you are using. In such a case, you can run multiple +'tar' commands, but this can be inconvenient, particularly if you are +using options like '--exclude=PATTERN' or dumping entire file systems. +Therefore, 'tar' provides a special mode for creating multi-volume +archives. + + "Multi-volume" archive is a single 'tar' archive, stored on several +media volumes of fixed size. Although in this section we will often +call 'volume' a "tape", there is absolutely no requirement for +multi-volume archives to be stored on tapes. Instead, they can use +whatever media type the user finds convenient, they can even be located +on files. + + When creating a multi-volume archive, GNU 'tar' continues to fill +current volume until it runs out of space, then it switches to next +volume (usually the operator is queried to replace the tape on this +point), and continues working on the new volume. This operation +continues until all requested files are dumped. If GNU 'tar' detects +end of media while dumping a file, such a file is archived in split +form. Some very big files can even be split across several volumes. + + Each volume is itself a valid GNU 'tar' archive, so it can be read +without any special options. Consequently any file member residing +entirely on one volume can be extracted or otherwise operated upon +without needing the other volume. Sure enough, to extract a split +member you would need all volumes its parts reside on. + + Multi-volume archives suffer from several limitations. In +particular, they cannot be compressed. + + GNU 'tar' is able to create multi-volume archives of two formats +(*note Formats::): 'GNU' and 'POSIX'. + +* Menu: + +* Multi-Volume Archives:: Archives Longer than One Tape or Disk +* Tape Files:: Tape Files +* Tarcat:: Concatenate Volumes into a Single Archive + + +File: tar.info, Node: Multi-Volume Archives, Next: Tape Files, Up: Using Multiple Tapes + +9.6.1 Archives Longer than One Tape or Disk +------------------------------------------- + +To create an archive that is larger than will fit on a single unit of +the media, use the '--multi-volume' ('-M') option in conjunction with +the '--create' option (*note create::). A "multi-volume" archive can be +manipulated like any other archive (provided the '--multi-volume' option +is specified), but is stored on more than one tape or file. + + When you specify '--multi-volume', 'tar' does not report an error +when it comes to the end of an archive volume (when reading), or the end +of the media (when writing). Instead, it prompts you to load a new +storage volume. If the archive is on a magnetic tape, you should change +tapes when you see the prompt; if the archive is on a floppy disk, you +should change disks; etc. + +'--multi-volume' +'-M' + Creates a multi-volume archive, when used in conjunction with + '--create' ('-c'). To perform any other operation on a + multi-volume archive, specify '--multi-volume' in conjunction with + that operation. For example: + + $ tar --create --multi-volume --file=/dev/tape FILES + + The method 'tar' uses to detect end of tape is not perfect, and fails +on some operating systems or on some devices. If 'tar' cannot detect +the end of the tape itself, you can use '--tape-length' option to inform +it about the capacity of the tape: + +'--tape-length=SIZE[SUF]' +'-L SIZE[SUF]' + Set maximum length of a volume. The SUF, if given, specifies units + in which SIZE is expressed, e.g. '2M' mean 2 megabytes (*note + Table 9.1: size-suffixes, for a list of allowed size suffixes). + Without SUF, units of 1024 bytes (kilobyte) are assumed. + + This option selects '--multi-volume' automatically. For example: + + $ tar --create --tape-length=41943040 --file=/dev/tape FILES + + or, which is equivalent: + + $ tar --create --tape-length=4G --file=/dev/tape FILES + + When GNU 'tar' comes to the end of a storage media, it asks you to +change the volume. The built-in prompt for POSIX locale is(1): + + Prepare volume #N for 'ARCHIVE' and hit return: + +where N is the ordinal number of the volume to be created and ARCHIVE is +archive file or device name. + + When prompting for a new tape, 'tar' accepts any of the following +responses: + +'?' + Request 'tar' to explain possible responses. +'q' + Request 'tar' to exit immediately. +'n FILE-NAME' + Request 'tar' to write the next volume on the file FILE-NAME. +'!' + Request 'tar' to run a subshell. This option can be disabled by + giving '--restrict' command line option to 'tar'(2). +'y' + Request 'tar' to begin writing the next volume. + + (You should only type 'y' after you have changed the tape; otherwise +'tar' will write over the volume it just finished.) + + The volume number used by 'tar' in its tape-changing prompt can be +changed; if you give the '--volno-file=FILE-OF-NUMBER' option, then +FILE-OF-NUMBER should be an non-existing file to be created, or else, a +file already containing a decimal number. That number will be used as +the volume number of the first volume written. When 'tar' is finished, +it will rewrite the file with the now-current volume number. (This does +not change the volume number written on a tape label, as per *note +label::, it _only_ affects the number used in the prompt.) + + If you want more elaborate behavior than this, you can write a +special "new volume script", that will be responsible for changing the +volume, and instruct 'tar' to use it instead of its normal prompting +procedure: + +'--info-script=COMMAND' +'--new-volume-script=COMMAND' +'-F COMMAND' + Specify the command to invoke when switching volumes. The COMMAND + can be used to eject cassettes, or to broadcast messages such as + 'Someone please come change my tape' when performing unattended + backups. + + The COMMAND can contain additional options, if such are needed. +*Note Running External Commands: external, for a detailed discussion of +the way GNU 'tar' runs external commands. It inherits 'tar''s shell +environment. Additional data is passed to it via the following +environment variables: + +'TAR_VERSION' + GNU 'tar' version number. + +'TAR_ARCHIVE' + The name of the archive 'tar' is processing. + +'TAR_BLOCKING_FACTOR' + Current blocking factor (*note Blocking::). + +'TAR_VOLUME' + Ordinal number of the volume 'tar' is about to start. + +'TAR_SUBCOMMAND' + A short option describing the operation 'tar' is executing. *Note + Operations::, for a complete list of subcommand options. + +'TAR_FORMAT' + Format of the archive being processed. *Note Formats::, for a + complete list of archive format names. + +'TAR_FD' + File descriptor which can be used to communicate the new volume + name to 'tar'. + + These variables can be used in the COMMAND itself, provided that they +are properly quoted to prevent them from being expanded by the shell +that invokes 'tar'. + + The volume script can instruct 'tar' to use new archive name, by +writing in to file descriptor '$TAR_FD' (see below for an example). + + If the info script fails, 'tar' exits; otherwise, it begins writing +the next volume. + + If you want 'tar' to cycle through a series of files or tape drives, +there are three approaches to choose from. First of all, you can give +'tar' multiple '--file' options. In this case the specified files will +be used, in sequence, as the successive volumes of the archive. Only +when the first one in the sequence needs to be used again will 'tar' +prompt for a tape change (or run the info script). For example, suppose +someone has two tape drives on a system named '/dev/tape0' and +'/dev/tape1'. For having GNU 'tar' to switch to the second drive when +it needs to write the second tape, and then back to the first tape, +etc., just do either of: + + $ tar --create --multi-volume --file=/dev/tape0 --file=/dev/tape1 FILES + $ tar -cM -f /dev/tape0 -f /dev/tape1 FILES + + The second method is to use the 'n' response to the tape-change +prompt. + + Finally, the most flexible approach is to use a volume script, that +writes new archive name to the file descriptor '$TAR_FD'. For example, +the following volume script will create a series of archive files, named +'ARCHIVE-VOL', where ARCHIVE is the name of the archive being created +(as given by '--file' option) and VOL is the ordinal number of the +archive being created: + + #! /bin/bash + # For this script it's advisable to use a shell, such as Bash, + # that supports a TAR_FD value greater than 9. + + echo Preparing volume $TAR_VOLUME of $TAR_ARCHIVE. + + name=`expr $TAR_ARCHIVE : '\(.*\)-.*'` + case $TAR_SUBCOMMAND in + -c) ;; + -d|-x|-t) test -r ${name:-$TAR_ARCHIVE}-$TAR_VOLUME || exit 1 + ;; + *) exit 1 + esac + + echo ${name:-$TAR_ARCHIVE}-$TAR_VOLUME >&$TAR_FD + + The same script can be used while listing, comparing or extracting +from the created archive. For example: + + # Create a multi-volume archive: + $ tar -c -L1024 -f archive.tar -F new-volume . + # Extract from the created archive: + $ tar -x -f archive.tar -F new-volume . + +Notice, that the first command had to use '-L' option, since otherwise +GNU 'tar' will end up writing everything to file 'archive.tar'. + + You can read each individual volume of a multi-volume archive as if +it were an archive by itself. For example, to list the contents of one +volume, use '--list', without '--multi-volume' specified. To extract an +archive member from one volume (assuming it is described that volume), +use '--extract', again without '--multi-volume'. + + If an archive member is split across volumes (i.e., its entry begins +on one volume of the media and ends on another), you need to specify +'--multi-volume' to extract it successfully. In this case, you should +load the volume where the archive member starts, and use 'tar --extract +--multi-volume'--'tar' will prompt for later volumes as it needs them. +*Note extracting archives::, for more information about extracting +archives. + + Multi-volume archives can be modified like any other archive. To add +files to a multi-volume archive, you need to only mount the last volume +of the archive media (and new volumes, if needed). For all other +operations, you need to use the entire archive. + + If a multi-volume archive was labeled using '--label=ARCHIVE-LABEL' +(*note label::) when it was created, 'tar' will not automatically label +volumes which are added later. To label subsequent volumes, specify +'--label=ARCHIVE-LABEL' again in conjunction with the '--append', +'--update' or '--concatenate' operation. + + Notice that multi-volume support is a GNU extension and the archives +created in this mode should be read only using GNU 'tar'. If you +absolutely have to process such archives using a third-party 'tar' +implementation, read *note Split Recovery::. + + ---------- Footnotes ---------- + + (1) If you run GNU 'tar' under a different locale, the translation to +the locale's language will be used. + + (2) *Note --restrict::, for more information about this option. + + +File: tar.info, Node: Tape Files, Next: Tarcat, Prev: Multi-Volume Archives, Up: Using Multiple Tapes + +9.6.2 Tape Files +---------------- + + _(This message will disappear, once this node revised.)_ + + To give the archive a name which will be recorded in it, use the +'--label=VOLUME-LABEL' ('-V VOLUME-LABEL') option. This will write a +special block identifying VOLUME-LABEL as the name of the archive to the +front of the archive which will be displayed when the archive is listed +with '--list'. If you are creating a multi-volume archive with +'--multi-volume' (*note Using Multiple Tapes::), then the volume label +will have 'Volume NNN' appended to the name you give, where NNN is the +number of the volume of the archive. If you use the +'--label=VOLUME-LABEL' option when reading an archive, it checks to make +sure the label on the tape matches the one you gave. *Note label::. + + When 'tar' writes an archive to tape, it creates a single tape file. +If multiple archives are written to the same tape, one after the other, +they each get written as separate tape files. When extracting, it is +necessary to position the tape at the right place before running 'tar'. +To do this, use the 'mt' command. For more information on the 'mt' +command and on the organization of tapes into a sequence of tape files, +see *note mt::. + + People seem to often do: + + --label="SOME-PREFIX `date +SOME-FORMAT`" + + or such, for pushing a common date in all volumes or an archive set. + + +File: tar.info, Node: Tarcat, Prev: Tape Files, Up: Using Multiple Tapes + +9.6.3 Concatenate Volumes into a Single Archive +----------------------------------------------- + +Sometimes it is necessary to convert existing GNU 'tar' multi-volume +archive to a single 'tar' archive. Simply concatenating all volumes +into one will not work, since each volume carries an additional +information at the beginning. GNU 'tar' is shipped with the shell +script 'tarcat' designed for this purpose. + + The script takes a list of files comprising a multi-volume archive +and creates the resulting archive at the standard output. For example: + + tarcat vol.1 vol.2 vol.3 | tar tf - + + The script implements a simple heuristics to determine the format of +the first volume file and to decide how to process the rest of the +files. However, it makes no attempt to verify whether the files are +given in order or even if they are valid 'tar' archives. It uses 'dd' +and does not filter its standard error, so you will usually see lots of +spurious messages. + + +File: tar.info, Node: label, Next: verify, Prev: Using Multiple Tapes, Up: Media + +9.7 Including a Label in the Archive +==================================== + +To avoid problems caused by misplaced paper labels on the archive media, +you can include a "label" entry -- an archive member which contains the +name of the archive -- in the archive itself. Use the +'--label=ARCHIVE-LABEL' ('-V ARCHIVE-LABEL') option(1) in conjunction +with the '--create' operation to include a label entry in the archive as +it is being created. + +'--label=ARCHIVE-LABEL' +'-V ARCHIVE-LABEL' + Includes an "archive-label" at the beginning of the archive when + the archive is being created, when used in conjunction with the + '--create' operation. Checks to make sure the archive label + matches the one specified (when used in conjunction with any other + operation). + + If you create an archive using both '--label=ARCHIVE-LABEL' ('-V +ARCHIVE-LABEL') and '--multi-volume' ('-M'), each volume of the archive +will have an archive label of the form 'ARCHIVE-LABEL Volume N', where N +is 1 for the first volume, 2 for the next, and so on. *Note Using +Multiple Tapes::, for information on creating multiple volume archives. + + The volume label will be displayed by '--list' along with the file +contents. If verbose display is requested, it will also be explicitly +marked as in the example below: + + $ tar --verbose --list --file=iamanarchive + V--------- 0/0 0 1992-03-07 12:01 iamalabel--Volume Header-- + -rw-r--r-- ringo/user 40 1990-05-21 13:30 iamafilename + + However, '--list' option will cause listing entire contents of the +archive, which may be undesirable (for example, if the archive is stored +on a tape). You can request checking only the volume label by +specifying '--test-label' option. This option reads only the first +block of an archive, so it can be used with slow storage devices. For +example: + + $ tar --test-label --file=iamanarchive + iamalabel + + If '--test-label' is used with one or more command line arguments, +'tar' compares the volume label with each argument. It exits with code +0 if a match is found, and with code 1 otherwise(2). No output is +displayed, unless you also used the '--verbose' option. For example: + + $ tar --test-label --file=iamanarchive 'iamalabel' + => 0 + $ tar --test-label --file=iamanarchive 'alabel' + => 1 + + When used with the '--verbose' option, 'tar' prints the actual volume +label (if any), and a verbose diagnostics in case of a mismatch: + + $ tar --test-label --verbose --file=iamanarchive 'iamalabel' + iamalabel + => 0 + $ tar --test-label --verbose --file=iamanarchive 'alabel' + iamalabel + tar: Archive label mismatch + => 1 + + If you request any operation, other than '--create', along with using +'--label' option, 'tar' will first check if the archive label matches +the one specified and will refuse to proceed if it does not. Use this +as a safety precaution to avoid accidentally overwriting existing +archives. For example, if you wish to add files to 'archive', +presumably labeled with string 'My volume', you will get: + + $ tar -rf archive --label 'My volume' . + tar: Archive not labeled to match 'My volume' + +in case its label does not match. This will work even if 'archive' is +not labeled at all. + + Similarly, 'tar' will refuse to list or extract the archive if its +label doesn't match the ARCHIVE-LABEL specified. In those cases, +ARCHIVE-LABEL argument is interpreted as a globbing-style pattern which +must match the actual magnetic volume label. *Note exclude::, for a +precise description of how match is attempted(3). If the switch +'--multi-volume' ('-M') is being used, the volume label matcher will +also suffix ARCHIVE-LABEL by ' Volume [1-9]*' if the initial match +fails, before giving up. Since the volume numbering is automatically +added in labels at creation time, it sounded logical to equally help the +user taking care of it when the archive is being read. + + You can also use '--label' to get a common information on all tapes +of a series. For having this information different in each series +created through a single script used on a regular basis, just manage to +get some date string as part of the label. For example: + + $ tar -cM -f /dev/tape -V "Daily backup for `date +%Y-%m-%d`" + $ tar --create --file=/dev/tape --multi-volume \ + --label="Daily backup for `date +%Y-%m-%d`" + + Some more notes about volume labels: + + * Each label has its own date and time, which corresponds to the time + when GNU 'tar' initially attempted to write it, often soon after + the operator launches 'tar' or types the carriage return telling + that the next tape is ready. + + * Comparing date labels to get an idea of tape throughput is + unreliable. It gives correct results only if the delays for + rewinding tapes and the operator switching them were negligible, + which is usually not the case. + + ---------- Footnotes ---------- + + (1) Until version 1.10, that option was called '--volume', but is not +available under that name anymore. + + (2) Note that GNU 'tar' versions up to 1.23 indicated mismatch with +an exit code 2 and printed a spurious diagnostics on stderr. + + (3) Previous versions of 'tar' used full regular expression matching, +or before that, only exact string matching, instead of wildcard +matchers. We decided for the sake of simplicity to use a uniform +matching device through 'tar'. + + +File: tar.info, Node: verify, Next: Write Protection, Prev: label, Up: Media + +9.8 Verifying Data as It is Stored +================================== + +'-W' +'--verify' + Attempt to verify the archive after writing. + + This option causes 'tar' to verify the archive after writing it. +Each volume is checked after it is written, and any discrepancies are +recorded on the standard error output. + + Verification requires that the archive be on a back-space-able +medium. This means pipes, some cartridge tape drives, and some other +devices cannot be verified. + + You can insure the accuracy of an archive by comparing files in the +system with archive members. 'tar' can compare an archive to the file +system as the archive is being written, to verify a write operation, or +can compare a previously written archive, to insure that it is up to +date. + + To check for discrepancies in an archive immediately after it is +written, use the '--verify' ('-W') option in conjunction with the +'--create' operation. When this option is specified, 'tar' checks +archive members against their counterparts in the file system, and +reports discrepancies on the standard error. + + To verify an archive, you must be able to read it from before the end +of the last written entry. This option is useful for detecting data +errors on some tapes. Archives written to pipes, some cartridge tape +drives, and some other devices cannot be verified. + + One can explicitly compare an already made archive with the file +system by using the '--compare' ('--diff', '-d') option, instead of +using the more automatic '--verify' option. *Note compare::. + + Note that these two options have a slightly different intent. The +'--compare' option checks how identical are the logical contents of some +archive with what is on your disks, while the '--verify' option is +really for checking if the physical contents agree and if the recording +media itself is of dependable quality. So, for the '--verify' +operation, 'tar' tries to defeat all in-memory cache pertaining to the +archive, while it lets the speed optimization undisturbed for the +'--compare' option. If you nevertheless use '--compare' for media +verification, you may have to defeat the in-memory cache yourself, maybe +by opening and reclosing the door latch of your recording unit, forcing +some doubt in your operating system about the fact this is really the +same volume as the one just written or read. + + The '--verify' option would not be necessary if drivers were indeed +able to detect dependably all write failures. This sometimes require +many magnetic heads, some able to read after the writes occurred. One +would not say that drivers unable to detect all cases are necessarily +flawed, as long as programming is concerned. + + The '--verify' ('-W') option will not work in conjunction with the +'--multi-volume' ('-M') option or the '--append' ('-r'), '--update' +('-u') and '--delete' operations. *Note Operations::, for more +information on these operations. + + Also, since 'tar' normally strips leading '/' from file names (*note +absolute::), a command like 'tar --verify -cf /tmp/foo.tar /etc' will +work as desired only if the working directory is '/', as 'tar' uses the +archive's relative member names (e.g., 'etc/motd') when verifying the +archive. + + +File: tar.info, Node: Write Protection, Prev: verify, Up: Media + +9.9 Write Protection +==================== + +Almost all tapes and diskettes, and in a few rare cases, even disks can +be "write protected", to protect data on them from being changed. Once +an archive is written, you should write protect the media to prevent the +archive from being accidentally overwritten or deleted. (This will +protect the archive from being changed with a tape or floppy drive--it +will not protect it from magnet fields or other physical hazards.) + + The write protection device itself is usually an integral part of the +physical media, and can be a two position (write enabled/write disabled) +switch, a notch which can be popped out or covered, a ring which can be +removed from the center of a tape reel, or some other changeable +feature. + + +File: tar.info, Node: Reliability and security, Next: Changes, Prev: Media, Up: Top + +10 Reliability and Security +*************************** + +The 'tar' command reads and writes files as any other application does, +and is subject to the usual caveats about reliability and security. +This section contains some commonsense advice on the topic. + +* Menu: + +* Reliability:: +* Security:: + + +File: tar.info, Node: Reliability, Next: Security, Up: Reliability and security + +10.1 Reliability +================ + +Ideally, when 'tar' is creating an archive, it reads from a file system +that is not being modified, and encounters no errors or inconsistencies +while reading and writing. If this is the case, the archive should +faithfully reflect what was read. Similarly, when extracting from an +archive, ideally 'tar' ideally encounters no errors and the extracted +files faithfully reflect what was in the archive. + + However, when reading or writing real-world file systems, several +things can go wrong; these include permissions problems, corruption of +data, and race conditions. + +* Menu: + +* Permissions problems:: +* Data corruption and repair:: +* Race conditions:: + + +File: tar.info, Node: Permissions problems, Next: Data corruption and repair, Up: Reliability + +10.1.1 Permissions Problems +--------------------------- + +If 'tar' encounters errors while reading or writing files, it normally +reports an error and exits with nonzero status. The work it does may +therefore be incomplete. For example, when creating an archive, if +'tar' cannot read a file then it cannot copy the file into the archive. + + +File: tar.info, Node: Data corruption and repair, Next: Race conditions, Prev: Permissions problems, Up: Reliability + +10.1.2 Data Corruption and Repair +--------------------------------- + +If an archive becomes corrupted by an I/O error, this may corrupt the +data in an extracted file. Worse, it may corrupt the file's metadata, +which may cause later parts of the archive to become misinterpreted. An +tar-format archive contains a checksum that most likely will detect +errors in the metadata, but it will not detect errors in the data. + + If data corruption is a concern, you can compute and check your own +checksums of an archive by using other programs, such as 'cksum'. + + When attempting to recover from a read error or data corruption in an +archive, you may need to skip past the questionable data and read the +rest of the archive. This requires some expertise in the archive format +and in other software tools. + + +File: tar.info, Node: Race conditions, Prev: Data corruption and repair, Up: Reliability + +10.1.3 Race conditions +---------------------- + +If some other process is modifying the file system while 'tar' is +reading or writing files, the result may well be inconsistent due to +race conditions. For example, if another process creates some files in +a directory while 'tar' is creating an archive containing the +directory's files, 'tar' may see some of the files but not others, or it +may see a file that is in the process of being created. The resulting +archive may not be a snapshot of the file system at any point in time. +If an application such as a database system depends on an accurate +snapshot, restoring from the 'tar' archive of a live file system may +therefore break that consistency and may break the application. The +simplest way to avoid the consistency issues is to avoid making other +changes to the file system while tar is reading it or writing it. + + When creating an archive, several options are available to avoid race +conditions. Some hosts have a way of snapshotting a file system, or of +temporarily suspending all changes to a file system, by (say) suspending +the only virtual machine that can modify a file system; if you use these +facilities and have 'tar -c' read from a snapshot when creating an +archive, you can avoid inconsistency problems. More drastically, before +starting 'tar' you could suspend or shut down all processes other than +'tar' that have access to the file system, or you could unmount the file +system and then mount it read-only. + + When extracting from an archive, one approach to avoid race +conditions is to create a directory that no other process can write to, +and extract into that. + + +File: tar.info, Node: Security, Prev: Reliability, Up: Reliability and security + +10.2 Security +============= + +In some cases 'tar' may be used in an adversarial situation, where an +untrusted user is attempting to gain information about or modify +otherwise-inaccessible files. Dealing with untrusted data (that is, +data generated by an untrusted user) typically requires extra care, +because even the smallest mistake in the use of 'tar' is more likely to +be exploited by an adversary than by a race condition. + +* Menu: + +* Privacy:: +* Integrity:: +* Live untrusted data:: +* Security rules of thumb:: + + +File: tar.info, Node: Privacy, Next: Integrity, Up: Security + +10.2.1 Privacy +-------------- + +Standard privacy concerns apply when using 'tar'. For example, suppose +you are archiving your home directory into a file '/archive/myhome.tar'. +Any secret information in your home directory, such as your SSH secret +keys, are copied faithfully into the archive. Therefore, if your home +directory contains any file that should not be read by some other user, +the archive itself should be not be readable by that user. And even if +the archive's data are inaccessible to untrusted users, its metadata +(such as size or last-modified date) may reveal some information about +your home directory; if the metadata are intended to be private, the +archive's parent directory should also be inaccessible to untrusted +users. + + One precaution is to create '/archive' so that it is not accessible +to any user, unless that user also has permission to access all the +files in your home directory. + + Similarly, when extracting from an archive, take care that the +permissions of the extracted files are not more generous than what you +want. Even if the archive itself is readable only to you, files +extracted from it have their own permissions that may differ. + + +File: tar.info, Node: Integrity, Next: Live untrusted data, Prev: Privacy, Up: Security + +10.2.2 Integrity +---------------- + +When creating archives, take care that they are not writable by a +untrusted user; otherwise, that user could modify the archive, and when +you later extract from the archive you will get incorrect data. + + When 'tar' extracts from an archive, by default it writes into files +relative to the working directory. If the archive was generated by an +untrusted user, that user therefore can write into any file under the +working directory. If the working directory contains a symbolic link to +another directory, the untrusted user can also write into any file under +the referenced directory. When extracting from an untrusted archive, it +is therefore good practice to create an empty directory and run 'tar' in +that directory. + + When extracting from two or more untrusted archives, each one should +be extracted independently, into different empty directories. +Otherwise, the first archive could create a symbolic link into an area +outside the working directory, and the second one could follow the link +and overwrite data that is not under the working directory. For +example, when restoring from a series of incremental dumps, the archives +should have been created by a trusted process, as otherwise the +incremental restores might alter data outside the working directory. + + If you use the '--absolute-names' ('-P') option when extracting, +'tar' respects any file names in the archive, even file names that begin +with '/' or contain '..'. As this lets the archive overwrite any file +in your system that you can write, the '--absolute-names' ('-P') option +should be used only for trusted archives. + + Conversely, with the '--keep-old-files' ('-k') and '--skip-old-files' +options, 'tar' refuses to replace existing files when extracting. The +difference between the two options is that the former treats existing +files as errors whereas the latter just silently ignores them. + + Finally, with the '--no-overwrite-dir' option, 'tar' refuses to +replace the permissions or ownership of already-existing directories. +These options may help when extracting from untrusted archives. + + +File: tar.info, Node: Live untrusted data, Next: Security rules of thumb, Prev: Integrity, Up: Security + +10.2.3 Dealing with Live Untrusted Data +--------------------------------------- + +Extra care is required when creating from or extracting into a file +system that is accessible to untrusted users. For example, superusers +who invoke 'tar' must be wary about its actions being hijacked by an +adversary who is reading or writing the file system at the same time +that 'tar' is operating. + + When creating an archive from a live file system, 'tar' is vulnerable +to denial-of-service attacks. For example, an adversarial user could +create the illusion of an indefinitely-deep directory hierarchy +'d/e/f/g/...' by creating directories one step ahead of 'tar', or the +illusion of an indefinitely-long file by creating a sparse file but +arranging for blocks to be allocated just before 'tar' reads them. +There is no easy way for 'tar' to distinguish these scenarios from +legitimate uses, so you may need to monitor 'tar', just as you'd need to +monitor any other system service, to detect such attacks. + + While a superuser is extracting from an archive into a live file +system, an untrusted user might replace a directory with a symbolic +link, in hopes that 'tar' will follow the symbolic link and extract data +into files that the untrusted user does not have access to. Even if the +archive was generated by the superuser, it may contain a file such as +'d/etc/passwd' that the untrusted user earlier created in order to break +in; if the untrusted user replaces the directory 'd/etc' with a symbolic +link to '/etc' while 'tar' is running, 'tar' will overwrite +'/etc/passwd'. This attack can be prevented by extracting into a +directory that is inaccessible to untrusted users. + + Similar attacks via symbolic links are also possible when creating an +archive, if the untrusted user can modify an ancestor of a top-level +argument of 'tar'. For example, an untrusted user that can modify +'/home/eve' can hijack a running instance of 'tar -cf - +/home/eve/Documents/yesterday' by replacing '/home/eve/Documents' with a +symbolic link to some other location. Attacks like these can be +prevented by making sure that untrusted users cannot modify any files +that are top-level arguments to 'tar', or any ancestor directories of +these files. + + +File: tar.info, Node: Security rules of thumb, Prev: Live untrusted data, Up: Security + +10.2.4 Security Rules of Thumb +------------------------------ + +This section briefly summarizes rules of thumb for avoiding security +pitfalls. + + * Protect archives at least as much as you protect any of the files + being archived. + + * Extract from an untrusted archive only into an otherwise-empty + directory. This directory and its parent should be accessible only + to trusted users. For example: + + $ chmod go-rwx . + $ mkdir -m go-rwx dir + $ cd dir + $ tar -xvf /archives/got-it-off-the-net.tar.gz + + As a corollary, do not do an incremental restore from an untrusted + archive. + + * Do not let untrusted users access files extracted from untrusted + archives without checking first for problems such as setuid + programs. + + * Do not let untrusted users modify directories that are ancestors of + top-level arguments of 'tar'. For example, while you are executing + 'tar -cf /archive/u-home.tar /u/home', do not let an untrusted user + modify '/', '/archive', or '/u'. + + * Pay attention to the diagnostics and exit status of 'tar'. + + * When archiving live file systems, monitor running instances of + 'tar' to detect denial-of-service attacks. + + * Avoid unusual options such as '--absolute-names' ('-P'), + '--dereference' ('-h'), '--overwrite', '--recursive-unlink', and + '--remove-files' unless you understand their security implications. + + +File: tar.info, Node: Changes, Next: Configuring Help Summary, Prev: Reliability and security, Up: Top + +Appendix A Changes +****************** + +This appendix lists some important user-visible changes between version +GNU 'tar' 1.29 and previous versions. An up-to-date version of this +document is available at the GNU 'tar' documentation page +(http://www.gnu.org/software/tar/manual/changes.html). + +Use of globbing patterns when listing and extracting. + + Previous versions of GNU tar assumed shell-style globbing when + extracting from or listing an archive. For example: + + $ tar xf foo.tar '*.c' + + would extract all files whose names end in '.c'. This behavior was + not documented and was incompatible with traditional tar + implementations. Therefore, starting from version 1.15.91, GNU tar + no longer uses globbing by default. For example, the above + invocation is now interpreted as a request to extract from the + archive the file named '*.c'. + + To facilitate transition to the new behavior for those users who + got used to the previous incorrect one, 'tar' will print a warning + if it finds out that a requested member was not found in the + archive and its name looks like a globbing pattern. For example: + + $ tar xf foo.tar '*.c' + tar: Pattern matching characters used in file names. Please, + tar: use --wildcards to enable pattern matching, or --no-wildcards to + tar: suppress this warning. + tar: *.c: Not found in archive + tar: Error exit delayed from previous errors + + To treat member names as globbing patterns, use the '--wildcards' + option. If you want to tar to mimic the behavior of versions prior + to 1.15.91, add this option to your 'TAR_OPTIONS' variable. + + *Note wildcards::, for the detailed discussion of the use of + globbing patterns by GNU 'tar'. + +Use of short option '-o'. + + Earlier versions of GNU 'tar' understood '-o' command line option + as a synonym for '--old-archive'. + + GNU 'tar' starting from version 1.13.90 understands this option as + a synonym for '--no-same-owner'. This is compatible with UNIX98 + 'tar' implementations. + + However, to facilitate transition, '-o' option retains its old + semantics when it is used with one of archive-creation commands. + Users are encouraged to use '--format=oldgnu' instead. + + It is especially important, since versions of GNU Automake up to + and including 1.8.4 invoke tar with this option to produce + distribution tarballs. *Note v7: Formats, for the detailed + discussion of this issue and its implications. + + *Note tar-formats: (automake)Options, for a description on how to + use various archive formats with 'automake'. + + Future versions of GNU 'tar' will understand '-o' only as a synonym + for '--no-same-owner'. + +Use of short option '-l' + + Earlier versions of GNU 'tar' understood '-l' option as a synonym + for '--one-file-system'. Since such usage contradicted to UNIX98 + specification and harmed compatibility with other implementations, + it was declared deprecated in version 1.14. However, to facilitate + transition to its new semantics, it was supported by versions 1.15 + and 1.15.90. The present use of '-l' as a short variant of + '--check-links' was introduced in version 1.15.91. + +Use of options '--portability' and '--old-archive' + + These options are deprecated. Please use '--format=v7' instead. + +Use of option '--posix' + + This option is deprecated. Please use '--format=posix' instead. + + +File: tar.info, Node: Configuring Help Summary, Next: Fixing Snapshot Files, Prev: Changes, Up: Top + +Appendix B Configuring Help Summary +*********************************** + +Running 'tar --help' displays the short 'tar' option summary (*note +help::). This summary is organized by "groups" of semantically close +options. The options within each group are printed in the following +order: a short option, eventually followed by a list of corresponding +long option names, followed by a short description of the option. For +example, here is an excerpt from the actual 'tar --help' output: + + Main operation mode: + + -A, --catenate, --concatenate append tar files to an archive + -c, --create create a new archive + -d, --diff, --compare find differences between archive and + file system + --delete delete from the archive + + The exact visual representation of the help output is configurable +via 'ARGP_HELP_FMT' environment variable. The value of this variable is +a comma-separated list of "format variable" assignments. There are two +kinds of format variables. An "offset variable" keeps the offset of +some part of help output text from the leftmost column on the screen. A +"boolean" variable is a flag that toggles some output feature on or off. +Depending on the type of the corresponding variable, there are two kinds +of assignments: + +Offset assignment + + The assignment to an offset variable has the following syntax: + + VARIABLE=VALUE + + where VARIABLE is the variable name, and VALUE is a numeric value + to be assigned to the variable. + +Boolean assignment + + To assign 'true' value to a variable, simply put this variable + name. To assign 'false' value, prefix the variable name with + 'no-'. For example: + + # Assign true value: + dup-args + # Assign false value: + no-dup-args + + Following variables are declared: + + -- Help Output: boolean dup-args + If true, arguments for an option are shown with both short and long + options, even when a given option has both forms, for example: + + -f ARCHIVE, --file=ARCHIVE use archive file or device ARCHIVE + + If false, then if an option has both short and long forms, the + argument is only shown with the long one, for example: + + -f, --file=ARCHIVE use archive file or device ARCHIVE + + and a message indicating that the argument is applicable to both + forms is printed below the options. This message can be disabled + using 'dup-args-note' (see below). + + The default is false. + + -- Help Output: boolean dup-args-note + If this variable is true, which is the default, the following + notice is displayed at the end of the help output: + + Mandatory or optional arguments to long options are also + mandatory or optional for any corresponding short options. + + Setting 'no-dup-args-note' inhibits this message. Normally, only + one of variables 'dup-args' or 'dup-args-note' should be set. + + -- Help Output: offset short-opt-col + Column in which short options start. Default is 2. + + $ tar --help|grep ARCHIVE + -f, --file=ARCHIVE use archive file or device ARCHIVE + $ ARGP_HELP_FMT=short-opt-col=6 tar --help|grep ARCHIVE + -f, --file=ARCHIVE use archive file or device ARCHIVE + + -- Help Output: offset long-opt-col + Column in which long options start. Default is 6. For example: + + $ tar --help|grep ARCHIVE + -f, --file=ARCHIVE use archive file or device ARCHIVE + $ ARGP_HELP_FMT=long-opt-col=16 tar --help|grep ARCHIVE + -f, --file=ARCHIVE use archive file or device ARCHIVE + + -- Help Output: offset doc-opt-col + Column in which "doc options" start. A doc option isn't actually + an option, but rather an arbitrary piece of documentation that is + displayed in much the same manner as the options. For example, in + the description of '--format' option: + + -H, --format=FORMAT create archive of the given format. + + FORMAT is one of the following: + + gnu GNU tar 1.13.x format + oldgnu GNU format as per tar <= 1.12 + pax POSIX 1003.1-2001 (pax) format + posix same as pax + ustar POSIX 1003.1-1988 (ustar) format + v7 old V7 tar format + + the format names are doc options. Thus, if you set + 'ARGP_HELP_FMT=doc-opt-col=6' the above part of the help output + will look as follows: + + -H, --format=FORMAT create archive of the given format. + + FORMAT is one of the following: + + gnu GNU tar 1.13.x format + oldgnu GNU format as per tar <= 1.12 + pax POSIX 1003.1-2001 (pax) format + posix same as pax + ustar POSIX 1003.1-1988 (ustar) format + v7 old V7 tar format + + -- Help Output: offset opt-doc-col + Column in which option description starts. Default is 29. + + $ tar --help|grep ARCHIVE + -f, --file=ARCHIVE use archive file or device ARCHIVE + $ ARGP_HELP_FMT=opt-doc-col=19 tar --help|grep ARCHIVE + -f, --file=ARCHIVE use archive file or device ARCHIVE + $ ARGP_HELP_FMT=opt-doc-col=9 tar --help|grep ARCHIVE + -f, --file=ARCHIVE + use archive file or device ARCHIVE + + Notice, that the description starts on a separate line if + 'opt-doc-col' value is too small. + + -- Help Output: offset header-col + Column in which "group headers" are printed. A group header is a + descriptive text preceding an option group. For example, in the + following text: + + Main operation mode: + + -A, --catenate, --concatenate append tar files to + an archive + -c, --create create a new archive + 'Main operation mode:' is the group header. + + The default value is 1. + + -- Help Output: offset usage-indent + Indentation of wrapped usage lines. Affects '--usage' output. + Default is 12. + + -- Help Output: offset rmargin + Right margin of the text output. Used for wrapping. + + +File: tar.info, Node: Fixing Snapshot Files, Next: Tar Internals, Prev: Configuring Help Summary, Up: Top + +Appendix C Fixing Snapshot Files +******************************** + +Various situations can cause device numbers to change: upgrading your +kernel version, reconfiguring your hardware, loading kernel modules in a +different order, using virtual volumes that are assembled dynamically +(such as with LVM or RAID), hot-plugging drives (e.g. external USB or +Firewire drives), etc. In the majority of cases this change is +unnoticed by the users. However, it influences 'tar' incremental +backups: the device number is stored in tar snapshot files (*note +Snapshot Files::) and is used to determine whether the file has changed +since the last backup. If the device numbers change for some reason, by +default the next backup you run will be a full backup. + + To minimize the impact in these cases, GNU 'tar' comes with the +'tar-snapshot-edit' utility for inspecting and updating device numbers +in snapshot files. (The utility, written by Dustin J. Mitchell, is also +available from the GNU 'tar' home page +(http://www.gnu.org/software/tar/utils/tar-snapshot-edit.html).) + + To obtain a summary of the device numbers found in the snapshot file, +run + + $ tar-snapshot-edit SNAPFILE + +where SNAPFILE is the name of the snapshot file (you can supply as many +files as you wish in a single command line). You can then compare the +numbers across snapshot files, or against those currently in use on the +live filesystem (using 'ls -l' or 'stat'). + + Assuming the device numbers have indeed changed, it's often possible +to simply tell GNU 'tar' to ignore the device number when processing the +incremental snapshot files for these backups, using the +'--no-check-device' option (*note device numbers::). + + Alternatively, you can use the 'tar-edit-snapshot' script's '-r' +option to update all occurrences of the given device number in the +snapshot file(s). It takes a single argument of the form +'OLDDEV-NEWDEV', where OLDDEV is the device number used in the snapshot +file, and NEWDEV is the corresponding new device number. Both numbers +may be specified in hex (e.g., '0xfe01'), decimal (e.g., '65025'), or as +a major:minor number pair (e.g., '254:1'). To change several device +numbers at once, specify them in a single comma-separated list, as in +'-r 0x3060-0x4500,0x307-0x4600'. + + Before updating the snapshot file, it is a good idea to create a +backup copy of it. This is accomplished by '-b' option. The name of +the backup file is obtained by appending '~' to the original file name. + + An example session: + $ tar-snapshot-edit root_snap.0 boot_snap.0 + File: root_snap.0 + Detected snapshot file version: 2 + + Device 0x0000 occurs 1 times. + Device 0x0003 occurs 1 times. + Device 0x0005 occurs 1 times. + Device 0x0013 occurs 1 times. + Device 0x6801 occurs 1 times. + Device 0x6803 occurs 6626 times. + Device 0xfb00 occurs 1 times. + + File: boot_snap.0 + Detected snapshot file version: 2 + + Device 0x6801 occurs 3 times. + $ tar-snapshot-edit -b -r 0x6801-0x6901,0x6803-0x6903 root_snap.0 boot_snap.0 + File: root_snap.0 + Detected snapshot file version: 2 + + Updated 6627 records. + + File: boot_snap.0 + Detected snapshot file version: 2 + + Updated 3 records. + + +File: tar.info, Node: Tar Internals, Next: Genfile, Prev: Fixing Snapshot Files, Up: Top + +Appendix D Tar Internals +************************ + +* Menu: + +* Standard:: Basic Tar Format +* Extensions:: GNU Extensions to the Archive Format +* Sparse Formats:: Storing Sparse Files +* Snapshot Files:: +* Dumpdir:: + + +File: tar.info, Node: Standard, Next: Extensions, Up: Tar Internals + +Basic Tar Format +================ + + _(This message will disappear, once this node revised.)_ + + While an archive may contain many files, the archive itself is a +single ordinary file. Like any other file, an archive file can be +written to a storage device such as a tape or disk, sent through a pipe +or over a network, saved on the active file system, or even stored in +another archive. An archive file is not easy to read or manipulate +without using the 'tar' utility or Tar mode in GNU Emacs. + + Physically, an archive consists of a series of file entries +terminated by an end-of-archive entry, which consists of two 512 blocks +of zero bytes. A file entry usually describes one of the files in the +archive (an "archive member"), and consists of a file header and the +contents of the file. File headers contain file names and statistics, +checksum information which 'tar' uses to detect file corruption, and +information about file types. + + Archives are permitted to have more than one member with the same +member name. One way this situation can occur is if more than one +version of a file has been stored in the archive. For information about +adding new versions of a file to an archive, see *note update::. + + In addition to entries describing archive members, an archive may +contain entries which 'tar' itself uses to store information. *Note +label::, for an example of such an archive entry. + + A 'tar' archive file contains a series of blocks. Each block +contains 'BLOCKSIZE' bytes. Although this format may be thought of as +being on magnetic tape, other media are often used. + + Each file archived is represented by a header block which describes +the file, followed by zero or more blocks which give the contents of the +file. At the end of the archive file there are two 512-byte blocks +filled with binary zeros as an end-of-file marker. A reasonable system +should write such end-of-file marker at the end of an archive, but must +not assume that such a block exists when reading an archive. In +particular GNU 'tar' always issues a warning if it does not encounter +it. + + The blocks may be "blocked" for physical I/O operations. Each record +of N blocks (where N is set by the '--blocking-factor=512-SIZE' ('-b +512-SIZE') option to 'tar') is written with a single 'write ()' +operation. On magnetic tapes, the result of such a write is a single +record. When writing an archive, the last record of blocks should be +written at the full size, with blocks after the zero block containing +all zeros. When reading an archive, a reasonable system should properly +handle an archive whose last record is shorter than the rest, or which +contains garbage records after a zero block. + + The header block is defined in C as follows. In the GNU 'tar' +distribution, this is part of file 'src/tar.h': + + + /* tar Header Block, from POSIX 1003.1-1990. */ + + /* POSIX header. */ + + struct posix_header + { /* byte offset */ + char name[100]; /* 0 */ + char mode[8]; /* 100 */ + char uid[8]; /* 108 */ + char gid[8]; /* 116 */ + char size[12]; /* 124 */ + char mtime[12]; /* 136 */ + char chksum[8]; /* 148 */ + char typeflag; /* 156 */ + char linkname[100]; /* 157 */ + char magic[6]; /* 257 */ + char version[2]; /* 263 */ + char uname[32]; /* 265 */ + char gname[32]; /* 297 */ + char devmajor[8]; /* 329 */ + char devminor[8]; /* 337 */ + char prefix[155]; /* 345 */ + /* 500 */ + }; + + #define TMAGIC "ustar" /* ustar and a null */ + #define TMAGLEN 6 + #define TVERSION "00" /* 00 and no null */ + #define TVERSLEN 2 + + /* Values used in typeflag field. */ + #define REGTYPE '0' /* regular file */ + #define AREGTYPE '\0' /* regular file */ + #define LNKTYPE '1' /* link */ + #define SYMTYPE '2' /* reserved */ + #define CHRTYPE '3' /* character special */ + #define BLKTYPE '4' /* block special */ + #define DIRTYPE '5' /* directory */ + #define FIFOTYPE '6' /* FIFO special */ + #define CONTTYPE '7' /* reserved */ + + #define XHDTYPE 'x' /* Extended header referring to the + next file in the archive */ + #define XGLTYPE 'g' /* Global extended header */ + + /* Bits used in the mode field, values in octal. */ + #define TSUID 04000 /* set UID on execution */ + #define TSGID 02000 /* set GID on execution */ + #define TSVTX 01000 /* reserved */ + /* file permissions */ + #define TUREAD 00400 /* read by owner */ + #define TUWRITE 00200 /* write by owner */ + #define TUEXEC 00100 /* execute/search by owner */ + #define TGREAD 00040 /* read by group */ + #define TGWRITE 00020 /* write by group */ + #define TGEXEC 00010 /* execute/search by group */ + #define TOREAD 00004 /* read by other */ + #define TOWRITE 00002 /* write by other */ + #define TOEXEC 00001 /* execute/search by other */ + + /* tar Header Block, GNU extensions. */ + + /* In GNU tar, SYMTYPE is for to symbolic links, and CONTTYPE is for + contiguous files, so maybe disobeying the "reserved" comment in POSIX + header description. I suspect these were meant to be used this way, and + should not have really been "reserved" in the published standards. */ + + /* *BEWARE* *BEWARE* *BEWARE* that the following information is still + boiling, and may change. Even if the OLDGNU format description should be + accurate, the so-called GNU format is not yet fully decided. It is + surely meant to use only extensions allowed by POSIX, but the sketch + below repeats some ugliness from the OLDGNU format, which should rather + go away. Sparse files should be saved in such a way that they do *not* + require two passes at archive creation time. Huge files get some POSIX + fields to overflow, alternate solutions have to be sought for this. */ + + /* Descriptor for a single file hole. */ + + struct sparse + { /* byte offset */ + char offset[12]; /* 0 */ + char numbytes[12]; /* 12 */ + /* 24 */ + }; + + /* Sparse files are not supported in POSIX ustar format. For sparse files + with a POSIX header, a GNU extra header is provided which holds overall + sparse information and a few sparse descriptors. When an old GNU header + replaces both the POSIX header and the GNU extra header, it holds some + sparse descriptors too. Whether POSIX or not, if more sparse descriptors + are still needed, they are put into as many successive sparse headers as + necessary. The following constants tell how many sparse descriptors fit + in each kind of header able to hold them. */ + + #define SPARSES_IN_EXTRA_HEADER 16 + #define SPARSES_IN_OLDGNU_HEADER 4 + #define SPARSES_IN_SPARSE_HEADER 21 + + /* Extension header for sparse files, used immediately after the GNU extra + header, and used only if all sparse information cannot fit into that + extra header. There might even be many such extension headers, one after + the other, until all sparse information has been recorded. */ + + struct sparse_header + { /* byte offset */ + struct sparse sp[SPARSES_IN_SPARSE_HEADER]; + /* 0 */ + char isextended; /* 504 */ + /* 505 */ + }; + + /* The old GNU format header conflicts with POSIX format in such a way that + POSIX archives may fool old GNU tar's, and POSIX tar's might well be + fooled by old GNU tar archives. An old GNU format header uses the space + used by the prefix field in a POSIX header, and cumulates information + normally found in a GNU extra header. With an old GNU tar header, we + never see any POSIX header nor GNU extra header. Supplementary sparse + headers are allowed, however. */ + + struct oldgnu_header + { /* byte offset */ + char unused_pad1[345]; /* 0 */ + char atime[12]; /* 345 Incr. archive: atime of the file */ + char ctime[12]; /* 357 Incr. archive: ctime of the file */ + char offset[12]; /* 369 Multivolume archive: the offset of + the start of this volume */ + char longnames[4]; /* 381 Not used */ + char unused_pad2; /* 385 */ + struct sparse sp[SPARSES_IN_OLDGNU_HEADER]; + /* 386 */ + char isextended; /* 482 Sparse file: Extension sparse header + follows */ + char realsize[12]; /* 483 Sparse file: Real size*/ + /* 495 */ + }; + + /* OLDGNU_MAGIC uses both magic and version fields, which are contiguous. + Found in an archive, it indicates an old GNU header format, which will be + hopefully become obsolescent. With OLDGNU_MAGIC, uname and gname are + valid, though the header is not truly POSIX conforming. */ + #define OLDGNU_MAGIC "ustar " /* 7 chars and a null */ + + /* The standards committee allows only capital A through capital Z for + user-defined expansion. Other letters in use include: + + 'A' Solaris Access Control List + 'E' Solaris Extended Attribute File + 'I' Inode only, as in 'star' + 'N' Obsolete GNU tar, for file names that do not fit into the main header. + 'X' POSIX 1003.1-2001 eXtended (VU version) */ + + /* This is a dir entry that contains the names of files that were in the + dir at the time the dump was made. */ + #define GNUTYPE_DUMPDIR 'D' + + /* Identifies the *next* file on the tape as having a long linkname. */ + #define GNUTYPE_LONGLINK 'K' + + /* Identifies the *next* file on the tape as having a long name. */ + #define GNUTYPE_LONGNAME 'L' + + /* This is the continuation of a file that began on another volume. */ + #define GNUTYPE_MULTIVOL 'M' + + /* This is for sparse files. */ + #define GNUTYPE_SPARSE 'S' + + /* This file is a tape/volume header. Ignore it on extraction. */ + #define GNUTYPE_VOLHDR 'V' + + /* Solaris extended header */ + #define SOLARIS_XHDTYPE 'X' + + /* Jo"rg Schilling star header */ + + struct star_header + { /* byte offset */ + char name[100]; /* 0 */ + char mode[8]; /* 100 */ + char uid[8]; /* 108 */ + char gid[8]; /* 116 */ + char size[12]; /* 124 */ + char mtime[12]; /* 136 */ + char chksum[8]; /* 148 */ + char typeflag; /* 156 */ + char linkname[100]; /* 157 */ + char magic[6]; /* 257 */ + char version[2]; /* 263 */ + char uname[32]; /* 265 */ + char gname[32]; /* 297 */ + char devmajor[8]; /* 329 */ + char devminor[8]; /* 337 */ + char prefix[131]; /* 345 */ + char atime[12]; /* 476 */ + char ctime[12]; /* 488 */ + /* 500 */ + }; + + #define SPARSES_IN_STAR_HEADER 4 + #define SPARSES_IN_STAR_EXT_HEADER 21 + + struct star_in_header + { + char fill[345]; /* 0 Everything that is before t_prefix */ + char prefix[1]; /* 345 t_name prefix */ + char fill2; /* 346 */ + char fill3[8]; /* 347 */ + char isextended; /* 355 */ + struct sparse sp[SPARSES_IN_STAR_HEADER]; /* 356 */ + char realsize[12]; /* 452 Actual size of the file */ + char offset[12]; /* 464 Offset of multivolume contents */ + char atime[12]; /* 476 */ + char ctime[12]; /* 488 */ + char mfill[8]; /* 500 */ + char xmagic[4]; /* 508 "tar" */ + }; + + struct star_ext_header + { + struct sparse sp[SPARSES_IN_STAR_EXT_HEADER]; + char isextended; + }; + + + All characters in header blocks are represented by using 8-bit +characters in the local variant of ASCII. Each field within the +structure is contiguous; that is, there is no padding used within the +structure. Each character on the archive medium is stored contiguously. + + Bytes representing the contents of files (after the header block of +each file) are not translated in any way and are not constrained to +represent characters in any character set. The 'tar' format does not +distinguish text files from binary files, and no translation of file +contents is performed. + + The 'name', 'linkname', 'magic', 'uname', and 'gname' are +null-terminated character strings. All other fields are zero-filled +octal numbers in ASCII. Each numeric field of width W contains W minus 1 +digits, and a null. + + The 'name' field is the file name of the file, with directory names +(if any) preceding the file name, separated by slashes. + + The 'mode' field provides nine bits specifying file permissions and +three bits to specify the Set UID, Set GID, and Save Text ("sticky") +modes. Values for these bits are defined above. When special +permissions are required to create a file with a given mode, and the +user restoring files from the archive does not hold such permissions, +the mode bit(s) specifying those special permissions are ignored. Modes +which are not supported by the operating system restoring files from the +archive will be ignored. Unsupported modes should be faked up when +creating or updating an archive; e.g., the group permission could be +copied from the _other_ permission. + + The 'uid' and 'gid' fields are the numeric user and group ID of the +file owners, respectively. If the operating system does not support +numeric user or group IDs, these fields should be ignored. + + The 'size' field is the size of the file in bytes; linked files are +archived with this field specified as zero. + + The 'mtime' field is the data modification time of the file at the +time it was archived. It is the ASCII representation of the octal value +of the last time the file's contents were modified, represented as an +integer number of seconds since January 1, 1970, 00:00 Coordinated +Universal Time. + + The 'chksum' field is the ASCII representation of the octal value of +the simple sum of all bytes in the header block. Each 8-bit byte in the +header is added to an unsigned integer, initialized to zero, the +precision of which shall be no less than seventeen bits. When +calculating the checksum, the 'chksum' field is treated as if it were +all blanks. + + The 'typeflag' field specifies the type of file archived. If a +particular implementation does not recognize or permit the specified +type, the file will be extracted as if it were a regular file. As this +action occurs, 'tar' issues a warning to the standard error. + + The 'atime' and 'ctime' fields are used in making incremental +backups; they store, respectively, the particular file's access and +status change times. + + The 'offset' is used by the '--multi-volume' ('-M') option, when +making a multi-volume archive. The offset is number of bytes into the +file that we need to restart at to continue the file on the next tape, +i.e., where we store the location that a continued file is continued at. + + The following fields were added to deal with sparse files. A file is +"sparse" if it takes in unallocated blocks which end up being +represented as zeros, i.e., no useful data. A test to see if a file is +sparse is to look at the number blocks allocated for it versus the +number of characters in the file; if there are fewer blocks allocated +for the file than would normally be allocated for a file of that size, +then the file is sparse. This is the method 'tar' uses to detect a +sparse file, and once such a file is detected, it is treated differently +from non-sparse files. + + Sparse files are often 'dbm' files, or other database-type files +which have data at some points and emptiness in the greater part of the +file. Such files can appear to be very large when an 'ls -l' is done on +them, when in truth, there may be a very small amount of important data +contained in the file. It is thus undesirable to have 'tar' think that +it must back up this entire file, as great quantities of room are wasted +on empty blocks, which can lead to running out of room on a tape far +earlier than is necessary. Thus, sparse files are dealt with so that +these empty blocks are not written to the tape. Instead, what is +written to the tape is a description, of sorts, of the sparse file: +where the holes are, how big the holes are, and how much data is found +at the end of the hole. This way, the file takes up potentially far +less room on the tape, and when the file is extracted later on, it will +look exactly the way it looked beforehand. The following is a +description of the fields used to handle a sparse file: + + The 'sp' is an array of 'struct sparse'. Each 'struct sparse' +contains two 12-character strings which represent an offset into the +file and a number of bytes to be written at that offset. The offset is +absolute, and not relative to the offset in preceding array element. + + The header can hold four of these 'struct sparse' at the moment; if +more are needed, they are not stored in the header. + + The 'isextended' flag is set when an 'extended_header' is needed to +deal with a file. Note that this means that this flag can only be set +when dealing with a sparse file, and it is only set in the event that +the description of the file will not fit in the allotted room for sparse +structures in the header. In other words, an extended_header is needed. + + The 'extended_header' structure is used for sparse files which need +more sparse structures than can fit in the header. The header can fit 4 +such structures; if more are needed, the flag 'isextended' gets set and +the next block is an 'extended_header'. + + Each 'extended_header' structure contains an array of 21 sparse +structures, along with a similar 'isextended' flag that the header had. +There can be an indeterminate number of such 'extended_header's to +describe a sparse file. + +'REGTYPE' +'AREGTYPE' + These flags represent a regular file. In order to be compatible + with older versions of 'tar', a 'typeflag' value of 'AREGTYPE' + should be silently recognized as a regular file. New archives + should be created using 'REGTYPE'. Also, for backward + compatibility, 'tar' treats a regular file whose name ends with a + slash as a directory. + +'LNKTYPE' + This flag represents a file linked to another file, of any type, + previously archived. Such files are identified in Unix by each + file having the same device and inode number. The linked-to name + is specified in the 'linkname' field with a trailing null. + +'SYMTYPE' + This represents a symbolic link to another file. The linked-to + name is specified in the 'linkname' field with a trailing null. + +'CHRTYPE' +'BLKTYPE' + These represent character special files and block special files + respectively. In this case the 'devmajor' and 'devminor' fields + will contain the major and minor device numbers respectively. + Operating systems may map the device specifications to their own + local specification, or may ignore the entry. + +'DIRTYPE' + This flag specifies a directory or sub-directory. The directory + name in the 'name' field should end with a slash. On systems where + disk allocation is performed on a directory basis, the 'size' field + will contain the maximum number of bytes (which may be rounded to + the nearest disk block allocation unit) which the directory may + hold. A 'size' field of zero indicates no such limiting. Systems + which do not support limiting in this manner should ignore the + 'size' field. + +'FIFOTYPE' + This specifies a FIFO special file. Note that the archiving of a + FIFO file archives the existence of this file and not its contents. + +'CONTTYPE' + This specifies a contiguous file, which is the same as a normal + file except that, in operating systems which support it, all its + space is allocated contiguously on the disk. Operating systems + which do not allow contiguous allocation should silently treat this + type as a normal file. + +'A' ... 'Z' + These are reserved for custom implementations. Some of these are + used in the GNU modified format, as described below. + + Other values are reserved for specification in future revisions of +the P1003 standard, and should not be used by any 'tar' program. + + The 'magic' field indicates that this archive was output in the P1003 +archive format. If this field contains 'TMAGIC', the 'uname' and +'gname' fields will contain the ASCII representation of the owner and +group of the file respectively. If found, the user and group IDs are +used rather than the values in the 'uid' and 'gid' fields. + + For references, see ISO/IEC 9945-1:1990 or IEEE Std 1003.1-1990, +pages 169-173 (section 10.1) for 'Archive/Interchange File Format'; and +IEEE Std 1003.2-1992, pages 380-388 (section 4.48) and pages 936-940 +(section E.4.48) for 'pax - Portable archive interchange'. + + +File: tar.info, Node: Extensions, Next: Sparse Formats, Prev: Standard, Up: Tar Internals + +GNU Extensions to the Archive Format +==================================== + + _(This message will disappear, once this node revised.)_ + + The GNU format uses additional file types to describe new types of +files in an archive. These are listed below. + +'GNUTYPE_DUMPDIR' +''D'' + This represents a directory and a list of files created by the + '--incremental' ('-G') option. The 'size' field gives the total + size of the associated list of files. Each file name is preceded + by either a 'Y' (the file should be in this archive) or an 'N'. + (The file is a directory, or is not stored in the archive.) Each + file name is terminated by a null. There is an additional null + after the last file name. + +'GNUTYPE_MULTIVOL' +''M'' + This represents a file continued from another volume of a + multi-volume archive created with the '--multi-volume' ('-M') + option. The original type of the file is not given here. The + 'size' field gives the maximum size of this piece of the file + (assuming the volume does not end before the file is written out). + The 'offset' field gives the offset from the beginning of the file + where this part of the file begins. Thus 'size' plus 'offset' + should equal the original size of the file. + +'GNUTYPE_SPARSE' +''S'' + This flag indicates that we are dealing with a sparse file. Note + that archiving a sparse file requires special operations to find + holes in the file, which mark the positions of these holes, along + with the number of bytes of data to be found after the hole. + +'GNUTYPE_VOLHDR' +''V'' + This file type is used to mark the volume header that was given + with the '--label=ARCHIVE-LABEL' ('-V ARCHIVE-LABEL') option when + the archive was created. The 'name' field contains the 'name' + given after the '--label=ARCHIVE-LABEL' ('-V ARCHIVE-LABEL') + option. The 'size' field is zero. Only the first file in each + volume of an archive should have this type. + + You may have trouble reading a GNU format archive on a non-GNU system +if the options '--incremental' ('-G'), '--multi-volume' ('-M'), +'--sparse' ('-S'), or '--label=ARCHIVE-LABEL' ('-V ARCHIVE-LABEL') were +used when writing the archive. In general, if 'tar' does not use the +GNU-added fields of the header, other versions of 'tar' should be able +to read the archive. Otherwise, the 'tar' program will give an error, +the most likely one being a checksum error. + + +File: tar.info, Node: Sparse Formats, Next: Snapshot Files, Prev: Extensions, Up: Tar Internals + +Storing Sparse Files +==================== + +The notion of sparse file, and the ways of handling it from the point of +view of GNU 'tar' user have been described in detail in *note sparse::. +This chapter describes the internal format GNU 'tar' uses to store such +files. + + The support for sparse files in GNU 'tar' has a long history. The +earliest version featuring this support that I was able to find was +1.09, released in November, 1990. The format introduced back then is +called "old GNU" sparse format and in spite of the fact that its design +contained many flaws, it was the only format GNU 'tar' supported until +version 1.14 (May, 2004), which introduced initial support for sparse +archives in PAX archives (*note posix::). This format was not free from +design flaws, either and it was subsequently improved in versions 1.15.2 +(November, 2005) and 1.15.92 (June, 2006). + + In addition to GNU sparse format, GNU 'tar' is able to read and +extract sparse files archived by 'star'. + + The following subsections describe each format in detail. + +* Menu: + +* Old GNU Format:: +* PAX 0:: PAX Format, Versions 0.0 and 0.1 +* PAX 1:: PAX Format, Version 1.0 + + +File: tar.info, Node: Old GNU Format, Next: PAX 0, Up: Sparse Formats + +Old GNU Format +-------------- + +The format introduced in November 1990 (v. 1.09) was designed on top of +standard 'ustar' headers in such an unfortunate way that some of its +fields overwrote fields required by POSIX. + + An old GNU sparse header is designated by type 'S' ('GNUTYPE_SPARSE') +and has the following layout: + +Offset Size Name Data type Contents +---------------------------------------------------------------------------- +0 345 N/A Not used. +345 12 atime Number 'atime' of the file. +357 12 ctime Number 'ctime' of the file . +369 12 offset Number For multivolume archives: + the offset of the start of + this volume. +381 4 N/A Not used. +385 1 N/A Not used. +386 96 sp 'sparse_header'(4 entries) File map. +482 1 isextended Bool '1' if an extension sparse + header follows, '0' + otherwise. +483 12 realsize Number Real size of the file. + + Each of 'sparse_header' object at offset 386 describes a single data +chunk. It has the following structure: + +Offset Size Data type Contents +--------------------------------------------------------------------------- +0 12 Number Offset of the beginning of the chunk. +12 12 Number Size of the chunk. + + If the member contains more than four chunks, the 'isextended' field +of the header has the value '1' and the main header is followed by one +or more "extension headers". Each such header has the following +structure: + +Offset Size Name Data type Contents +---------------------------------------------------------------------------- +0 21 sp 'sparse_header'(21 entries) File map. +504 1 isextended Bool '1' if an extension sparse + header follows, or '0' + otherwise. + + A header with 'isextended=0' ends the map. + + +File: tar.info, Node: PAX 0, Next: PAX 1, Prev: Old GNU Format, Up: Sparse Formats + +PAX Format, Versions 0.0 and 0.1 +-------------------------------- + +There are two formats available in this branch. The version '0.0' is +the initial version of sparse format used by 'tar' versions 1.14-1.15.1. +The sparse file map is kept in extended ('x') PAX header variables: + +'GNU.sparse.size' + Real size of the stored file; + +'GNU.sparse.numblocks' + Number of blocks in the sparse map; + +'GNU.sparse.offset' + Offset of the data block; + +'GNU.sparse.numbytes' + Size of the data block. + + The latter two variables repeat for each data block, so the overall +structure is like this: + + GNU.sparse.size=SIZE + GNU.sparse.numblocks=NUMBLOCKS + repeat NUMBLOCKS times + GNU.sparse.offset=OFFSET + GNU.sparse.numbytes=NUMBYTES + end repeat + + This format presented the following two problems: + + 1. Whereas the POSIX specification allows a variable to appear + multiple times in a header, it requires that only the last + occurrence be meaningful. Thus, multiple occurrences of + 'GNU.sparse.offset' and 'GNU.sparse.numbytes' are conflicting with + the POSIX specs. + + 2. Attempting to extract such archives using a third-party's 'tar' + results in extraction of sparse files in _condensed form_. If the + 'tar' implementation in question does not support POSIX format, it + will also extract a file containing extension header attributes. + This file can be used to expand the file to its original state. + However, posix-aware 'tar's will usually ignore the unknown + variables, which makes restoring the file more difficult. *Note + Extraction of sparse members in v.0.0 format: extracting sparse + v.0.x, for the detailed description of how to restore such members + using non-GNU 'tar's. + + GNU 'tar' 1.15.2 introduced sparse format version '0.1', which +attempted to solve these problems. As its predecessor, this format +stores sparse map in the extended POSIX header. It retains +'GNU.sparse.size' and 'GNU.sparse.numblocks' variables, but instead of +'GNU.sparse.offset'/'GNU.sparse.numbytes' pairs it uses a single +variable: + +'GNU.sparse.map' + Map of non-null data chunks. It is a string consisting of + comma-separated values "OFFSET,SIZE[,OFFSET-1,SIZE-1...]" + + To address the 2nd problem, the 'name' field in 'ustar' is replaced +with a special name, constructed using the following pattern: + + %d/GNUSparseFile.%p/%f + + The real name of the sparse file is stored in the variable +'GNU.sparse.name'. Thus, those 'tar' implementations that are not aware +of GNU extensions will at least extract the files into separate +directories, giving the user a possibility to expand it afterwards. +*Note Extraction of sparse members in v.0.1 format: extracting sparse +v.0.x, for the detailed description of how to restore such members using +non-GNU 'tar's. + + The resulting 'GNU.sparse.map' string can be _very_ long. Although +POSIX does not impose any limit on the length of a 'x' header variable, +this possibly can confuse some 'tar's. + + +File: tar.info, Node: PAX 1, Prev: PAX 0, Up: Sparse Formats + +PAX Format, Version 1.0 +----------------------- + +The version '1.0' of sparse format was introduced with GNU 'tar' +1.15.92. Its main objective was to make the resulting file extractable +with little effort even by non-posix aware 'tar' implementations. +Starting from this version, the extended header preceding a sparse +member always contains the following variables that identify the format +being used: + +'GNU.sparse.major' + Major version + +'GNU.sparse.minor' + Minor version + + The 'name' field in 'ustar' header contains a special name, +constructed using the following pattern: + + %d/GNUSparseFile.%p/%f + + The real name of the sparse file is stored in the variable +'GNU.sparse.name'. The real size of the file is stored in the variable +'GNU.sparse.realsize'. + + The sparse map itself is stored in the file data block, preceding the +actual file data. It consists of a series of octal numbers of arbitrary +length, delimited by newlines. The map is padded with nulls to the +nearest block boundary. + + The first number gives the number of entries in the map. Following +are map entries, each one consisting of two numbers giving the offset +and size of the data block it describes. + + The format is designed in such a way that non-posix aware 'tar's and +'tar's not supporting 'GNU.sparse.*' keywords will extract each sparse +file in its condensed form with the file map prepended and will place it +into a separate directory. Then, using a simple program it would be +possible to expand the file to its original form even without GNU 'tar'. +*Note Sparse Recovery::, for the detailed information on how to extract +sparse members without GNU 'tar'. + + +File: tar.info, Node: Snapshot Files, Next: Dumpdir, Prev: Sparse Formats, Up: Tar Internals + +Format of the Incremental Snapshot Files +======================================== + +A "snapshot file" (or "directory file") is created during incremental +backups (*note Incremental Dumps::). It contains the status of the file +system at the time of the dump and is used to determine which files were +modified since the last backup. + + GNU 'tar' version 1.29 supports three snapshot file formats. The +first format, called "format 0", is the one used by GNU 'tar' versions +up to and including 1.15.1. The second format, called "format 1" is an +extended version of this format, that contains more metadata and allows +for further extensions. It was used by alpha release version 1.15.90. +For alpha version 1.15.91 and stable releases version 1.16 up through +1.29, the "format 2" is used. + + GNU 'tar' is able to read all three formats, but will create +snapshots only in format 2. + + This appendix describes all three formats in detail. + + 0. 'Format 0' snapshot file begins with a line containing a decimal + number that represents a UNIX timestamp of the beginning of the + last archivation. This line is followed by directory metadata + descriptions, one per line. Each description has the following + format: + + [NFS]DEV INODE NAME + + where: + + NFS + A single plus character ('+'), if this directory is located on + an NFS-mounted partition, otherwise empty. + + (That is, for non-NFS directories, the first character on the + description line contains the start of the DEV field.) + + DEV + Device number of the directory; + + INODE + I-node number of the directory; + + NAME + Name of the directory. Any special characters (white-space, + backslashes, etc.) are quoted. + + 1. 'Format 1' snapshot file begins with a line specifying the format + of the file. This line has the following structure: + + 'GNU tar-'TAR-VERSION'-'INCR-FORMAT-VERSION + + where TAR-VERSION is the version number of GNU 'tar' implementation + that created this snapshot, and INCR-FORMAT-VERSION is the version + number of the snapshot format (in this case '1'). + + Next line contains two decimal numbers, representing the time of + the last backup. First number is the number of seconds, the second + one is the number of nanoseconds, since the beginning of the epoch. + + Lines that follow contain directory metadata, one line per + directory. Each line is formatted as follows: + + [NFS]MTIME-SEC MTIME-NSEC DEV INODE NAME + + where MTIME-SEC and MTIME-NSEC represent last modification time of + this directory with nanosecond precision; NFS, DEV, INODE and NAME + have the same meaning as with 'format 0'. + + 2. 'Format 2' snapshot file begins with a format identifier, as + described for version 1, e.g.: + + GNU tar-1.29-2 + + This line is followed by newline. Rest of file consists of + records, separated by null (ASCII 0) characters. Thus, in contrast + to the previous formats, format 2 snapshot is a binary file. + + First two records are decimal integers, representing the time of + the last backup. First number is the number of seconds, the second + one is the number of nanoseconds, since the beginning of the epoch. + These are followed by arbitrary number of directory records. + + Each "directory record" contains a set of metadata describing a + particular directory. Parts of a directory record are delimited + with ASCII 0 characters. The following table describes each part. + The "Number" type in this table stands for a decimal integer in + ASCII notation. (Negative values are preceded with a "-" + character, while positive values have no leading punctuation.) + + Field Type Description + --------------------------------------------------------------------------- + nfs Character '1' if the directory is located on an + NFS-mounted partition, or '0' otherwise; + timestamp_sec Number Modification time, seconds; + timestamp_nsec Number Modification time, nanoseconds; + dev Number Device number; + ino Number I-node number; + name String Directory name; in contrast to the + previous versions it is not quoted; + contents Dumpdir Contents of the directory; + *Note Dumpdir::, for a description of its + format. + + Dumpdirs stored in snapshot files contain only records of types + 'Y', 'N' and 'D'. + + The specific range of values allowed in each of the "Number" fields + depends on the underlying C datatypes as determined when 'tar' is + compiled. To see the specific ranges allowed for a particular + 'tar' binary, you can use the '--show-snapshot-field-ranges' + option: + + $ tar --show-shapshot-field-ranges + This tar's snapshot file field ranges are + (field name => [ min, max ]): + + nfs => [ 0, 1 ], + timestamp_sec => [ -9223372036854775808, 9223372036854775807 ], + timestamp_nsec => [ 0, 999999999 ], + dev => [ 0, 18446744073709551615 ], + ino => [ 0, 18446744073709551615 ], + + (This example is from a GNU/Linux x86_64 system.) + + +File: tar.info, Node: Dumpdir, Prev: Snapshot Files, Up: Tar Internals + +Dumpdir +======= + +Incremental archives keep information about contents of each dumped +directory in special data blocks called "dumpdirs". + + Dumpdir is a sequence of entries of the following form: + + C FILENAME \0 + +where C is one of the "control codes" described below, FILENAME is the +name of the file C operates upon, and '\0' represents a nul character +(ASCII 0). The white space characters were added for readability, real +dumpdirs do not contain them. + + Each dumpdir ends with a single nul character. + + The following table describes control codes and their meanings: + +'Y' + FILENAME is contained in the archive. + +'N' + FILENAME was present in the directory at the time the archive was + made, yet it was not dumped to the archive, because it had not + changed since the last backup. + +'D' + FILENAME is a directory. + +'R' + This code requests renaming of the FILENAME to the name specified + with the 'T' command, that immediately follows it. + +'T' + Specify target file name for 'R' command (see below). + +'X' + Specify "temporary directory" name for a rename operation (see + below). + + Codes 'Y', 'N' and 'D' require FILENAME argument to be a relative +file name to the directory this dumpdir describes, whereas codes 'R', +'T' and 'X' require their argument to be an absolute file name. + + The three codes 'R', 'T' and 'X' specify a "renaming operation". In +the simplest case it is: + + Rsource\0Tdest\0 + +which means "rename file 'source' to file 'dest'". + + However, there are cases that require using a "temporary directory". +For example, consider the following scenario: + + 1. Previous run dumped a directory 'foo' which contained the following + three directories: + + a + b + c + + 2. They were renamed _cyclically_, so that: + + a became b + b became c + c became a + + 3. New incremental dump was made. + + This case cannot be handled by three successive renames, since +renaming 'a' to 'b' will destroy the existing directory. To correctly +process it, GNU 'tar' needs a temporary directory, so it creates the +following dumpdir (newlines have been added for readability): + + Xfoo\0 + Rfoo/a\0T\0 + Rfoo/b\0Tfoo/c\0 + Rfoo/c\0Tfoo/a\0 + R\0Tfoo/a\0 + + The first command, 'Xfoo\0', instructs the extractor to create a +temporary directory in the directory 'foo'. Second command, +'Rfoo/aT\0', says "rename file 'foo/a' to the temporary directory that +has just been created" (empty file name after a command means use +temporary directory). Third and fourth commands work as usual, and, +finally, the last command, 'R\0Tfoo/a\0' tells tar to rename the +temporary directory to 'foo/a'. + + The exact placement of a dumpdir in the archive depends on the +archive format (*note Formats::): + + * PAX archives + + In PAX archives, dumpdir is stored in the extended header of the + corresponding directory, in variable 'GNU.dumpdir'. + + * GNU and old GNU archives + + These formats implement special header type 'D', which is similar + to ustar header '5' (directory), except that it precedes a data + block containing the dumpdir. + + +File: tar.info, Node: Genfile, Next: Free Software Needs Free Documentation, Prev: Tar Internals, Up: Top + +Appendix E Genfile +****************** + +This appendix describes 'genfile', an auxiliary program used in the GNU +tar testsuite. If you are not interested in developing GNU tar, skip +this appendix. + + Initially, 'genfile' was used to generate data files for the +testsuite, hence its name. However, new operation modes were being +implemented as the testsuite grew more sophisticated, and now 'genfile' +is a multi-purpose instrument. + + There are three basic operation modes: + +File Generation + This is the default mode. In this mode, 'genfile' generates data + files. + +File Status + In this mode 'genfile' displays status of specified files. + +Synchronous Execution. + In this mode 'genfile' executes the given program with + '--checkpoint' option and executes a set of actions when specified + checkpoints are reached. + +* Menu: + +* Generate Mode:: File Generation Mode. +* Status Mode:: File Status Mode. +* Exec Mode:: Synchronous Execution mode. + + +File: tar.info, Node: Generate Mode, Next: Status Mode, Up: Genfile + +E.1 Generate Mode +================= + +In this mode 'genfile' creates a data file for the test suite. The size +of the file is given with the '--length' ('-l') option. By default the +file contents is written to the standard output, this can be changed +using '--file' ('-f') command line option. Thus, the following two +commands are equivalent: + + genfile --length 100 > outfile + genfile --length 100 --file outfile + + If '--length' is not given, 'genfile' will generate an empty +(zero-length) file. + + The command line option '--seek=N' istructs 'genfile' to skip the +given number of bytes (N) in the output file before writing to it. It +is similar to the 'seek=N' of the 'dd' utility. + + You can instruct 'genfile' to create several files at one go, by +giving it '--files-from' ('-T') option followed by a name of file +containing a list of file names. Using dash ('-') instead of the file +name causes 'genfile' to read file list from the standard input. For +example: + + # Read file names from file file.list + genfile --files-from file.list + # Read file names from standard input + genfile --files-from - + + The list file is supposed to contain one file name per line. To use +file lists separated by ASCII NUL character, use '--null' ('-0') command +line option: + + genfile --null --files-from file.list + + The default data pattern for filling the generated file consists of +first 256 letters of ASCII code, repeated enough times to fill the +entire file. This behavior can be changed with '--pattern' option. +This option takes a mandatory argument, specifying pattern name to use. +Currently two patterns are implemented: + +'--pattern=default' + The default pattern as described above. + +'--pattern=zero' + Fills the file with zeroes. + + If no file name was given, the program exits with the code '0'. +Otherwise, it exits with '0' only if it was able to create a file of the +specified length. + + Special option '--sparse' ('-s') instructs 'genfile' to create a +sparse file. Sparse files consist of "data fragments", separated by +"holes" or blocks of zeros. On many operating systems, actual disk +storage is not allocated for holes, but they are counted in the length +of the file. To create a sparse file, 'genfile' should know where to +put data fragments, and what data to use to fill them. So, when +'--sparse' is given the rest of the command line specifies a so-called +"file map". + + The file map consists of any number of "fragment descriptors". Each +descriptor is composed of two values: a number, specifying fragment +offset from the end of the previous fragment or, for the very first +fragment, from the beginning of the file, and "contents string", that +specifies the pattern to fill the fragment with. File offset can be +suffixed with the following quantifiers: + +'k' +'K' + The number is expressed in kilobytes. +'m' +'M' + The number is expressed in megabytes. +'g' +'G' + The number is expressed in gigabytes. + + Contents string can be either a fragment size or a pattern. Fragment +size is a decimal number, prefixed with an equals sign. It can be +suffixed with a quantifier, as discussed above. If fragment size is +given, the fragment of that size will be filled with the currently +selected pattern (*note -pattern: Generate Mode.) and written to the +file. + + A pattern is a string of arbitrary ASCII characters. For each of +them, 'genfile' will generate a "block" of data, filled with that +character and will write it to the fragment. The size of block is given +by '--block-size' option. It defaults to 512. Thus, if pattern +consists of N characters, the resulting file fragment will contain +'N*BLOCK-SIZE' bytes of data. + + The last fragment descriptor can have only file offset part. In this +case 'genfile' will create a hole at the end of the file up to the given +offset. + + A dash appearing as a fragment descriptor instructs 'genfile' to read +file map from the standard input. Each line of input should consist of +fragment offset and contents string, separated by any amount of +whitespace. + + For example, consider the following invocation: + + genfile --sparse --file sparsefile 0 ABCD 1M EFGHI 2000K + +It will create 3101184-bytes long file of the following structure: + +Offset Length Contents +0 4*512=2048 Four 512-byte blocks, filled + with letters 'A', 'B', 'C' and + 'D'. +2048 1046528 Zero bytes +1050624 5*512=2560 Five blocks, filled with + letters 'E', 'F', 'G', 'H', + 'I'. +1053184 2048000 Zero bytes + + The exit code of 'genfile --sparse' command is '0' only if created +file is actually sparse. If it is not, the appropriate error message is +displayed and the command exists with code '1'. The '--quite' ('-q') +option suppresses this behavior. If '--quite' is given, 'genfile +--sparse' exits with code '0' if it was able to create the file, whether +the resulting file is sparse or not. + + +File: tar.info, Node: Status Mode, Next: Exec Mode, Prev: Generate Mode, Up: Genfile + +E.2 Status Mode +=============== + +In status mode, 'genfile' prints file system status for each file +specified in the command line. This mode is toggled by '--stat' ('-S') +command line option. An optional argument to this option specifies +output "format": a comma-separated list of 'struct stat' fields to be +displayed. This list can contain following identifiers: + +name + The file name. + +dev +st_dev + Device number in decimal. + +ino +st_ino + Inode number. + +mode[.NUMBER] +st_mode[.NUMBER] + + File mode in octal. Optional NUMBER specifies octal mask to be + applied to the mode before outputting. For example, '--stat + mode.777' will preserve lower nine bits of it. Notice, that you + can use any punctuation character in place of '.'. + +nlink +st_nlink + Number of hard links. + +uid +st_uid + User ID of owner. + +gid +st_gid + Group ID of owner. + +size +st_size + File size in decimal. + +blksize +st_blksize + The size in bytes of each file block. + +blocks +st_blocks + Number of blocks allocated. + +atime +st_atime + Time of last access. + +mtime +st_mtime + Time of last modification + +ctime +st_ctime + Time of last status change + +sparse + A boolean value indicating whether the file is 'sparse'. + + Modification times are displayed in UTC as UNIX timestamps, unless +suffixed with 'H' (for "human-readable"), as in 'ctimeH', in which case +usual 'tar tv' output format is used. + + The default output format is: 'name,dev,ino,mode, +nlink,uid,gid,size,blksize,blocks,atime,mtime,ctime'. + + For example, the following command will display file names and +corresponding times of last access for each file in the current working +directory: + + genfile --stat=name,atime * + + +File: tar.info, Node: Exec Mode, Prev: Status Mode, Up: Genfile + +E.3 Exec Mode +============= + +This mode is designed for testing the behavior of 'paxutils' commands +when some of the files change during archiving. It is an experimental +mode. + + The 'Exec Mode' is toggled by '--run' command line option (or its +alias '-r'). The non-optional arguments to 'getopt' give the command +line to be executed. Normally, it should contain at least the +'--checkpoint' option. + + A set of options is provided for defining checkpoint values and +actions to be executed upon reaching them. Checkpoint values are +introduced with the '--checkpoint' command line option. Argument to +this option is the number of checkpoint in decimal. + + Any number of "actions" may be specified after a checkpoint. +Available actions are + +'--cut FILE' +'--truncate FILE' + Truncate FILE to the size specified by previous '--length' option + (or 0, if it is not given). + +'--append FILE' + Append data to FILE. The size of data and its pattern are given by + previous '--length' and 'pattern' options. + +'--touch FILE' + Update the access and modification times of FILE. These timestamps + are changed to the current time, unless '--date' option was given, + in which case they are changed to the specified time. Argument to + '--date' option is a date specification in an almost arbitrary + format (*note Date input formats::). + +'--exec COMMAND' + Execute given shell command. + +'--unlink FILE' + Unlink the FILE. + + Option '--verbose' instructs 'genfile' to print on standard output +notifications about checkpoints being executed and to verbosely describe +exit status of the command. + + While the command is being executed its standard output remains +connected to descriptor 1. All messages it prints to file descriptor 2, +except checkpoint notifications, are forwarded to standard error. + + 'Genfile' exits with the exit status of the executed command. + + For compatibility with previous 'genfile' versions, the '--run' +option takes an optional argument. If used this way, its argument +supplies the command line to be executed. There should be no +non-optional arguments in the 'genfile' command line. + + The actual command line is constructed by inserting the +'--checkpoint' option between the command name and its first argument +(if any). Due to this, the argument to '--run' may not use traditional +'tar' option syntax, i.e., the following is wrong: + + # Wrong! + genfile --run='tar cf foo bar' + + Use the following syntax instead: + + genfile --run='tar -cf foo bar' ACTIONS... + + The above command line is equivalent to + + genfile ACTIONS... -- tar -cf foo bar + + Notice, that the use of compatibility mode is deprecated. + + +File: tar.info, Node: Free Software Needs Free Documentation, Next: GNU Free Documentation License, Prev: Genfile, Up: Top + +Appendix F Free Software Needs Free Documentation +************************************************* + +The biggest deficiency in the free software community today is not in +the software--it is the lack of good free documentation that we can +include with the free software. Many of our most important programs do +not come with free reference manuals and free introductory texts. +Documentation is an essential part of any software package; when an +important free software package does not come with a free manual and a +free tutorial, that is a major gap. We have many such gaps today. + + Consider Perl, for instance. The tutorial manuals that people +normally use are non-free. How did this come about? Because the +authors of those manuals published them with restrictive terms--no +copying, no modification, source files not available--which exclude them +from the free software world. + + That wasn't the first time this sort of thing happened, and it was +far from the last. Many times we have heard a GNU user eagerly describe +a manual that he is writing, his intended contribution to the community, +only to learn that he had ruined everything by signing a publication +contract to make it non-free. + + Free documentation, like free software, is a matter of freedom, not +price. The problem with the non-free manual is not that publishers +charge a price for printed copies--that in itself is fine. (The Free +Software Foundation sells printed copies of manuals, too.) The problem +is the restrictions on the use of the manual. Free manuals are +available in source code form, and give you permission to copy and +modify. Non-free manuals do not allow this. + + The criteria of freedom for a free manual are roughly the same as for +free software. Redistribution (including the normal kinds of commercial +redistribution) must be permitted, so that the manual can accompany +every copy of the program, both on-line and on paper. + + Permission for modification of the technical content is crucial too. +When people modify the software, adding or changing features, if they +are conscientious they will change the manual too--so they can provide +accurate and clear documentation for the modified program. A manual +that leaves you no choice but to write a new manual to document a +changed version of the program is not really available to our community. + + Some kinds of limits on the way modification is handled are +acceptable. For example, requirements to preserve the original author's +copyright notice, the distribution terms, or the list of authors, are +ok. It is also no problem to require modified versions to include +notice that they were modified. Even entire sections that may not be +deleted or changed are acceptable, as long as they deal with +nontechnical topics (like this one). These kinds of restrictions are +acceptable because they don't obstruct the community's normal use of the +manual. + + However, it must be possible to modify all the _technical_ content of +the manual, and then distribute the result in all the usual media, +through all the usual channels. Otherwise, the restrictions obstruct +the use of the manual, it is not free, and we need another manual to +replace it. + + Please spread the word about this issue. Our community continues to +lose manuals to proprietary publishing. If we spread the word that free +software needs free reference manuals and free tutorials, perhaps the +next person who wants to contribute by writing documentation will +realize, before it is too late, that only free manuals contribute to the +free software community. + + If you are writing documentation, please insist on publishing it +under the GNU Free Documentation License or another free documentation +license. Remember that this decision requires your approval--you don't +have to let the publisher decide. Some commercial publishers will use a +free license if you insist, but they will not propose the option; it is +up to you to raise the issue and say firmly that this is what you want. +If the publisher you are dealing with refuses, please try other +publishers. If you're not sure whether a proposed license is free, +write to <licensing@gnu.org>. + + You can encourage commercial publishers to sell more free, copylefted +manuals and tutorials by buying them, and particularly by buying copies +from the publishers that paid for their writing or for major +improvements. Meanwhile, try to avoid buying non-free documentation at +all. Check the distribution terms of a manual before you buy it, and +insist that whoever seeks your business must respect your freedom. +Check the history of the book, and try reward the publishers that have +paid or pay the authors to work on it. + + The Free Software Foundation maintains a list of free documentation +published by other publishers, at +<http://www.fsf.org/doc/other-free-books.html>. + + +File: tar.info, Node: GNU Free Documentation License, Next: Index of Command Line Options, Prev: Free Software Needs Free Documentation, Up: Top + +Appendix G GNU Free Documentation License +***************************************** + + Version 1.3, 3 November 2008 + + Copyright (C) 2000-2002, 2007-2008, 2014, 2016 Free Software + Foundation, Inc. + <http://fsf.org/> + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the + author and publisher a way to get credit for their work, while not + being considered responsible for modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. We + recommend this License principally for works whose purpose is + instruction or reference. + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it can + be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + "Document", below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as "you". You accept + the license if you copy, modify or distribute the work in a way + requiring permission under copyright law. + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. + + The "Invariant Sections" are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in the + notice that says that the Document is released under this License. + If a section does not fit the above definition of Secondary then it + is not allowed to be designated as Invariant. The Document may + contain zero Invariant Sections. If the Document does not identify + any Invariant Sections then there are none. + + The "Cover Texts" are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images composed + of pixels) generic paint programs or (for drawings) some widely + available drawing editor, and that is suitable for input to text + formatters or for automatic translation to a variety of formats + suitable for input to text formatters. A copy made in an otherwise + Transparent file format whose markup, or absence of markup, has + been arranged to thwart or discourage subsequent modification by + readers is not Transparent. An image format is not Transparent if + used for any substantial amount of text. A copy that is not + "Transparent" is called "Opaque". + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and standard-conforming + simple HTML, PostScript or PDF designed for human modification. + Examples of transparent image formats include PNG, XCF and JPG. + Opaque formats include proprietary formats that can be read and + edited only by proprietary word processors, SGML or XML for which + the DTD and/or processing tools are not generally available, and + the machine-generated HTML, PostScript or PDF produced by some word + processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, "Title + Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text. + + The "publisher" means any person or entity that distributes copies + of the Document to the public. + + A section "Entitled XYZ" means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + "Acknowledgements", "Dedications", "Endorsements", or "History".) + To "Preserve the Title" of such a section when you modify the + Document means that it remains a section "Entitled XYZ" according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow the + conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document's license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the title + equally prominent and visible. You may add other material on the + covers in addition. Copying with changes limited to the covers, as + long as they preserve the title of the Document and satisfy these + conditions, can be treated as verbatim copying in other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a machine-readable + Transparent copy along with each Opaque copy, or state in or with + each Opaque copy a computer-network location from which the general + network-using public has access to download using public-standard + network protocols a complete Transparent copy of the Document, free + of added material. If you use the latter option, you must take + reasonably prudent steps, when you begin distribution of Opaque + copies in quantity, to ensure that this Transparent copy will + remain thus accessible at the stated location until at least one + year after the last time you distribute an Opaque copy (directly or + through your agents or retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of copies, + to give them a chance to provide you with an updated version of the + Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with the + Modified Version filling the role of the Document, thus licensing + distribution and modification of the Modified Version to whoever + possesses a copy of it. In addition, you must do these things in + the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of previous + versions (which should, if there were any, be listed in the + History section of the Document). You may use the same title + as a previous version if the original publisher of that + version gives permission. + + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in + the Modified Version, together with at least five of the + principal authors of the Document (all of its principal + authors, if it has fewer than five), unless they release you + from this requirement. + + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified + Version under the terms of this License, in the form shown in + the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled "History", Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on the + Title Page. If there is no section Entitled "History" in the + Document, create one stating the title, year, authors, and + publisher of the Document as given on its Title Page, then add + an item describing the Modified Version as stated in the + previous sentence. + + J. Preserve the network location, if any, given in the Document + for public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in the + "History" section. You may omit a network location for a work + that was published at least four years before the Document + itself, or if the original publisher of the version it refers + to gives permission. + + K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the section + all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, unaltered + in their text and in their titles. Section numbers or the + equivalent are not considered part of the section titles. + + M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option designate + some or all of these sections as invariant. To do this, add their + titles to the list of Invariant Sections in the Modified Version's + license notice. These titles must be distinct from any other + section titles. + + You may add a section Entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties--for example, statements of peer review or that the text + has been approved by an organization as the authoritative + definition of a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end of + the list of Cover Texts in the Modified Version. Only one passage + of Front-Cover Text and one of Back-Cover Text may be added by (or + through arrangements made by) any one entity. If the Document + already includes a cover text for the same cover, previously added + by you or by arrangement made by the same entity you are acting on + behalf of, you may not add another; but you may replace the old + one, on explicit permission from the previous publisher that added + the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination all + of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections Entitled + "History" in the various original documents, forming one section + Entitled "History"; likewise combine any sections Entitled + "Acknowledgements", and any sections Entitled "Dedications". You + must delete all sections Entitled "Endorsements." + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the documents + in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow this + License in all other respects regarding verbatim copying of that + document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of a + storage or distribution medium, is called an "aggregate" if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation's users beyond what the individual + works permit. When the Document is included in an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document's Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense, or distribute it is void, + and will automatically terminate your rights under this License. + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly and + finally terminates your license, and (b) permanently, if the + copyright holder fails to notify you of the violation by some + reasonable means prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from + that copyright holder, and you cure the violation prior to 30 days + after your receipt of the notice. + + Termination of your rights under this section does not terminate + the licenses of parties who have received copies or rights from you + under this License. If your rights have been terminated and not + permanently reinstated, receipt of a copy of some or all of the + same material does not give you any rights to use it. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + <http://www.gnu.org/copyleft/>. + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If the + Document does not specify a version number of this License, you may + choose any version ever published (not as a draft) by the Free + Software Foundation. If the Document specifies that a proxy can + decide which future versions of this License can be used, that + proxy's public statement of acceptance of a version permanently + authorizes you to choose that version for the Document. + + 11. RELICENSING + + "Massive Multiauthor Collaboration Site" (or "MMC Site") means any + World Wide Web server that publishes copyrightable works and also + provides prominent facilities for anybody to edit those works. A + public wiki that anybody can edit is an example of such a server. + A "Massive Multiauthor Collaboration" (or "MMC") contained in the + site means any set of copyrightable works thus published on the MMC + site. + + "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 + license published by Creative Commons Corporation, a not-for-profit + corporation with a principal place of business in San Francisco, + California, as well as future copyleft versions of that license + published by that same organization. + + "Incorporate" means to publish or republish a Document, in whole or + in part, as part of another Document. + + An MMC is "eligible for relicensing" if it is licensed under this + License, and if all works that were first published under this + License somewhere other than this MMC, and subsequently + incorporated in whole or in part into the MMC, (1) had no cover + texts or invariant sections, and (2) were thus incorporated prior + to November 1, 2008. + + The operator of an MMC Site may republish an MMC contained in the + site under CC-BY-SA on the same site at any time before August 1, + 2009, provided the MMC is eligible for relicensing. + +ADDENDUM: How to use this License for your documents +==================================================== + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and license +notices just after the title page: + + Copyright (C) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover +Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + + If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of free +software license, such as the GNU General Public License, to permit +their use in free software. + + +File: tar.info, Node: Index of Command Line Options, Next: Index, Prev: GNU Free Documentation License, Up: Top + +Appendix H Index of Command Line Options +**************************************** + +This appendix contains an index of all GNU 'tar' long command line +options. The options are listed without the preceding double-dash. For +a cross-reference of short command line options, see *note Short Option +Summary::. + + +* Menu: + +* absolute-names: absolute. (line 10) +* absolute-names, summary: Option Summary. (line 6) +* acls, summary: Option Summary. (line 14) +* add-file: files. (line 79) +* after-date: after. (line 24) +* after-date, summary: Option Summary. (line 17) +* anchored: controlling pattern-matching. + (line 78) +* anchored, summary: Option Summary. (line 21) +* append: append. (line 6) +* append <1>: appending files. (line 6) +* append, summary: Operation Summary. (line 6) +* atime-preserve: Attributes. (line 10) +* atime-preserve, summary: Option Summary. (line 25) +* auto-compress: gzip. (line 150) +* auto-compress, summary: Option Summary. (line 71) +* backup: backup. (line 41) +* backup, summary: Option Summary. (line 78) +* block-number: verbose. (line 112) +* block-number, summary: Option Summary. (line 84) +* blocking-factor: Blocking Factor. (line 8) +* blocking-factor, summary: Option Summary. (line 91) +* bzip2, summary: Option Summary. (line 97) +* catenate: concatenate. (line 6) +* catenate, summary: Operation Summary. (line 11) +* check-device, described: Incremental Dumps. (line 107) +* check-device, summary: Option Summary. (line 103) +* check-links, described: hard links. (line 31) +* check-links, summary: Option Summary. (line 155) +* checkpoint: checkpoints. (line 6) +* checkpoint, defined: checkpoints. (line 13) +* checkpoint, summary: Option Summary. (line 108) +* checkpoint-action: checkpoints. (line 6) +* checkpoint-action, defined: checkpoints. (line 22) +* checkpoint-action, summary: Option Summary. (line 117) +* clamp-mtime, summary: Option Summary. (line 172) +* compare: compare. (line 6) +* compare, summary: Operation Summary. (line 16) +* compress: gzip. (line 113) +* compress, summary: Option Summary. (line 164) +* concatenate: concatenate. (line 6) +* concatenate, summary: Operation Summary. (line 23) +* confirmation, summary: Option Summary. (line 176) +* create, additional options: create options. (line 6) +* create, complementary notes: Basic tar. (line 11) +* create, introduced: Creating the archive. + (line 6) +* create, summary: Operation Summary. (line 29) +* create, using with '--verbose': create verbose. (line 6) +* create, using with '--verify': verify. (line 24) +* delay-directory-restore: Directory Modification Times and Permissions. + (line 62) +* delay-directory-restore, summary: Option Summary. (line 180) +* delete: delete. (line 6) +* delete, summary: Operation Summary. (line 34) +* delete, using before -append: append. (line 47) +* dereference: dereference. (line 6) +* dereference, summary: Option Summary. (line 186) +* diff, summary: Operation Summary. (line 39) +* directory: directory. (line 11) +* directory, summary: Option Summary. (line 193) +* exclude: exclude. (line 6) +* exclude <1>: exclude. (line 9) +* exclude, potential problems with: problems with exclude. + (line 6) +* exclude, summary: Option Summary. (line 201) +* exclude-backups: exclude. (line 114) +* exclude-backups, summary: Option Summary. (line 206) +* exclude-caches: exclude. (line 134) +* exclude-caches, summary: Option Summary. (line 215) +* exclude-caches-all: exclude. (line 142) +* exclude-caches-all, summary: Option Summary. (line 230) +* exclude-caches-under: exclude. (line 138) +* exclude-caches-under, summary: Option Summary. (line 223) +* exclude-from: exclude. (line 6) +* exclude-from <1>: exclude. (line 20) +* exclude-from, summary: Option Summary. (line 209) +* exclude-ignore: exclude. (line 76) +* exclude-ignore, summary: Option Summary. (line 235) +* exclude-ignore-recursive: exclude. (line 81) +* exclude-ignore-recursive, summary: Option Summary. (line 240) +* exclude-tag: exclude. (line 151) +* exclude-tag, summary: Option Summary. (line 245) +* exclude-tag-all: exclude. (line 159) +* exclude-tag-all, summary: Option Summary. (line 257) +* exclude-tag-under: exclude. (line 155) +* exclude-tag-under, summary: Option Summary. (line 251) +* exclude-vcs: exclude. (line 85) +* exclude-vcs, summary: Option Summary. (line 262) +* exclude-vcs-ignores: exclude. (line 42) +* exclude-vcs-ignores, summary: Option Summary. (line 269) +* extract: extract. (line 6) +* extract, additional options: extract options. (line 6) +* extract, complementary notes: Basic tar. (line 49) +* extract, summary: Operation Summary. (line 44) +* extract, using with '--listed-incremental': Incremental Dumps. + (line 120) +* file: file. (line 6) +* file, short description: file. (line 15) +* file, summary: Option Summary. (line 277) +* file, tutorial: file tutorial. (line 6) +* files-from: files. (line 14) +* files-from, summary: Option Summary. (line 284) +* force-local, short description: Device. (line 70) +* force-local, summary: Option Summary. (line 291) +* format, summary: Option Summary. (line 297) +* full-time, summary: Option Summary. (line 322) +* get, summary: Operation Summary. (line 50) +* group: override. (line 99) +* group, summary: Option Summary. (line 340) +* group-map, summary: Option Summary. (line 350) +* gunzip, summary: Option Summary. (line 360) +* gzip: gzip. (line 91) +* gzip, summary: Option Summary. (line 360) +* hard-dereference, described: hard links. (line 59) +* hard-dereference, summary: Option Summary. (line 369) +* help: help tutorial. (line 6) +* help, introduction: help. (line 26) +* help, summary: Option Summary. (line 375) +* hole-detection: sparse. (line 66) +* hole-detection, summary: Option Summary. (line 381) +* ignore-case: controlling pattern-matching. + (line 85) +* ignore-case, summary: Option Summary. (line 386) +* ignore-command-error: Writing to an External Program. + (line 111) +* ignore-command-error, summary: Option Summary. (line 390) +* ignore-failed-read: Ignore Failed Read. (line 7) +* ignore-failed-read, summary: Option Summary. (line 394) +* ignore-zeros: Ignore Zeros. (line 6) +* ignore-zeros, short description: Blocking Factor. (line 152) +* ignore-zeros, summary: Option Summary. (line 399) +* incremental, summary: Option Summary. (line 405) +* incremental, using with '--list': Incremental Dumps. (line 185) +* index-file, summary: Option Summary. (line 413) +* info-script: Multi-Volume Archives. + (line 83) +* info-script, short description: Device. (line 121) +* info-script, summary: Option Summary. (line 417) +* interactive: interactive. (line 14) +* interactive, summary: Option Summary. (line 426) +* keep-directory-symlink, summary: Option Summary. (line 434) +* keep-newer-files: Keep Newer Files. (line 6) +* keep-newer-files, summary: Option Summary. (line 448) +* keep-old-files: Keep Old Files. (line 9) +* keep-old-files, introduced: Dealing with Old Files. + (line 16) +* keep-old-files, summary: Option Summary. (line 453) +* label: Tape Files. (line 6) +* label <1>: label. (line 6) +* label, summary: Option Summary. (line 462) +* level, described: Incremental Dumps. (line 75) +* level, summary: Option Summary. (line 470) +* list: list. (line 6) +* list, summary: Operation Summary. (line 55) +* list, using with '--incremental': Incremental Dumps. (line 185) +* list, using with '--listed-incremental': Incremental Dumps. + (line 185) +* list, using with '--verbose': list. (line 34) +* list, using with file name arguments: list. (line 25) +* listed-incremental, described: Incremental Dumps. (line 14) +* listed-incremental, summary: Option Summary. (line 480) +* listed-incremental, using with '--extract': Incremental Dumps. + (line 120) +* listed-incremental, using with '--list': Incremental Dumps. + (line 185) +* lzip: gzip. (line 104) +* lzip, summary: Option Summary. (line 489) +* lzma: gzip. (line 107) +* lzma, summary: Option Summary. (line 494) +* lzop: gzip. (line 110) +* mode: override. (line 14) +* mode, summary: Option Summary. (line 504) +* mtime: override. (line 30) +* mtime, summary: Option Summary. (line 511) +* multi-volume: Multi-Volume Archives. + (line 6) +* multi-volume, short description: Device. (line 88) +* multi-volume, summary: Option Summary. (line 526) +* new-volume-script: Multi-Volume Archives. + (line 83) +* new-volume-script, short description: Device. (line 121) +* new-volume-script, summary: Option Summary. (line 417) +* new-volume-script, summary <1>: Option Summary. (line 532) +* newer: after. (line 24) +* newer, summary: Option Summary. (line 536) +* newer-mtime: after. (line 35) +* newer-mtime, summary: Option Summary. (line 545) +* no-acls, summary: Option Summary. (line 551) +* no-anchored: controlling pattern-matching. + (line 78) +* no-anchored, summary: Option Summary. (line 555) +* no-auto-compress, summary: Option Summary. (line 559) +* no-check-device, described: Incremental Dumps. (line 103) +* no-check-device, summary: Option Summary. (line 564) +* no-delay-directory-restore: Directory Modification Times and Permissions. + (line 68) +* no-delay-directory-restore, summary: Option Summary. (line 569) +* no-ignore-case: controlling pattern-matching. + (line 85) +* no-ignore-case, summary: Option Summary. (line 575) +* no-ignore-command-error: Writing to an External Program. + (line 116) +* no-ignore-command-error, summary: Option Summary. (line 578) +* no-null, described: nul. (line 15) +* no-null, summary: Option Summary. (line 582) +* no-overwrite-dir, summary: Option Summary. (line 588) +* no-quote-chars, summary: Option Summary. (line 593) +* no-recursion: recurse. (line 11) +* no-recursion, summary: Option Summary. (line 598) +* no-same-owner: Attributes. (line 63) +* no-same-owner, summary: Option Summary. (line 603) +* no-same-permissions, summary: Option Summary. (line 610) +* no-seek, summary: Option Summary. (line 616) +* no-selinux, summary: Option Summary. (line 622) +* no-unquote: Selecting Archive Members. + (line 42) +* no-unquote, summary: Option Summary. (line 626) +* no-verbatim-files-from: files. (line 75) +* no-verbatim-files-from, summary: Option Summary. (line 630) +* no-wildcards: controlling pattern-matching. + (line 41) +* no-wildcards, summary: Option Summary. (line 644) +* no-wildcards-match-slash: controlling pattern-matching. + (line 91) +* no-wildcards-match-slash, summary: Option Summary. (line 647) +* no-xattrs, summary: Option Summary. (line 650) +* null, described: nul. (line 11) +* null, summary: Option Summary. (line 654) +* numeric-owner: Attributes. (line 69) +* numeric-owner, summary: Option Summary. (line 667) +* occurrence, described: append. (line 34) +* occurrence, summary: Option Summary. (line 685) +* old-archive, summary: Option Summary. (line 700) +* one-file-system: one. (line 14) +* one-file-system, summary: Option Summary. (line 703) +* one-top-level, summary: Option Summary. (line 708) +* overwrite: Overwrite Old Files. + (line 6) +* overwrite, introduced: Dealing with Old Files. + (line 32) +* overwrite, summary: Option Summary. (line 719) +* overwrite-dir: Overwrite Old Files. + (line 28) +* overwrite-dir, introduced: Dealing with Old Files. + (line 6) +* overwrite-dir, summary: Option Summary. (line 724) +* owner: override. (line 67) +* owner, summary: Option Summary. (line 729) +* owner-map, summary: Option Summary. (line 739) +* pax-option: PAX keywords. (line 6) +* pax-option, summary: Option Summary. (line 749) +* portability, summary: Option Summary. (line 755) +* posix, summary: Option Summary. (line 759) +* preserve-order: Same Order. (line 6) +* preserve-order, summary: Option Summary. (line 762) +* preserve-permissions: Setting Access Permissions. + (line 10) +* preserve-permissions, short description: Attributes. (line 109) +* preserve-permissions, summary: Option Summary. (line 766) +* quote-chars, summary: Option Summary. (line 777) +* quoting-style: quoting styles. (line 38) +* quoting-style, summary: Option Summary. (line 781) +* read-full-records: Reading. (line 6) +* read-full-records <1>: read full records. (line 6) +* read-full-records, short description: Blocking Factor. (line 168) +* read-full-records, summary: Option Summary. (line 788) +* record-size, summary: Option Summary. (line 794) +* recursion: recurse. (line 22) +* recursion, summary: Option Summary. (line 802) +* recursive-unlink: Recursive Unlink. (line 6) +* recursive-unlink, summary: Option Summary. (line 807) +* remove-files: remove files. (line 6) +* remove-files, summary: Option Summary. (line 812) +* restrict, summary: Option Summary. (line 817) +* rmt-command, summary: Option Summary. (line 823) +* rsh-command: Device. (line 73) +* rsh-command, summary: Option Summary. (line 828) +* same-order: Same Order. (line 6) +* same-order, summary: Option Summary. (line 833) +* same-owner: Attributes. (line 44) +* same-owner, summary: Option Summary. (line 842) +* same-permissions: Setting Access Permissions. + (line 10) +* same-permissions, short description: Attributes. (line 109) +* same-permissions, summary: Option Summary. (line 766) +* same-permissions, summary <1>: Option Summary. (line 849) +* seek, summary: Option Summary. (line 853) +* selinux, summary: Option Summary. (line 863) +* show-defaults: defaults. (line 6) +* show-defaults, summary: Option Summary. (line 867) +* show-omitted-dirs: verbose. (line 105) +* show-omitted-dirs, summary: Option Summary. (line 880) +* show-snapshot-field-ranges: Snapshot Files. (line 111) +* show-snapshot-field-ranges, summary: Option Summary. (line 885) +* show-stored-names: list. (line 68) +* show-stored-names, summary: Option Summary. (line 891) +* show-transformed-names: transform. (line 45) +* show-transformed-names, summary: Option Summary. (line 891) +* skip-old-files, introduced: Dealing with Old Files. + (line 28) +* skip-old-files, summary: Option Summary. (line 900) +* sort, summary: Option Summary. (line 913) +* sparse: sparse. (line 24) +* sparse, summary: Option Summary. (line 930) +* sparse-version: sparse. (line 59) +* sparse-version, summary: Option Summary. (line 936) +* starting-file: Starting File. (line 6) +* starting-file, summary: Option Summary. (line 942) +* strip-components: transform. (line 25) +* strip-components, summary: Option Summary. (line 949) +* suffix: backup. (line 67) +* suffix, summary: Option Summary. (line 960) +* tape-length: Multi-Volume Archives. + (line 33) +* tape-length, short description: Device. (line 96) +* tape-length, summary: Option Summary. (line 965) +* test-label: label. (line 35) +* test-label, summary: Option Summary. (line 976) +* to-command: Writing to an External Program. + (line 9) +* to-command, summary: Option Summary. (line 981) +* to-stdout: Writing to Standard Output. + (line 14) +* to-stdout, summary: Option Summary. (line 986) +* totals: verbose. (line 45) +* totals, summary: Option Summary. (line 992) +* touch: Data Modification Times. + (line 15) +* touch <1>: Attributes. (line 33) +* touch, summary: Option Summary. (line 998) +* transform: transform. (line 74) +* transform, summary: Option Summary. (line 1005) +* uncompress: gzip. (line 113) +* uncompress, summary: Option Summary. (line 164) +* uncompress, summary <1>: Option Summary. (line 1019) +* ungzip: gzip. (line 91) +* ungzip, summary: Option Summary. (line 360) +* ungzip, summary <1>: Option Summary. (line 1023) +* unlink-first: Unlink First. (line 6) +* unlink-first, introduced: Dealing with Old Files. + (line 51) +* unlink-first, summary: Option Summary. (line 1027) +* unquote: Selecting Archive Members. + (line 39) +* unquote, summary: Option Summary. (line 1033) +* update: update. (line 6) +* update <1>: how to update. (line 6) +* update, summary: Operation Summary. (line 60) +* usage: help. (line 53) +* use-compress-program: gzip. (line 172) +* use-compress-program, summary: Option Summary. (line 1037) +* utc, summary: Option Summary. (line 1043) +* verbatim-files-from: files. (line 70) +* verbatim-files-from, summary: Option Summary. (line 1048) +* verbose: verbose. (line 18) +* verbose, introduced: verbose tutorial. (line 6) +* verbose, summary: Option Summary. (line 1070) +* verbose, using with '--create': create verbose. (line 6) +* verbose, using with '--list': list. (line 34) +* verify, short description: verify. (line 8) +* verify, summary: Option Summary. (line 1078) +* verify, using with '--create': verify. (line 24) +* version: help. (line 6) +* version, summary: Option Summary. (line 1084) +* volno-file: Multi-Volume Archives. + (line 74) +* volno-file, summary: Option Summary. (line 1090) +* warning, explained: warnings. (line 12) +* warning, summary: Option Summary. (line 1096) +* wildcards: controlling pattern-matching. + (line 38) +* wildcards, summary: Option Summary. (line 1102) +* wildcards-match-slash: controlling pattern-matching. + (line 91) +* wildcards-match-slash, summary: Option Summary. (line 1106) +* xattrs, summary: Option Summary. (line 1109) +* xattrs-exclude, summary: Option Summary. (line 1113) +* xattrs-include, summary: Option Summary. (line 1117) +* xform: transform. (line 74) +* xform, summary: Option Summary. (line 1005) +* xz: gzip. (line 96) +* xz, summary: Option Summary. (line 1123) + + +File: tar.info, Node: Index, Prev: Index of Command Line Options, Up: Top + +Appendix I Index +**************** + + +* Menu: + +* '%s: Directory has been renamed from %s', warning message: warnings. + (line 96) +* '%s: Directory has been renamed', warning message: warnings. + (line 96) +* '%s: Directory is new', warning message: warnings. (line 98) +* '%s: directory is on a different device: not purging', warning message: warnings. + (line 100) +* '%s: skipping existing file', warning message: warnings. (line 62) +* -after-date and -update compared: after. (line 19) +* -newer-mtime and -update compared: after. (line 19) +* -quite, option: Generate Mode. (line 120) +* .bzrignore: exclude. (line 63) +* .cvsignore: exclude. (line 50) +* .gitignore: exclude. (line 55) +* .hgignore: exclude. (line 70) +* 'A lone zero block at', warning message: warnings. (line 33) +* abbreviations for months: Calendar date items. (line 38) +* absolute file names: absolute. (line 6) +* absolute file names <1>: Remote Tape Server. (line 17) +* Adding archives to an archive: concatenate. (line 6) +* Adding files to an Archive: appending files. (line 6) +* ADMINISTRATOR: General-Purpose Variables. + (line 6) +* Age, excluding files by: after. (line 6) +* ago in date strings: Relative items in date strings. + (line 23) +* all: warnings. (line 28) +* alone-zero-block: warnings. (line 33) +* alternative decompression programs: gzip. (line 54) +* am in date strings: Time of day items. (line 21) +* Appending files to an Archive: appending files. (line 6) +* appending files to existing archive: append. (line 6) +* Arch, excluding files: exclude. (line 85) +* archive: Definitions. (line 6) +* Archive creation: file. (line 34) +* archive member: Definitions. (line 15) +* Archive Name: file. (line 6) +* Archive, creation of: create. (line 6) +* Archives, Appending files to: appending files. (line 6) +* archives, binary equivalent: PAX keywords. (line 136) +* Archiving Directories: create dir. (line 6) +* archiving files: Top. (line 23) +* ARGP_HELP_FMT, environment variable: Configuring Help Summary. + (line 21) +* arguments to long options: Long Options. (line 31) +* arguments to old options: Old Options. (line 26) +* arguments to short options: Short Options. (line 13) +* 'Attempting extraction of symbolic links as hard links', warning message: warnings. + (line 68) +* attributes, files: Attributes. (line 6) +* authors of 'parse_datetime': Authors of parse_datetime. + (line 6) +* Avoiding recursion in directories: recurse. (line 6) +* backup options: backup. (line 6) +* backup suffix: backup. (line 67) +* backups: backup. (line 41) +* backups <1>: Backups. (line 6) +* BACKUP_DIRS: General-Purpose Variables. + (line 30) +* BACKUP_FILES: General-Purpose Variables. + (line 58) +* BACKUP_HOUR: General-Purpose Variables. + (line 10) +* bad-dumpdir: warnings. (line 102) +* basic operations: Operations. (line 6) +* Bazaar, excluding files: exclude. (line 85) +* Bazaar, ignore files: exclude. (line 37) +* beginning of time, for POSIX: Seconds since the Epoch. + (line 13) +* 'bell', checkpoint action: checkpoints. (line 106) +* Bellovin, Steven M.: Authors of parse_datetime. + (line 6) +* Berets, Jim: Authors of parse_datetime. + (line 6) +* Berry, K.: Authors of parse_datetime. + (line 19) +* binary equivalent archives, creating: PAX keywords. (line 136) +* block: Blocking. (line 6) +* Block number where error occurred: verbose. (line 112) +* BLOCKING: General-Purpose Variables. + (line 25) +* Blocking Factor: Blocking Factor. (line 6) +* blocking factor: Blocking Factor. (line 189) +* Blocks per record: Blocking Factor. (line 6) +* bug reports: Reports. (line 6) +* Bytes per record: Blocking Factor. (line 6) +* bzip2: gzip. (line 6) +* cachedir: warnings. (line 40) +* calendar date item: Calendar date items. (line 6) +* case, ignored in dates: General date syntax. (line 60) +* 'cat' vs 'concatenate': concatenate. (line 63) +* Changing directory mid-stream: directory. (line 6) +* Character class, excluding characters from: wildcards. (line 34) +* checkpoints, defined: checkpoints. (line 6) +* Choosing an archive file: file. (line 6) +* combined date and time of day item: Combined date and time of day items. + (line 6) +* comments, in dates: General date syntax. (line 60) +* compress: gzip. (line 6) +* Compressed archives: gzip. (line 6) +* 'concatenate' vs 'cat': concatenate. (line 63) +* Concatenating Archives: concatenate. (line 6) +* 'contains a cache directory tag', warning message: warnings. + (line 40) +* contiguous-cast: warnings. (line 66) +* corrupted archives: Full Dumps. (line 8) +* corrupted archives <1>: gzip. (line 140) +* Creation of the archive: create. (line 6) +* 'Current %s is newer or same age', warning message: warnings. + (line 72) +* CVS, excluding files: exclude. (line 85) +* CVS, ignore files: exclude. (line 37) +* Darcs, excluding files: exclude. (line 85) +* DAT blocking: Blocking Factor. (line 199) +* Data Modification time, excluding files by: after. (line 6) +* Data modification times of extracted files: Data Modification Times. + (line 6) +* date and time of day format, ISO 8601: Combined date and time of day items. + (line 6) +* date format, ISO 8601: Calendar date items. (line 30) +* date input formats: Date input formats. (line 6) +* day in date strings: Relative items in date strings. + (line 15) +* day in date strings <1>: Relative items in date strings. + (line 29) +* day of week item: Day of week items. (line 6) +* decompress-program: warnings. (line 76) +* Deleting files from an archive: delete. (line 6) +* Deleting from tape archives: delete. (line 17) +* dereferencing hard links: hard links. (line 6) +* Descending directories, avoiding: recurse. (line 6) +* Device numbers, changing: Fixing Snapshot Files. + (line 6) +* Device numbers, using in incremental backups: Incremental Dumps. + (line 89) +* Directories, Archiving: create dir. (line 6) +* Directories, avoiding recursion: recurse. (line 6) +* Directory, changing mid-stream: directory. (line 6) +* DIRLIST: General-Purpose Variables. + (line 53) +* displacement of dates: Relative items in date strings. + (line 6) +* doc-opt-col: Configuring Help Summary. + (line 95) +* 'door ignored', warning message: warnings. (line 45) +* 'dot', checkpoint action: checkpoints. (line 130) +* Double-checking a write operation: verify. (line 6) +* dumps, full: Full Dumps. (line 8) +* DUMP_BEGIN: User Hooks. (line 31) +* DUMP_END: User Hooks. (line 35) +* DUMP_REMIND_SCRIPT: General-Purpose Variables. + (line 112) +* dup-args: Configuring Help Summary. + (line 52) +* dup-args-note: Configuring Help Summary. + (line 69) +* 'echo', checkpoint action: checkpoints. (line 25) +* Eggert, Paul: Authors of parse_datetime. + (line 6) +* End-of-archive blocks, ignoring: Ignore Zeros. (line 6) +* End-of-archive info script: Multi-Volume Archives. + (line 83) +* entry: Naming tar Archives. (line 11) +* epoch, for POSIX: Seconds since the Epoch. + (line 13) +* Error message, block number of: verbose. (line 122) +* Exabyte blocking: Blocking Factor. (line 199) +* exclude: exclude. (line 12) +* exclude-caches: exclude. (line 122) +* exclude-from: exclude. (line 25) +* exclude-tag: exclude. (line 145) +* Excluding characters from a character class: wildcards. (line 34) +* Excluding file by age: after. (line 6) +* Excluding files by file system: exclude. (line 6) +* Excluding files by name and pattern: exclude. (line 6) +* Exec Mode, 'genfile': Exec Mode. (line 6) +* 'exec', checkpoint action: checkpoints. (line 151) +* existing backup method: backup. (line 59) +* existing-file: warnings. (line 62) +* exit status: Synopsis. (line 67) +* 'Extracting contiguous files as regular files', warning message: warnings. + (line 66) +* extracting Nth copy of the file: append. (line 34) +* extraction: Definitions. (line 22) +* Extraction: extract. (line 6) +* file archival: Top. (line 23) +* file attributes: Attributes. (line 6) +* 'file changed as we read it', warning message: warnings. (line 55) +* 'file is on a different filesystem', warning message: warnings. + (line 43) +* 'file is the archive; not dumped', warning message: warnings. + (line 51) +* 'file is the archive; not dumped', warning message <1>: warnings. + (line 51) +* 'file is unchanged; not dumped', warning message: warnings. (line 49) +* File lists separated by NUL characters: Generate Mode. (line 33) +* file name: Definitions. (line 15) +* File Name arguments, alternatives: files. (line 6) +* File name arguments, using '--list' with: list. (line 25) +* 'file name read contains nul character', warning message: warnings. + (line 31) +* file names, absolute: absolute. (line 6) +* File names, excluding files by: exclude. (line 6) +* File names, terminated by 'NUL': nul. (line 6) +* File names, using hard links: hard links. (line 6) +* File names, using symbolic links: dereference. (line 6) +* 'File removed before we read it', warning message: warnings. + (line 53) +* 'File shrank by %s bytes', warning message: warnings. (line 41) +* File system boundaries, not crossing: one. (line 6) +* file-changed: warnings. (line 55) +* file-ignored: warnings. (line 45) +* file-removed: warnings. (line 53) +* file-shrank: warnings. (line 41) +* file-unchanged: warnings. (line 49) +* FILELIST: General-Purpose Variables. + (line 69) +* filename-with-nuls: warnings. (line 31) +* 'find', using with 'tar': files. (line 6) +* 'find', using with 'tar' <1>: recurse. (line 11) +* first in date strings: General date syntax. (line 22) +* format 0, snapshot file: Snapshot Files. (line 24) +* format 1, snapshot file: Snapshot Files. (line 51) +* format 2, snapshot file: Snapshot Files. (line 73) +* Format Options: Format Variations. (line 6) +* Format Parameters: Format Variations. (line 6) +* Format, old style: old. (line 6) +* fortnight in date strings: Relative items in date strings. + (line 15) +* free documentation: Free Software Needs Free Documentation. + (line 6) +* full dumps: Full Dumps. (line 8) +* future time stamps: Large or Negative Values. + (line 6) +* general date syntax: General date syntax. (line 6) +* Generate Mode, 'genfile': Generate Mode. (line 6) +* genfile: Genfile. (line 6) +* 'genfile', create file: Generate Mode. (line 6) +* 'genfile', creating sparse files: Generate Mode. (line 55) +* 'genfile', generate mode: Generate Mode. (line 6) +* 'genfile', reading a list of file names: Generate Mode. (line 22) +* 'genfile', seeking to a given offset: Generate Mode. (line 18) +* Getting program version number: help. (line 6) +* git, excluding files: exclude. (line 85) +* Git, ignore files: exclude. (line 37) +* GNU archive format: gnu. (line 6) +* GNU.sparse.major, extended header variable: PAX 1. (line 14) +* GNU.sparse.map, extended header variable: PAX 0. (line 59) +* GNU.sparse.minor, extended header variable: PAX 1. (line 17) +* GNU.sparse.name, extended header variable: PAX 0. (line 67) +* GNU.sparse.name, extended header variable, in v.1.0: PAX 1. (line 24) +* GNU.sparse.numblocks, extended header variable: PAX 0. (line 14) +* GNU.sparse.numbytes, extended header variable: PAX 0. (line 20) +* GNU.sparse.offset, extended header variable: PAX 0. (line 17) +* GNU.sparse.realsize, extended header variable: PAX 1. (line 24) +* GNU.sparse.size, extended header variable: PAX 0. (line 10) +* gnupg, using with tar: gzip. (line 196) +* gpg, using with tar: gzip. (line 196) +* gzip: gzip. (line 6) +* hard links, dereferencing: hard links. (line 6) +* header-col: Configuring Help Summary. + (line 141) +* hole detection: sparse. (line 66) +* hook: User Hooks. (line 12) +* hour in date strings: Relative items in date strings. + (line 15) +* ignore-archive: warnings. (line 51) +* ignore-archive <1>: warnings. (line 51) +* ignore-newer: warnings. (line 72) +* Ignoring end-of-archive blocks: Ignore Zeros. (line 6) +* 'Ignoring unknown extended header keyword '%s'', warning message: warnings. + (line 74) +* 'implausibly old time stamp %s', warning message: warnings. (line 63) +* Info script: Multi-Volume Archives. + (line 83) +* Interactive operation: interactive. (line 6) +* ISO 8601 date and time of day format: Combined date and time of day items. + (line 6) +* ISO 8601 date format: Calendar date items. (line 30) +* items in date strings: General date syntax. (line 6) +* Labeling an archive: label. (line 6) +* labeling archives: Tape Files. (line 6) +* Labeling multi-volume archives: label. (line 6) +* Labels on the archive media: label. (line 6) +* language, in dates: General date syntax. (line 36) +* language, in dates <1>: General date syntax. (line 40) +* Large lists of file names on small machines: Same Order. (line 6) +* large values: Large or Negative Values. + (line 6) +* last DAY: Day of week items. (line 15) +* last in date strings: General date syntax. (line 22) +* Laszlo Ersek: lbzip2. (line 6) +* lbzip2: lbzip2. (line 6) +* leap seconds: General date syntax. (line 65) +* leap seconds <1>: Time of day items. (line 14) +* leap seconds <2>: Seconds since the Epoch. + (line 26) +* Listing all 'tar' options: help. (line 26) +* listing member and file names: list. (line 45) +* Listing volume label: label. (line 27) +* Lists of file names: files. (line 6) +* Local and remote archives: file. (line 70) +* long options: Long Options. (line 6) +* long options with mandatory arguments: Long Options. (line 31) +* long options with optional arguments: Long Options. (line 39) +* long-opt-col: Configuring Help Summary. + (line 87) +* lzip: gzip. (line 6) +* lzma: gzip. (line 6) +* lzop: gzip. (line 6) +* MacKenzie, David: Authors of parse_datetime. + (line 6) +* 'Malformed dumpdir: 'X' never used', warning message: warnings. + (line 102) +* member: Definitions. (line 15) +* member name: Definitions. (line 15) +* members, multiple: multiple. (line 6) +* Members, replacing with other members: append. (line 47) +* Mercurial, excluding files: exclude. (line 85) +* Mercurial, ignore files: exclude. (line 37) +* Meyering, Jim: Authors of parse_datetime. + (line 6) +* Middle of the archive, starting in the: Starting File. (line 11) +* midnight in date strings: Time of day items. (line 21) +* minute in date strings: Relative items in date strings. + (line 15) +* minutes, time zone correction by: Time of day items. (line 29) +* Modes of extracted files: Setting Access Permissions. + (line 6) +* Modification time, excluding files by: after. (line 6) +* Modification times of extracted files: Data Modification Times. + (line 6) +* month in date strings: Relative items in date strings. + (line 15) +* month names in date strings: Calendar date items. (line 38) +* months, written-out: General date syntax. (line 32) +* MT: General-Purpose Variables. + (line 74) +* MT_BEGIN: Magnetic Tape Control. + (line 10) +* MT_OFFLINE: Magnetic Tape Control. + (line 30) +* MT_REWIND: Magnetic Tape Control. + (line 20) +* MT_STATUS: Magnetic Tape Control. + (line 40) +* Multi-volume archives: Multi-Volume Archives. + (line 6) +* Multi-volume archives in PAX format, extracting using non-GNU tars: Split Recovery. + (line 17) +* Multi-volume archives, extracting using non-GNU tars: Split Recovery. + (line 6) +* multiple members: multiple. (line 6) +* Naming an archive: file. (line 6) +* negative time stamps: Large or Negative Values. + (line 6) +* new-directory: warnings. (line 98) +* next DAY: Day of week items. (line 15) +* next in date strings: General date syntax. (line 22) +* none: warnings. (line 29) +* noon in date strings: Time of day items. (line 21) +* now in date strings: Relative items in date strings. + (line 33) +* ntape device: Many. (line 6) +* 'NUL'-terminated file names: nul. (line 6) +* Number of blocks per record: Blocking Factor. (line 6) +* Number of bytes per record: Blocking Factor. (line 6) +* numbered backup method: backup. (line 55) +* numbers, written-out: General date syntax. (line 22) +* Obtaining help: help. (line 26) +* Obtaining total status information: verbose. (line 45) +* Old GNU archive format: gnu. (line 6) +* Old GNU sparse format: Old GNU Format. (line 6) +* old option style: Old Options. (line 6) +* old options with mandatory arguments: Old Options. (line 26) +* Old style archives: old. (line 6) +* Old style format: old. (line 6) +* opt-doc-col: Configuring Help Summary. + (line 127) +* option syntax, traditional: Old Options. (line 6) +* optional arguments to long options: Long Options. (line 39) +* optional arguments to short options: Short Options. (line 22) +* options for use with '--extract': extract options. (line 6) +* Options when reading archives: Reading. (line 6) +* Options, archive format specifying: Format Variations. (line 6) +* Options, format specifying: Format Variations. (line 6) +* options, GNU style: Long Options. (line 6) +* options, long style: Long Options. (line 6) +* options, mixing different styles: Mixing. (line 6) +* options, mnemonic names: Long Options. (line 6) +* options, old style: Old Options. (line 6) +* options, short style: Short Options. (line 6) +* options, traditional: Short Options. (line 6) +* ordinal numbers: General date syntax. (line 22) +* Overwriting old files, prevention: Dealing with Old Files. + (line 16) +* parse_datetime: Date input formats. (line 6) +* pattern, 'genfile': Generate Mode. (line 39) +* PAX archive format: posix. (line 6) +* Permissions of extracted files: Setting Access Permissions. + (line 6) +* Pinard, F.: Authors of parse_datetime. + (line 19) +* pm in date strings: Time of day items. (line 21) +* POSIX archive format: posix. (line 6) +* Progress information: verbose. (line 82) +* Protecting old files: Dealing with Old Files. + (line 36) +* pure numbers in date strings: Pure numbers in date strings. + (line 6) +* RCS, excluding files: exclude. (line 85) +* Reading file names from a file: files. (line 6) +* Reading incomplete records: Reading. (line 6) +* record: Blocking. (line 6) +* Record Size: Blocking Factor. (line 6) +* 'Record size = %lu blocks', warning message: warnings. (line 89) +* record-size: warnings. (line 89) +* Records, incomplete: Reading. (line 6) +* Recursion in directories, avoiding: recurse. (line 6) +* relative items in date strings: Relative items in date strings. + (line 6) +* Remote devices: file. (line 60) +* remote tape drive: Remote Tape Server. (line 6) +* Removing files from an archive: delete. (line 6) +* rename-directory: warnings. (line 96) +* Replacing members with other members: append. (line 47) +* reporting bugs: Reports. (line 6) +* RESTORE_BEGIN: User Hooks. (line 38) +* RESTORE_END: User Hooks. (line 41) +* Resurrecting files from an archive: extract. (line 6) +* Retrieving files from an archive: extract. (line 6) +* return status: Synopsis. (line 67) +* rmargin: Configuring Help Summary. + (line 159) +* rmt: Remote Tape Server. (line 6) +* RSH: General-Purpose Variables. + (line 78) +* RSH_COMMAND: General-Purpose Variables. + (line 83) +* Running out of space: Scarce. (line 8) +* Salz, Rich: Authors of parse_datetime. + (line 6) +* SCCS, excluding files: exclude. (line 85) +* short options: Short Options. (line 6) +* short options with mandatory arguments: Short Options. (line 13) +* short options with optional arguments: Short Options. (line 22) +* short-opt-col: Configuring Help Summary. + (line 79) +* simple backup method: backup. (line 64) +* SIMPLE_BACKUP_SUFFIX: backup. (line 67) +* 'sleep', checkpoint action: checkpoints. (line 145) +* SLEEP_MESSAGE: General-Purpose Variables. + (line 121) +* SLEEP_TIME: General-Purpose Variables. + (line 106) +* Small memory: Scarce. (line 8) +* snapshot file field ranges: Snapshot Files. (line 111) +* snapshot file, format 0: Snapshot Files. (line 24) +* snapshot file, format 1: Snapshot Files. (line 51) +* snapshot file, format 2: Snapshot Files. (line 73) +* snapshot files, editing: Fixing Snapshot Files. + (line 6) +* snapshot files, fixing device numbers: Fixing Snapshot Files. + (line 6) +* 'socket ignored', warning message: warnings. (line 45) +* Sparse Files: sparse. (line 6) +* sparse files v.0.0, extracting with non-GNU tars: Sparse Recovery. + (line 92) +* sparse files v.0.1, extracting with non-GNU tars: Sparse Recovery. + (line 92) +* sparse files v.1.0, extracting with non-GNU tars: Sparse Recovery. + (line 17) +* Sparse files, creating using 'genfile': Generate Mode. (line 55) +* sparse files, extracting with non-GNU tars: Sparse Recovery. + (line 6) +* sparse formats: Sparse Formats. (line 6) +* sparse formats, defined: sparse. (line 52) +* sparse formats, Old GNU: Old GNU Format. (line 6) +* sparse formats, v.0.0: PAX 0. (line 6) +* sparse formats, v.0.1: PAX 0. (line 51) +* sparse formats, v.1.0: PAX 1. (line 6) +* sparse versions: Sparse Formats. (line 6) +* Specifying archive members: Selecting Archive Members. + (line 6) +* Specifying files to act on: Selecting Archive Members. + (line 6) +* Standard input and output: file. (line 39) +* Standard output, writing extracted files to: Writing to Standard Output. + (line 6) +* Storing archives in compressed format: gzip. (line 6) +* SVN, excluding files: exclude. (line 85) +* Symbolic link as file name: dereference. (line 6) +* symlink-cast: warnings. (line 68) +* TAPE: file tutorial. (line 14) +* tape blocking: Blocking Factor. (line 189) +* tape marks: Many. (line 43) +* tape positioning: Many. (line 26) +* Tapes, using '--delete' and: delete. (line 17) +* TAPE_FILE: General-Purpose Variables. + (line 18) +* tar: What tar Does. (line 6) +* TAR: General-Purpose Variables. + (line 126) +* tar archive: Definitions. (line 6) +* Tar archive formats: Formats. (line 6) +* tar entry: Naming tar Archives. (line 11) +* tar file: Naming tar Archives. (line 11) +* tar to a remote device: file. (line 60) +* tar to standard input and output: file. (line 39) +* tar-snapshot-edit: Fixing Snapshot Files. + (line 17) +* tarcat: Tarcat. (line 6) +* TAR_ARCHIVE, checkpoint script environment: checkpoints. (line 167) +* TAR_ARCHIVE, info script environment variable: Multi-Volume Archives. + (line 105) +* TAR_ARCHIVE, to-command environment: Writing to an External Program. + (line 79) +* TAR_ATIME, to-command environment: Writing to an External Program. + (line 52) +* TAR_BLOCKING_FACTOR, checkpoint script environment: checkpoints. + (line 170) +* TAR_BLOCKING_FACTOR, info script environment variable: Multi-Volume Archives. + (line 108) +* TAR_BLOCKING_FACTOR, to-command environment: Writing to an External Program. + (line 82) +* TAR_CHECKPOINT, checkpoint script environment: checkpoints. (line 173) +* TAR_CTIME, to-command environment: Writing to an External Program. + (line 61) +* TAR_FD, info script environment variable: Multi-Volume Archives. + (line 122) +* TAR_FILENAME, to-command environment: Writing to an External Program. + (line 40) +* TAR_FILETYPE, to-command environment: Writing to an External Program. + (line 24) +* TAR_FORMAT, checkpoint script environment: checkpoints. (line 180) +* TAR_FORMAT, info script environment variable: Multi-Volume Archives. + (line 118) +* TAR_FORMAT, to-command environment: Writing to an External Program. + (line 88) +* TAR_GID, to-command environment: Writing to an External Program. + (line 70) +* TAR_GNAME, to-command environment: Writing to an External Program. + (line 49) +* TAR_MODE, to-command environment: Writing to an External Program. + (line 37) +* TAR_MTIME, to-command environment: Writing to an External Program. + (line 58) +* TAR_OPTIONS, environment variable: using tar options. (line 30) +* TAR_REALNAME, to-command environment: Writing to an External Program. + (line 43) +* TAR_SIZE, to-command environment: Writing to an External Program. + (line 64) +* TAR_SUBCOMMAND, checkpoint script environment: checkpoints. (line 176) +* TAR_SUBCOMMAND, info script environment variable: Multi-Volume Archives. + (line 114) +* TAR_UID, to-command environment: Writing to an External Program. + (line 67) +* TAR_UNAME, to-command environment: Writing to an External Program. + (line 46) +* TAR_VERSION, checkpoint script environment: checkpoints. (line 164) +* TAR_VERSION, info script environment variable: Multi-Volume Archives. + (line 102) +* TAR_VERSION, to-command environment: Writing to an External Program. + (line 76) +* TAR_VOLUME, info script environment variable: Multi-Volume Archives. + (line 111) +* TAR_VOLUME, to-command environment: Writing to an External Program. + (line 85) +* this in date strings: Relative items in date strings. + (line 33) +* time of day item: Time of day items. (line 6) +* 'time stamp %s is %s s in the future', warning message: warnings. + (line 63) +* time zone correction: Time of day items. (line 29) +* time zone item: General date syntax. (line 40) +* time zone item <1>: Time zone items. (line 6) +* timestamp: warnings. (line 63) +* today in date strings: Relative items in date strings. + (line 33) +* tomorrow in date strings: Relative items in date strings. + (line 29) +* 'totals', checkpoint action: checkpoints. (line 140) +* 'ttyout', checkpoint action: checkpoints. (line 111) +* TZ: Specifying time zone rules. + (line 6) +* Ultrix 3.1 and write failure: Remote Tape Server. (line 40) +* 'Unknown file type '%c', extracted as normal file', warning message: warnings. + (line 70) +* 'Unknown file type; file ignored', warning message: warnings. + (line 45) +* unknown-cast: warnings. (line 70) +* unknown-keyword: warnings. (line 74) +* unpacking: Definitions. (line 22) +* Updating an archive: update. (line 6) +* usage-indent: Configuring Help Summary. + (line 155) +* Using encrypted archives: gzip. (line 196) +* ustar archive format: ustar. (line 6) +* uuencode: Applications. (line 8) +* v7 archive format: old. (line 6) +* VCS, excluding files: exclude. (line 85) +* VCS, excluding patterns from ignore files: exclude. (line 37) +* VCS, ignore files: exclude. (line 37) +* Verbose operation: verbose. (line 18) +* Verifying a write operation: verify. (line 6) +* Verifying the currency of an archive: compare. (line 6) +* version control system, excluding files: exclude. (line 85) +* Version of the 'tar' program: help. (line 6) +* version-control Emacs variable: backup. (line 49) +* VERSION_CONTROL: backup. (line 41) +* volno file: Multi-Volume Archives. + (line 74) +* VOLNO_FILE: General-Purpose Variables. + (line 89) +* Volume label, listing: label. (line 27) +* Volume number file: Multi-Volume Archives. + (line 74) +* week in date strings: Relative items in date strings. + (line 15) +* Where is the archive?: file. (line 6) +* Working directory, specifying: directory. (line 6) +* Writing extracted files to standard output: Writing to Standard Output. + (line 6) +* Writing new archives: file. (line 34) +* xdev: warnings. (line 43) +* xdev <1>: warnings. (line 100) +* XLIST: General-Purpose Variables. + (line 95) +* xsparse: Sparse Recovery. (line 13) +* year in date strings: Relative items in date strings. + (line 15) +* yesterday in date strings: Relative items in date strings. + (line 29) + |