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