aboutsummaryrefslogtreecommitdiff
path: root/docs/tar_pax.txt
blob: 8a3f1e7555119ddf054da02a57b899bafa697fb7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
'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  |................|
...