Differences between revisions 4 and 11 (spanning 7 versions)
Revision 4 as of 2022-09-27 01:54:23
Size: 747
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 1: Line 1:
## page was renamed from CheatsheetCompression
= Compression/Decompression =
= Tar =

'''`tar(1)`''' is the '''t'''ape '''ar'''chive utility. It creates '''tarballs''' that may or may not be compressed and/or encrypted.

There are multiple implementations:

Line 10: Line 15:
== tar == == Installation ==
Line 12: Line 17:
=== Create === All [[Linux]] and [[BSD]] distributions will have `tar(1)` installed, though the implementation will differ.
Line 14: Line 19:
{{{
tar -cvf archive.tar file1 file2 file3
}}}
 * '''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 18: Line 25:
 * `c` for create
 * `f` for output filename
 * `v` for verbose
[[Linux/Arch|Arch Linux]] uses `bsdtar(1)`, but packages for all other `tar(1)` implementations are available.

`gtar` and `bsdtar` packages are the most widely available.

----
Line 24: Line 33:
=== Create gzip-compressed === == Syntax Across Implementations ==

POSIX `tar(1)` uses a '''bundled-argument''' format. All flags are bundled into the first argument.
Line 27: Line 38:
tar -czvf archive.tar.gz file1 file2 file3 tar cvf output.tar input-file-list
Line 30: Line 41:
 * `z` for gzip compression 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."

----
Line 34: Line 69:
=== Create gzip-compressed, password-protected === == Usage ==

Create a tarball.
Line 37: Line 74:
tar -czvf archive.tar.gz file1 file2
gpg
-c archive.tar.gz
tar --create --file archive.tar -- file1 file2 file3
Line 40: Line 76:

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
}}}

----
Line 43: Line 129:
=== Extract all === == See also ==
Line 45: Line 131:
{{{
tar -xvf archive.tar
}}}
[[https://man.archlinux.org/man/tar.1|tar(1)]]
Line 49: Line 133:
 * `x` for extract



=== List all ===

{{{
tar -tf archive.tar
}}}

 * `t` for something... I'm not actually sure what
[[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)