240 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			240 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
'pax headers' is POSIX 2003 (iirc) addition designed to fix
 | 
						|
tar format limitations - older tar format has fixed fields
 | 
						|
for everything (filename, uid, filesize etc) which can overflow.
 | 
						|
 | 
						|
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).
 | 
						|
 | 
						|
g
 | 
						|
    Represents global extended header records for the following
 | 
						|
files in the archive. 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.
 | 
						|
 | 
						|
pax Extended Header
 | 
						|
 | 
						|
An extended header shall consist of one or more records, each
 | 
						|
constructed as follows:
 | 
						|
 | 
						|
"%d %s=%s\n", <length>, <keyword>, <value>
 | 
						|
 | 
						|
The <length> field shall be the decimal length of the extended
 | 
						|
header record in octets, including length string itself and the
 | 
						|
trailing <newline>.
 | 
						|
 | 
						|
[skip]
 | 
						|
 | 
						|
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 the appropriate privilege 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 encoding is included in an extended header for information
 | 
						|
only; when pax is used as described in IEEE Std 1003.1-2001, 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 UTF-8 encoding in the header record to
 | 
						|
the character set appropriate for the group database on the
 | 
						|
receiving system. If any of the UTF-8 characters cannot be
 | 
						|
translated, and if the -o invalid= UTF-8 option is not 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.
 | 
						|
 | 
						|
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 UTF-8 encoding 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 the appropriate privilege 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 UTF-8 encoding 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 UTF-8 encoding in the header record to
 | 
						|
the character set appropriate for the user database on the
 | 
						|
receiving system. If any of the UTF-8 characters cannot be
 | 
						|
translated, and if the -o invalid= UTF-8 option is not 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 ustar Header Block shall apply to
 | 
						|
the extended header records.
 | 
						|
 | 
						|
pax Extended Header File Times
 | 
						|
 | 
						|
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. 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.
 | 
						|
 | 
						|
Example from Linux kernel archive tarball:
 | 
						|
 | 
						|
00000000  70 61 78 5f 67 6c 6f 62  61 6c 5f 68 65 61 64 65  |pax_global_heade|
 | 
						|
00000010  72 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |r...............|
 | 
						|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 | 
						|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 | 
						|
00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 | 
						|
00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 | 
						|
00000060  00 00 00 00 30 30 30 30  36 36 36 00 30 30 30 30  |....0000666.0000|
 | 
						|
00000070  30 30 30 00 30 30 30 30  30 30 30 00 30 30 30 30  |000.0000000.0000|
 | 
						|
00000080  30 30 30 30 30 36 34 00  30 30 30 30 30 30 30 30  |0000064.00000000|
 | 
						|
00000090  30 30 30 00 30 30 31 34  30 35 33 00 67 00 00 00  |000.0014053.g...|
 | 
						|
000000a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 | 
						|
000000b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 | 
						|
000000c0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 | 
						|
000000d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 | 
						|
000000e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 | 
						|
000000f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 | 
						|
00000100  00 75 73 74 61 72 00 30  30 67 69 74 00 00 00 00  |.ustar.00git....|
 | 
						|
00000110  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 | 
						|
00000120  00 00 00 00 00 00 00 00  00 67 69 74 00 00 00 00  |.........git....|
 | 
						|
00000130  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 | 
						|
00000140  00 00 00 00 00 00 00 00  00 30 30 30 30 30 30 30  |.........0000000|
 | 
						|
00000150  00 30 30 30 30 30 30 30  00 00 00 00 00 00 00 00  |.0000000........|
 | 
						|
00000160  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 | 
						|
00000170  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 | 
						|
00000180  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 | 
						|
00000190  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 | 
						|
000001a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 | 
						|
000001b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 | 
						|
000001c0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 | 
						|
000001d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 | 
						|
000001e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 | 
						|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 | 
						|
00000200  35 32 20 63 6f 6d 6d 65  6e 74 3d 62 31 30 35 30  |52 comment=b1050|
 | 
						|
00000210  32 62 32 32 61 31 32 30  39 64 36 62 34 37 36 33  |2b22a1209d6b4763|
 | 
						|
00000220  39 64 38 38 62 38 31 32  62 32 31 66 62 35 39 34  |9d88b812b21fb594|
 | 
						|
00000230  39 65 34 0a 00 00 00 00  00 00 00 00 00 00 00 00  |9e4.............|
 | 
						|
00000240  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
 | 
						|
...
 |