X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=doc%2Ftar.texi;h=777d233b64012ce547ea57ecf7c4bab52bb5a402;hb=5d4a682a55a8978ab144a3b026e7db8b2c799f5c;hp=38e934f73f0b779ce022b09889fb9af12db5c6c4;hpb=0dd814fac2287d1d88ae886d614bb3bb5dd2ea9d;p=chaz%2Ftar diff --git a/doc/tar.texi b/doc/tar.texi index 38e934f..777d233 100644 --- a/doc/tar.texi +++ b/doc/tar.texi @@ -176,6 +176,7 @@ Invoking @GNUTAR{} * help:: * defaults:: * verbose:: +* checkpoints:: * interactive:: The Three Option Styles @@ -330,6 +331,7 @@ Making @command{tar} Archives More Portable * 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. @@ -1801,6 +1803,7 @@ and @option{--interactive} options (@pxref{interactive}). * help:: * defaults:: * verbose:: +* checkpoints:: * interactive:: @end menu @@ -2402,6 +2405,13 @@ a read-only loopback mount, or use the @samp{noatime} mount option available on some systems. However, mounting typically requires superuser privileges and can be a pain to manage. +@opsummary{auto-compress} +@item --auto-compress +@itemx -a + +During a @option{--create} operation, enables automatic compressed +format recognition based on the archive suffix. @xref{gzip}. + @opsummary{backup} @item --backup=@var{backup-type} @@ -2436,8 +2446,51 @@ This option tells @command{tar} to read or write archives through This option directs @command{tar} to print periodic checkpoint messages as it reads through the archive. It is intended for when you want a visual indication that @command{tar} is still running, but -don't want to see @option{--verbose} output. For a detailed -description, see @ref{Progress information}. +don't want to see @option{--verbose} output. You can also instruct +@command{tar} to execute a list of actions on each checkpoint, see +@option{--checklist-action} below. For a detailed description, see +@ref{checkpoints}. + +@opsummary{checkpoint-action} +@item --checkpoint-action=@var{action} +Instruct @command{tar} to execute an action upon hitting a +breakpoint. Here we give only a brief outline. @xref{checkpoints}, +for a complete description. + +The @var{action} argument can be one of the following: + +@table @asis +@item bell +Produce an audible bell on the console. + +@item dot +@itemx . +Print a single dot on the standard listing stream. + +@item echo +Display a textual message on the standard error, with the status and +number of the checkpoint. This is the default. + +@item echo=@var{string} +Display @var{string} on the standard error. Before output, the string +is subject to meta-character expansion. + +@item exec=@var{command} +Execute the given @var{command}. + +@item sleep=@var{time} +Wait for @var{time} seconds. + +@item ttyout=@var{string} +Output @var{string} on the current console (@file{/dev/tty}). +@end table + +Several @option{--checkpoint-action} options can be specified. The +supplied actions will be executed in order of their appearance in the +command line. + +Using @option{--checkpoint-action} without @option{--checkpoint} +assumes default checkpoint frequency of one checkpoint per 10 records. @opsummary{check-links} @item --check-links @@ -2450,6 +2503,8 @@ synonym for @option{--one-file-system}. The current semantics, which complies to UNIX98, was introduced with version 1.15.91. @xref{Changes}, for more information.}. +@xref{hard links}. + @opsummary{compress} @opsummary{uncompress} @item --compress @@ -2540,6 +2595,14 @@ named @var{file}, but dump the directory node itself. @xref{exclude}. Exclude from dump any directory containing file named @var{file}. @xref{exclude}. +@opsummary{exclude-vcs} +@item --exclude-vcs + +Exclude from dump directories and files, that are internal for some +widely used version control systems. + +@xref{exclude}. + @opsummary{file} @item --file=@var{archive} @itemx -f @var{archive} @@ -2615,6 +2678,13 @@ This option tells @command{tar} to read or write archives through @command{gzip}, allowing @command{tar} to directly operate on several kinds of compressed archives transparently. @xref{gzip}. +@opsummary{hard-dereference} +@item --hard-dereference +When creating an archive, dereference hard links and store the files +they refer to, instead of creating usual hard link members. + +@xref{hard links}. + @opsummary{help} @item --help @itemx -? @@ -2710,6 +2780,12 @@ backup, using @var{snapshot-file} to determine which files to backup. With other operations, informs @command{tar} that the archive is in incremental format. @xref{Incremental Dumps}. +@opsummary{lzma} +@item --lzma + +This option tells @command{tar} to read or write archives through +@command{lzma}. @xref{gzip}. + @opsummary{mode} @item --mode=@var{permissions} @@ -2885,9 +2961,7 @@ Synonym for @option{--format=v7}. @item --one-file-system Used when creating an archive. Prevents @command{tar} from recursing into directories that are on different file systems from the current -directory @footnote{Earlier versions of @GNUTAR{} understood @option{-l} as a -synonym for @option{--one-file-system}. This has changed in version -1.15.91. @xref{Changes}, for more information.}. +directory. @opsummary{overwrite} @item --overwrite @@ -3588,7 +3662,6 @@ after finishing the extraction, as well as when receiving signal @anchor{Progress information} @cindex Progress information -@opindex checkpoint The @option{--checkpoint} option prints an occasional message as @command{tar} reads or writes the archive. It is designed for those who don't need the more detailed (and voluminous) output of @@ -3606,13 +3679,19 @@ tar: Write checkpoint 3000 This example shows the default checkpoint message used by @command{tar}. If you place a dot immediately after the equal -sign, it will print a @samp{.} at each checkpoint. For example: +sign, it will print a @samp{.} at each checkpoint@footnote{This is +actually a shortcut for @option{--checkpoint=@var{n} +--checkpoint-action=dot}. @xref{checkpoints, dot}.}. For example: @smallexample $ @kbd{tar -c --checkpoint=.1000} /var ... @end smallexample +The @option{--checkpoint} option provides a flexible mechanism for +executing arbitrary actions upon hitting checkpoints, see the next +section (@pxref{checkpoints}), for more information on it. + @opindex show-omitted-dirs @anchor{show-omitted-dirs} The @option{--show-omitted-dirs} option, when reading an archive---with @@ -3645,6 +3724,196 @@ choose among several backup tapes when retrieving a file later, in favor of the tape where the file appears earliest (closest to the front of the tape). @xref{backup}. +@node checkpoints +@section Checkpoints +@cindex checkpoints, defined +@opindex checkpoint +@opindex checkpoint-action + +A @dfn{checkpoint} is a moment of time before writing @var{n}th record to +the archive (a @dfn{write checkpoint}), or before reading @var{n}th record +from the archive (a @dfn{read checkpoint}). Checkpoints allow to +periodically execute arbitrary actions. + +The checkpoint facility is enabled using the following option: + +@table @option +@xopindex{checkpoint, defined} +@item --checkpoint[=@var{n}] +Schedule checkpoints before writing or reading each @var{n}th record. +The default value for @var{n} is 10. +@end table + +A list of arbitrary @dfn{actions} can be executed at each checkpoint. +These actions include: pausing, displaying textual messages, and +executing arbitrary external programs. Actions are defined using +the @option{--checkpoint-action} option. + +@table @option +@xopindex{checkpoint-action, defined} +@item --checkpoint-action=@var{action} +Execute an @var{action} at each checkpoint. +@end table + +@cindex @code{echo}, checkpoint action +The simplest value of @var{action} is @samp{echo}. It instructs +@command{tar} to display the default message on the standard error +stream upon arriving at each checkpoint. The default message is (in +@acronym{POSIX} locale) @samp{Write checkpoint @var{n}}, for write +checkpoints, and @samp{Read checkpoint @var{n}}, for read checkpoints. +Here, @var{n} represents ordinal number of the checkpoint. + +In another locales, translated versions of this message are used. + +This is the default action, so running: + +@smallexample +$ @kbd{tar -c --checkpoint=1000 --checkpoint-action=echo} /var +@end smallexample + +@noindent +is equivalent to: + +@smallexample +$ @kbd{tar -c --checkpoint=1000} /var +@end smallexample + +The @samp{echo} action also allows to supply a customized message. +You do so by placing an equals sign and the message right after it, +e.g.: + +@smallexample +--checkpoint-action="echo=Hit %s checkpoint #%u" +@end smallexample + +The @samp{%s} and @samp{%u} in the above example are +@dfn{meta-characters}. The @samp{%s} meta-character is replaced with +the @dfn{type} of the checkpoint: @samp{write} or +@samp{read} (or a corresponding translated version in locales other +than @acronym{POSIX}). The @samp{%u} meta-character is replaced with +the ordinal number of the checkpoint. Thus, the above example could +produce the following output when used with the @option{--create} +option: + +@smallexample +tar: Hit write checkpoint #10 +tar: Hit write checkpoint #20 +tar: Hit write checkpoint #30 +@end smallexample + +Aside from meta-character expansion, the message string is subject to +@dfn{unquoting}, during which the backslash @dfn{escape sequences} are +replaced with their corresponding @acronym{ASCII} characters +(@pxref{escape sequences}). E.g. the following action will produce an +audible bell and the message described above at each checkpoint: + +@smallexample +--checkpoint-action='echo=\aHit %s checkpoint #%u' +@end smallexample + +@cindex @code{bell}, checkpoint action +There is also a special action which produces an audible signal: +@samp{bell}. It is not equivalent to @samp{echo='\a'}, because +@samp{bell} sends the bell directly to the console (@file{/dev/tty}), +whereas @samp{echo='\a'} sends it to the standard error. + +@cindex @code{ttyout}, checkpoint action +The @samp{ttyout=@var{string}} action outputs @var{string} to +@file{/dev/tty}, so it can be used even if the standard output is +redirected elsewhere. The @var{string} is subject to the same +modifications as with @samp{echo} action. In contrast to the latter, +@samp{ttyout} does not prepend @command{tar} executable name to the +string, nor does it output a newline after it. For example, the +following action will print the checkpoint message at the same screen +line, overwriting any previous message: + +@smallexample +--checkpoint-action="ttyout=\rHit %s checkpoint #%u" +@end smallexample + +@cindex @code{dot}, checkpoint action +Another available checkpoint action is @samp{dot} (or @samp{.}). It +instructs @command{tar} to print a single dot on the standard listing +stream, e.g.: + +@smallexample +$ @kbd{tar -c --checkpoint=1000 --checkpoint-action=dot} /var +... +@end smallexample + +For compatibility with previous @GNUTAR{} versions, this action can +be abbreviated by placing a dot in front of the checkpoint frequency, +as shown in the previous section. + +@cindex @code{sleep}, checkpoint action +Yet another action, @samp{sleep}, pauses @command{tar} for a specified +amount of seconds. The following example will stop for 30 seconds at each +checkpoint: + +@smallexample +$ @kbd{tar -c --checkpoint=1000 --checkpoint-action=sleep=30} +@end smallexample + +@cindex @code{exec}, checkpoint action +Finally, the @code{exec} action executes a given external program. +For example: + +@smallexample +$ @kbd{tar -c --checkpoint=1000 --checkpoint-action=exec=/sbin/cpoint} +@end smallexample + +This program is executed using @command{/bin/sh -c}, with no +additional arguments. Its exit code is ignored. It gets a copy of +@command{tar}'s environment plus the following variables: + +@table @env +@vrindex TAR_VERSION, checkpoint script environment +@item TAR_VERSION +@GNUTAR{} version number. + +@vrindex TAR_ARCHIVE, checkpoint script environment +@item TAR_ARCHIVE +The name of the archive @command{tar} is processing. + +@vrindex TAR_BLOCKING_FACTOR, checkpoint script environment +@item TAR_BLOCKING_FACTOR +Current blocking factor (@pxref{Blocking}. + +@vrindex TAR_CHECKPOINT, checkpoint script environment +@item TAR_CHECKPOINT +The checkpoint number. + +@vrindex TAR_SUBCOMMAND, checkpoint script environment +@item TAR_SUBCOMMAND +A short option describing the operation @command{tar} is executing +@xref{Operations}, for a complete list of subcommand options. + +@vrindex TAR_FORMAT, checkpoint script environment +@item TAR_FORMAT +Format of the archive being processed. @xref{Formats}, for a complete +list of archive format names. +@end table + +Any number of actions can be defined, by supplying several +@option{--checkpoint-action} options in the command line. For +example, the command below displays two messages, pauses +execution for 30 seconds and executes the @file{/sbin/cpoint} script: + +@example +@group +$ @kbd{tar -c -f arc.tar \ + --checkpoint-action='\aecho=Hit %s checkpoint #%u' \ + --checkpoint-action='echo=Sleeping for 30 seconds' \ + --checkpoint-action='sleep=30' \ + --checkpoint-action='exec=/sbin/cpoint'} +@end group +@end example + +This example also illustrates the fact that +@option{--checkpoint-action} can be used without +@option{--checkpoint}. In this case, the default checkpoint frequency +(at each 10th record) is assumed. + @node interactive @section Asking for Confirmation During Operations @cindex Interactive operation @@ -4866,7 +5135,7 @@ option is used. The command can obtain the information about the file it processes from the following environment variables: -@table @var +@table @env @vrindex TAR_FILETYPE, to-command environment @item TAR_FILETYPE Type of the file. It is a single letter with the following meaning: @@ -6506,6 +6775,42 @@ called as @w{@samp{tar -c -X foo .}} and the file @file{foo} contains a single line @file{*.o}, no files whose names end in @file{.o} will be added to the archive. +Notice, that lines from @var{file} are read verbatim. One of the +frequent errors is leaving some extra whitespace after a file name, +which is difficult to catch using text editors. + +However, empty lines are OK. + +@cindex version control system, excluding files +@cindex VCS, excluding files +@cindex SCCS, excluding files +@cindex RCS, excluding files +@cindex CVS, excluding files +@cindex SVN, excluding files +@cindex git, excluding files +@table @option +@opindex exclude-vcs +@item --exclude-vcs +Exclude files and directories used by some version control systems. +@end table + +As of version @value{VERSION}, the following files are excluded: + +@itemize @bullet +@item @file{CVS/}, and everything under it +@item @file{RCS/}, and everything under it +@item @file{SCCS/}, and everything under it +@item @file{.git/}, and everything under it +@item @file{.gitignore} +@item @file{.cvsignore} +@item @file{.svn/}, and everything under it +@item @file{.arch-ids/}, and everything under it +@item @file{@{arch@}/}, and everything under it +@item @file{=RELEASE-ID} +@item @file{=meta-update} +@item @file{=update} +@end itemize + @findex exclude-caches When creating an archive, the @option{--exclude-caches} option family causes @command{tar} to exclude all directories that contain a @dfn{cache @@ -6516,7 +6821,7 @@ Various applications write cache directory tags into directories they use to hold regenerable, non-precious data, so that such data can be more easily excluded from backups. -There are three @samp{exclude-caches} option, providing a different +There are three @samp{exclude-caches} options, each providing a different exclusion semantics: @table @option @@ -6891,7 +7196,7 @@ quoting}. The characters in question are: @itemize @bullet @item Non-printable control characters: - +@anchor{escape sequences} @multitable @columnfractions 0.20 0.10 0.60 @headitem Character @tab @acronym{ASCII} @tab Character name @item \a @tab 7 @tab Audible bell @@ -7897,18 +8202,18 @@ switch to @samp{posix}. @cindex Storing archives in compressed format @GNUTAR{} is able to create and read compressed archives. It supports -@command{gzip} and @command{bzip2} compression programs. For backward -compatibility, it also supports @command{compress} command, although -we strongly recommend against using it, since there is a patent -covering the algorithm it uses and you could be sued for patent -infringement merely by running @command{compress}! Besides, it is less -effective than @command{gzip} and @command{bzip2}. +@command{gzip}, @command{bzip2} and @command{lzma} compression +programs. For backward compatibility, it also supports +@command{compress} command, although we strongly recommend against +using it, because it is by far less effective than other compression +programs@footnote{It also had patent problems in the past.}. Creating a compressed archive is simple: you just specify a @dfn{compression option} along with the usual archive creation commands. The compression option is @option{-z} (@option{--gzip}) to create a @command{gzip} compressed archive, @option{-j} -(@option{--bzip2}) to create a @command{bzip2} compressed archive, and +(@option{--bzip2}) to create a @command{bzip2} compressed archive, +@command{lzma} to create an @asis{LZMA} compressed archive and @option{-Z} (@option{--compress}) to use @command{compress} program. For example: @@ -7916,6 +8221,26 @@ For example: $ @kbd{tar cfz archive.tar.gz .} @end smallexample +You can also let @GNUTAR{} select the compression program basing on +the suffix of the archive file name. This is done using +@option{--auto-compress} (@option{-a}) command line option. For +example, the following invocation will use @command{bzip2} for +compression: + +@smallexample +$ @kbd{tar cfa archive.tar.bz2 .} +@end smallexample + +@noindent +whereas the following one will use @command{lzma}: + +@smallexample +$ @kbd{tar cfa archive.tar.lzma .} +@end smallexample + +For a complete list of file name suffixes recognized by @GNUTAR{}, +@ref{auto-compress}. + Reading compressed archive is even simpler: you don't need to specify any additional options as @GNUTAR{} recognizes its format automatically. Thus, the following commands will list and extract the @@ -7957,6 +8282,28 @@ compressed. The following table summarizes compression options used by @GNUTAR{}. @table @option +@anchor{auto-compress} +@opindex auto-compress +@item --auto-compress +@itemx -a +Select a compression program to use by the archive file name +suffix. The following suffixes are recognized: + +@multitable @columnfractions 0.3 0.6 +@headitem Suffix @tab Compression program +@item @samp{.gz} @tab @command{gzip} +@item @samp{.tgz} @tab @command{gzip} +@item @samp{.taz} @tab @command{gzip} +@item @samp{.Z} @tab @command{compress} +@item @samp{.taZ} @tab @command{compress} +@item @samp{.bz2} @tab @command{bzip2} +@item @samp{.tz2} @tab @command{bzip2} +@item @samp{.tbz2} @tab @command{bzip2} +@item @samp{.tbz} @tab @command{bzip2} +@item @samp{.lzma} @tab @command{lzma} +@item @samp{.tlz} @tab @command{lzma} +@end multitable + @opindex gzip @opindex ungzip @item -z @@ -8003,6 +8350,10 @@ So, there are pros and cons. We'll see! @itemx --bzip2 Filter the archive through @code{bzip2}. Otherwise like @option{--gzip}. +@opindex lzma +@item --lzma +Filter the archive through @command{lzma}. Otherwise like @option{--gzip}. + @opindex compress @opindex uncompress @item -Z @@ -8010,11 +8361,6 @@ Filter the archive through @code{bzip2}. Otherwise like @option{--gzip}. @itemx --uncompress Filter the archive through @command{compress}. Otherwise like @option{--gzip}. -The @acronym{GNU} Project recommends you not use -@command{compress}, because there is a patent covering the algorithm it -uses. You could be sued for patent infringement merely by running -@command{compress}. - @opindex use-compress-program @item --use-compress-program=@var{prog} Use external compression program @var{prog}. Use this option if you @@ -8364,6 +8710,7 @@ archives and archive labels) in GNU and PAX formats.} @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. @@ -8421,6 +8768,100 @@ and use @option{--dereference} (@option{-h}): many systems do not support symbolic links, and moreover, your distribution might be unusable if it contains unresolved symbolic links. +@node hard links +@subsection Hard Links +@UNREVISED{} +@cindex File names, using hard links +@cindex hard links, dereferencing +@cindex dereferencing hard links + +Normally, when @command{tar} archives a hard link, it writes a +block to the archive naming the target of the link (a @samp{1} type +block). In that way, the actual file contents is stored in file only +once. For example, consider the following two files: + +@smallexample +@group +$ ls +-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 +@end group +@end smallexample + +Here, @file{jeden} is a link to @file{one}. When archiving this +directory with a verbose level 2, you will get an output similar to +the following: + +@smallexample +$ tar cfvv ../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 +@end smallexample + +The last line shows that, instead of storing two copies of the file, +@command{tar} stored it only once, under the name @file{jeden}, and +stored file @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: + +@table @option +@xopindex{check-links, described} +@item --check-links +@itemx -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. +@end table + +For example, trying to archive only file @file{jeden} with this option +produces the following diagnostics: + +@smallexample +$ tar -c -f ../archive.tar jeden +tar: Missing links to `jeden'. +@end smallexample + +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 @file{one} from the +archive created in previous examples produces, in the absense of file +@file{jeden}: + +@smallexample +$ tar xf archive.tar ./one +tar: ./one: Cannot hard link to `./jeden': No such file or directory +tar: Error exit delayed from previous errors +@end smallexample + +The reason for this behavior is that @command{tar} cannot seek back in +the archive to the previous member (in this case, @file{one}), to +extract it@footnote{There are plans to fix this in future releases.}. +If you wish to avoid such problems at the cost of a bigger archive, +use the following option: + +@table @option +@xopindex{hard-dereference, described} +@item --hard-dereference +Dereference hard links and store the files they refer to. +@end table + +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: + +@smallexample +@group +$ 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 +@end group +@end smallexample + @node old @subsection Old V7 Archives @cindex Format, old style @@ -10210,13 +10651,17 @@ environment variables: @item TAR_ARCHIVE The name of the archive @command{tar} is processing. +@vrindex TAR_BLOCKING_FACTOR, info script environment variable +@item TAR_BLOCKING_FACTOR +Current blocking factor (@pxref{Blocking}. + @vrindex TAR_VOLUME, info script environment variable @item TAR_VOLUME Ordinal number of the volume @command{tar} is about to start. @vrindex TAR_SUBCOMMAND, info script environment variable @item TAR_SUBCOMMAND -Short option describing the operation @command{tar} is executing +A short option describing the operation @command{tar} is executing @xref{Operations}, for a complete list of subcommand options. @vrindex TAR_FORMAT, info script environment variable @@ -10279,7 +10724,7 @@ echo $@{name:-$TAR_ARCHIVE@}-$TAR_VOLUME >&$TAR_FD @end group @end smallexample -The same script cant be used while listing, comparing or extracting +The same script can be used while listing, comparing or extracting from the created archive. For example: @smallexample