pax Interchange Format
A pax archive tape or file produced in the -xpax
format shall
contain a series of blocks. The physical layout of the archive
shall be identical to the ustar
format described in ustar
Interchange Format. Each file archived shall be represented by
the following sequence:
* An optional header block with extended header records. This
header block is of the form described in pax Header Block,
with a typeflag value of x
or g
. The extended header
records, described in pax Extended Header, shall be included
as the data for this header block.
* A header block that describes the file. Any fields in the
preceding optional extended header shall override the
associated fields in this header block for this file.
* Zero or more blocks that contain the contents of the file.
At the end of the archive file there shall be two 512-byte blocks
filled with binary zeros, interpreted as an end-of-archive
indicator.
A schematic of an example archive with global extended header
records and two actual files is shown in Figure 4-1, pax Format
Archive Example. In the example, the second file in the archive
has no extended header preceding it, presumably because it has no
need for extended attributes.
Figure 4-1: pax Format Archive Example
pax Header Block
The pax
header block shall be identical to the ustar
header block
described in ustar Interchange Format, except that two additional
typeflag values are defined:
x Represents extended header records for the following file
in the archive (which shall have its own ustar
header
block). The format of these extended header records shall
be as described in pax Extended Header.
g Represents global extended header records for the following
files in the archive. The format of these extended header
records shall be as described in pax Extended Header. Each
value shall affect all subsequent files that do not
override that value in their own extended header record and
until another global extended header record is reached that
provides another value for the same field. The typeflag g
global headers should not be used with interchange media
that could suffer partial data loss in transporting the
archive.
For both of these types, the size field shall be the size of the
extended header records in octets. The other fields in the header
block are not meaningful to this version of the pax utility.
However, if this archive is read by a pax utility conforming to
the ISO POSIX‐2:1993 standard, the header block fields are used
to create a regular file that contains the extended header
records as data. Therefore, header block field values should be
selected to provide reasonable file access to this regular file.
A further difference from the ustar
header block is that data
blocks for files of typeflag 1 (the digit one) (hard link) may be
included, which means that the size field may be greater than
zero. Archives created by pax -o linkdata
shall include these
data blocks with the hard links.
pax Extended Header
A pax
extended header contains values that are inappropriate for
the ustar
header block because of limitations in that format:
fields requiring a character encoding other than that described
in the ISO/IEC 646:1991 standard, fields representing file
attributes not described in the ustar
header, and fields whose
format or length do not fit the requirements of the ustar
header.
The values in an extended header add attributes to the following
file (or files; see the description of the typeflag g
header
block) or override values in the following header block(s), as
indicated in the following list of keywords.
An extended header shall consist of one or more records, each
constructed as follows:
"%d %s=%s\n", <length>, <keyword>, <value>
The extended header records shall be encoded according to the
ISO/IEC 10646‐1:2000 standard UTF‐8 encoding. The <length> field,
<blank>, <equals-sign>, and <newline> shown shall be limited to
the portable character set, as encoded in UTF‐8. The <keyword>
fields can be any UTF‐8 characters. The <length> field shall be
the decimal length of the extended header record in octets,
including the trailing <newline>. If there is a hdrcharset
extended header in effect for a file, the value field for any
gname
, linkpath
, path
, and uname
extended header records shall be
encoded using the character set specified by the hdrcharset
extended header record; otherwise, the value field shall be
encoded using UTF‐8. The value field for all other keywords
specified by POSIX.1‐2008 shall be encoded using UTF‐8.
The <keyword> field shall be one of the entries from the
following list or a keyword provided as an implementation
extension. Keywords consisting entirely of lowercase letters,
digits, and periods are reserved for future standardization. A
keyword shall not include an <equals-sign>. (In the following
list, the notations ``file(s)'' or ``block(s)'' is used to
acknowledge that a keyword affects the following single file
after a typeflag x
extended header, but possibly multiple files
after typeflag g
. Any requirements in the list for pax to
include a record when in write
or copy
mode shall apply only when
such a record has not already been provided through the use of
the -o
option. When used in copy
mode, pax shall behave as if an
archive had been created with applicable extended header records
and then extracted.)
atime
The file access time for the following file(s),
equivalent to the value of the st_atime member of the
stat
structure for a file, as described by the stat()
function. The access time shall be restored if the
process has appropriate privileges required to do so.
The format of the <value> shall be as described in pax
Extended Header File Times.
charset
The name of the character set used to encode the data
in the following file(s). The entries in the following
table are defined to refer to known standards;
additional names may be agreed on between the
originator and recipient.
┌────────────────────────┬───────────────────────────────┐
│ <value>
│ Formal Standard
│
├────────────────────────┼───────────────────────────────┤
│ISO-IR 646 1990 │ ISO/IEC 646:1990 │
│ISO-IR 8859 1 1998 │ ISO/IEC 8859‐1:1998 │
│ISO-IR 8859 2 1999 │ ISO/IEC 8859‐2:1999 │
│ISO-IR 8859 3 1999 │ ISO/IEC 8859‐3:1999 │
│ISO-IR 8859 4 1998 │ ISO/IEC 8859‐4:1998 │
│ISO-IR 8859 5 1999 │ ISO/IEC 8859‐5:1999 │
│ISO-IR 8859 6 1999 │ ISO/IEC 8859‐6:1999 │
│ISO-IR 8859 7 1987 │ ISO/IEC 8859‐7:1987 │
│ISO-IR 8859 8 1999 │ ISO/IEC 8859‐8:1999 │
│ISO-IR 8859 9 1999 │ ISO/IEC 8859‐9:1999 │
│ISO-IR 8859 10 1998 │ ISO/IEC 8859‐10:1998 │
│ISO-IR 8859 13 1998 │ ISO/IEC 8859‐13:1998 │
│ISO-IR 8859 14 1998 │ ISO/IEC 8859‐14:1998 │
│ISO-IR 8859 15 1999 │ ISO/IEC 8859‐15:1999 │
│ISO-IR 10646 2000 │ ISO/IEC 10646:2000 │
│ISO-IR 10646 2000 UTF-8 │ ISO/IEC 10646, UTF-8 encoding │
│BINARY │ None. │
└────────────────────────┴───────────────────────────────┘
The encoding is included in an extended header for
information only; when pax is used as described in
POSIX.1‐2008, it shall not translate the file data into
any other encoding. The BINARY
entry indicates
unencoded binary data.
When used in write
or copy
mode, it is implementation-
defined whether pax includes a charset
extended header
record for a file.
comment
A series of characters used as a comment. All
characters in the <value> field shall be ignored by
pax.
gid
The group ID of the group that owns the file, expressed
as a decimal number using digits from the
ISO/IEC 646:1991 standard. This record shall override
the gid field in the following header block(s). When
used in write
or copy
mode, pax shall include a gid
extended header record for each file whose group ID is
greater than 2097151 (octal 7777777).
gname
The group of the file(s), formatted as a group name in
the group database. This record shall override the gid
and gname fields in the following header block(s), and
any gid extended header record. When used in read
,
copy
, or list
mode, pax shall translate the name from
the encoding in the header record to the character set
appropriate for the group database on the receiving
system. If any of the characters cannot be translated,
and if neither the -oinvalid=UTF‐8
option nor the
-oinvalid=binary
option is specified, the results are
implementation-defined. When used in write
or copy
mode, pax shall include a gname
extended header record
for each file whose group name cannot be represented
entirely with the letters and digits of the portable
character set.
hdrcharset
The name of the character set used to encode the value
field of the gname
, linkpath
, path
, and uname
pax
extended header records. The entries in the following
table are defined to refer to known standards;
additional names may be agreed between the originator
and the recipient.
┌────────────────────────┬───────────────────────────────┐
│ <value>
│ Formal Standard
│
├────────────────────────┼───────────────────────────────┤
│ISO-IR 10646 2000 UTF-8 │ ISO/IEC 10646, UTF-8 encoding │
│BINARY │ None. │
└────────────────────────┴───────────────────────────────┘
If no hdrcharset
extended header record is specified,
the default character set used to encode all values in
extended header records shall be the
ISO/IEC 10646‐1:2000 standard UTF‐8 encoding.
The BINARY
entry indicates that all values recorded in
extended headers for affected files are unencoded
binary data from the underlying system.
linkpath
The pathname of a link being created to another file,
of any type, previously archived. This record shall
override the linkname field in the following ustar
header block(s). The following ustar
header block shall
determine the type of link created. If typeflag of the
following header block is 1, it shall be a hard link.
If typeflag is 2, it shall be a symbolic link and the
linkpath
value shall be the contents of the symbolic
link. The pax utility shall translate the name of the
link (contents of the symbolic link) from the encoding
in the header to the character set appropriate for the
local file system. When used in write
or copy
mode, pax
shall include a linkpath
extended header record for
each link whose pathname cannot be represented entirely
with the members of the portable character set other
than NUL.
mtime
The file modification time of the following file(s),
equivalent to the value of the st_mtime member of the
stat
structure for a file, as described in the stat()
function. This record shall override the mtime field in
the following header block(s). The modification time
shall be restored if the process has appropriate
privileges required to do so. The format of the <value>
shall be as described in pax Extended Header File
Times.
path
The pathname of the following file(s). This record
shall override the name and prefix fields in the
following header block(s). The pax utility shall
translate the pathname of the file from the encoding in
the header to the character set appropriate for the
local file system.
When used in write
or copy
mode, pax shall include a
path extended header record for each file whose
pathname cannot be represented entirely with the
members of the portable character set other than NUL.
realtime.
any
The keywords prefixed by ``realtime.'' are reserved for
future standardization.
security.
any
The keywords prefixed by ``security.'' are reserved for
future standardization.
size
The size of the file in octets, expressed as a decimal
number using digits from the ISO/IEC 646:1991 standard.
This record shall override the size field in the
following header block(s). When used in write
or copy
mode, pax shall include a size extended header record
for each file with a size value greater than 8589934591
(octal 77777777777).
uid
The user ID of the file owner, expressed as a decimal
number using digits from the ISO/IEC 646:1991 standard.
This record shall override the uid field in the
following header block(s). When used in write
or copy
mode, pax shall include a uid extended header record
for each file whose owner ID is greater than 2097151
(octal 7777777).
uname
The owner of the following file(s), formatted as a user
name in the user database. This record shall override
the uid and uname fields in the following header
block(s), and any uid extended header record. When used
in read
, copy
, or list
mode, pax shall translate the
name from the encoding in the header record to the
character set appropriate for the user database on the
receiving system. If any of the characters cannot be
translated, and if neither the -oinvalid=UTF‐8
option
nor the -oinvalid=binary
option is specified, the
results are implementation-defined. When used in write
or copy
mode, pax shall include a uname
extended header
record for each file whose user name cannot be
represented entirely with the letters and digits of the
portable character set.
If the <value> field is zero length, it shall delete any header
block field, previously entered extended header value, or global
extended header value of the same name.
If a keyword in an extended header record (or in a -o
option-
argument) overrides or deletes a corresponding field in the ustar
header block, pax shall ignore the contents of that header block
field.
Unlike the ustar
header block fields, NULs shall not delimit
<value>s; all characters within the <value> field shall be
considered data for the field. None of the length limitations of
the ustar
header block fields in Table 4-14, ustar Header Block
shall apply to the extended header records.
pax Extended Header Keyword Precedence
This section describes the precedence in which the various header
records and fields and command line options are selected to apply
to a file in the archive. When pax is used in read
or list
modes,
it shall determine a file attribute in the following sequence:
1. If -odelete=keyword-prefix
is used, the affected attributes
shall be determined from step 7., if applicable, or ignored
otherwise.
2. If -o
keyword:= is used, the affected attributes shall be
ignored.
3. If -okeyword:=value
is used, the affected attribute shall be
assigned the value.
4. If there is a typeflag x
extended header record, the affected
attribute shall be assigned the <value>. When extended header
records conflict, the last one given in the header shall take
precedence.
5. If -okeyword=value
is used, the affected attribute shall be
assigned the value.
6. If there is a typeflag g
global extended header record, the
affected attribute shall be assigned the <value>. When global
extended header records conflict, the last one given in the
global header shall take precedence.
7. Otherwise, the attribute shall be determined from the ustar
header block.
pax Extended Header File Times
The pax utility shall write an mtime
record for each file in
write
or copy
modes if the file's modification time cannot be
represented exactly in the ustar
header logical record described
in ustar Interchange Format. This can occur if the time is out
of ustar
range, or if the file system of the underlying
implementation supports non-integer time granularities and the
time is not an integer. All of these time records shall be
formatted as a decimal representation of the time in seconds
since the Epoch. If a <period> ('.'
) decimal point character is
present, the digits to the right of the point shall represent the
units of a subsecond timing granularity, where the first digit is
tenths of a second and each subsequent digit is a tenth of the
previous digit. In read
or copy
mode, the pax utility shall
truncate the time of a file to the greatest value that is not
greater than the input header file time. In write
or copy
mode,
the pax utility shall output a time exactly if it can be
represented exactly as a decimal number, and otherwise shall
generate only enough digits so that the same time shall be
recovered if the file is extracted on a system whose underlying
implementation supports the same time granularity.
ustar Interchange Format
A ustar
archive tape or file shall contain a series of logical
records. Each logical record shall be a fixed-size logical record
of 512 octets (see below). Although this format may be thought of
as being stored on 9-track industry-standard 12.7 mm (0.5 in)
magnetic tape, other types of transportable media are not
excluded. Each file archived shall be represented by a header
logical record that describes the file, followed by zero or more
logical records that give the contents of the file. At the end of
the archive file there shall be two 512-octet logical records
filled with binary zeros, interpreted as an end-of-archive
indicator.
The logical records may be grouped for physical I/O operations,
as described under the -b
blocksize and -x ustar
options. Each
group of logical records may be written with a single operation
equivalent to the write() function. On magnetic tape, the result
of this write shall be a single tape physical block. The last
physical block shall always be the full size, so logical records
after the two zero logical records may contain undefined data.
The header logical record shall be structured as shown in the
following table. All lengths and offsets are in decimal.
Table 4-14: ustar Header Block
┌───────────┬──────────────┬────────────────────┐
│Field Name
│ Octet Offset
│ Length (in Octets)
│
├───────────┼──────────────┼────────────────────┤
│name │ 0 │ 100 │
│mode │ 100 │ 8 │
│uid │ 108 │ 8 │
│gid │ 116 │ 8 │
│size │ 124 │ 12 │
│mtime │ 136 │ 12 │
│chksum │ 148 │ 8 │
│typeflag │ 156 │ 1 │
│linkname │ 157 │ 100 │
│magic │ 257 │ 6 │
│version │ 263 │ 2 │
│uname │ 265 │ 32 │
│gname │ 297 │ 32 │
│devmajor │ 329 │ 8 │
│devminor │ 337 │ 8 │
│prefix │ 345 │ 155 │
└───────────┴──────────────┴────────────────────┘
All characters in the header logical record shall be represented
in the coded character set of the ISO/IEC 646:1991 standard. For
maximum portability between implementations, names should be
selected from characters represented by the portable filename
character set as octets with the most significant bit zero. If an
implementation supports the use of characters outside of <slash>
and the portable filename character set in names for files,
users, and groups, one or more implementation-defined encodings
of these characters shall be provided for interchange purposes.
However, the pax utility shall never create filenames on the
local system that cannot be accessed via the procedures described
in POSIX.1‐2008. If a filename is found on the medium that would
create an invalid filename, it is implementation-defined whether
the data from the file is stored on the file hierarchy and under
what name it is stored. The pax utility may choose to ignore
these files as long as it produces an error indicating that the
file is being ignored.
Each field within the header logical record is contiguous; that
is, there is no padding used. Each character on the archive
medium shall be stored contiguously.
The fields magic, uname, and gname are character strings each
terminated by a NUL character. The fields name, linkname, and
prefix are NUL-terminated character strings except when all
characters in the array contain non-NUL characters including the
last character. The version field is two octets containing the
characters "00"
(zero-zero). The typeflag contains a single
character. All other fields are leading zero-filled octal numbers
using digits from the ISO/IEC 646:1991 standard IRV. Each numeric
field is terminated by one or more <space> or NUL characters.
The name and the prefix fields shall produce the pathname of the
file. A new pathname shall be formed, if prefix is not an empty
string (its first character is not NUL), by concatenating prefix
(up to the first NUL character), a <slash> character, and name;
otherwise, name is used alone. In either case, name is terminated
at the first NUL character. If prefix begins with a NUL
character, it shall be ignored. In this manner, pathnames of at
most 256 characters can be supported. If a pathname does not fit
in the space provided, pax shall notify the user of the error,
and shall not store any part of the file—header or data—on the
medium.
The linkname field, described below, shall not use the prefix to
produce a pathname. As such, a linkname is limited to 100
characters. If the name does not fit in the space provided, pax
shall notify the user of the error, and shall not attempt to
store the link on the medium.
The mode field provides 12 bits encoded in the ISO/IEC 646:1991
standard octal digit representation. The encoded bits shall
represent the following values:
Table: ustar
mode Field
┌──────────┬──────────────────┬─────────────────────────────────────────────────┐
│Bit Value
│ POSIX.1‐2008 Bit
│ Description
│
├──────────┼──────────────────┼─────────────────────────────────────────────────┤
│ 04000 │ S_ISUID │ Set UID on execution. │
│ 02000 │ S_ISGID │ Set GID on execution. │
│ 01000 │ <reserved> │ Reserved for future standardization. │
│ 00400 │ S_IRUSR │ Read permission for file owner class. │
│ 00200 │ S_IWUSR │ Write permission for file owner class. │
│ 00100 │ S_IXUSR │ Execute/search permission for file owner class. │
│ 00040 │ S_IRGRP │ Read permission for file group class. │
│ 00020 │ S_IWGRP │ Write permission for file group class. │
│ 00010 │ S_IXGRP │ Execute/search permission for file group class. │
│ 00004 │ S_IROTH │ Read permission for file other class. │
│ 00002 │ S_IWOTH │ Write permission for file other class. │
│ 00001 │ S_IXOTH │ Execute/search permission for file other class. │
└──────────┴──────────────────┴─────────────────────────────────────────────────┘
When appropriate privileges are required to set one of these mode
bits, and the user restoring the files from the archive does not
have appropriate privileges, the mode bits for which the user
does not have appropriate privileges shall be ignored. Some of
the mode bits in the archive format are not mentioned elsewhere
in this volume of POSIX.1‐2017. If the implementation does not
support those bits, they may be ignored.
The uid and gid fields are the user and group ID of the owner and
group of the file, respectively.
The size field is the size of the file in octets. If the typeflag
field is set to specify a file to be of type 1 (a link) or 2 (a
symbolic link), the size field shall be specified as zero. If the
typeflag field is set to specify a file of type 5 (directory),
the size field shall be interpreted as described under the
definition of that record type. No data logical records are
stored for types 1, 2, or 5. If the typeflag field is set to 3
(character special file), 4 (block special file), or 6 (FIFO),
the meaning of the size field is unspecified by this volume of
POSIX.1‐2017, and no data logical records shall be stored on the
medium. Additionally, for type 6, the size field shall be ignored
when reading. If the typeflag field is set to any other value,
the number of logical records written following the header shall
be (size+511)/512, ignoring any fraction in the result of the
division.
The mtime field shall be the modification time of the file at the
time it was archived. It is the ISO/IEC 646:1991 standard
representation of the octal value of the modification time
obtained from the stat() function.
The chksum field shall be the ISO/IEC 646:1991 standard IRV
representation of the octal value of the simple sum of all octets
in the header logical record. Each octet in the header shall be
treated as an unsigned value. These values shall be added to an
unsigned integer, initialized to zero, the precision of which is
not less than 17 bits. When calculating the checksum, the chksum
field is treated as if it were all <space> characters.
The typeflag field specifies the type of file archived. If a
particular implementation does not recognize the type, or the
user does not have appropriate privileges to create that type,
the file shall be extracted as if it were a regular file if the
file type is defined to have a meaning for the size field that
could cause data logical records to be written on the medium (see
the previous description for size). If conversion to a regular
file occurs, the pax utility shall produce an error indicating
that the conversion took place. All of the typeflag fields shall
be coded in the ISO/IEC 646:1991 standard IRV:
0 Represents a regular file. For backwards-compatibility, a
typeflag value of binary zero ('\0'
) should be recognized
as meaning a regular file when extracting files from the
archive. Archives written with this version of the
archive file format create regular files with a typeflag
value of the ISO/IEC 646:1991 standard IRV '0'
.
1 Represents a file linked to another file, of any type,
previously archived. Such files are identified by having
the same device and file serial numbers, and pathnames
that refer to different directory entries. All such files
shall be archived as linked files. The linked-to name is
specified in the linkname field with a NUL-character
terminator if it is less than 100 octets in length.
2 Represents a symbolic link. The contents of the symbolic
link shall be stored in the linkname field.
3,4 Represent character special files and block special files
respectively. In this case the devmajor and devminor
fields shall contain information defining the device, the
format of which is unspecified by this volume of
POSIX.1‐2017. Implementations may map the device
specifications to their own local specification or may
ignore the entry.
5 Specifies a directory or subdirectory. On systems where
disk allocation is performed on a directory basis, the
size field shall contain the maximum number of octets
(which may be rounded to the nearest disk block
allocation unit) that the directory may hold. A size
field of zero indicates no such limiting. Systems that do
not support limiting in this manner should ignore the
size field.
6 Specifies a FIFO special file. Note that the archiving of
a FIFO file archives the existence of this file and not
its contents.
7 Reserved to represent a file to which an implementation
has associated some high-performance attribute.
Implementations without such extensions should treat this
file as a regular file (type 0).
A‐Z The letters 'A'
to 'Z'
, inclusive, are reserved for
custom implementations. All other values are reserved for
future versions of this standard.
It is unspecified whether files with pathnames that refer to the
same directory entry are archived as linked files or as separate
files. If they are archived as linked files, this means that
attempting to extract both pathnames from the resulting archive
will always cause an error (unless the -u
option is used) because
the link cannot be created.
It is unspecified whether files with the same device and file
serial numbers being appended to an archive are treated as linked
files to members that were in the archive before the append.
Attempts to archive a socket shall produce a diagnostic message
when ustar
interchange format is used, but may be allowed when
pax
interchange format is used. Handling of other file types is
implementation-defined.
The magic field is the specification that this archive was output
in this archive format. If this field contains ustar
(the five
characters from the ISO/IEC 646:1991 standard IRV shown followed
by NUL), the uname and gname fields shall contain the
ISO/IEC 646:1991 standard IRV representation of the owner and
group of the file, respectively (truncated to fit, if necessary).
When the file is restored by a privileged, protection-preserving
version of the utility, the user and group databases shall be
scanned for these names. If found, the user and group IDs
contained within these files shall be used rather than the values
contained within the uid and gid fields.
cpio Interchange Format
The octet-oriented cpio
archive format shall be a series of
entries, each comprising a header that describes the file, the
name of the file, and then the contents of the file.
An archive may be recorded as a series of fixed-size blocks of
octets. This blocking shall be used only to make physical I/O
more efficient. The last group of blocks shall always be at the
full size.
For the octet-oriented cpio
archive format, the individual entry
information shall be in the order indicated and described by the
following table; see also the <cpio.h> header.
Table 4-16: Octet-Oriented cpio Archive Entry
┌─────────────────────┬────────────────────┬─────────────────┐
│ Header Field Name
│ Length (in Octets)
│ Interpreted as
│
├─────────────────────┼────────────────────┼─────────────────┤
│c_magic │ 6 │ Octal number │
│c_dev │ 6 │ Octal number │
│c_ino │ 6 │ Octal number │
│c_mode │ 6 │ Octal number │
│c_uid │ 6 │ Octal number │
│c_gid │ 6 │ Octal number │
│c_nlink │ 6 │ Octal number │
│c_rdev │ 6 │ Octal number │
│c_mtime │ 11 │ Octal number │
│c_namesize │ 6 │ Octal number │
│c_filesize │ 11 │ Octal number │
├─────────────────────┼────────────────────┼─────────────────┤
│Filename Field Name
│ Length
│ Interpreted as
│
├─────────────────────┴────────────────────┴─────────────────┤
│c_name c_namesize Pathname string │
├─────────────────────┬────────────────────┬─────────────────┤
│File Data Field Name
│ Length
│ Interpreted as
│
├─────────────────────┴────────────────────┴─────────────────┤
│c_filedata c_filesize Data │
└────────────────────────────────────────────────────────────┘
cpio Header
For each file in the archive, a header as defined previously
shall be written. The information in the header fields is written
as streams of the ISO/IEC 646:1991 standard characters
interpreted as octal numbers. The octal numbers shall be extended
to the necessary length by appending the ISO/IEC 646:1991
standard IRV zeros at the most-significant-digit end of the
number; the result is written to the most-significant digit of
the stream of octets first. The fields shall be interpreted as
follows:
c_magic Identify the archive as being a transportable archive
by containing the identifying value "070707"
.
c_dev, c_ino
Contains values that uniquely identify the file within
the archive (that is, no files contain the same pair of
c_dev and c_ino values unless they are links to the
same file). The values shall be determined in an
unspecified manner.
c_mode Contains the file type and access permissions as
defined in the following table.
Table 4-17: Values for cpio c_mode Field
─┬──────────────────────┬─────────┬────────────────────────│
│File Permissions Name
│ Value
│ Indicates
│
─┼──────────────────────┼─────────┼────────────────────────│
│C_IRUSR │ 000400 │Read by owner │
│C_IWUSR │ 000200 │Write by owner │
│C_IXUSR │ 000100 │Execute by owner │
│C_IRGRP │ 000040 │Read by group │
│C_IWGRP │ 000020 │Write by group │
│C_IXGRP │ 000010 │Execute by group │
│C_IROTH │ 000004 │Read by others │
│C_IWOTH │ 000002 │Write by others │
│C_IXOTH │ 000001 │Execute by others │
│C_ISUID │ 004000 │Set uid │
│C_ISGID │ 002000 │Set gid │
│C_ISVTX │ 001000 │Reserved │
─┼──────────────────────┼─────────┼────────────────────────│
│ File Type Name
│ Value
│ Indicates
│
─┼──────────────────────┼─────────┼────────────────────────│
│C_ISDIR │ 040000 │Directory │
│C_ISFIFO │ 010000 │FIFO │
│C_ISREG │0100000 │Regular file │
│C_ISLNK │0120000 │Symbolic link │
│ │ │ │
│C_ISBLK │ 060000 │ Block special file │
│C_ISCHR │ 020000 │ Character special file │
│C_ISSOCK │ 0140000 │ Socket │
│ │ │ │
│C_ISCTG │ 0110000 │ Reserved │
└──────────────────────┴─────────┴────────────────────────┘
Directories, FIFOs, symbolic links, and regular files
shall be supported on a system conforming to this
volume of POSIX.1‐2017; additional values defined
previously are reserved for compatibility with existing
systems. Additional file types may be supported;
however, such files should not be written to archives
intended to be transported to other systems.
c_uid Contains the user ID of the owner.
c_gid Contains the group ID of the group.
c_nlink Contains a number greater than or equal to the number
of links in the archive referencing the file. If the -a
option is used to append to a cpio archive, then the
pax utility need not account for the files in the
existing part of the archive when calculating the
c_nlink values for the appended part of the archive,
and need not alter the c_nlink values in the existing
part of the archive if additional files with the same
c_dev and c_ino values are appended to the archive.
c_rdev Contains implementation-defined information for
character or block special files.
c_mtime Contains the latest time of modification of the file at
the time the archive was created.
c_namesize
Contains the length of the pathname, including the
terminating NUL character.
c_filesize
Contains the length in octets of the data section
following the header structure.
cpio Filename
The c_name field shall contain the pathname of the file. The
length of this field in octets is the value of c_namesize.
If a filename is found on the medium that would create an invalid
pathname, it is implementation-defined whether the data from the
file is stored on the file hierarchy and under what name it is
stored.
All characters shall be represented in the ISO/IEC 646:1991
standard IRV. For maximum portability between implementations,
names should be selected from characters represented by the
portable filename character set as octets with the most
significant bit zero. If an implementation supports the use of
characters outside the portable filename character set in names
for files, users, and groups, one or more implementation-defined
encodings of these characters shall be provided for interchange
purposes. However, the pax utility shall never create filenames
on the local system that cannot be accessed via the procedures
described previously in this volume of POSIX.1‐2017. If a
filename is found on the medium that would create an invalid
filename, it is implementation-defined whether the data from the
file is stored on the local file system and under what name it is
stored. The pax utility may choose to ignore these files as long
as it produces an error indicating that the file is being
ignored.
cpio File Data
Following c_name, there shall be c_filesize octets of data.
Interpretation of such data occurs in a manner dependent on the
file. For regular files, the data shall consist of the contents
of the file. For symbolic links, the data shall consist of the
contents of the symbolic link. If c_filesize is zero, no data
shall be contained in c_filedata.
When restoring from an archive:
* If the user does not have appropriate privileges to create a
file of the specified type, pax shall ignore the entry and
write an error message to standard error.
* Only regular files and symbolic links have data to be
restored. Presuming a regular file meets any selection
criteria that might be imposed on the format-reading utility
by the user, such data shall be restored.
* If a user does not have appropriate privileges to set a
particular mode flag, the flag shall be ignored. Some of the
mode flags in the archive format are not mentioned elsewhere
in this volume of POSIX.1‐2017. If the implementation does
not support those flags, they may be ignored.
cpio Special Entries
FIFO special files, directories, and the trailer shall be
recorded with c_filesize equal to zero. Symbolic links shall be
recorded with c_filesize equal to the length of the contents of
the symbolic link. For other special files, c_filesize is
unspecified by this volume of POSIX.1‐2017. The header for the
next file entry in the archive shall be written directly after
the last octet of the file entry preceding it. A header denoting
the filename TRAILER!!!
shall indicate the end of the archive;
the contents of octets in the last block of the archive following
such a header are undefined.