| .\" Copyright (c) 2003-2007 Tim Kientzle |
| .\" All rights reserved. |
| .\" |
| .\" Redistribution and use in source and binary forms, with or without |
| .\" modification, are permitted provided that the following conditions |
| .\" are met: |
| .\" 1. Redistributions of source code must retain the above copyright |
| .\" notice, this list of conditions and the following disclaimer. |
| .\" 2. Redistributions in binary form must reproduce the above copyright |
| .\" notice, this list of conditions and the following disclaimer in the |
| .\" documentation and/or other materials provided with the distribution. |
| .\" |
| .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND |
| .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| .\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE |
| .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| .\" SUCH DAMAGE. |
| .\" |
| .\" $FreeBSD: src/usr.bin/tar/bsdtar.1,v 1.46 2008/12/06 07:37:55 kientzle Exp $ |
| .\" |
| .Dd Oct 12, 2009 |
| .Dt BSDTAR 1 |
| .Os |
| .Sh NAME |
| .Nm tar |
| .Nd manipulate tape archives |
| .Sh SYNOPSIS |
| .Nm |
| .Op Ar bundled-flags Ao args Ac |
| .Op Ao Ar file Ac | Ao Ar pattern Ac ... |
| .Nm |
| .Brq Fl c |
| .Op Ar options |
| .Op Ar files | Ar directories |
| .Nm |
| .Brq Fl r | Fl u |
| .Fl f Ar archive-file |
| .Op Ar options |
| .Op Ar files | Ar directories |
| .Nm |
| .Brq Fl t | Fl x |
| .Op Ar options |
| .Op Ar patterns |
| .Sh DESCRIPTION |
| .Nm |
| creates and manipulates streaming archive files. |
| This implementation can extract from tar, pax, cpio, zip, jar, ar, |
| and ISO 9660 cdrom images and can create tar, pax, cpio, ar, |
| and shar archives. |
| .Pp |
| The first synopsis form shows a |
| .Dq bundled |
| option word. |
| This usage is provided for compatibility with historical implementations. |
| See COMPATIBILITY below for details. |
| .Pp |
| The other synopsis forms show the preferred usage. |
| The first option to |
| .Nm |
| is a mode indicator from the following list: |
| .Bl -tag -compact -width indent |
| .It Fl c |
| Create a new archive containing the specified items. |
| .It Fl r |
| Like |
| .Fl c , |
| but new entries are appended to the archive. |
| Note that this only works on uncompressed archives stored in regular files. |
| The |
| .Fl f |
| option is required. |
| .It Fl t |
| List archive contents to stdout. |
| .It Fl u |
| Like |
| .Fl r , |
| but new entries are added only if they have a modification date |
| newer than the corresponding entry in the archive. |
| Note that this only works on uncompressed archives stored in regular files. |
| The |
| .Fl f |
| option is required. |
| .It Fl x |
| Extract to disk from the archive. |
| If a file with the same name appears more than once in the archive, |
| each copy will be extracted, with later copies overwriting (replacing) |
| earlier copies. |
| .El |
| .Pp |
| In |
| .Fl c , |
| .Fl r , |
| or |
| .Fl u |
| mode, each specified file or directory is added to the |
| archive in the order specified on the command line. |
| By default, the contents of each directory are also archived. |
| .Pp |
| In extract or list mode, the entire command line |
| is read and parsed before the archive is opened. |
| The pathnames or patterns on the command line indicate |
| which items in the archive should be processed. |
| Patterns are shell-style globbing patterns as |
| documented in |
| .Xr tcsh 1 . |
| .Sh OPTIONS |
| Unless specifically stated otherwise, options are applicable in |
| all operating modes. |
| .Bl -tag -width indent |
| .It Cm @ Ns Pa archive |
| (c and r mode only) |
| The specified archive is opened and the entries |
| in it will be appended to the current archive. |
| As a simple example, |
| .Dl Nm Fl c Fl f Pa - Pa newfile Cm @ Ns Pa original.tar |
| writes a new archive to standard output containing a file |
| .Pa newfile |
| and all of the entries from |
| .Pa original.tar . |
| In contrast, |
| .Dl Nm Fl c Fl f Pa - Pa newfile Pa original.tar |
| creates a new archive with only two entries. |
| Similarly, |
| .Dl Nm Fl czf Pa - Fl -format Cm pax Cm @ Ns Pa - |
| reads an archive from standard input (whose format will be determined |
| automatically) and converts it into a gzip-compressed |
| pax-format archive on stdout. |
| In this way, |
| .Nm |
| can be used to convert archives from one format to another. |
| .It Fl b Ar blocksize |
| Specify the block size, in 512-byte records, for tape drive I/O. |
| As a rule, this argument is only needed when reading from or writing |
| to tape drives, and usually not even then as the default block size of |
| 20 records (10240 bytes) is very common. |
| .It Fl C Ar directory |
| In c and r mode, this changes the directory before adding |
| the following files. |
| In x mode, change directories after opening the archive |
| but before extracting entries from the archive. |
| .It Fl -check-links |
| (c and r modes only) |
| Issue a warning message unless all links to each file are archived. |
| .It Fl -chroot |
| (x mode only) |
| .Fn chroot |
| to the current directory after processing any |
| .Fl C |
| options and before extracting any files. |
| .It Fl -exclude Ar pattern |
| Do not process files or directories that match the |
| specified pattern. |
| Note that exclusions take precedence over patterns or filenames |
| specified on the command line. |
| .It Fl -format Ar format |
| (c, r, u mode only) |
| Use the specified format for the created archive. |
| Supported formats include |
| .Dq cpio , |
| .Dq pax , |
| .Dq shar , |
| and |
| .Dq ustar . |
| Other formats may also be supported; see |
| .Xr libarchive-formats 5 |
| for more information about currently-supported formats. |
| In r and u modes, when extending an existing archive, the format specified |
| here must be compatible with the format of the existing archive on disk. |
| .It Fl f Ar file |
| Read the archive from or write the archive to the specified file. |
| The filename can be |
| .Pa - |
| for standard input or standard output. |
| If not specified, the default tape device will be used. |
| (On |
| .Fx , |
| the default tape device is |
| .Pa /dev/sa0 . ) |
| .It Fl H |
| (c and r mode only) |
| Symbolic links named on the command line will be followed; the |
| target of the link will be archived, not the link itself. |
| .It Fl h |
| (c and r mode only) |
| Synonym for |
| .Fl L . |
| .It Fl I |
| Synonym for |
| .Fl T . |
| .It Fl -include Ar pattern |
| Process only files or directories that match the specified pattern. |
| Note that exclusions specified with |
| .Fl -exclude |
| take precedence over inclusions. |
| If no inclusions are explicitly specified, all entries are processed by |
| default. |
| The |
| .Fl -include |
| option is especially useful when filtering archives. |
| For example, the command |
| .Dl Nm Fl c Fl f Pa new.tar Fl -include='*foo*' Cm @ Ns Pa old.tgz |
| creates a new archive |
| .Pa new.tar |
| containing only the entries from |
| .Pa old.tgz |
| containing the string |
| .Sq foo . |
| .It Fl j |
| (c mode only) |
| Compress the resulting archive with |
| .Xr bzip2 1 . |
| In extract or list modes, this option is ignored. |
| Note that, unlike other |
| .Nm tar |
| implementations, this implementation recognizes bzip2 compression |
| automatically when reading archives. |
| .It Fl k |
| (x mode only) |
| Do not overwrite existing files. |
| In particular, if a file appears more than once in an archive, |
| later copies will not overwrite earlier copies. |
| .It Fl -keep-newer-files |
| (x mode only) |
| Do not overwrite existing files that are newer than the |
| versions appearing in the archive being extracted. |
| .It Fl L |
| (c and r mode only) |
| All symbolic links will be followed. |
| Normally, symbolic links are archived as such. |
| With this option, the target of the link will be archived instead. |
| .It Fl l |
| This is a synonym for the |
| .Fl -check-links |
| option. |
| .It Fl m |
| (x mode only) |
| Do not extract modification time. |
| By default, the modification time is set to the time stored in the archive. |
| .It Fl n |
| (c, r, u modes only) |
| Do not recursively archive the contents of directories. |
| .It Fl -newer Ar date |
| (c, r, u modes only) |
| Only include files and directories newer than the specified date. |
| This compares ctime entries. |
| .It Fl -newer-mtime Ar date |
| (c, r, u modes only) |
| Like |
| .Fl -newer , |
| except it compares mtime entries instead of ctime entries. |
| .It Fl -newer-than Pa file |
| (c, r, u modes only) |
| Only include files and directories newer than the specified file. |
| This compares ctime entries. |
| .It Fl -newer-mtime-than Pa file |
| (c, r, u modes only) |
| Like |
| .Fl -newer-than , |
| except it compares mtime entries instead of ctime entries. |
| .It Fl -nodump |
| (c and r modes only) |
| Honor the nodump file flag by skipping this file. |
| .It Fl -null |
| (use with |
| .Fl I , |
| .Fl T , |
| or |
| .Fl X ) |
| Filenames or patterns are separated by null characters, |
| not by newlines. |
| This is often used to read filenames output by the |
| .Fl print0 |
| option to |
| .Xr find 1 . |
| .It Fl -numeric-owner |
| (x mode only) |
| Ignore symbolic user and group names when restoring archives to disk, |
| only numeric uid and gid values will be obeyed. |
| .It Fl O |
| (x, t modes only) |
| In extract (-x) mode, files will be written to standard out rather than |
| being extracted to disk. |
| In list (-t) mode, the file listing will be written to stderr rather than |
| the usual stdout. |
| .It Fl o |
| (x mode) |
| Use the user and group of the user running the program rather |
| than those specified in the archive. |
| Note that this has no significance unless |
| .Fl p |
| is specified, and the program is being run by the root user. |
| In this case, the file modes and flags from |
| the archive will be restored, but ACLs or owner information in |
| the archive will be discarded. |
| .It Fl o |
| (c, r, u mode) |
| A synonym for |
| .Fl -format Ar ustar |
| .It Fl -one-file-system |
| (c, r, and u modes) |
| Do not cross mount points. |
| .It Fl -options Ar options |
| Select optional behaviors for particular modules. |
| The argument is a text string containing comma-separated |
| keywords and values. |
| These are passed to the modules that handle particular |
| formats to control how those formats will behave. |
| Each option has one of the following forms: |
| .Bl -tag -compact -width indent |
| .It Ar key=value |
| The key will be set to the specified value in every module that supports it. |
| Modules that do not support this key will ignore it. |
| .It Ar key |
| The key will be enabled in every module that supports it. |
| This is equivalent to |
| .Ar key Ns Cm =1 . |
| .It Ar !key |
| The key will be disabled in every module that supports it. |
| .It Ar module:key=value , Ar module:key , Ar module:!key |
| As above, but the corresponding key and value will be provided |
| only to modules whose name matches |
| .Ar module . |
| .El |
| The currently supported modules and keys are: |
| .Bl -tag -compact -width indent |
| .It Cm iso9660:joliet |
| Support Joliet extensions. |
| This is enabled by default, use |
| .Cm !joliet |
| or |
| .Cm iso9660:!joliet |
| to disable. |
| .It Cm iso9660:rockridge |
| Support Rock Ridge extensions. |
| This is enabled by default, use |
| .Cm !rockridge |
| or |
| .Cm iso9660:!rockridge |
| to disable. |
| .It Cm gzip:compression-level |
| A decimal integer from 0 to 9 specifying the gzip compression level. |
| .It Cm xz:compression-level |
| A decimal integer from 0 to 9 specifying the xz compression level. |
| .It Cm mtree: Ns Ar keyword |
| The mtree writer module allows you to specify which mtree keywords |
| will be included in the output. |
| Supported keywords include: |
| .Cm cksum , Cm device , Cm flags , Cm gid , Cm gname , Cm indent , |
| .Cm link , Cm md5 , Cm mode , Cm nlink , Cm rmd160 , Cm sha1 , Cm sha256 , |
| .Cm sha384 , Cm sha512 , Cm size , Cm time , Cm uid , Cm uname . |
| The default is equivalent to: |
| .Dq device, flags, gid, gname, link, mode, nlink, size, time, type, uid, uname . |
| .It Cm mtree:all |
| Enables all of the above keywords. |
| You can also use |
| .Cm mtree:!all |
| to disable all keywords. |
| .It Cm mtree:use-set |
| Enable generation of |
| .Cm /set |
| lines in the output. |
| .It Cm mtree:indent |
| Produce human-readable output by indenting options and splitting lines |
| to fit into 80 columns. |
| .It Cm zip:compression Ns = Ns Ar type |
| Use |
| .Ar type |
| as compression method. |
| Supported values are store (uncompressed) and deflate (gzip algorithm). |
| .El |
| If a provided option is not supported by any module, that |
| is a fatal error. |
| .It Fl P |
| Preserve pathnames. |
| By default, absolute pathnames (those that begin with a / |
| character) have the leading slash removed both when creating archives |
| and extracting from them. |
| Also, |
| .Nm |
| will refuse to extract archive entries whose pathnames contain |
| .Pa .. |
| or whose target directory would be altered by a symlink. |
| This option suppresses these behaviors. |
| .It Fl p |
| (x mode only) |
| Preserve file permissions. |
| Attempt to restore the full permissions, including owner, file modes, file |
| flags and ACLs, if available, for each item extracted from the archive. |
| By default, newly-created files are owned by the user running |
| .Nm , |
| the file mode is restored for newly-created regular files, and |
| all other types of entries receive default permissions. |
| If |
| .Nm |
| is being run by root, the default is to restore the owner unless the |
| .Fl o |
| option is also specified. |
| .It Fl q ( Fl -fast-read ) |
| (x and t mode only) |
| Extract or list only the first archive entry that matches each pattern |
| or filename operand. |
| Exit as soon as each specified pattern or filename has been matched. |
| By default, the archive is always read to the very end, since |
| there can be multiple entries with the same name and, by convention, |
| later entries overwrite earlier entries. |
| This option is provided as a performance optimization. |
| .It Fl S |
| (x mode only) |
| Extract files as sparse files. |
| For every block on disk, check first if it contains only NULL bytes and seek |
| over it otherwise. |
| This works similiar to the conv=sparse option of dd. |
| .It Fl -strip-components Ar count |
| (x mode only) |
| Remove the specified number of leading path elements. |
| Pathnames with fewer elements will be silently skipped. |
| Note that the pathname is edited after checking inclusion/exclusion patterns |
| but before security checks. |
| .It Fl s Ar pattern |
| Modify file or archive member names according to |
| .Pa pattern . |
| The pattern has the format |
| .Ar /old/new/ Ns Op gps |
| where |
| .Ar old |
| is a basic regular expression, |
| .Ar new |
| is the replacement string of the matched part, |
| and the optional trailing letters modify |
| how the replacement is handled. |
| If |
| .Ar old |
| is not matched, the pattern is skipped. |
| Within |
| .Ar new , |
| ~ is substituted with the match, \1 to \9 with the content of |
| the corresponding captured group. |
| The optional trailing g specifies that matching should continue |
| after the matched part and stopped on the first unmatched pattern. |
| The optional trailing s specifies that the pattern applies to the value |
| of symbolic links. |
| The optional trailing p specifies that after a successful substitution |
| the original path name and the new path name should be printed to |
| standard error. |
| .It Fl T Ar filename |
| In x or t mode, |
| .Nm |
| will read the list of names to be extracted from |
| .Pa filename . |
| In c mode, |
| .Nm |
| will read names to be archived from |
| .Pa filename . |
| The special name |
| .Dq -C |
| on a line by itself will cause the current directory to be changed to |
| the directory specified on the following line. |
| Names are terminated by newlines unless |
| .Fl -null |
| is specified. |
| Note that |
| .Fl -null |
| also disables the special handling of lines containing |
| .Dq -C . |
| .It Fl U |
| (x mode only) |
| Unlink files before creating them. |
| Without this option, |
| .Nm |
| overwrites existing files, which preserves existing hardlinks. |
| With this option, existing hardlinks will be broken, as will any |
| symlink that would affect the location of an extracted file. |
| .It Fl -use-compress-program Ar program |
| Pipe the input (in x or t mode) or the output (in c mode) through |
| .Pa program |
| instead of using the builtin compression support. |
| .It Fl v |
| Produce verbose output. |
| In create and extract modes, |
| .Nm |
| will list each file name as it is read from or written to |
| the archive. |
| In list mode, |
| .Nm |
| will produce output similar to that of |
| .Xr ls 1 . |
| Additional |
| .Fl v |
| options will provide additional detail. |
| .It Fl -version |
| Print version of |
| .Nm |
| and |
| .Nm libarchive , |
| and exit. |
| .It Fl w |
| Ask for confirmation for every action. |
| .It Fl X Ar filename |
| Read a list of exclusion patterns from the specified file. |
| See |
| .Fl -exclude |
| for more information about the handling of exclusions. |
| .It Fl y |
| (c mode only) |
| Compress the resulting archive with |
| .Xr bzip2 1 . |
| In extract or list modes, this option is ignored. |
| Note that, unlike other |
| .Nm tar |
| implementations, this implementation recognizes bzip2 compression |
| automatically when reading archives. |
| .It Fl z |
| (c mode only) |
| Compress the resulting archive with |
| .Xr gzip 1 . |
| In extract or list modes, this option is ignored. |
| Note that, unlike other |
| .Nm tar |
| implementations, this implementation recognizes gzip compression |
| automatically when reading archives. |
| .It Fl Z |
| (c mode only) |
| Compress the resulting archive with |
| .Xr compress 1 . |
| In extract or list modes, this option is ignored. |
| Note that, unlike other |
| .Nm tar |
| implementations, this implementation recognizes compress compression |
| automatically when reading archives. |
| .El |
| .Sh ENVIRONMENT |
| The following environment variables affect the execution of |
| .Nm : |
| .Bl -tag -width ".Ev BLOCKSIZE" |
| .It Ev LANG |
| The locale to use. |
| See |
| .Xr environ 7 |
| for more information. |
| .It Ev TAPE |
| The default tape device. |
| The |
| .Fl f |
| option overrides this. |
| .It Ev TZ |
| The timezone to use when displaying dates. |
| See |
| .Xr environ 7 |
| for more information. |
| .El |
| .Sh FILES |
| .Bl -tag -width ".Ev BLOCKSIZE" |
| .It Pa /dev/sa0 |
| The default tape device, if not overridden by the |
| .Ev TAPE |
| environment variable or the |
| .Fl f |
| option. |
| .El |
| .Sh EXIT STATUS |
| .Ex -std |
| .Sh EXAMPLES |
| The following creates a new archive |
| called |
| .Ar file.tar.gz |
| that contains two files |
| .Ar source.c |
| and |
| .Ar source.h : |
| .Dl Nm Fl czf Pa file.tar.gz Pa source.c Pa source.h |
| .Pp |
| To view a detailed table of contents for this |
| archive: |
| .Dl Nm Fl tvf Pa file.tar.gz |
| .Pp |
| To extract all entries from the archive on |
| the default tape drive: |
| .Dl Nm Fl x |
| .Pp |
| To examine the contents of an ISO 9660 cdrom image: |
| .Dl Nm Fl tf Pa image.iso |
| .Pp |
| To move file hierarchies, invoke |
| .Nm |
| as |
| .Dl Nm Fl cf Pa - Fl C Pa srcdir\ . | Nm Fl xpf Pa - Fl C Pa destdir |
| or more traditionally |
| .Dl cd srcdir \&; Nm Fl cf Pa -\ . | ( cd destdir \&; Nm Fl xpf Pa - ) |
| .Pp |
| In create mode, the list of files and directories to be archived |
| can also include directory change instructions of the form |
| .Cm -C Ns Pa foo/baz |
| and archive inclusions of the form |
| .Cm @ Ns Pa archive-file . |
| For example, the command line |
| .Dl Nm Fl c Fl f Pa new.tar Pa foo1 Cm @ Ns Pa old.tgz Cm -C Ns Pa /tmp Pa foo2 |
| will create a new archive |
| .Pa new.tar . |
| .Nm |
| will read the file |
| .Pa foo1 |
| from the current directory and add it to the output archive. |
| It will then read each entry from |
| .Pa old.tgz |
| and add those entries to the output archive. |
| Finally, it will switch to the |
| .Pa /tmp |
| directory and add |
| .Pa foo2 |
| to the output archive. |
| .Pp |
| An input file in |
| .Xr mtree 5 |
| format can be used to create an output archive with arbitrary ownership, |
| permissions, or names that differ from existing data on disk: |
| .Pp |
| .Dl $ cat input.mtree |
| .Dl #mtree |
| .Dl usr/bin uid=0 gid=0 mode=0755 type=dir |
| .Dl usr/bin/ls uid=0 gid=0 mode=0755 type=file content=myls |
| .Dl $ tar -cvf output.tar @input.mtree |
| .Pp |
| The |
| .Fl -newer |
| and |
| .Fl -newer-mtime |
| switches accept a variety of common date and time specifications, including |
| .Dq 12 Mar 2005 7:14:29pm , |
| .Dq 2005-03-12 19:14 , |
| .Dq 5 minutes ago , |
| and |
| .Dq 19:14 PST May 1 . |
| .Pp |
| The |
| .Fl -options |
| argument can be used to control various details of archive generation |
| or reading. |
| For example, you can generate mtree output which only contains |
| .Cm type , Cm time , |
| and |
| .Cm uid |
| keywords: |
| .Dl Nm Fl cf Pa file.tar Fl -format=mtree Fl -options='!all,type,time,uid' Pa dir |
| or you can set the compression level used by gzip or xz compression: |
| .Dl Nm Fl czf Pa file.tar Fl -options='compression-level=9' . |
| For more details, see the explanation of the |
| .Fn archive_read_set_options |
| and |
| .Fn archive_write_set_options |
| API calls that are described in |
| .Xr archive_read 3 |
| and |
| .Xr archive_write 3 . |
| .Sh COMPATIBILITY |
| The bundled-arguments format is supported for compatibility |
| with historic implementations. |
| It consists of an initial word (with no leading - character) in which |
| each character indicates an option. |
| Arguments follow as separate words. |
| The order of the arguments must match the order |
| of the corresponding characters in the bundled command word. |
| For example, |
| .Dl Nm Cm tbf 32 Pa file.tar |
| specifies three flags |
| .Cm t , |
| .Cm b , |
| and |
| .Cm f . |
| The |
| .Cm b |
| and |
| .Cm f |
| flags both require arguments, |
| so there must be two additional items |
| on the command line. |
| The |
| .Ar 32 |
| is the argument to the |
| .Cm b |
| flag, and |
| .Ar file.tar |
| is the argument to the |
| .Cm f |
| flag. |
| .Pp |
| The mode options c, r, t, u, and x and the options |
| b, f, l, m, o, v, and w comply with SUSv2. |
| .Pp |
| For maximum portability, scripts that invoke |
| .Nm tar |
| should use the bundled-argument format above, should limit |
| themselves to the |
| .Cm c , |
| .Cm t , |
| and |
| .Cm x |
| modes, and the |
| .Cm b , |
| .Cm f , |
| .Cm m , |
| .Cm v , |
| and |
| .Cm w |
| options. |
| .Pp |
| Additional long options are provided to improve compatibility with other |
| tar implementations. |
| .Sh SECURITY |
| Certain security issues are common to many archiving programs, including |
| .Nm . |
| In particular, carefully-crafted archives can request that |
| .Nm |
| extract files to locations outside of the target directory. |
| This can potentially be used to cause unwitting users to overwrite |
| files they did not intend to overwrite. |
| If the archive is being extracted by the superuser, any file |
| on the system can potentially be overwritten. |
| There are three ways this can happen. |
| Although |
| .Nm |
| has mechanisms to protect against each one, |
| savvy users should be aware of the implications: |
| .Bl -bullet -width indent |
| .It |
| Archive entries can have absolute pathnames. |
| By default, |
| .Nm |
| removes the leading |
| .Pa / |
| character from filenames before restoring them to guard against this problem. |
| .It |
| Archive entries can have pathnames that include |
| .Pa .. |
| components. |
| By default, |
| .Nm |
| will not extract files containing |
| .Pa .. |
| components in their pathname. |
| .It |
| Archive entries can exploit symbolic links to restore |
| files to other directories. |
| An archive can restore a symbolic link to another directory, |
| then use that link to restore a file into that directory. |
| To guard against this, |
| .Nm |
| checks each extracted path for symlinks. |
| If the final path element is a symlink, it will be removed |
| and replaced with the archive entry. |
| If |
| .Fl U |
| is specified, any intermediate symlink will also be unconditionally removed. |
| If neither |
| .Fl U |
| nor |
| .Fl P |
| is specified, |
| .Nm |
| will refuse to extract the entry. |
| .El |
| To protect yourself, you should be wary of any archives that |
| come from untrusted sources. |
| You should examine the contents of an archive with |
| .Dl Nm Fl tf Pa filename |
| before extraction. |
| You should use the |
| .Fl k |
| option to ensure that |
| .Nm |
| will not overwrite any existing files or the |
| .Fl U |
| option to remove any pre-existing files. |
| You should generally not extract archives while running with super-user |
| privileges. |
| Note that the |
| .Fl P |
| option to |
| .Nm |
| disables the security checks above and allows you to extract |
| an archive while preserving any absolute pathnames, |
| .Pa .. |
| components, or symlinks to other directories. |
| .Sh SEE ALSO |
| .Xr bzip2 1 , |
| .Xr compress 1 , |
| .Xr cpio 1 , |
| .Xr gzip 1 , |
| .Xr mt 1 , |
| .Xr pax 1 , |
| .Xr shar 1 , |
| .Xr libarchive 3 , |
| .Xr libarchive-formats 5 , |
| .Xr tar 5 |
| .Sh STANDARDS |
| There is no current POSIX standard for the tar command; it appeared |
| in |
| .St -p1003.1-96 |
| but was dropped from |
| .St -p1003.1-2001 . |
| The options used by this implementation were developed by surveying a |
| number of existing tar implementations as well as the old POSIX specification |
| for tar and the current POSIX specification for pax. |
| .Pp |
| The ustar and pax interchange file formats are defined by |
| .St -p1003.1-2001 |
| for the pax command. |
| .Sh HISTORY |
| A |
| .Nm tar |
| command appeared in Seventh Edition Unix, which was released in January, 1979. |
| There have been numerous other implementations, |
| many of which extended the file format. |
| John Gilmore's |
| .Nm pdtar |
| public-domain implementation (circa November, 1987) |
| was quite influential, and formed the basis of GNU tar. |
| GNU tar was included as the standard system tar |
| in |
| .Fx |
| beginning with |
| .Fx 1.0 . |
| .Pp |
| This is a complete re-implementation based on the |
| .Xr libarchive 3 |
| library. |
| .Sh BUGS |
| This program follows |
| .St -p1003.1-96 |
| for the definition of the |
| .Fl l |
| option. |
| Note that GNU tar prior to version 1.15 treated |
| .Fl l |
| as a synonym for the |
| .Fl -one-file-system |
| option. |
| .Pp |
| The |
| .Fl C Pa dir |
| option may differ from historic implementations. |
| .Pp |
| All archive output is written in correctly-sized blocks, even |
| if the output is being compressed. |
| Whether or not the last output block is padded to a full |
| block size varies depending on the format and the |
| output device. |
| For tar and cpio formats, the last block of output is padded |
| to a full block size if the output is being |
| written to standard output or to a character or block device such as |
| a tape drive. |
| If the output is being written to a regular file, the last block |
| will not be padded. |
| Many compressors, including |
| .Xr gzip 1 |
| and |
| .Xr bzip2 1 , |
| complain about the null padding when decompressing an archive created by |
| .Nm , |
| although they still extract it correctly. |
| .Pp |
| The compression and decompression is implemented internally, so |
| there may be insignificant differences between the compressed output |
| generated by |
| .Dl Nm Fl czf Pa - file |
| and that generated by |
| .Dl Nm Fl cf Pa - file | Nm gzip |
| .Pp |
| The default should be to read and write archives to the standard I/O paths, |
| but tradition (and POSIX) dictates otherwise. |
| .Pp |
| The |
| .Cm r |
| and |
| .Cm u |
| modes require that the archive be uncompressed |
| and located in a regular file on disk. |
| Other archives can be modified using |
| .Cm c |
| mode with the |
| .Pa @archive-file |
| extension. |
| .Pp |
| To archive a file called |
| .Pa @foo |
| or |
| .Pa -foo |
| you must specify it as |
| .Pa ./@foo |
| or |
| .Pa ./-foo , |
| respectively. |
| .Pp |
| In create mode, a leading |
| .Pa ./ |
| is always removed. |
| A leading |
| .Pa / |
| is stripped unless the |
| .Fl P |
| option is specified. |
| .Pp |
| There needs to be better support for file selection on both create |
| and extract. |
| .Pp |
| There is not yet any support for multi-volume archives or for archiving |
| sparse files. |
| .Pp |
| Converting between dissimilar archive formats (such as tar and cpio) using the |
| .Cm @ Ns Pa - |
| convention can cause hard link information to be lost. |
| (This is a consequence of the incompatible ways that different archive |
| formats store hardlink information.) |
| .Pp |
| There are alternative long options for many of the short options that |
| are deliberately not documented. |