-\1f
-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.20 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'
-
-\1f
-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
-
-\1f
-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
-`gzip', `bzip2' and `lzma' compression programs. For backward
-compatibility, it also supports `compress' command, although we
-strongly recommend against using it, because it is by far less
-effective than 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,
-`--lzma' to create an LZMA compressed archive and `-Z' (`--compress')
-to use `compress' program. For example:
-
- $ tar cfz archive.tar.gz .
-
- You can also let GNU `tar' select the compression program basing 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 cfa archive.tar.bz2 .
-
-whereas the following one will use `lzma':
-
- $ tar cfa archive.tar.lzma .
-
- For a complete list of file name suffixes recognized by GNU `tar',
-*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 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 tfz -
-
- 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' (`-u')) them or delete
-(`--delete') members from them or add (`--append' (`-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 table summarizes compression options used by GNU `tar'.
-
-`--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'
- `.lzma' `lzma'
- `.tlz' `lzma'
-
-`-z'
-`--gzip'
-`--ungzip'
- Filter the archive through `gzip'.
-
- You can use `--gzip' and `--gunzip' 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; if you need to
- override them, set `GZIP' environment variable, e.g.:
-
- $ GZIP=--best tar cfz archive.tar.gz subdir
-
- Another way would be to avoid the `--gzip' (`--gunzip',
- `--ungzip', `-z') option and run `gzip' explicitly:
-
- $ tar cf - subdir | gzip --best -c - > archive.tar.gz
-
- About corrupted compressed archives: `gzip''ed files have no
- redundancy, for maximum compression. 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.
-
- There are pending suggestions for having a per-volume or per-file
- compression in GNU `tar'. This would allow for viewing the
- contents without decompression, and for resynchronizing
- decompression at every volume or file, in case of corrupted
- archives. Doing so, we might lose some compressibility. But this
- would have make recovering easier. So, there are pros and cons.
- We'll see!
-
-`-j'
-`--bzip2'
- Filter the archive through `bzip2'. Otherwise like `--gzip'.
-
-`--lzma'
- Filter the archive through `lzma'. Otherwise like `--gzip'.
-
-`-Z'
-`--compress'
-`--uncompress'
- Filter the archive through `compress'. Otherwise like `--gzip'.
-
-`--use-compress-program=PROG'
- Use external compression program PROG. Use this option if you
- have a compression program that GNU `tar' does not support. There
- are two requirements to which PROG should comply:
-
- First, when called without options, it should read data from
- standard input, compress it and output it on standard output.
-
- Secondly, if called with `-d' argument, 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 `--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 --use-compress=gpgz .
-
-Likewise, the following command will list its contents:
-
- $ tar -tf foo.tar.gpgz --use-compress=gpgz .
-
- ---------- Footnotes ----------
-
- (1) It also had patent problems in the past.
-