|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
"http://www.w3.org/TR/html4/loose.dtd">
|
|
Packit Service |
1d0348 |
<html>
|
|
Packit Service |
1d0348 |
<head>
|
|
Packit Service |
1d0348 |
<meta name="generator" content="groff -Thtml, see www.gnu.org">
|
|
Packit Service |
1d0348 |
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
|
|
Packit Service |
1d0348 |
<meta name="Content-Style" content="text/css">
|
|
Packit Service |
1d0348 |
<style type="text/css">
|
|
Packit Service |
1d0348 |
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
|
|
Packit Service |
1d0348 |
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
|
|
Packit Service |
1d0348 |
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
|
|
Packit Service |
1d0348 |
h1 { text-align: center }
|
|
Packit Service |
1d0348 |
</style>
|
|
Packit Service |
1d0348 |
<title></title>
|
|
Packit Service |
1d0348 |
</head>
|
|
Packit Service |
1d0348 |
<body>
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
TAR(5) BSD File Formats Manual TAR(5)
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
NAME
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
tar — format of
|
|
Packit Service |
1d0348 |
tape archive files
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
DESCRIPTION
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
The tar archive format
|
|
Packit Service |
1d0348 |
collects any number of files, directories, and other file
|
|
Packit Service |
1d0348 |
system objects (symbolic links, device nodes, etc.) into a
|
|
Packit Service |
1d0348 |
single stream of bytes. The format was originally designed
|
|
Packit Service |
1d0348 |
to be used with tape drives that operate with fixed-size
|
|
Packit Service |
1d0348 |
blocks, but is widely used as a general packaging
|
|
Packit Service |
1d0348 |
mechanism.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
General
|
|
Packit Service |
1d0348 |
Format
|
|
Packit Service |
1d0348 |
A tar archive consists of a series of 512-byte
|
|
Packit Service |
1d0348 |
records. Each file system object requires a header record
|
|
Packit Service |
1d0348 |
which stores basic metadata (pathname, owner, permissions,
|
|
Packit Service |
1d0348 |
etc.) and zero or more records containing any file data. The
|
|
Packit Service |
1d0348 |
end of the archive is indicated by two records consisting
|
|
Packit Service |
1d0348 |
entirely of zero bytes.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
For
|
|
Packit Service |
1d0348 |
compatibility with tape drives that use fixed block sizes,
|
|
Packit Service |
1d0348 |
programs that read or write tar files always read or write a
|
|
Packit Service |
1d0348 |
fixed number of records with each I/O operation. These
|
|
Packit Service |
1d0348 |
’’blocks’’ are always a multiple of
|
|
Packit Service |
1d0348 |
the record size. The maximum block size supported by early
|
|
Packit Service |
1d0348 |
implementations was 10240 bytes or 20 records. This is still
|
|
Packit Service |
1d0348 |
the default for most implementations although block sizes of
|
|
Packit Service |
1d0348 |
1MiB (2048 records) or larger are commonly used with modern
|
|
Packit Service |
1d0348 |
high-speed tape drives. (Note: the terms
|
|
Packit Service |
1d0348 |
’’block’’ and
|
|
Packit Service |
1d0348 |
’’record’’ here are not entirely
|
|
Packit Service |
1d0348 |
standard; this document follows the convention established
|
|
Packit Service |
1d0348 |
by John Gilmore in documenting pdtar.)
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Old-Style
|
|
Packit Service |
1d0348 |
Archive Format
|
|
Packit Service |
1d0348 |
The original tar archive format has been extended many times
|
|
Packit Service |
1d0348 |
to include additional information that various implementors
|
|
Packit Service |
1d0348 |
found necessary. This section describes the variant
|
|
Packit Service |
1d0348 |
implemented by the tar command included in Version 7
|
|
Packit Service |
1d0348 |
AT&T UNIX, which seems to be the earliest widely-used
|
|
Packit Service |
1d0348 |
version of the tar program.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
The header
|
|
Packit Service |
1d0348 |
record for an old-style tar archive consists of the
|
|
Packit Service |
1d0348 |
following:
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
struct
|
|
Packit Service |
1d0348 |
header_old_tar {
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
cellspacing="0" cellpadding="0">
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char name[100];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char mode[8];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char uid[8];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char gid[8];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char size[12];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char mtime[12];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char checksum[8];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char linkflag[1];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char linkname[100];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char pad[255];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
};
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
All unused bytes in the header
|
|
Packit Service |
1d0348 |
record are filled with nulls.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
name
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Pathname,
|
|
Packit Service |
1d0348 |
stored as a null-terminated string. Early tar
|
|
Packit Service |
1d0348 |
implementations only stored regular files (including
|
|
Packit Service |
1d0348 |
hardlinks to those files). One common early convention used
|
|
Packit Service |
1d0348 |
a trailing "/" character to indicate a directory
|
|
Packit Service |
1d0348 |
name, allowing directory permissions and owner information
|
|
Packit Service |
1d0348 |
to be archived and restored.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
mode
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
File mode,
|
|
Packit Service |
1d0348 |
stored as an octal number in ASCII.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
uid, gid
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
User id and group id of owner,
|
|
Packit Service |
1d0348 |
as octal numbers in ASCII.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
size
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Size of file,
|
|
Packit Service |
1d0348 |
as octal number in ASCII. For regular files only, this
|
|
Packit Service |
1d0348 |
indicates the amount of data that follows the header. In
|
|
Packit Service |
1d0348 |
particular, this field was ignored by early tar
|
|
Packit Service |
1d0348 |
implementations when extracting hardlinks. Modern writers
|
|
Packit Service |
1d0348 |
should always store a zero length for hardlink entries.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
mtime
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Modification
|
|
Packit Service |
1d0348 |
time of file, as an octal number in ASCII. This indicates
|
|
Packit Service |
1d0348 |
the number of seconds since the start of the epoch, 00:00:00
|
|
Packit Service |
1d0348 |
UTC January 1, 1970. Note that negative values should be
|
|
Packit Service |
1d0348 |
avoided here, as they are handled inconsistently.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
checksum
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Header checksum, stored as an
|
|
Packit Service |
1d0348 |
octal number in ASCII. To compute the checksum, set the
|
|
Packit Service |
1d0348 |
checksum field to all spaces, then sum all bytes in the
|
|
Packit Service |
1d0348 |
header using unsigned arithmetic. This field should be
|
|
Packit Service |
1d0348 |
stored as six octal digits followed by a null and a space
|
|
Packit Service |
1d0348 |
character. Note that many early implementations of tar used
|
|
Packit Service |
1d0348 |
signed arithmetic for the checksum field, which can cause
|
|
Packit Service |
1d0348 |
interoperability problems when transferring archives between
|
|
Packit Service |
1d0348 |
systems. Modern robust readers compute the checksum both
|
|
Packit Service |
1d0348 |
ways and accept the header if either computation
|
|
Packit Service |
1d0348 |
matches.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
linkflag,
|
|
Packit Service |
1d0348 |
linkname
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
In order to preserve hardlinks
|
|
Packit Service |
1d0348 |
and conserve tape, a file with multiple links is only
|
|
Packit Service |
1d0348 |
written to the archive the first time it is encountered. The
|
|
Packit Service |
1d0348 |
next time it is encountered, the linkflag is set to
|
|
Packit Service |
1d0348 |
an ASCII ’1’ and the linkname field holds
|
|
Packit Service |
1d0348 |
the first name under which this file appears. (Note that
|
|
Packit Service |
1d0348 |
regular files have a null value in the linkflag
|
|
Packit Service |
1d0348 |
field.)
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Early tar
|
|
Packit Service |
1d0348 |
implementations varied in how they terminated these fields.
|
|
Packit Service |
1d0348 |
The tar command in Version 7 AT&T UNIX used the
|
|
Packit Service |
1d0348 |
following conventions (this is also documented in early BSD
|
|
Packit Service |
1d0348 |
manpages): the pathname must be null-terminated; the mode,
|
|
Packit Service |
1d0348 |
uid, and gid fields must end in a space and a null byte; the
|
|
Packit Service |
1d0348 |
size and mtime fields must end in a space; the checksum is
|
|
Packit Service |
1d0348 |
terminated by a null and a space. Early implementations
|
|
Packit Service |
1d0348 |
filled the numeric fields with leading spaces. This seems to
|
|
Packit Service |
1d0348 |
have been common practice until the IEEE Std 1003.1-1988
|
|
Packit Service |
1d0348 |
(’’POSIX.1’’) standard was released.
|
|
Packit Service |
1d0348 |
For best portability, modern implementations should fill the
|
|
Packit Service |
1d0348 |
numeric fields with leading zeros.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Pre-POSIX
|
|
Packit Service |
1d0348 |
Archives
|
|
Packit Service |
1d0348 |
An early draft of IEEE Std 1003.1-1988
|
|
Packit Service |
1d0348 |
(’’POSIX.1’’) served as the basis
|
|
Packit Service |
1d0348 |
for John Gilmore’s pdtar program and many
|
|
Packit Service |
1d0348 |
system implementations from the late 1980s and early 1990s.
|
|
Packit Service |
1d0348 |
These archives generally follow the POSIX ustar format
|
|
Packit Service |
1d0348 |
described below with the following variations:
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
•
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
The magic value consists of the
|
|
Packit Service |
1d0348 |
five characters ’’ustar’’ followed
|
|
Packit Service |
1d0348 |
by a space. The version field contains a space character
|
|
Packit Service |
1d0348 |
followed by a null.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
•
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
The numeric fields are
|
|
Packit Service |
1d0348 |
generally filled with leading spaces (not leading zeros as
|
|
Packit Service |
1d0348 |
recommended in the final standard).
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
•
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
The prefix field is often not
|
|
Packit Service |
1d0348 |
used, limiting pathnames to the 100 characters of old-style
|
|
Packit Service |
1d0348 |
archives.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
POSIX ustar
|
|
Packit Service |
1d0348 |
Archives
|
|
Packit Service |
1d0348 |
IEEE Std 1003.1-1988 (’’POSIX.1’’)
|
|
Packit Service |
1d0348 |
defined a standard tar file format to be read and written by
|
|
Packit Service |
1d0348 |
compliant implementations of tar(1). This format is often
|
|
Packit Service |
1d0348 |
called the ’’ustar’’ format, after
|
|
Packit Service |
1d0348 |
the magic value used in the header. (The name is an acronym
|
|
Packit Service |
1d0348 |
for ’’Unix Standard TAR’’.) It
|
|
Packit Service |
1d0348 |
extends the historic format with new fields:
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
struct
|
|
Packit Service |
1d0348 |
header_posix_ustar {
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
cellspacing="0" cellpadding="0">
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char name[100];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char mode[8];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char uid[8];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char gid[8];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char size[12];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char mtime[12];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char checksum[8];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char typeflag[1];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char linkname[100];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char magic[6];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char version[2];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char uname[32];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char gname[32];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char devmajor[8];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char devminor[8];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char prefix[155];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char pad[12];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
};
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
typeflag
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Type of entry. POSIX extended
|
|
Packit Service |
1d0348 |
the earlier linkflag field with several new type
|
|
Packit Service |
1d0348 |
values:
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
’’0’’
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Regular file.
|
|
Packit Service |
1d0348 |
NUL should be treated as a synonym, for compatibility
|
|
Packit Service |
1d0348 |
purposes.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
’’1’’
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Hard link.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
’’2’’
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Symbolic
|
|
Packit Service |
1d0348 |
link.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
’’3’’
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Character
|
|
Packit Service |
1d0348 |
device node.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
’’4’’
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Block device
|
|
Packit Service |
1d0348 |
node.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
’’5’’
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Directory.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
’’6’’
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
FIFO node.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
’’7’’
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Reserved.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Other
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
A
|
|
Packit Service |
1d0348 |
POSIX-compliant implementation must treat any unrecognized
|
|
Packit Service |
1d0348 |
typeflag value as a regular file. In particular, writers
|
|
Packit Service |
1d0348 |
should ensure that all entries have a valid filename so that
|
|
Packit Service |
1d0348 |
they can be restored by readers that do not support the
|
|
Packit Service |
1d0348 |
corresponding extension. Uppercase letters "A"
|
|
Packit Service |
1d0348 |
through "Z" are reserved for custom extensions.
|
|
Packit Service |
1d0348 |
Note that sockets and whiteout entries are not
|
|
Packit Service |
1d0348 |
archivable.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
It is worth noting that the
|
|
Packit Service |
1d0348 |
size field, in particular, has different meanings
|
|
Packit Service |
1d0348 |
depending on the type. For regular files, of course, it
|
|
Packit Service |
1d0348 |
indicates the amount of data following the header. For
|
|
Packit Service |
1d0348 |
directories, it may be used to indicate the total size of
|
|
Packit Service |
1d0348 |
all files in the directory, for use by operating systems
|
|
Packit Service |
1d0348 |
that pre-allocate directory space. For all other types, it
|
|
Packit Service |
1d0348 |
should be set to zero by writers and ignored by readers.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
magic
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Contains the
|
|
Packit Service |
1d0348 |
magic value ’’ustar’’ followed by a
|
|
Packit Service |
1d0348 |
NUL byte to indicate that this is a POSIX standard archive.
|
|
Packit Service |
1d0348 |
Full compliance requires the uname and gname fields be
|
|
Packit Service |
1d0348 |
properly set.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
version
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Version. This should be
|
|
Packit Service |
1d0348 |
’’00’’ (two copies of the ASCII
|
|
Packit Service |
1d0348 |
digit zero) for POSIX standard archives.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
uname, gname
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
User and group names, as
|
|
Packit Service |
1d0348 |
null-terminated ASCII strings. These should be used in
|
|
Packit Service |
1d0348 |
preference to the uid/gid values when they are set and the
|
|
Packit Service |
1d0348 |
corresponding names exist on the system.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
devmajor,
|
|
Packit Service |
1d0348 |
devminor
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Major and minor numbers for
|
|
Packit Service |
1d0348 |
character device or block device entry.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
name, prefix
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
If the pathname is too long to
|
|
Packit Service |
1d0348 |
fit in the 100 bytes provided by the standard format, it can
|
|
Packit Service |
1d0348 |
be split at any / character with the first portion
|
|
Packit Service |
1d0348 |
going into the prefix field. If the prefix field is not
|
|
Packit Service |
1d0348 |
empty, the reader will prepend the prefix value and a
|
|
Packit Service |
1d0348 |
/ character to the regular name field to obtain the
|
|
Packit Service |
1d0348 |
full pathname. The standard does not require a trailing
|
|
Packit Service |
1d0348 |
/ character on directory names, though most
|
|
Packit Service |
1d0348 |
implementations still include this for compatibility
|
|
Packit Service |
1d0348 |
reasons.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Note that all
|
|
Packit Service |
1d0348 |
unused bytes must be set to NUL.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Field
|
|
Packit Service |
1d0348 |
termination is specified slightly differently by POSIX than
|
|
Packit Service |
1d0348 |
by previous implementations. The magic, uname,
|
|
Packit Service |
1d0348 |
and gname fields must have a trailing NUL. The
|
|
Packit Service |
1d0348 |
pathname, linkname, and prefix fields
|
|
Packit Service |
1d0348 |
must have a trailing NUL unless they fill the entire field.
|
|
Packit Service |
1d0348 |
(In particular, it is possible to store a 256-character
|
|
Packit Service |
1d0348 |
pathname if it happens to have a / as the 156th
|
|
Packit Service |
1d0348 |
character.) POSIX requires numeric fields to be zero-padded
|
|
Packit Service |
1d0348 |
in the front, and requires them to be terminated with either
|
|
Packit Service |
1d0348 |
space or NUL characters.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Currently, most
|
|
Packit Service |
1d0348 |
tar implementations comply with the ustar format,
|
|
Packit Service |
1d0348 |
occasionally extending it by adding new fields to the blank
|
|
Packit Service |
1d0348 |
area at the end of the header record.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Numeric
|
|
Packit Service |
1d0348 |
Extensions
|
|
Packit Service |
1d0348 |
There have been several attempts to extend the range of
|
|
Packit Service |
1d0348 |
sizes or times supported by modifying how numbers are stored
|
|
Packit Service |
1d0348 |
in the header.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
One obvious
|
|
Packit Service |
1d0348 |
extension to increase the size of files is to eliminate the
|
|
Packit Service |
1d0348 |
terminating characters from the various numeric fields. For
|
|
Packit Service |
1d0348 |
example, the standard only allows the size field to contain
|
|
Packit Service |
1d0348 |
11 octal digits, reserving the twelfth byte for a trailing
|
|
Packit Service |
1d0348 |
NUL character. Allowing 12 octal digits allows file sizes up
|
|
Packit Service |
1d0348 |
to 64 GB.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Another
|
|
Packit Service |
1d0348 |
extension, utilized by GNU tar, star, and other newer
|
|
Packit Service |
1d0348 |
tar implementations, permits binary numbers in the
|
|
Packit Service |
1d0348 |
standard numeric fields. This is flagged by setting the high
|
|
Packit Service |
1d0348 |
bit of the first byte. The remainder of the field is treated
|
|
Packit Service |
1d0348 |
as a signed twos-complement value. This permits 95-bit
|
|
Packit Service |
1d0348 |
values for the length and time fields and 63-bit values for
|
|
Packit Service |
1d0348 |
the uid, gid, and device numbers. In particular, this
|
|
Packit Service |
1d0348 |
provides a consistent way to handle negative time values.
|
|
Packit Service |
1d0348 |
GNU tar supports this extension for the length, mtime,
|
|
Packit Service |
1d0348 |
ctime, and atime fields. Joerg Schilling’s star
|
|
Packit Service |
1d0348 |
program and the libarchive library support this extension
|
|
Packit Service |
1d0348 |
for all numeric fields. Note that this extension is largely
|
|
Packit Service |
1d0348 |
obsoleted by the extended attribute record provided by the
|
|
Packit Service |
1d0348 |
pax interchange format.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Another early
|
|
Packit Service |
1d0348 |
GNU extension allowed base-64 values rather than octal. This
|
|
Packit Service |
1d0348 |
extension was short-lived and is no longer supported by any
|
|
Packit Service |
1d0348 |
implementation.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Pax
|
|
Packit Service |
1d0348 |
Interchange Format
|
|
Packit Service |
1d0348 |
There are many attributes that cannot be portably stored in
|
|
Packit Service |
1d0348 |
a POSIX ustar archive. IEEE Std 1003.1-2001
|
|
Packit Service |
1d0348 |
(’’POSIX.1’’) defined a
|
|
Packit Service |
1d0348 |
’’pax interchange format’’ that uses
|
|
Packit Service |
1d0348 |
two new types of entries to hold text-formatted metadata
|
|
Packit Service |
1d0348 |
that applies to following entries. Note that a pax
|
|
Packit Service |
1d0348 |
interchange format archive is a ustar archive in every
|
|
Packit Service |
1d0348 |
respect. The new data is stored in ustar-compatible archive
|
|
Packit Service |
1d0348 |
entries that use the ’’x’’ or
|
|
Packit Service |
1d0348 |
’’g’’ typeflag. In particular, older
|
|
Packit Service |
1d0348 |
implementations that do not fully support these extensions
|
|
Packit Service |
1d0348 |
will extract the metadata into regular files, where the
|
|
Packit Service |
1d0348 |
metadata can be examined as necessary.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
An entry in a
|
|
Packit Service |
1d0348 |
pax interchange format archive consists of one or two
|
|
Packit Service |
1d0348 |
standard ustar entries, each with its own header and data.
|
|
Packit Service |
1d0348 |
The first optional entry stores the extended attributes for
|
|
Packit Service |
1d0348 |
the following entry. This optional first entry has an
|
|
Packit Service |
1d0348 |
"x" typeflag and a size field that indicates the
|
|
Packit Service |
1d0348 |
total size of the extended attributes. The extended
|
|
Packit Service |
1d0348 |
attributes themselves are stored as a series of text-format
|
|
Packit Service |
1d0348 |
lines encoded in the portable UTF-8 encoding. Each line
|
|
Packit Service |
1d0348 |
consists of a decimal number, a space, a key string, an
|
|
Packit Service |
1d0348 |
equals sign, a value string, and a new line. The decimal
|
|
Packit Service |
1d0348 |
number indicates the length of the entire line, including
|
|
Packit Service |
1d0348 |
the initial length field and the trailing newline. An
|
|
Packit Service |
1d0348 |
example of such a field is:
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
25 ctime=1084839148.1212\n
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Keys in all lowercase are
|
|
Packit Service |
1d0348 |
standard keys. Vendors can add their own keys by prefixing
|
|
Packit Service |
1d0348 |
them with an all uppercase vendor name and a period. Note
|
|
Packit Service |
1d0348 |
that, unlike the historic header, numeric values are stored
|
|
Packit Service |
1d0348 |
using decimal, not octal. A description of some common keys
|
|
Packit Service |
1d0348 |
follows:
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
atime, ctime,
|
|
Packit Service |
1d0348 |
mtime
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
File access, inode change, and
|
|
Packit Service |
1d0348 |
modification times. These fields can be negative or include
|
|
Packit Service |
1d0348 |
a decimal point and a fractional value.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
hdrcharset
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
The character set used by the
|
|
Packit Service |
1d0348 |
pax extension values. By default, all textual values in the
|
|
Packit Service |
1d0348 |
pax extended attributes are assumed to be in UTF-8,
|
|
Packit Service |
1d0348 |
including pathnames, user names, and group names. In some
|
|
Packit Service |
1d0348 |
cases, it is not possible to translate local conventions
|
|
Packit Service |
1d0348 |
into UTF-8. If this key is present and the value is the
|
|
Packit Service |
1d0348 |
six-character ASCII string
|
|
Packit Service |
1d0348 |
’’BINARY’’, then all textual values
|
|
Packit Service |
1d0348 |
are assumed to be in a platform-dependent multi-byte
|
|
Packit Service |
1d0348 |
encoding. Note that there are only two valid values for this
|
|
Packit Service |
1d0348 |
key: ’’BINARY’’ or
|
|
Packit Service |
1d0348 |
’’ISO-IR 10646 2000 UTF-8’’.
|
|
Packit Service |
1d0348 |
No other values are permitted by the standard, and the
|
|
Packit Service |
1d0348 |
latter value should generally not be used as it is the
|
|
Packit Service |
1d0348 |
default when this key is not specified. In particular, this
|
|
Packit Service |
1d0348 |
flag should not be used as a general mechanism to allow
|
|
Packit Service |
1d0348 |
filenames to be stored in arbitrary encodings.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
uname, uid,
|
|
Packit Service |
1d0348 |
gname, gid
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
User name, group name, and
|
|
Packit Service |
1d0348 |
numeric UID and GID values. The user name and group name
|
|
Packit Service |
1d0348 |
stored here are encoded in UTF8 and can thus include
|
|
Packit Service |
1d0348 |
non-ASCII characters. The UID and GID fields can be of
|
|
Packit Service |
1d0348 |
arbitrary length.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
linkpath
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
The full path of the linked-to
|
|
Packit Service |
1d0348 |
file. Note that this is encoded in UTF8 and can thus include
|
|
Packit Service |
1d0348 |
non-ASCII characters.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
path
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
The full
|
|
Packit Service |
1d0348 |
pathname of the entry. Note that this is encoded in UTF8 and
|
|
Packit Service |
1d0348 |
can thus include non-ASCII characters.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
realtime.*,
|
|
Packit Service |
1d0348 |
security.*
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
These keys are reserved and may
|
|
Packit Service |
1d0348 |
be used for future standardization.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
size
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
The size of the
|
|
Packit Service |
1d0348 |
file. Note that there is no length limit on this field,
|
|
Packit Service |
1d0348 |
allowing conforming archives to store files much larger than
|
|
Packit Service |
1d0348 |
the historic 8GB limit.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
SCHILY.*
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Vendor-specific attributes used
|
|
Packit Service |
1d0348 |
by Joerg Schilling’s star implementation.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
SCHILY.acl.access,
|
|
Packit Service |
1d0348 |
SCHILY.acl.default, SCHILY.acl.ace
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Stores the access, default and
|
|
Packit Service |
1d0348 |
NFSv4 ACLs as textual strings in a format that is an
|
|
Packit Service |
1d0348 |
extension of the format specified by POSIX.1e draft 17. In
|
|
Packit Service |
1d0348 |
particular, each user or group access specification can
|
|
Packit Service |
1d0348 |
include an additional colon-separated field with the numeric
|
|
Packit Service |
1d0348 |
UID or GID. This allows ACLs to be restored on systems that
|
|
Packit Service |
1d0348 |
may not have complete user or group information available
|
|
Packit Service |
1d0348 |
(such as when NIS/YP or LDAP services are temporarily
|
|
Packit Service |
1d0348 |
unavailable).
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
SCHILY.devminor,
|
|
Packit Service |
1d0348 |
SCHILY.devmajor
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
The full minor and major
|
|
Packit Service |
1d0348 |
numbers for device nodes.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
SCHILY.fflags
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
The file flags.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
SCHILY.realsize
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
The full size of the file on
|
|
Packit Service |
1d0348 |
disk. XXX explain? XXX
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
SCHILY.dev, SCHILY.ino,
|
|
Packit Service |
1d0348 |
SCHILY.nlinks
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
The device number, inode
|
|
Packit Service |
1d0348 |
number, and link count for the entry. In particular, note
|
|
Packit Service |
1d0348 |
that a pax interchange format archive using Joerg
|
|
Packit Service |
1d0348 |
Schilling’s SCHILY.* extensions can store all
|
|
Packit Service |
1d0348 |
of the data from struct stat.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
LIBARCHIVE.*
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Vendor-specific attributes used
|
|
Packit Service |
1d0348 |
by the libarchive library and programs that use
|
|
Packit Service |
1d0348 |
it.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
LIBARCHIVE.creationtime
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
The time when the file was
|
|
Packit Service |
1d0348 |
created. (This should not be confused with the POSIX
|
|
Packit Service |
1d0348 |
’’ctime’’ attribute, which refers to
|
|
Packit Service |
1d0348 |
the time when the file metadata was last changed.)
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
LIBARCHIVE.xattr.namespace.key
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Libarchive stores
|
|
Packit Service |
1d0348 |
POSIX.1e-style extended attributes using keys of this form.
|
|
Packit Service |
1d0348 |
The key value is URL-encoded: All non-ASCII
|
|
Packit Service |
1d0348 |
characters and the two special characters
|
|
Packit Service |
1d0348 |
’’=’’ and
|
|
Packit Service |
1d0348 |
’’%’’ are encoded as
|
|
Packit Service |
1d0348 |
’’%’’ followed by two uppercase
|
|
Packit Service |
1d0348 |
hexadecimal digits. The value of this key is the extended
|
|
Packit Service |
1d0348 |
attribute value encoded in base 64. XXX Detail the base-64
|
|
Packit Service |
1d0348 |
format here XXX
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
VENDOR.*
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
XXX document other
|
|
Packit Service |
1d0348 |
vendor-specific extensions XXX
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Any values
|
|
Packit Service |
1d0348 |
stored in an extended attribute override the corresponding
|
|
Packit Service |
1d0348 |
values in the regular tar header. Note that compliant
|
|
Packit Service |
1d0348 |
readers should ignore the regular fields when they are
|
|
Packit Service |
1d0348 |
overridden. This is important, as existing archivers are
|
|
Packit Service |
1d0348 |
known to store non-compliant values in the standard header
|
|
Packit Service |
1d0348 |
fields in this situation. There are no limits on length for
|
|
Packit Service |
1d0348 |
any of these fields. In particular, numeric fields can be
|
|
Packit Service |
1d0348 |
arbitrarily large. All text fields are encoded in UTF8.
|
|
Packit Service |
1d0348 |
Compliant writers should store only portable 7-bit ASCII
|
|
Packit Service |
1d0348 |
characters in the standard ustar header and use extended
|
|
Packit Service |
1d0348 |
attributes whenever a text value contains non-ASCII
|
|
Packit Service |
1d0348 |
characters.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
In addition to
|
|
Packit Service |
1d0348 |
the x entry described above, the pax interchange
|
|
Packit Service |
1d0348 |
format also supports a g entry. The g entry is
|
|
Packit Service |
1d0348 |
identical in format, but specifies attributes that serve as
|
|
Packit Service |
1d0348 |
defaults for all subsequent archive entries. The g
|
|
Packit Service |
1d0348 |
entry is not widely used.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Besides the new
|
|
Packit Service |
1d0348 |
x and g entries, the pax interchange format
|
|
Packit Service |
1d0348 |
has a few other minor variations from the earlier ustar
|
|
Packit Service |
1d0348 |
format. The most troubling one is that hardlinks are
|
|
Packit Service |
1d0348 |
permitted to have data following them. This allows readers
|
|
Packit Service |
1d0348 |
to restore any hardlink to a file without having to rewind
|
|
Packit Service |
1d0348 |
the archive to find an earlier entry. However, it creates
|
|
Packit Service |
1d0348 |
complications for robust readers, as it is no longer clear
|
|
Packit Service |
1d0348 |
whether or not they should ignore the size field for
|
|
Packit Service |
1d0348 |
hardlink entries.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
GNU Tar
|
|
Packit Service |
1d0348 |
Archives
|
|
Packit Service |
1d0348 |
The GNU tar program started with a pre-POSIX format similar
|
|
Packit Service |
1d0348 |
to that described earlier and has extended it using several
|
|
Packit Service |
1d0348 |
different mechanisms: It added new fields to the empty space
|
|
Packit Service |
1d0348 |
in the header (some of which was later used by POSIX for
|
|
Packit Service |
1d0348 |
conflicting purposes); it allowed the header to be continued
|
|
Packit Service |
1d0348 |
over multiple records; and it defined new entries that
|
|
Packit Service |
1d0348 |
modify following entries (similar in principle to the
|
|
Packit Service |
1d0348 |
x entry described above, but each GNU special entry
|
|
Packit Service |
1d0348 |
is single-purpose, unlike the general-purpose x
|
|
Packit Service |
1d0348 |
entry). As a result, GNU tar archives are not POSIX
|
|
Packit Service |
1d0348 |
compatible, although more lenient POSIX-compliant readers
|
|
Packit Service |
1d0348 |
can successfully extract most GNU tar archives.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
struct
|
|
Packit Service |
1d0348 |
header_gnu_tar {
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
cellspacing="0" cellpadding="0">
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char name[100];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char mode[8];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char uid[8];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char gid[8];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char size[12];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char mtime[12];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char checksum[8];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char typeflag[1];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char linkname[100];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char magic[6];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char version[2];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char uname[32];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char gname[32];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char devmajor[8];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char devminor[8];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char atime[12];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char ctime[12];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char offset[12];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char longnames[4];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char unused[1];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
struct {
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char offset[12];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char numbytes[12];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
} sparse[4];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char isextended[1];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char realsize[12];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char pad[17];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
};
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
typeflag
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
GNU tar uses the following
|
|
Packit Service |
1d0348 |
special entry types, in addition to those defined by
|
|
Packit Service |
1d0348 |
POSIX:
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
7
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
GNU tar treats
|
|
Packit Service |
1d0348 |
type "7" records identically to type "0"
|
|
Packit Service |
1d0348 |
records, except on one obscure RTOS where they are used to
|
|
Packit Service |
1d0348 |
indicate the pre-allocation of a contiguous file on
|
|
Packit Service |
1d0348 |
disk.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
D
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
This indicates
|
|
Packit Service |
1d0348 |
a directory entry. Unlike the POSIX-standard "5"
|
|
Packit Service |
1d0348 |
typeflag, the header is followed by data records listing the
|
|
Packit Service |
1d0348 |
names of files in this directory. Each name is preceded by
|
|
Packit Service |
1d0348 |
an ASCII "Y" if the file is stored in this archive
|
|
Packit Service |
1d0348 |
or "N" if the file is not stored in this archive.
|
|
Packit Service |
1d0348 |
Each name is terminated with a null, and an extra null marks
|
|
Packit Service |
1d0348 |
the end of the name list. The purpose of this entry is to
|
|
Packit Service |
1d0348 |
support incremental backups; a program restoring from such
|
|
Packit Service |
1d0348 |
an archive may wish to delete files on disk that did not
|
|
Packit Service |
1d0348 |
exist in the directory when the archive was made.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Note that the
|
|
Packit Service |
1d0348 |
"D" typeflag specifically violates POSIX, which
|
|
Packit Service |
1d0348 |
requires that unrecognized typeflags be restored as normal
|
|
Packit Service |
1d0348 |
files. In this case, restoring the "D" entry as a
|
|
Packit Service |
1d0348 |
file could interfere with subsequent creation of the
|
|
Packit Service |
1d0348 |
like-named directory.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
K
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
The data for
|
|
Packit Service |
1d0348 |
this entry is a long linkname for the following regular
|
|
Packit Service |
1d0348 |
entry.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
L
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
The data for
|
|
Packit Service |
1d0348 |
this entry is a long pathname for the following regular
|
|
Packit Service |
1d0348 |
entry.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
M
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
This is a
|
|
Packit Service |
1d0348 |
continuation of the last file on the previous volume. GNU
|
|
Packit Service |
1d0348 |
multi-volume archives guarantee that each volume begins with
|
|
Packit Service |
1d0348 |
a valid entry header. To ensure this, a file may be split,
|
|
Packit Service |
1d0348 |
with part stored at the end of one volume, and part stored
|
|
Packit Service |
1d0348 |
at the beginning of the next volume. The "M"
|
|
Packit Service |
1d0348 |
typeflag indicates that this entry continues an existing
|
|
Packit Service |
1d0348 |
file. Such entries can only occur as the first or second
|
|
Packit Service |
1d0348 |
entry in an archive (the latter only if the first entry is a
|
|
Packit Service |
1d0348 |
volume label). The size field specifies the size of
|
|
Packit Service |
1d0348 |
this entry. The offset field at bytes 369-380
|
|
Packit Service |
1d0348 |
specifies the offset where this file fragment begins. The
|
|
Packit Service |
1d0348 |
realsize field specifies the total size of the file
|
|
Packit Service |
1d0348 |
(which must equal size plus offset). When
|
|
Packit Service |
1d0348 |
extracting, GNU tar checks that the header file name is the
|
|
Packit Service |
1d0348 |
one it is expecting, that the header offset is in the
|
|
Packit Service |
1d0348 |
correct sequence, and that the sum of offset and size is
|
|
Packit Service |
1d0348 |
equal to realsize.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
N
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Type
|
|
Packit Service |
1d0348 |
"N" records are no longer generated by GNU tar.
|
|
Packit Service |
1d0348 |
They contained a list of files to be renamed or symlinked
|
|
Packit Service |
1d0348 |
after extraction; this was originally used to support long
|
|
Packit Service |
1d0348 |
names. The contents of this record are a text description of
|
|
Packit Service |
1d0348 |
the operations to be done, in the form ’’Rename
|
|
Packit Service |
1d0348 |
%s to %s\n’’ or ’’Symlink %s to
|
|
Packit Service |
1d0348 |
%s\n’’; in either case, both filenames are
|
|
Packit Service |
1d0348 |
escaped using K&R C syntax. Due to security concerns,
|
|
Packit Service |
1d0348 |
"N" records are now generally ignored when reading
|
|
Packit Service |
1d0348 |
archives.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
S
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
This is a
|
|
Packit Service |
1d0348 |
’’sparse’’ regular file. Sparse
|
|
Packit Service |
1d0348 |
files are stored as a series of fragments. The header
|
|
Packit Service |
1d0348 |
contains a list of fragment offset/length pairs. If more
|
|
Packit Service |
1d0348 |
than four such entries are required, the header is extended
|
|
Packit Service |
1d0348 |
as necessary with ’’extra’’ header
|
|
Packit Service |
1d0348 |
extensions (an older format that is no longer used), or
|
|
Packit Service |
1d0348 |
’’sparse’’ extensions.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
V
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
The name
|
|
Packit Service |
1d0348 |
field should be interpreted as a tape/volume header name.
|
|
Packit Service |
1d0348 |
This entry should generally be ignored on extraction.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
magic
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
The magic field
|
|
Packit Service |
1d0348 |
holds the five characters ’’ustar’’
|
|
Packit Service |
1d0348 |
followed by a space. Note that POSIX ustar archives have a
|
|
Packit Service |
1d0348 |
trailing null.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
version
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
The version field holds a space
|
|
Packit Service |
1d0348 |
character followed by a null. Note that POSIX ustar archives
|
|
Packit Service |
1d0348 |
use two copies of the ASCII digit
|
|
Packit Service |
1d0348 |
’’0’’.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
atime, ctime
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
The time the file was last
|
|
Packit Service |
1d0348 |
accessed and the time of last change of file information,
|
|
Packit Service |
1d0348 |
stored in octal as with mtime.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
longnames
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
This field is apparently no
|
|
Packit Service |
1d0348 |
longer used.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Sparse offset /
|
|
Packit Service |
1d0348 |
numbytes
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Each such structure specifies a
|
|
Packit Service |
1d0348 |
single fragment of a sparse file. The two fields store
|
|
Packit Service |
1d0348 |
values as octal numbers. The fragments are each padded to a
|
|
Packit Service |
1d0348 |
multiple of 512 bytes in the archive. On extraction, the
|
|
Packit Service |
1d0348 |
list of fragments is collected from the header (including
|
|
Packit Service |
1d0348 |
any extension headers), and the data is then read and
|
|
Packit Service |
1d0348 |
written to the file at appropriate offsets.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
isextended
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
If this is set to non-zero, the
|
|
Packit Service |
1d0348 |
header will be followed by additional ’’sparse
|
|
Packit Service |
1d0348 |
header’’ records. Each such record contains
|
|
Packit Service |
1d0348 |
information about as many as 21 additional sparse blocks as
|
|
Packit Service |
1d0348 |
shown here:
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
struct
|
|
Packit Service |
1d0348 |
gnu_sparse_header {
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
cellspacing="0" cellpadding="0">
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
struct {
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char offset[12];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char numbytes[12];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
} sparse[21];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char isextended[1];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
char padding[7];
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
};
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
realsize
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
A binary representation of the
|
|
Packit Service |
1d0348 |
file’s complete size, with a much larger range than
|
|
Packit Service |
1d0348 |
the POSIX file size. In particular, with M type
|
|
Packit Service |
1d0348 |
files, the current entry is only a portion of the file. In
|
|
Packit Service |
1d0348 |
that case, the POSIX size field will indicate the size of
|
|
Packit Service |
1d0348 |
this entry; the realsize field will indicate the
|
|
Packit Service |
1d0348 |
total size of the file.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
GNU tar pax
|
|
Packit Service |
1d0348 |
archives
|
|
Packit Service |
1d0348 |
GNU tar 1.14 (XXX check this XXX) and later will write pax
|
|
Packit Service |
1d0348 |
interchange format archives when you specify the
|
|
Packit Service |
1d0348 |
--posix flag. This format follows the pax interchange
|
|
Packit Service |
1d0348 |
format closely, using some SCHILY tags and
|
|
Packit Service |
1d0348 |
introducing new keywords to store sparse file information.
|
|
Packit Service |
1d0348 |
There have been three iterations of the sparse file support,
|
|
Packit Service |
1d0348 |
referred to as ’’0.0’’,
|
|
Packit Service |
1d0348 |
’’0.1’’, and
|
|
Packit Service |
1d0348 |
’’1.0’’.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
GNU.sparse.numblocks,
|
|
Packit Service |
1d0348 |
GNU.sparse.offset, GNU.sparse.numbytes,
|
|
Packit Service |
1d0348 |
GNU.sparse.size
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
The
|
|
Packit Service |
1d0348 |
’’0.0’’ format used an initial
|
|
Packit Service |
1d0348 |
GNU.sparse.numblocks attribute to indicate the number
|
|
Packit Service |
1d0348 |
of blocks in the file, a pair of GNU.sparse.offset
|
|
Packit Service |
1d0348 |
and GNU.sparse.numbytes to indicate the offset and
|
|
Packit Service |
1d0348 |
size of each block, and a single GNU.sparse.size to
|
|
Packit Service |
1d0348 |
indicate the full size of the file. This is not the same as
|
|
Packit Service |
1d0348 |
the size in the tar header because the latter value does not
|
|
Packit Service |
1d0348 |
include the size of any holes. This format required that the
|
|
Packit Service |
1d0348 |
order of attributes be preserved and relied on readers
|
|
Packit Service |
1d0348 |
accepting multiple appearances of the same attribute names,
|
|
Packit Service |
1d0348 |
which is not officially permitted by the standards.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
GNU.sparse.map
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
The
|
|
Packit Service |
1d0348 |
’’0.1’’ format used a single
|
|
Packit Service |
1d0348 |
attribute that stored a comma-separated list of decimal
|
|
Packit Service |
1d0348 |
numbers. Each pair of numbers indicated the offset and size,
|
|
Packit Service |
1d0348 |
respectively, of a block of data. This does not work well if
|
|
Packit Service |
1d0348 |
the archive is extracted by an archiver that does not
|
|
Packit Service |
1d0348 |
recognize this extension, since many pax implementations
|
|
Packit Service |
1d0348 |
simply discard unrecognized attributes.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
GNU.sparse.major,
|
|
Packit Service |
1d0348 |
GNU.sparse.minor, GNU.sparse.name,
|
|
Packit Service |
1d0348 |
GNU.sparse.realsize
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
The
|
|
Packit Service |
1d0348 |
’’1.0’’ format stores the sparse
|
|
Packit Service |
1d0348 |
block map in one or more 512-byte blocks prepended to the
|
|
Packit Service |
1d0348 |
file data in the entry body. The pax attributes indicate the
|
|
Packit Service |
1d0348 |
existence of this map (via the GNU.sparse.major and
|
|
Packit Service |
1d0348 |
GNU.sparse.minor fields) and the full size of the
|
|
Packit Service |
1d0348 |
file. The GNU.sparse.name holds the true name of the
|
|
Packit Service |
1d0348 |
file. To avoid confusion, the name stored in the regular tar
|
|
Packit Service |
1d0348 |
header is a modified name so that extraction errors will be
|
|
Packit Service |
1d0348 |
apparent to users.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Solaris
|
|
Packit Service |
1d0348 |
Tar
|
|
Packit Service |
1d0348 |
XXX More Details Needed XXX
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Solaris tar
|
|
Packit Service |
1d0348 |
(beginning with SunOS XXX 5.7 ?? XXX) supports an
|
|
Packit Service |
1d0348 |
’’extended’’ format that is
|
|
Packit Service |
1d0348 |
fundamentally similar to pax interchange format, with the
|
|
Packit Service |
1d0348 |
following differences:
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
•
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Extended attributes are stored
|
|
Packit Service |
1d0348 |
in an entry whose type is X, not x, as used by
|
|
Packit Service |
1d0348 |
pax interchange format. The detailed format of this entry
|
|
Packit Service |
1d0348 |
appears to be the same as detailed above for the x
|
|
Packit Service |
1d0348 |
entry.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
•
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
An additional A header
|
|
Packit Service |
1d0348 |
is used to store an ACL for the following regular entry. The
|
|
Packit Service |
1d0348 |
body of this entry contains a seven-digit octal number
|
|
Packit Service |
1d0348 |
followed by a zero byte, followed by the textual ACL
|
|
Packit Service |
1d0348 |
description. The octal value is the number of ACL entries
|
|
Packit Service |
1d0348 |
plus a constant that indicates the ACL type: 01000000 for
|
|
Packit Service |
1d0348 |
POSIX.1e ACLs and 03000000 for NFSv4 ACLs.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
AIX Tar
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
XXX More details needed XXX
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
AIX Tar uses a
|
|
Packit Service |
1d0348 |
ustar-formatted header with the type A for storing
|
|
Packit Service |
1d0348 |
coded ACL information. Unlike the Solaris format, AIX tar
|
|
Packit Service |
1d0348 |
writes this header after the regular file body to which it
|
|
Packit Service |
1d0348 |
applies. The pathname in this header is either NFS4
|
|
Packit Service |
1d0348 |
or AIXC to indicate the type of ACL stored. The
|
|
Packit Service |
1d0348 |
actual ACL is stored in platform-specific binary format.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Mac OS X
|
|
Packit Service |
1d0348 |
Tar
|
|
Packit Service |
1d0348 |
The tar distributed with Apple’s Mac OS X stores most
|
|
Packit Service |
1d0348 |
regular files as two separate files in the tar archive. The
|
|
Packit Service |
1d0348 |
two files have the same name except that the first one has
|
|
Packit Service |
1d0348 |
’’._’’ prepended to the last path
|
|
Packit Service |
1d0348 |
element. This special file stores an AppleDouble-encoded
|
|
Packit Service |
1d0348 |
binary blob with additional metadata about the second file,
|
|
Packit Service |
1d0348 |
including ACL, extended attributes, and resources. To
|
|
Packit Service |
1d0348 |
recreate the original file on disk, each separate file can
|
|
Packit Service |
1d0348 |
be extracted and the Mac OS X copyfile() function can
|
|
Packit Service |
1d0348 |
be used to unpack the separate metadata file and apply it to
|
|
Packit Service |
1d0348 |
th regular file. Conversely, the same function provides a
|
|
Packit Service |
1d0348 |
’’pack’’ option to encode the
|
|
Packit Service |
1d0348 |
extended metadata from a file into a separate file whose
|
|
Packit Service |
1d0348 |
contents can then be put into a tar archive.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Note that the
|
|
Packit Service |
1d0348 |
Apple extended attributes interact badly with long
|
|
Packit Service |
1d0348 |
filenames. Since each file is stored with the full name, a
|
|
Packit Service |
1d0348 |
separate set of extensions needs to be included in the
|
|
Packit Service |
1d0348 |
archive for each one, doubling the overhead required for
|
|
Packit Service |
1d0348 |
files with long names.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Summary of
|
|
Packit Service |
1d0348 |
tar type codes
|
|
Packit Service |
1d0348 |
The following list is a condensed summary of the type codes
|
|
Packit Service |
1d0348 |
used in tar header records generated by different tar
|
|
Packit Service |
1d0348 |
implementations. More details about specific implementations
|
|
Packit Service |
1d0348 |
can be found above:
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
NUL
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Early tar
|
|
Packit Service |
1d0348 |
programs stored a zero byte for regular files.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
0
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
POSIX standard
|
|
Packit Service |
1d0348 |
type code for a regular file.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
1
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
POSIX standard
|
|
Packit Service |
1d0348 |
type code for a hard link description.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
2
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
POSIX standard
|
|
Packit Service |
1d0348 |
type code for a symbolic link description.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
3
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
POSIX standard
|
|
Packit Service |
1d0348 |
type code for a character device node.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
4
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
POSIX standard
|
|
Packit Service |
1d0348 |
type code for a block device node.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
5
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
POSIX standard
|
|
Packit Service |
1d0348 |
type code for a directory.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
6
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
POSIX standard
|
|
Packit Service |
1d0348 |
type code for a FIFO.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
7
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
POSIX
|
|
Packit Service |
1d0348 |
reserved.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
7
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
GNU tar used
|
|
Packit Service |
1d0348 |
for pre-allocated files on some systems.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
A
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Solaris tar ACL
|
|
Packit Service |
1d0348 |
description stored prior to a regular file header.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
A
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
AIX tar ACL
|
|
Packit Service |
1d0348 |
description stored after the file body.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
D
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
GNU tar
|
|
Packit Service |
1d0348 |
directory dump.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
K
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
GNU tar long
|
|
Packit Service |
1d0348 |
linkname for the following header.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
L
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
GNU tar long
|
|
Packit Service |
1d0348 |
pathname for the following header.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
M
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
GNU tar
|
|
Packit Service |
1d0348 |
multivolume marker, indicating the file is a continuation of
|
|
Packit Service |
1d0348 |
a file from the previous volume.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
N
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
GNU tar long
|
|
Packit Service |
1d0348 |
filename support. Deprecated.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
S
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
GNU tar sparse
|
|
Packit Service |
1d0348 |
regular file.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
V
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
GNU tar
|
|
Packit Service |
1d0348 |
tape/volume header name.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
X
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
Solaris tar
|
|
Packit Service |
1d0348 |
general-purpose extension header.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
g
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
POSIX pax
|
|
Packit Service |
1d0348 |
interchange format global extensions.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
x
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
POSIX pax
|
|
Packit Service |
1d0348 |
interchange format per-file extensions.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
SEE ALSO
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
ar(1), pax(1), tar(1)
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
STANDARDS
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
The tar utility is no
|
|
Packit Service |
1d0348 |
longer a part of POSIX or the Single Unix Standard. It last
|
|
Packit Service |
1d0348 |
appeared in Version 2 of the Single UNIX Specification
|
|
Packit Service |
1d0348 |
(’’SUSv2’’). It has been supplanted
|
|
Packit Service |
1d0348 |
in subsequent standards by pax(1). The ustar format is
|
|
Packit Service |
1d0348 |
currently part of the specification for the pax(1) utility.
|
|
Packit Service |
1d0348 |
The pax interchange file format is new with IEEE Std
|
|
Packit Service |
1d0348 |
1003.1-2001 (’’POSIX.1’’).
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
HISTORY
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
A tar command appeared in
|
|
Packit Service |
1d0348 |
Seventh Edition Unix, which was released in January, 1979.
|
|
Packit Service |
1d0348 |
It replaced the tp program from Fourth Edition Unix
|
|
Packit Service |
1d0348 |
which in turn replaced the tap program from First
|
|
Packit Service |
1d0348 |
Edition Unix. John Gilmore’s pdtar
|
|
Packit Service |
1d0348 |
public-domain implementation (circa 1987) was highly
|
|
Packit Service |
1d0348 |
influential and formed the basis of GNU tar (circa
|
|
Packit Service |
1d0348 |
1988). Joerg Shilling’s star archiver is
|
|
Packit Service |
1d0348 |
another open-source (CDDL) archiver (originally developed
|
|
Packit Service |
1d0348 |
circa 1985) which features complete support for pax
|
|
Packit Service |
1d0348 |
interchange format.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
This
|
|
Packit Service |
1d0348 |
documentation was written as part of the libarchive
|
|
Packit Service |
1d0348 |
and bsdtar project by Tim Kientzle
|
|
Packit Service |
1d0348 |
<kientzle@FreeBSD.org>.
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
BSD
|
|
Packit Service |
1d0348 |
December 27, 2016 BSD
|
|
Packit Service |
1d0348 |
|
|
Packit Service |
1d0348 |
</body>
|
|
Packit Service |
1d0348 |
</html>
|