Differences between revisions 10 and 11
Revision 10 as of 2023-04-03 02:34:38
Size: 4098
Comment:
Revision 11 as of 2023-04-08 13:33:22
Size: 3879
Comment:
Deletions are marked like this. Additions are marked like this.
Line 7: Line 7:
 * [[BusyBox]] implements POSIX `tar(1)`
 * '''`paxtar(1)`''' which all [[BSD]] distributions (other than [[BSD/FreeBSD|FreeBSD]]) use
 * '''GNU `tar(1)`''' (or '''`gtar(1)`''') is an extended implementation
 * '''`bsdtar(1)`''', which is built on `libarchive`, is a further extended implementation
   * many [[Linux]] distributions will ship ''even further'' extensions by way of compilation options for `libarchive`
     * for example, `zstd(1)` support
Line 22: Line 17:
`tar(1)` is POSIX and will already be installed. All [[Linux]] and [[BSD]] distributions will have `tar(1)` installed, though the implementation will differ.
Line 24: Line 19:
If running a [[Linux]] distribution that uses `gtar(1)` by default, `paxtar` and `bsdtar` packages will be available.  * '''GNU `tar(1)`''' (or '''`gtar(1)`'''), which is an extended implementation
 * [[BusyBox]]
 * '''`paxtar(1)`'''
 * '''`bsdtar(1)`''' (despite the name, [[BSD/FreeBSD|FreeBSD]] is the only BSD using it)
 * some distributions will offer `bsdtar(1)` with non-standard compilation features, such as `zstd(1)` support
Line 26: Line 25:
If running a [[BSD]] distribution that uses `paxtar(1)` by default, `gtar` and `bsdtar` packages ''may'' be available. [[Linux/Arch|Arch Linux]] uses `bsdtar(1)`, but packages for all other `tar(1)` implementations are available.
Line 28: Line 27:
If running a BSD or Linux distribution that uses `bsdtar(1)` by default, a `gtar` package ''may'' be available. [[Linux/Arch|Arch Linux]] does actually provide a `paxtar` package as well, but this is uncommon. `gtar` and `bsdtar` packages are the most widely available.
Line 126: Line 125:
----



== See also ==

[[https://man.archlinux.org/man/tar.1|tar(1)]]

[[https://man.archlinux.org/man/bsdtar.1|bsdtar(1)]]

Tar

tar(1) is the tape archive utility. It creates tarballs that may or may not be compressed and/or encrypted.

There are multiple implementations:


Installation

All Linux and BSD distributions will have tar(1) installed, though the implementation will differ.

  • GNU tar(1) (or gtar(1)), which is an extended implementation

  • BusyBox

  • paxtar(1)

  • bsdtar(1) (despite the name, FreeBSD is the only BSD using it)

  • some distributions will offer bsdtar(1) with non-standard compilation features, such as zstd(1) support

Arch Linux uses bsdtar(1), but packages for all other tar(1) implementations are available.

gtar and bsdtar packages are the most widely available.


Syntax Across Implementations

POSIX tar(1) uses a bundled-argument format. All flags are bundled into the first argument.

tar cvf output.tar input-file-list

It should be immediately evident that this is a strange syntax.

The Unix format bridged the gap between this a more normal syntax.

tar -cvf output.tar input-file-list
#or
tar -c -v -f output.tar input-file-list

Each flag or cluster of flags is prefixed with -. If a flag that takes an argument is in a cluster, it must be at the end. Mandatory arguments can either be the following word (-f output.tar) or fused to the flag (-foutput.tar). A frequent tripping point: optional arguments must be fused to the flag (-g/tmp/snar.db).

The GNU format extended this with much-beloved syntactic sugar: long options.

tar --create --verbose --file output.tar input-file-list

Additionally, mandatory options can now be any of: the following word (--file output.tar), fused to the flag (--fileoutput.tar), or joined to the flag by = (--file=output.tar).

bsdtar(1) is compatible with all formats and brings additional features (automatic discovery of compression algorithms, handling of sparse files, etc.).

Per the manual of bsdtar(1): "For maximum portability, scripts that invoke tar should use the bundled-argument format above, should limit themselves to the c, t, and x modes, and the b, f, m, v, and w options."


Usage

Create a tarball.

tar --create --file archive.tar -- file1 file2 file3

Create a gzip(1)-compressed tarball.

tar --create --gzip --file archive.tar.gz -- file1 file2 file3

Compression options:

  • -z and --gzip for gzip(1)

  • -j and --bzip2 for bzip2(1)

  • -J and --xz for xz(1)

  • --auto-compress to determine compression algorithm from the file extension

    • this is a bsdtar(1) extension

  • --zstd for zstd(1)

    • this is a bsdtar(1) extension that is only available on some BSD and Linux distributions

  • --lzip for lzip(1), --lzma for lzma(1), --lzop for lzop(1), and -Z/--compress for compress(1)

    • don't use these

Create a gzip(1)-compressed, gpg(1)-encrypted tarball.

tar --compress --gzip -- file1 file2 | gpg --symmetric --output archive.tar.gz.gpg

Extract the contents of a tarball.

tar --extract --file archive.tar

Extract the contents of a gzip(1)-compressed tarball.

tar --extract --gzip --file archive.tar.gz

Extract the contents of a gzip(1)-compressed, gpg(1)-encrypted tarball.

gpg --decrypt archive.tar.gz.gpg | tar --extract --gzip

List the contents of a tarball.

tar --list --file archive.tar


See also

tar(1)

bsdtar(1)


CategoryRicottone

Tar (last edited 2023-04-08 13:33:22 by DominicRicottone)