diff options
Diffstat (limited to 'man-pages-posix-2003/man1p/pax.1p')
-rw-r--r-- | man-pages-posix-2003/man1p/pax.1p | 2957 |
1 files changed, 2957 insertions, 0 deletions
diff --git a/man-pages-posix-2003/man1p/pax.1p b/man-pages-posix-2003/man1p/pax.1p new file mode 100644 index 0000000..24e1bbf --- /dev/null +++ b/man-pages-posix-2003/man1p/pax.1p @@ -0,0 +1,2957 @@ +.\" Copyright (c) 2001-2003 The Open Group, All Rights Reserved +.TH "PAX" 1P 2003 "IEEE/The Open Group" "POSIX Programmer's Manual" +.\" pax +.SH PROLOG +This manual page is part of the POSIX Programmer's Manual. +The Linux implementation of this interface may differ (consult +the corresponding Linux manual page for details of Linux behavior), +or the interface may not be implemented on Linux. +.SH NAME +pax \- portable archive interchange +.SH SYNOPSIS +.LP +\fBpax\fP \fB[\fP\fB-cdnv\fP\fB][\fP\fB-H|-L\fP\fB][\fP\fB-f\fP \fIarchive\fP\fB][\fP\fB-s\fP +\fIreplstr\fP\fB]\fP\fB...\fP\fB[\fP\fIpattern\fP\fB...\fP\fB]\fP\fB +.br +.sp +pax -r\fP\fB[\fP\fB-cdiknuv\fP\fB][\fP\fB-H|-L\fP\fB][\fP\fB-f\fP +\fIarchive\fP\fB][\fP\fB-o\fP +\fIoptions\fP\fB]\fP\fB...\fP\fB[\fP\fB-p\fP \fIstring\fP\fB]\fP\fB... +.br +\ \ \ \ \ \ \fP \fB[\fP\fB-s\fP +\fIreplstr\fP\fB]\fP\fB...\fP\fB[\fP\fIpattern\fP\fB...\fP\fB]\fP\fB +.br +.sp +pax -w\fP\fB[\fP\fB-dituvX\fP\fB][\fP\fB-H|-L\fP\fB][\fP\fB-b\fP +\fIblocksize\fP\fB][[\fP\fB-a\fP\fB][\fP\fB-f\fP \fIarchive\fP\fB][\fP\fB-o\fP +\fIoptions\fP\fB]\fP\fB... +.br +\ \ \ \ \ \ \fP \fB[\fP\fB-s\fP \fIreplstr\fP\fB]\fP\fB...\fP\fB[\fP\fB-x\fP +\fIformat\fP\fB][\fP\fIfile\fP\fB...\fP\fB]\fP\fB +.br +.sp +pax -r -w\fP\fB[\fP\fB-diklntuvX\fP\fB][\fP\fB-H|-L\fP\fB][\fP\fB-p\fP +\fIstring\fP\fB]\fP\fB...\fP\fB[\fP\fB-s\fP \fIreplstr\fP\fB]\fP\fB... +.br +\ \ \ \ \ \ \fP \fB[\fP\fIfile\fP\fB...\fP\fB]\fP \fIdirectory\fP\fB +.br +\fP +.SH DESCRIPTION +.LP +The \fIpax\fP utility shall read, write, and write lists of the members +of archive files and copy directory hierarchies. A +variety of archive formats shall be supported; see the \fB-x\fP \fIformat\fP +option. +.LP +The action to be taken depends on the presence of the \fB-r\fP and +\fB-w\fP options. The four combinations of \fB-r\fP and +\fB-w\fP are referred to as the four modes of operation: \fBlist\fP, +\fBread\fP, \fBwrite\fP, and \fBcopy\fP modes, +corresponding respectively to the four forms shown in the SYNOPSIS +section. +.TP 7 +\fBlist\fP +In \fBlist\fP mode (when neither \fB-r\fP nor \fB-w\fP are specified), +\fIpax\fP shall write the names of the members of +the archive file read from the standard input, with pathnames matching +the specified patterns, to standard output. If a named file +is of type directory, the file hierarchy rooted at that file shall +be listed as well. +.TP 7 +\fBread\fP +In \fBread\fP mode (when \fB-r\fP is specified, but \fB-w\fP is not), +\fIpax\fP shall extract the members of the archive +file read from the standard input, with pathnames matching the specified +patterns. If an extracted file is of type directory, the +file hierarchy rooted at that file shall be extracted as well. The +extracted files shall be created performing pathname resolution +with the directory in which \fIpax\fP was invoked as the current working +directory. +.LP +If an attempt is made to extract a directory when the directory already +exists, this shall not be considered an error. If an +attempt is made to extract a FIFO when the FIFO already exists, this +shall not be considered an error. +.LP +The ownership, access, and modification times, and file mode of the +restored files are discussed under the \fB-p\fP option. +.TP 7 +\fBwrite\fP +In \fBwrite\fP mode (when \fB-w\fP is specified, but \fB-r\fP is not), +\fIpax\fP shall write the contents of the +\fIfile\fP operands to the standard output in an archive format. If +no \fIfile\fP operands are specified, a list of files to +copy, one per line, shall be read from the standard input. A file +of type directory shall include all of the files in the file +hierarchy rooted at the file. +.TP 7 +\fBcopy\fP +In \fBcopy\fP mode (when both \fB-r\fP and \fB-w\fP are specified), +\fIpax\fP shall copy the \fIfile\fP operands to the +destination directory. +.LP +If no \fIfile\fP operands are specified, a list of files to copy, +one per line, shall be read from the standard input. A file +of type directory shall include all of the files in the file hierarchy +rooted at the file. +.LP +The effect of the \fBcopy\fP shall be as if the copied files were +written to an archive file and then subsequently extracted, +except that there may be hard links between the original and the copied +files. If the destination directory is a subdirectory of +one of the files to be copied, the results are unspecified. If the +destination directory is a file of a type not defined by the +System Interfaces volume of IEEE\ Std\ 1003.1-2001, the results are +implementation-defined; otherwise, it shall be an error +for the file named by the \fIdirectory\fP operand not to exist, not +be writable by the user, or not be a file of type +directory. +.sp +.LP +In \fBread\fP or \fBcopy\fP modes, if intermediate directories are +necessary to extract an archive member, \fIpax\fP shall +perform actions equivalent to the \fImkdir\fP() function defined in +the System Interfaces +volume of IEEE\ Std\ 1003.1-2001, called with the following arguments: +.IP " *" 3 +The intermediate directory used as the \fIpath\fP argument +.LP +.IP " *" 3 +The value of the bitwise-inclusive OR of S_IRWXU, S_IRWXG, and S_IRWXO +as the \fImode\fP argument +.LP +.LP +If any specified \fIpattern\fP or \fIfile\fP operands are not matched +by at least one file or archive member, \fIpax\fP shall +write a diagnostic message to standard error for each one that did +not match and exit with a non-zero exit status. +.LP +The archive formats described in the EXTENDED DESCRIPTION section +shall be automatically detected on input. The default output +archive format shall be implementation-defined. +.LP +A single archive can span multiple files. The \fIpax\fP utility shall +determine, in an implementation-defined manner, what file +to read or write as the next file. +.LP +If the selected archive format supports the specification of linked +files, it shall be an error if these files cannot be linked +when the archive is extracted. For archive formats that do not store +file contents with each name that causes a hard link, if the +file that contains the data is not extracted during this \fIpax\fP +session, either the data shall be restored from the original +file, or a diagnostic message shall be displayed with the name of +a file that can be used to extract the data. In traversing +directories, \fIpax\fP shall detect infinite loops; that is, entering +a previously visited directory that is an ancestor of the +last file visited. When it detects an infinite loop, \fIpax\fP shall +write a diagnostic message to standard error and shall +terminate. +.SH OPTIONS +.LP +The \fIpax\fP utility shall conform to the Base Definitions volume +of IEEE\ Std\ 1003.1-2001, Section 12.2, Utility Syntax Guidelines, +except that the order of presentation of the +\fB-o\fP, \fB-p\fP, and \fB-s\fP options is significant. +.LP +The following options shall be supported: +.TP 7 +\fB-r\fP +Read an archive file from standard input. +.TP 7 +\fB-w\fP +Write files to the standard output in the specified archive format. +.TP 7 +\fB-a\fP +Append files to the end of the archive. It is implementation-defined +which devices on the system support appending. Additional +file formats unspecified by this volume of IEEE\ Std\ 1003.1-2001 +may impose restrictions on appending. +.TP 7 +\fB-b\ \fP \fIblocksize\fP +Block the output at a positive decimal integer number of bytes per +write to the archive file. Devices and archive formats may +impose restrictions on blocking. Blocking shall be automatically determined +on input. Conforming applications shall not specify a +\fIblocksize\fP value larger than 32256. Default blocking when creating +archives depends on the archive format. (See the \fB-x\fP +option below.) +.TP 7 +\fB-c\fP +Match all file or archive members except those specified by the \fIpattern\fP +or \fIfile\fP operands. +.TP 7 +\fB-d\fP +Cause files of type directory being copied or archived or archive +members of type directory being extracted or listed to match +only the file or archive member itself and not the file hierarchy +rooted at the file. +.TP 7 +\fB-f\ \fP \fIarchive\fP +Specify the pathname of the input or output archive, overriding the +default standard input (in \fBlist\fP or \fBread\fP +modes) or standard output ( \fBwrite\fP mode). +.TP 7 +\fB-H\fP +If a symbolic link referencing a file of type directory is specified +on the command line, \fIpax\fP shall archive the file +hierarchy rooted in the file referenced by the link, using the name +of the link as the root of the file hierarchy. Otherwise, if a +symbolic link referencing a file of any other file type which \fIpax\fP +can normally archive is specified on the command line, +then \fIpax\fP shall archive the file referenced by the link, using +the name of the link. The default behavior shall be to archive +the symbolic link itself. +.TP 7 +\fB-i\fP +Interactively rename files or archive members. For each archive member +matching a \fIpattern\fP operand or file matching a +\fIfile\fP operand, a prompt shall be written to the file \fB/dev/tty\fP. +The prompt shall contain the name of the file or +archive member, but the format is otherwise unspecified. A line shall +then be read from \fB/dev/tty\fP. If this line is blank, the +file or archive member shall be skipped. If this line consists of +a single period, the file or archive member shall be processed +with no modification to its name. Otherwise, its name shall be replaced +with the contents of the line. The \fIpax\fP utility shall +immediately exit with a non-zero exit status if end-of-file is encountered +when reading a response or if \fB/dev/tty\fP cannot be +opened for reading and writing. +.LP +The results of extracting a hard link to a file that has been renamed +during extraction are unspecified. +.TP 7 +\fB-k\fP +Prevent the overwriting of existing files. +.TP 7 +\fB-l\fP +(The letter ell.) In \fBcopy\fP mode, hard links shall be made between +the source and destination file hierarchies whenever +possible. If specified in conjunction with \fB-H\fP or \fB-L\fP, when +a symbolic link is encountered, the hard link created in +the destination file hierarchy shall be to the file referenced by +the symbolic link. If specified when neither \fB-H\fP nor +\fB-L\fP is specified, when a symbolic link is encountered, the implementation +shall create a hard link to the symbolic link in +the source file hierarchy or copy the symbolic link to the destination. +.TP 7 +\fB-L\fP +If a symbolic link referencing a file of type directory is specified +on the command line or encountered during the traversal of +a file hierarchy, \fIpax\fP shall archive the file hierarchy rooted +in the file referenced by the link, using the name of the link +as the root of the file hierarchy. Otherwise, if a symbolic link referencing +a file of any other file type which \fIpax\fP can +normally archive is specified on the command line or encountered during +the traversal of a file hierarchy, \fIpax\fP shall archive +the file referenced by the link, using the name of the link. The default +behavior shall be to archive the symbolic link +itself. +.TP 7 +\fB-n\fP +Select the first archive member that matches each \fIpattern\fP operand. +No more than one archive member shall be matched for +each pattern (although members of type directory shall still match +the file hierarchy rooted at that file). +.TP 7 +\fB-o\ \fP \fIoptions\fP +Provide information to the implementation to modify the algorithm +for extracting or writing files. The value of \fIoptions\fP +shall consist of one or more comma-separated keywords of the form: +.sp +.RS +.nf + +\fIkeyword\fP\fB[[\fP\fB:\fP\fB]\fP\fB=\fP\fIvalue\fP\fB][\fP\fB,\fP\fIkeyword\fP\fB[[\fP\fB:\fP\fB]\fP\fB=\fP\fIvalue\fP\fB]\fP\fB, ...\fP\fB]\fP +.fi +.RE +.LP +Some keywords apply only to certain file formats, as indicated with +each description. Use of keywords that are inapplicable to +the file format being processed produces undefined results. +.LP +Keywords in the \fIoptions\fP argument shall be a string that would +be a valid portable filename as described in the Base +Definitions volume of IEEE\ Std\ 1003.1-2001, Section 3.276, Portable +Filename Character Set. +.TP 7 +\fBNote:\fP +.RS +Keywords are not expected to be filenames, merely to follow the same +character composition rules as portable filenames. +.RE +.sp +.LP +Keywords can be preceded with white space. The \fIvalue\fP field shall +consist of zero or more characters; within \fIvalue\fP, +the application shall precede any literal comma with a backslash, +which shall be ignored, but preserves the comma as part of +\fIvalue\fP. A comma as the final character, or a comma followed solely +by white space as the final characters, in \fIoptions\fP +shall be ignored. Multiple \fB-o\fP options can be specified; if keywords +given to these multiple \fB-o\fP options conflict, the +keywords and values appearing later in command line sequence shall +take precedence and the earlier shall be silently ignored. The +following keyword values of \fIoptions\fP shall be supported for the +file formats as indicated: +.TP 7 +\fBdelete\fP=\fIpattern\fP +.RS +.sp +(Applicable only to the \fB-x\fP \fBpax\fP format.) When used in \fBwrite\fP +or \fBcopy\fP mode, \fIpax\fP shall omit from +extended header records that it produces any keywords matching the +string pattern. When used in \fBread\fP or \fBlist\fP mode, +\fIpax\fP shall ignore any keywords matching the string pattern in +the extended header records. In both cases, matching shall be +performed using the pattern matching notation described in \fIPatterns +Matching a Single +Character\fP and \fIPatterns Matching Multiple Characters\fP . For +example: +.sp +.RS +.nf + +\fB-o\fP \fBdelete\fP\fB=\fP\fIsecurity\fP\fB.* +\fP +.fi +.RE +.LP +would suppress security-related information. See pax Extended Header +for extended header record +keyword usage. +.RE +.TP 7 +\fBexthdr.name\fP=\fIstring\fP +.RS +.sp +(Applicable only to the \fB-x\fP \fBpax\fP format.) This keyword allows +user control over the name that is written into the +\fBustar\fP header blocks for the extended header produced under the +circumstances described in pax +Header Block . The name shall be the contents of \fIstring\fP, after +the following character substitutions have been made: +.TS C +center; l lw(40). +\fB\fIstring\fP\fP T{ +.na +\fB\ \fP +.ad +T} +\fBIncludes:\fP T{ +.na +\fBReplaced By:\fP +.ad +T} +%d T{ +.na +The directory name of the file, equivalent to the result of the \fIdirname\fP utility on the translated pathname. +.ad +T} +%f T{ +.na +The filename of the file, equivalent to the result of the \fIbasename\fP utility on the translated pathname. +.ad +T} +%p T{ +.na +The process ID of the \fIpax\fP process. +.ad +T} +%% T{ +.na +A \fB'%'\fP character. +.ad +T} +.TE +.LP +Any other \fB'%'\fP characters in \fIstring\fP produce undefined results. +.LP +If no \fB-o\fP \fBexthdr.name=\fP \fIstring\fP is specified, \fIpax\fP +shall use the following default value: +.sp +.RS +.nf + +\fB%d/PaxHeaders.%p/%f +\fP +.fi +.RE +.RE +.TP 7 +\fBglobexthdr.name\fP=\fIstring\fP +.RS +.sp +(Applicable only to the \fB-x\fP \fBpax\fP format.) When used in \fBwrite\fP +or \fBcopy\fP mode with the appropriate options, +\fIpax\fP shall create global extended header records with \fBustar\fP +header blocks that will be treated as regular files by +previous versions of \fIpax\fP. This keyword allows user control over +the name that is written into the \fBustar\fP header blocks +for global extended header records. The name shall be the contents +of string, after the following character substitutions have been +made: +.TS C +center; l lw(40). +\fB\fIstring\fP\fP T{ +.na +\fB\ \fP +.ad +T} +\fBIncludes:\fP T{ +.na +\fBReplaced By:\fP +.ad +T} +%n T{ +.na +An integer that represents the sequence number of the global extended header record in the archive, starting at 1. +.ad +T} +%p T{ +.na +The process ID of the \fIpax\fP process. +.ad +T} +%% T{ +.na +A \fB'%'\fP character. +.ad +T} +.TE +.LP +Any other \fB'%'\fP characters in \fIstring\fP produce undefined results. +.LP +If no \fB-o\fP \fBglobexthdr.name=\fP \fIstring\fP is specified, \fIpax\fP +shall use the following default value: +.sp +.RS +.nf + +\fB$TMPDIR/GlobalHead.%p.%n +\fP +.fi +.RE +.LP +where $ \fITMPDIR\fP represents the value of the \fITMPDIR\fP environment +variable. If \fITMPDIR\fP is not set, \fIpax\fP +shall use \fB/tmp\fP. +.RE +.TP 7 +\fBinvalid\fP=\fIaction\fP +.RS +.sp +(Applicable only to the \fB-x\fP \fBpax\fP format.) This keyword allows +user control over the action \fIpax\fP takes upon +encountering values in an extended header record that, in \fBread\fP +or \fBcopy\fP mode, are invalid in the destination hierarchy +or, in \fBlist\fP mode, cannot be written in the codeset and current +locale of the implementation. The following are invalid +values that shall be recognized by \fIpax\fP: +.RS +.IP " *" 3 +In \fBread\fP or \fBcopy\fP mode, a filename or link name that contains +character encodings invalid in the destination +hierarchy. (For example, the name may contain embedded NULs.) +.LP +.IP " *" 3 +In \fBread\fP or \fBcopy\fP mode, a filename or link name that is +longer than the maximum allowed in the destination hierarchy +(for either a pathname component or the entire pathname). +.LP +.IP " *" 3 +In \fBlist\fP mode, any character string value (filename, link name, +user name, and so on) that cannot be written in the +codeset and current locale of the implementation. +.LP +.RE +.LP +The following mutually-exclusive values of the \fIaction\fP argument +are supported: +.TP 7 +\fBbypass\fP +.RS +In \fBread\fP or \fBcopy\fP mode, \fIpax\fP shall bypass the file, +causing no change to the destination hierarchy. In +\fBlist\fP mode, \fIpax\fP shall write all requested valid values +for the file, but its method for writing invalid values is +unspecified. +.RE +.TP 7 +\fBrename\fP +.RS +In \fBread\fP or \fBcopy\fP mode, \fIpax\fP shall act as if the \fB-i\fP +option were in effect for each file with invalid +filename or link name values, allowing the user to provide a replacement +name interactively. In \fBlist\fP mode, \fIpax\fP shall +behave identically to the \fBbypass\fP action. +.RE +.TP 7 +\fBUTF-8\fP +.RS +When used in \fBread\fP, \fBcopy\fP, or \fBlist\fP mode and a filename, +link name, owner name, or any other field in an +extended header record cannot be translated from the \fBpax\fP UTF-8 +codeset format to the codeset and current locale of the +implementation, \fIpax\fP shall use the actual UTF-8 encoding for +the name. +.RE +.TP 7 +\fBwrite\fP +.RS +In \fBread\fP or \fBcopy\fP mode, \fIpax\fP shall write the file, +translating or truncating the name, regardless of whether +this may overwrite an existing file with a valid name. In \fBlist\fP +mode, \fIpax\fP shall behave identically to the +\fBbypass\fP action. +.RE +.sp +.LP +If no \fB-o\fP \fBinvalid=\fP option is specified, \fIpax\fP shall +act as if \fB-o\fP \fBinvalid=\fP \fBbypass\fP were +specified. Any overwriting of existing files that may be allowed by +the \fB-o\fP \fBinvalid=\fP actions shall be subject to +permission ( \fB-p\fP) and modification time ( \fB-u\fP) restrictions, +and shall be suppressed if the \fB-k\fP option is also +specified. +.RE +.TP 7 +\fBlinkdata\fP +.RS +.sp +(Applicable only to the \fB-x\fP \fBpax\fP format.) In \fBwrite\fP +mode, \fIpax\fP shall write the contents of a file to the +archive even when that file is merely a hard link to a file whose +contents have already been written to the archive. +.RE +.TP 7 +\fBlistopt\fP=\fIformat\fP +.RS +.sp +This keyword specifies the output format of the table of contents +produced when the \fB-v\fP option is specified in \fBlist\fP +mode. See List Mode Format Specifications . To avoid ambiguity, the +\fBlistopt=\fP \fIformat\fP +shall be the only or final \fBkeyword=\fP \fIvalue\fP pair in a \fB-o\fP +option-argument; all characters in the remainder of the +option-argument shall be considered part of the format string. When +multiple \fB-o\fP \fBlistopt=\fP \fIformat\fP options are +specified, the format strings shall be considered a single, concatenated +string, evaluated in command line order. +.RE +.TP 7 +\fBtimes\fP +.RS +.sp +(Applicable only to the \fB-x\fP \fIpax\fP format.) When used in \fBwrite\fP +or \fBcopy\fP mode, \fIpax\fP shall include +\fBatime\fP, \fBctime\fP, and \fBmtime\fP extended header records +for each file. See pax Extended +Header File Times . +.RE +.sp +.LP +In addition to these keywords, if the \fB-x\fP \fIpax\fP format is +specified, any of the keywords and values defined in pax Extended +Header, including implementation extensions, can be used in \fB-o\fP +option-arguments, +in either of two modes: +.TP 7 +\fBkeyword\fP=\fIvalue\fP +.RS +.sp +When used in \fBwrite\fP or \fBcopy\fP mode, these keyword/value pairs +shall be included at the beginning of the archive as +\fBtypeflag\fP \fBg\fP global extended header records. When used in +\fBread\fP or \fBlist\fP mode, these keyword/value pairs +shall act as if they had been at the beginning of the archive as \fBtypeflag\fP +\fBg\fP global extended header records. +.RE +.TP 7 +\fBkeyword\fP:=\fIvalue\fP +.RS +.sp +When used in \fBwrite\fP or \fBcopy\fP mode, these keyword/value pairs +shall be included as records at the beginning of a +\fBtypeflag\fP \fBx\fP extended header for each file. (This shall +be equivalent to the equal-sign form except that it creates no +\fBtypeflag\fP \fBg\fP global extended header records.) When used +in \fBread\fP or \fBlist\fP mode, these keyword/value pairs +shall act as if they were included as records at the end of each extended +header; thus, they shall override any global or +file-specific extended header record keywords of the same names. For +example, in the command: +.sp +.RS +.nf + +\fBpax -r -o " +gname:=mygroup, +" <archive +\fP +.fi +.RE +.LP +the group name will be forced to a new value for all files read from +the archive. +.RE +.sp +.LP +The precedence of \fB-o\fP keywords over various fields in the archive +is described in pax Extended +Header Keyword Precedence . +.TP 7 +\fB-p\ \fP \fIstring\fP +Specify one or more file characteristic options (privileges). The +\fIstring\fP option-argument shall be a string specifying +file characteristics to be retained or discarded on extraction. The +string shall consist of the specification characters \fBa\fP, +\fBe\fP, \fBm\fP, \fBo\fP, and \fBp\fP . Other implementation-defined +characters can be included. Multiple +characteristics can be concatenated within the same string and multiple +\fB-p\fP options can be specified. The meaning of the +specification characters are as follows: +.TP 7 +\fBa\fP +.RS +Do not preserve file access times. +.RE +.TP 7 +\fBe\fP +.RS +Preserve the user ID, group ID, file mode bits (see the Base Definitions +volume of IEEE\ Std\ 1003.1-2001, Section 3.168, File Mode Bits), +access time, modification time, and any other +implementation-defined file characteristics. +.RE +.TP 7 +\fBm\fP +.RS +Do not preserve file modification times. +.RE +.TP 7 +\fBo\fP +.RS +Preserve the user ID and group ID. +.RE +.TP 7 +\fBp\fP +.RS +Preserve the file mode bits. Other implementation-defined file mode +attributes may be preserved. +.RE +.sp +.LP +In the preceding list, "preserve" indicates that an attribute stored +in the archive shall be given to the extracted file, +subject to the permissions of the invoking process. The access and +modification times of the file shall be preserved unless +otherwise specified with the \fB-p\fP option or not stored in the +archive. All attributes that are not preserved shall be +determined as part of the normal file creation action (see \fIFile +Read, Write, and +Creation\fP ). +.LP +If neither the \fBe\fP nor the \fBo\fP specification character is +specified, or the user ID and group ID are not preserved +for any reason, \fIpax\fP shall not set the S_ISUID and S_ISGID bits +of the file mode. +.LP +If the preservation of any of these items fails for any reason, \fIpax\fP +shall write a diagnostic message to standard error. +Failure to preserve these items shall affect the final exit status, +but shall not cause the extracted file to be deleted. +.LP +If file characteristic letters in any of the \fIstring\fP option-arguments +are duplicated or conflict with each other, the ones +given last shall take precedence. For example, if \fB-p\fP \fBeme\fP +is specified, file modification times are preserved. +.TP 7 +\fB-s\ \fP \fIreplstr\fP +Modify file or archive member names named by \fIpattern\fP or \fIfile\fP +operands according to the substitution expression +\fIreplstr\fP, using the syntax of the \fIed\fP utility. The concepts +of "address" and +"line" are meaningless in the context of the \fIpax\fP utility, and +shall not be supplied. The format shall be: +.sp +.RS +.nf + +\fB-s /\fP\fIold\fP\fB/\fP\fInew\fP\fB/\fP\fB[\fP\fBgp\fP\fB]\fP +.fi +.RE +.LP +where as in \fIed\fP, \fIold\fP is a basic regular expression and +\fInew\fP can contain an +ampersand, \fB'\\n'\fP (where \fIn\fP is a digit) backreferences, +or subexpression matching. The \fIold\fP string shall also be +permitted to contain <newline>s. +.LP +Any non-null character can be used as a delimiter ( \fB'/'\fP shown +here). Multiple \fB-s\fP expressions can be specified; +the expressions shall be applied in the order specified, terminating +with the first successful substitution. The optional trailing +\fB'g'\fP is as defined in the \fIed\fP utility. The optional trailing +\fB'p'\fP shall +cause successful substitutions to be written to standard error. File +or archive member names that substitute to the empty string +shall be ignored when reading and writing archives. +.TP 7 +\fB-t\fP +When reading files from the file system, and if the user has the permissions +required by \fIutime\fP() to do so, set the access time of each file +read to the access time that it had before +being read by \fIpax\fP. +.TP 7 +\fB-u\fP +Ignore files that are older (having a less recent file modification +time) than a pre-existing file or archive member with the +same name. In \fBread\fP mode, an archive member with the same name +as a file in the file system shall be extracted if the archive +member is newer than the file. In \fBwrite\fP mode, an archive file +member with the same name as a file in the file system shall +be superseded if the file is newer than the archive member. If \fB-a\fP +is also specified, this is accomplished by appending to +the archive; otherwise, it is unspecified whether this is accomplished +by actual replacement in the archive or by appending to the +archive. In \fBcopy\fP mode, the file in the destination hierarchy +shall be replaced by the file in the source hierarchy or by a +link to the file in the source hierarchy if the file in the source +hierarchy is newer. +.TP 7 +\fB-v\fP +In \fBlist\fP mode, produce a verbose table of contents (see the STDOUT +section). Otherwise, write archive member pathnames to +standard error (see the STDERR section). +.TP 7 +\fB-x\ \fP \fIformat\fP +Specify the output archive format. The \fIpax\fP utility shall support +the following formats: +.TP 7 +\fBcpio\fP +.RS +The \fBcpio\fP interchange format; see the EXTENDED DESCRIPTION section. +The default \fIblocksize\fP for this format for +character special archive files shall be 5120. Implementations shall +support all \fIblocksize\fP values less than or equal to +32256 that are multiples of 512. +.RE +.TP 7 +\fBpax\fP +.RS +The \fBpax\fP interchange format; see the EXTENDED DESCRIPTION section. +The default \fIblocksize\fP for this format for +character special archive files shall be 5120. Implementations shall +support all \fIblocksize\fP values less than or equal to +32256 that are multiples of 512. +.RE +.TP 7 +\fBustar\fP +.RS +The \fBtar\fP interchange format; see the EXTENDED DESCRIPTION section. +The default \fIblocksize\fP for this format for +character special archive files shall be 10240. Implementations shall +support all \fIblocksize\fP values less than or equal to +32256 that are multiples of 512. +.RE +.sp +.LP +Implementation-defined formats shall specify a default block size +as well as any other block sizes supported for character +special archive files. +.LP +Any attempt to append to an archive file in a format different from +the existing archive format shall cause \fIpax\fP to exit +immediately with a non-zero exit status. +.LP +In \fBcopy\fP mode, if no \fB-x\fP format is specified, \fIpax\fP +shall behave as if \fB-x\fP \fIpax\fP were specified. +.TP 7 +\fB-X\fP +When traversing the file hierarchy specified by a pathname, \fIpax\fP +shall not descend into directories that have a different +device ID ( \fIst_dev\fP; see the System Interfaces volume of IEEE\ Std\ 1003.1-2001, +\fIstat\fP()). +.sp +.LP +The options that operate on the names of files or archive members +( \fB-c\fP, \fB-i\fP, \fB-n\fP, \fB-s\fP, \fB-u\fP, and +\fB-v\fP) shall interact as follows. In \fBread\fP mode, the archive +members shall be selected based on the user-specified +\fIpattern\fP operands as modified by the \fB-c\fP, \fB-n\fP, and +\fB-u\fP options. Then, any \fB-s\fP and \fB-i\fP options +shall modify, in that order, the names of the selected files. The +\fB-v\fP option shall write names resulting from these +modifications. +.LP +In \fBwrite\fP mode, the files shall be selected based on the user-specified +pathnames as modified by the \fB-n\fP and +\fB-u\fP options. Then, any \fB-s\fP and \fB-i\fP options shall modify, +in that order, the names of these selected files. The +\fB-v\fP option shall write names resulting from these modifications. +.LP +If both the \fB-u\fP and \fB-n\fP options are specified, \fIpax\fP +shall not consider a file selected unless it is newer than +the file to which it is compared. +.SS List Mode Format Specifications +.LP +In \fBlist\fP mode with the \fB-o\fP \fBlistopt=\fP \fIformat\fP option, +the \fIformat\fP argument shall be applied for +each selected file. The \fIpax\fP utility shall append a <newline> +to the \fBlistopt\fP output for each selected file. The +\fIformat\fP argument shall be used as the \fIformat\fP string described +in the Base Definitions volume of +IEEE\ Std\ 1003.1-2001, Chapter 5, File Format Notation, with the +exceptions 1. +through 5. defined in the EXTENDED DESCRIPTION section of \fIprintf\fP, +plus the following +exceptions: +.TP 7 +6. +The sequence ( \fIkeyword\fP) can occur before a format conversion +specifier. The conversion argument is defined by the value +of \fIkeyword\fP. The implementation shall support the following keywords: +.RS +.IP " *" 3 +Any of the Field Name entries in ustar Header Block and Octet-Oriented +cpio +Archive Entry . The implementation may support the \fIcpio\fP keywords +without the leading \fBc_\fP in addition to the form +required by Values for cpio c_mode Field . +.LP +.IP " *" 3 +Any keyword defined for the extended header in pax Extended Header +\&. +.LP +.IP " *" 3 +Any keyword provided as an implementation-defined extension within +the extended header defined in pax Extended Header . +.LP +.RE +.LP +For example, the sequence \fB"%(charset)s"\fP is the string value +of the name of the character set in the extended +header. +.LP +The result of the keyword conversion argument shall be the value from +the applicable header field or extended header, without +any trailing NULs. +.LP +All keyword values used as conversion arguments shall be translated +from the UTF-8 encoding to the character set appropriate for +the local file system, user database, and so on, as applicable. +.TP 7 +7. +An additional conversion specifier character, \fBT\fP, shall be used +to specify time formats. The \fBT\fP conversion +specifier character can be preceded by the sequence ( \fIkeyword=\fP +\fIsubformat\fP), where \fIsubformat\fP is a date format as +defined by \fIdate\fP operands. The default \fIkeyword\fP shall be +\fBmtime\fP and the +default subformat shall be: +.sp +.RS +.nf + +\fB%b %e %H:%M %Y +\fP +.fi +.RE +.TP 7 +8. +An additional conversion specifier character, \fBM\fP, shall be used +to specify the file mode string as defined in \fIls\fP Standard Output. +If ( \fIkeyword\fP) is omitted, the \fBmode\fP keyword shall be used. +For +example, \fB%.1M\fP writes the single character corresponding to the +<\fIentry\ type\fP> field of the \fIls\fP \fB-l\fP command. +.TP 7 +9. +An additional conversion specifier character, \fBD\fP, shall be used +to specify the device for block or special files, if +applicable, in an implementation-defined format. If not applicable, +and ( \fIkeyword\fP) is specified, then this conversion shall +be equivalent to \fB%(\fP\fIkeyword\fP\fB)u\fP. If not applicable, +and ( \fIkeyword\fP) is omitted, then this conversion +shall be equivalent to <space>. +.TP 7 +10. +An additional conversion specifier character, \fBF\fP, shall be used +to specify a pathname. The \fBF\fP conversion +character can be preceded by a sequence of comma-separated keywords: +.sp +.RS +.nf + +\fB(\fP\fIkeyword\fP\fB[\fP\fB,\fP\fIkeyword\fP\fB]\fP \fB... ) +\fP +.fi +.RE +.LP +The values for all the keywords that are non-null shall be concatenated +together, each separated by a \fB'/'\fP . The default +shall be ( \fBpath\fP) if the keyword \fBpath\fP is defined; otherwise, +the default shall be ( \fBprefix\fP, \fBname\fP). +.TP 7 +11. +An additional conversion specifier character, \fBL\fP, shall be used +to specify a symbolic line expansion. If the current +file is a symbolic link, then \fB%L\fP shall expand to: +.sp +.RS +.nf + +\fB"%s -> %s", <\fP\fIvalue of keyword\fP\fB>, <\fP\fIcontents of link\fP\fB> +\fP +.fi +.RE +.LP +Otherwise, the \fB%L\fP conversion specification shall be the equivalent +of \fB%F\fP . +.sp +.SH OPERANDS +.LP +The following operands shall be supported: +.TP 7 +\fIdirectory\fP +The destination directory pathname for \fBcopy\fP mode. +.TP 7 +\fIfile\fP +A pathname of a file to be copied or archived. +.TP 7 +\fIpattern\fP +A pattern matching one or more pathnames of archive members. A pattern +must be given in the name-generating notation of the +pattern matching notation in \fIPattern Matching Notation\fP, including +the filename +expansion rules in \fIPatterns Used for Filename Expansion\fP . The +default, if no +\fIpattern\fP is specified, is to select all members in the archive. +.sp +.SH STDIN +.LP +In \fBwrite\fP mode, the standard input shall be used only if no \fIfile\fP +operands are specified. It shall be a text file +containing a list of pathnames, one per line, without leading or trailing +<blank>s. +.LP +In \fBlist\fP and \fBread\fP modes, if \fB-f\fP is not specified, +the standard input shall be an archive file. +.LP +Otherwise, the standard input shall not be used. +.SH INPUT FILES +.LP +The input file named by the \fIarchive\fP option-argument, or standard +input when the archive is read from there, shall be a +file formatted according to one of the specifications in the EXTENDED +DESCRIPTION section or some other implementation-defined +format. +.LP +The file \fB/dev/tty\fP shall be used to write prompts and read responses. +.SH ENVIRONMENT VARIABLES +.LP +The following environment variables shall affect the execution of +\fIpax\fP: +.TP 7 +\fILANG\fP +Provide a default value for the internationalization variables that +are unset or null. (See the Base Definitions volume of +IEEE\ Std\ 1003.1-2001, Section 8.2, Internationalization Variables +for +the precedence of internationalization variables used to determine +the values of locale categories.) +.TP 7 +\fILC_ALL\fP +If set to a non-empty string value, override the values of all the +other internationalization variables. +.TP 7 +\fILC_COLLATE\fP +.sp +Determine the locale for the behavior of ranges, equivalence classes, +and multi-character collating elements used in the pattern +matching expressions for the \fIpattern\fP operand, the basic regular +expression for the \fB-s\fP option, and the extended +regular expression defined for the \fByesexpr\fP locale keyword in +the \fILC_MESSAGES\fP category. +.TP 7 +\fILC_CTYPE\fP +Determine the locale for the interpretation of sequences of bytes +of text data as characters (for example, single-byte as +opposed to multi-byte characters in arguments and input files), the +behavior of character classes used in the extended regular +expression defined for the \fByesexpr\fP locale keyword in the \fILC_MESSAGES\fP +category, and pattern matching. +.TP 7 +\fILC_MESSAGES\fP +Determine the locale for the processing of affirmative responses that +should be used to affect the format and contents of +diagnostic messages written to standard error. +.TP 7 +\fILC_TIME\fP +Determine the format and contents of date and time strings when the +\fB-v\fP option is specified. +.TP 7 +\fINLSPATH\fP +Determine the location of message catalogs for the processing of \fILC_MESSAGES +\&.\fP +.TP 7 +\fITMPDIR\fP +Determine the pathname that provides part of the default global extended +header record file, as described for the \fB-o\fP +\fBglobexthdr=\fP keyword in the OPTIONS section. +.TP 7 +\fITZ\fP +Determine the timezone used to calculate date and time strings when +the \fB-v\fP option is specified. If \fITZ\fP is unset or +null, an unspecified default timezone shall be used. +.sp +.SH ASYNCHRONOUS EVENTS +.LP +Default. +.SH STDOUT +.LP +In \fBwrite\fP mode, if \fB-f\fP is not specified, the standard output +shall be the archive formatted according to one of the +specifications in the EXTENDED DESCRIPTION section, or some other +implementation-defined format (see \fB-x\fP \fIformat\fP). +.LP +In \fBlist\fP mode, when the \fB-o\fP \fBlistopt\fP= \fIformat\fP +has been specified, the selected archive members shall be +written to standard output using the format described under List Mode +Format Specifications . In +\fBlist\fP mode without the \fB-o\fP \fBlistopt\fP= \fIformat\fP option, +the table of contents of the selected archive members +shall be written to standard output using the following format: +.sp +.RS +.nf + +\fB"%s\\n", <\fP\fIpathname\fP\fB> +\fP +.fi +.RE +.LP +If the \fB-v\fP option is specified in \fBlist\fP mode, the table +of contents of the selected archive members shall be written +to standard output using the following formats. +.LP +For pathnames representing hard links to previous members of the archive: +.sp +.RS +.nf + +\fB"%s == %s\\n", <\fP\fIls\fP \fB-l\fP \fIlisting\fP\fB>, <\fP\fIlinkname\fP\fB> +\fP +.fi +.RE +.LP +For all other pathnames: +.sp +.RS +.nf + +\fB"%s\\n", <\fP\fIls\fP \fB-l\fP \fIlisting\fP\fB> +\fP +.fi +.RE +.LP +where <\fIls\ \fP -l\ \fIlisting\fP> shall be the format specified +by the \fIls\fP utility with the \fB-l\fP option. When writing pathnames +in this format, it is unspecified +what is written for fields for which the underlying archive format +does not have the correct information, although the correct +number of <blank>-separated fields shall be written. +.LP +In \fBlist\fP mode, standard output shall not be buffered more than +a line at a time. +.SH STDERR +.LP +If \fB-v\fP is specified in \fBread\fP, \fBwrite\fP, or \fBcopy\fP +modes, \fIpax\fP shall write the pathnames it processes +to the standard error output using the following format: +.sp +.RS +.nf + +\fB"%s\\n", <\fP\fIpathname\fP\fB> +\fP +.fi +.RE +.LP +These pathnames shall be written as soon as processing is begun on +the file or archive member, and shall be flushed to standard +error. The trailing <newline>, which shall not be buffered, is written +when the file has been read or written. +.LP +If the \fB-s\fP option is specified, and the replacement string has +a trailing \fB'p'\fP, substitutions shall be written to +standard error in the following format: +.sp +.RS +.nf + +\fB"%s >> %s\\n", <\fP\fIoriginal pathname\fP\fB>, <\fP\fInew pathname\fP\fB> +\fP +.fi +.RE +.LP +In all operating modes of \fIpax\fP, optional messages of unspecified +format concerning the input archive format and volume +number, the number of files, blocks, volumes, and media parts as well +as other diagnostic messages may be written to standard +error. +.LP +In all formats, for both standard output and standard error, it is +unspecified how non-printable characters in pathnames or link +names are written. +.LP +When \fIpax\fP is in \fBread\fP mode or \fBlist\fP mode, using the +\fB-x\fP \fBpax\fP archive format, and a filename, link +name, owner name, or any other field in an extended header record +cannot be translated from the \fBpax\fP UTF-8 codeset format to +the codeset and current locale of the implementation, \fIpax\fP shall +write a diagnostic message to standard error, shall process +the file as described for the \fB-o\fP \fBinvalid=\fP option, and +then shall process the next file in the archive. +.SH OUTPUT FILES +.LP +In \fBread\fP mode, the extracted output files shall be of the archived +file type. In \fBcopy\fP mode, the copied output files +shall be the type of the file being copied. In either mode, existing +files in the destination hierarchy shall be overwritten only +when all permission ( \fB-p\fP), modification time ( \fB-u\fP), and +invalid-value ( \fB-o\fP \fBinvalid\fP=) tests allow +it. +.LP +In \fBwrite\fP mode, the output file named by the \fB-f\fP option-argument +shall be a file formatted according to one of the +specifications in the EXTENDED DESCRIPTION section, or some other +implementation-defined format. +.SH EXTENDED DESCRIPTION +.SS pax Interchange Format +.LP +A \fIpax\fP archive tape or file produced in the \fB-x\fP \fBpax\fP +format shall contain a series of blocks. The physical +layout of the archive shall be identical to the \fBustar\fP format +described in ustar Interchange +Format . Each file archived shall be represented by the following +sequence: +.IP " *" 3 +An optional header block with extended header records. This header +block is of the form described in pax Header Block, with a \fItypeflag\fP +value of \fBx\fP or \fBg\fP. The extended header records, +described in pax Extended Header, shall be included as the data for +this header block. +.LP +.IP " *" 3 +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. +.LP +.IP " *" 3 +Zero or more blocks that contain the contents of the file. +.LP +.LP +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. +.LP +A schematic of an example archive with global extended header records +and two actual files is shown in 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. +.TP 7 +.sp +.sp +.ce 1 +\fBFigure: pax Format Archive Example\fP +.SS pax Header Block +.LP +The \fBpax\fP header block shall be identical to the \fBustar\fP header +block described in ustar +Interchange Format, except that two additional \fItypeflag\fP values +are defined: +.TP 7 +\fBx\fP +Represents extended header records for the following file in the archive +(which shall have its own \fBustar\fP header block). +The format of these extended header records shall be as described +in pax Extended Header . +.TP 7 +\fBg\fP +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 \fItypeflag\fP \fBg\fP +global headers should not be used with interchange media +that could suffer partial data loss in transporting the archive. +.sp +.LP +For both of these types, the \fIsize\fP 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 \fIpax\fP +utility. However, if this archive is read by a \fIpax\fP +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. +.LP +A further difference from the \fBustar\fP header block is that data +blocks for files of \fItypeflag\fP 1 (the digit one) (hard +link) may be included, which means that the size field may be greater +than zero. Archives created by \fIpax\fP \fB-o\fP +\fBlinkdata\fP shall include these data blocks with the hard links. +.SS pax Extended Header +.LP +A \fBpax\fP extended header contains values that are inappropriate +for the \fBustar\fP 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 \fBustar\fP header, +and fields whose format or length do not fit the +requirements of the \fBustar\fP header. The values in an extended +header add attributes to the following file (or files; see the +description of the \fItypeflag\fP \fBg\fP header block) or override +values in the following header block(s), as indicated in the +following list of keywords. +.LP +An extended header shall consist of one or more records, each constructed +as follows: +.sp +.RS +.nf + +\fB"%d %s=%s\\n", <\fP\fIlength\fP\fB>, <\fP\fIkeyword\fP\fB>, <\fP\fIvalue\fP\fB> +\fP +.fi +.RE +.LP +The extended header records shall be encoded according to the ISO/IEC\ 10646-1:2000 +standard (UTF-8). The +<\fIlength\fP> field, <blank>, equals sign, and <newline> shown shall +be limited to the portable character set, +as encoded in UTF-8. The <\fIkeyword\fP> and <\fIvalue\fP> fields +can be any UTF-8 characters. The +<\fIlength\fP> field shall be the decimal length of the extended header +record in octets, including the trailing +<newline>. +.LP +The <\fIkeyword\fP> 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 \fItypeflag\fP +\fBx\fP extended header, but possibly multiple files +after \fItypeflag\fP \fBg\fP. Any requirements in the list for \fIpax\fP +to include a record when in \fBwrite\fP or \fBcopy\fP +mode shall apply only when such a record has not already been provided +through the use of the \fB-o\fP option. When used in +\fBcopy\fP mode, \fIpax\fP shall behave as if an archive had been +created with applicable extended header records and then +extracted.) +.TP 7 +\fBatime\fP +The file access time for the following file(s), equivalent to the +value of the \fIst_atime\fP member of the \fBstat\fP +structure for a file, as described by the \fIstat\fP() function. The +access time shall be +restored if the process has the appropriate privilege required to +do so. The format of the <\fIvalue\fP> shall be as +described in pax Extended Header File Times . +.TP 7 +\fBcharset\fP +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. +.TS C +center; l2 l. +\fB<value>\fP \fBFormal Standard\fP +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. +.TE +.LP +The encoding is included in an extended header for information only; +when \fIpax\fP is used as described in +IEEE\ Std\ 1003.1-2001, it shall not translate the file data into +any other encoding. The \fBBINARY\fP entry indicates +unencoded binary data. +.LP +When used in \fBwrite\fP or \fBcopy\fP mode, it is implementation-defined +whether \fIpax\fP includes a \fBcharset\fP +extended header record for a file. +.TP 7 +\fBcomment\fP +A series of characters used as a comment. All characters in the <\fIvalue\fP> +field shall be ignored by \fIpax\fP. +.TP 7 +\fBctime\fP +The file creation time for the following file(s), equivalent to the +value of the \fIst_ctime\fP member of the \fBstat\fP +structure for a file, as described by the \fIstat\fP() function. The +creation time shall be +restored if the process has the appropriate privilege required to +do so. The format of the <\fIvalue\fP> shall be as +described in pax Extended Header File Times . +.TP 7 +\fBgid\fP +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 \fIgid\fP field in the following +header block(s). When used in \fBwrite\fP or +\fBcopy\fP mode, \fIpax\fP shall include a \fIgid\fP extended header +record for each file whose group ID is greater than 2097151 +(octal 7777777). +.TP 7 +\fBgname\fP +The group of the file(s), formatted as a group name in the group database. +This record shall override the \fIgid\fP and +\fIgname\fP fields in the following header block(s), and any \fIgid\fP +extended header record. When used in \fBread\fP, +\fBcopy\fP, or \fBlist\fP mode, \fIpax\fP 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 +\fB-o\fP \fBinvalid=\fP UTF-8 option is not specified, the results +are implementation-defined. When used in \fBwrite\fP or +\fBcopy\fP mode, \fIpax\fP shall include a \fBgname\fP extended header +record for each file whose group name cannot be +represented entirely with the letters and digits of the portable character +set. +.TP 7 +\fBlinkpath\fP +The pathname of a link being created to another file, of any type, +previously archived. This record shall override the +\fIlinkname\fP field in the following \fBustar\fP header block(s). +The following \fBustar\fP header block shall determine the +type of link created. If \fItypeflag\fP of the following header block +is 1, it shall be a hard link. If \fItypeflag\fP is 2, it +shall be a symbolic link and the \fBlinkpath\fP value shall be the +contents of the symbolic link. The \fIpax\fP 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 \fBwrite\fP or \fBcopy\fP mode, \fIpax\fP +shall include a \fBlinkpath\fP extended header record +for each link whose pathname cannot be represented entirely with the +members of the portable character set other than NUL. +.TP 7 +\fBmtime\fP +The file modification time of the following file(s), equivalent to +the value of the \fIst_mtime\fP member of the \fBstat\fP +structure for a file, as described in the \fIstat\fP() function. This +record shall override +the \fImtime\fP 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 <\fIvalue\fP> shall +be as described in pax +Extended Header File Times . +.TP 7 +\fBpath\fP +The pathname of the following file(s). This record shall override +the \fIname\fP and \fIprefix\fP fields in the following +header block(s). The \fIpax\fP utility shall translate the pathname +of the file from the UTF-8 encoding to the character set +appropriate for the local file system. +.LP +When used in \fBwrite\fP or \fBcopy\fP mode, \fIpax\fP shall include +a \fIpath\fP extended header record for each file whose +pathname cannot be represented entirely with the members of the portable +character set other than NUL. +.TP 7 +\fBrealtime.\fP\fIany\fP +The keywords prefixed by "realtime." are reserved for future standardization. +.TP 7 +\fBsecurity.\fP\fIany\fP +The keywords prefixed by "security." are reserved for future standardization. +.TP 7 +\fBsize\fP +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 \fIsize\fP field in the following header block(s). +When used in \fBwrite\fP or \fBcopy\fP mode, \fIpax\fP +shall include a \fIsize\fP extended header record for each file with +a size value greater than 8589934591 (octal +77777777777). +.TP 7 +\fBuid\fP +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 \fIuid\fP field in the following header block(s). +When used in \fBwrite\fP or \fBcopy\fP mode, \fIpax\fP +shall include a \fIuid\fP extended header record for each file whose +owner ID is greater than 2097151 (octal 7777777). +.TP 7 +\fBuname\fP +The owner of the following file(s), formatted as a user name in the +user database. This record shall override the \fIuid\fP +and \fIuname\fP fields in the following header block(s), and any \fIuid\fP +extended header record. When used in \fBread\fP, +\fBcopy\fP, or \fBlist\fP mode, \fIpax\fP 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 +\fB-o\fP \fBinvalid=\fP UTF-8 option is not specified, the results +are implementation-defined. When used in \fBwrite\fP or +\fBcopy\fP mode, \fIpax\fP shall include a \fBuname\fP extended header +record for each file whose user name cannot be +represented entirely with the letters and digits of the portable character +set. +.sp +.LP +If the <\fIvalue\fP> 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. +.LP +If a keyword in an extended header record (or in a \fB-o\fP option-argument) +overrides or deletes a corresponding field in the +\fBustar\fP header block, \fIpax\fP shall ignore the contents of that +header block field. +.LP +Unlike the \fBustar\fP header block fields, NULs shall not delimit +<\fIvalue\fP>s; all characters within the +<\fIvalue\fP> field shall be considered data for the field. None of +the length limitations of the \fBustar\fP header block +fields in ustar Header Block shall apply to the extended header records. +.SS pax Extended Header Keyword Precedence +.LP +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 \fIpax\fP is used in \fBread\fP +or \fBlist\fP modes, it shall determine a file attribute in +the following sequence: +.IP " 1." 4 +If \fB-o\fP \fBdelete=\fP \fIkeyword-prefix\fP is used, the affected +attributes shall be determined from step 7., if +applicable, or ignored otherwise. +.LP +.IP " 2." 4 +If \fB-o\fP \fIkeyword\fP:= is used, the affected attributes shall +be ignored. +.LP +.IP " 3." 4 +If \fB-o\fP \fIkeyword\fP \fB:=\fP \fIvalue\fP is used, the affected +attribute shall be assigned the value. +.LP +.IP " 4." 4 +If there is a \fItypeflag\fP \fBx\fP extended header record, the affected +attribute shall be assigned the +<\fIvalue\fP>. When extended header records conflict, the last one +given in the header shall take precedence. +.LP +.IP " 5." 4 +If \fB-o\fP \fIkeyword\fP \fB=\fP \fIvalue\fP is used, the affected +attribute shall be assigned the value. +.LP +.IP " 6." 4 +If there is a \fItypeflag\fP \fBg\fP global extended header record, +the affected attribute shall be assigned the +<\fIvalue\fP>. When global extended header records conflict, the last +one given in the global header shall take +precedence. +.LP +.IP " 7." 4 +Otherwise, the attribute shall be determined from the \fBustar\fP +header block. +.LP +.SS pax Extended Header File Times +.LP +The \fIpax\fP utility shall write an \fBmtime\fP record for each file +in \fBwrite\fP or \fBcopy\fP modes if the file's +modification time cannot be represented exactly in the \fBustar\fP +header logical record described in ustar Interchange Format . This +can occur if the time is out of \fBustar\fP 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 ( \fB'.'\fP ) 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 \fBread\fP or \fBcopy\fP mode, +the \fIpax\fP utility shall truncate the time of a file to the greatest +value that is not greater than the input header file time. +In \fBwrite\fP or \fBcopy\fP mode, the \fIpax\fP 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. +.SS ustar Interchange Format +.LP +A \fBustar\fP 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. +.LP +The logical records may be grouped for physical I/O operations, as +described under the \fB-b\fP \fIblocksize\fP and \fB-x\fP +\fBustar\fP options. Each group of logical records may be written +with a single operation equivalent to the \fIwrite\fP() 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. +.LP +The header logical record shall be structured as shown in the following +table. All lengths and offsets are in decimal. +.br +.sp +.ce 1 +\fBTable: ustar Header Block\fP +.TS C +center; l l l. +\fBField Name\fP \fBOctet Offset\fP \fBLength (in Octets)\fP +\fIname\fP 0 100 +\fImode\fP 100 8 +\fIuid\fP 108 8 +\fIgid\fP 116 8 +\fIsize\fP 124 12 +\fImtime\fP 136 12 +\fIchksum\fP 148 8 +\fItypeflag\fP 156 1 +\fIlinkname\fP 157 100 +\fImagic\fP 257 6 +\fIversion\fP 263 2 +\fIuname\fP 265 32 +\fIgname\fP 297 32 +\fIdevmajor\fP 329 8 +\fIdevminor\fP 337 8 +\fIprefix\fP 345 155 +.TE +.LP +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. +.LP +However, the \fIpax\fP utility shall never create filenames on the +local system that cannot be accessed via the procedures +described in IEEE\ Std\ 1003.1-2001. 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 +\fIpax\fP utility may choose to ignore these files as long as it produces +an error indicating that the file is being ignored. +.LP +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. +.LP +The fields \fImagic\fP, \fIuname\fP, and \fIgname\fP are character +strings each terminated by a NUL character. The fields +\fIname\fP, \fIlinkname\fP, and \fIprefix\fP are NUL-terminated character +strings except when all characters in the array +contain non-NUL characters including the last character. The \fIversion\fP +field is two octets containing the characters +\fB"00"\fP (zero-zero). The \fItypeflag\fP 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. +.LP +The \fIname\fP and the \fIprefix\fP fields shall produce the pathname +of the file. A new pathname shall be formed, if +\fIprefix\fP is not an empty string (its first character is not NUL), +by concatenating \fIprefix\fP (up to the first NUL +character), a slash character, and \fIname\fP; otherwise, \fIname\fP +is used alone. In either case, \fIname\fP is terminated at +the first NUL character. If \fIprefix\fP 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, \fIpax\fP shall notify the user of the error, +and shall not store any part of the file-header or data-on the medium. +.LP +The \fIlinkname\fP field, described below, shall not use the \fIprefix\fP +to produce a pathname. As such, a \fIlinkname\fP is +limited to 100 characters. If the name does not fit in the space provided, +\fIpax\fP shall notify the user of the error, and shall +not attempt to store the link on the medium. +.LP +The \fImode\fP field provides 12 bits encoded in the ISO/IEC\ 646:1991 +standard octal digit representation. The encoded +bits shall represent the following values: +.br +.sp +.ce 1 +\fBTable: ustar \fImode\fP Field\fP +.TS C +center; l1 l1 lw(37). +\fBBit Value\fP \fBIEEE\ Std\ 1003.1-2001 Bit\fP T{ +.na +\fBDescription\fP +.ad +T} +04000 S_ISUID T{ +.na +Set UID on execution. +.ad +T} +02000 S_ISGID T{ +.na +Set GID on execution. +.ad +T} +01000 <reserved> T{ +.na +Reserved for future standardization. +.ad +T} +00400 S_IRUSR T{ +.na +Read permission for file owner class. +.ad +T} +00200 S_IWUSR T{ +.na +Write permission for file owner class. +.ad +T} +00100 S_IXUSR T{ +.na +Execute/search permission for file owner class. +.ad +T} +00040 S_IRGRP T{ +.na +Read permission for file group class. +.ad +T} +00020 S_IWGRP T{ +.na +Write permission for file group class. +.ad +T} +00010 S_IXGRP T{ +.na +Execute/search permission for file group class. +.ad +T} +00004 S_IROTH T{ +.na +Read permission for file other class. +.ad +T} +00002 S_IWOTH T{ +.na +Write permission for file other class. +.ad +T} +00001 S_IXOTH T{ +.na +Execute/search permission for file other class. +.ad +T} +.TE +.LP +When appropriate privilege is required to set one of these mode bits, +and the user restoring the files from the archive does not +have the appropriate privilege, the mode bits for which the user does +not have appropriate privilege shall be ignored. Some of the +mode bits in the archive format are not mentioned elsewhere in this +volume of IEEE\ Std\ 1003.1-2001. If the implementation +does not support those bits, they may be ignored. +.LP +The \fIuid\fP and \fIgid\fP fields are the user and group ID of the +owner and group of the file, respectively. +.LP +The \fIsize\fP field is the size of the file in octets. If the \fItypeflag\fP +field is set to specify a file to be of type 1 +(a link) or 2 (a symbolic link), the \fIsize\fP field shall be specified +as zero. If the \fItypeflag\fP field is set to specify a +file of type 5 (directory), the \fIsize\fP 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 \fItypeflag\fP +field is set to 3 (character special file), 4 (block +special file), or 6 (FIFO), the meaning of the \fIsize\fP field is +unspecified by this volume of IEEE\ Std\ 1003.1-2001, +and no data logical records shall be stored on the medium. Additionally, +for type 6, the \fIsize\fP field shall be ignored when +reading. If the \fItypeflag\fP field is set to any other value, the +number of logical records written following the header shall +be ( \fIsize\fP+511)/512, ignoring any fraction in the result of the +division. +.LP +The \fImtime\fP 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 \fIstat\fP() function. +.LP +The \fIchksum\fP 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 \fIchksum\fP field is treated as if it were all spaces. +.LP +The \fItypeflag\fP field specifies the type of file archived. If a +particular implementation does not recognize the type, or +the user does not have appropriate privilege 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 \fIsize\fP field that +could cause data logical records to be written on the medium +(see the previous description for \fIsize\fP). If conversion to a +regular file occurs, the \fIpax\fP utility shall produce an +error indicating that the conversion took place. All of the \fItypeflag\fP +fields shall be coded in the ISO/IEC\ 646:1991 +standard IRV: +.TP 7 +\fB0\fP +Represents a regular file. For backwards-compatibility, a \fItypeflag\fP +value of binary zero ( \fB'\\0'\fP ) 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 \fItypeflag\fP value of the ISO/IEC\ 646:1991 +standard IRV \fB'0'\fP . +.TP 7 +\fB1\fP +Represents a file linked to another file, of any type, previously +archived. Such files are identified by each file having the +same device and file serial number. The linked-to name is specified +in the \fIlinkname\fP field with a NUL-character terminator if +it is less than 100 octets in length. +.TP 7 +\fB2\fP +Represents a symbolic link. The contents of the symbolic link shall +be stored in the \fIlinkname\fP field. +.TP 7 +\fB3,4\fP +Represent character special files and block special files respectively. +In this case the \fIdevmajor\fP and \fIdevminor\fP +fields shall contain information defining the device, the format of +which is unspecified by this volume of +IEEE\ Std\ 1003.1-2001. Implementations may map the device specifications +to their own local specification or may ignore +the entry. +.TP 7 +\fB5\fP +Specifies a directory or subdirectory. On systems where disk allocation +is performed on a directory basis, the \fIsize\fP +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 \fIsize\fP field of zero indicates no such limiting. +Systems that do not support limiting in this manner +should ignore the \fIsize\fP field. +.TP 7 +\fB6\fP +Specifies a FIFO special file. Note that the archiving of a FIFO file +archives the existence of this file and not its +contents. +.TP 7 +\fB7\fP +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). +.TP 7 +\fBA-Z\fP +The letters \fB'A'\fP to \fB'Z'\fP, inclusive, are reserved for custom +implementations. All other values are reserved +for future versions of IEEE\ Std\ 1003.1-2001. +.sp +.LP +Attempts to archive a socket using \fBustar\fP interchange format +shall produce a diagnostic message. Handling of other file +types is implementation-defined. +.LP +The \fImagic\fP field is the specification that this archive was output +in this archive format. If this field contains +\fBustar\fP (the five characters from the ISO/IEC\ 646:1991 standard +IRV shown followed by NUL), the \fIuname\fP and +\fIgname\fP 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 \fIuid\fP +and \fIgid\fP fields. +.SS cpio Interchange Format +.LP +The octet-oriented \fBcpio\fP 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. +.LP +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. +.LP +For the octet-oriented \fBcpio\fP archive format, the individual entry +information shall be in the order indicated and +described by the following table; see also the \fI<cpio.h>\fP header. +.br +.sp +.ce 1 +\fBTable: Octet-Oriented cpio Archive Entry\fP +.TS C +center; l2 l2 l. +\fBHeader Field Name\fP \fBLength (in Octets)\fP \fBInterpreted as\fP +\fIc_magic\fP 6 Octal number +\fIc_dev\fP 6 Octal number +\fIc_ino\fP 6 Octal number +\fIc_mode\fP 6 Octal number +\fIc_uid\fP 6 Octal number +\fIc_gid\fP 6 Octal number +\fIc_nlink\fP 6 Octal number +\fIc_rdev\fP 6 Octal number +\fIc_mtime\fP 11 Octal number +\fIc_namesize\fP 6 Octal number +\fIc_filesize\fP 11 Octal number +\fBFilename Field Name\fP \fBLength\fP \fBInterpreted as\fP +\fIc_name\fP \fIc_namesize\fP Pathname string +\fBFile Data Field Name\fP \fBLength\fP \fBInterpreted as\fP +\fIc_filedata\fP \fIc_filesize\fP Data +.TE +.SS cpio Header +.LP +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: +.TP 7 +\fIc_magic\fP +Identify the archive as being a transportable archive by containing +the identifying value \fB"070707"\fP . +.TP 7 +\fIc_dev\fP,\ \fIc_ino\fP +Contains values that uniquely identify the file within the archive +(that is, no files contain the same pair of \fIc_dev\fP and +\fIc_ino\fP values unless they are links to the same file). The values +shall be determined in an unspecified manner. +.TP 7 +\fIc_mode\fP +Contains the file type and access permissions as defined in the following +table. +.br +.sp +.ce 1 +\fBTable: Values for cpio c_mode Field\fP +.TS C +center; l2 l2 l. +\fBFile Permissions Name\fP \fBValue\fP \fBIndicates\fP +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 \fIuid\fP +C_ISGID 002000 Set \fIgid\fP +C_ISVTX 001000 Reserved +\fBFile Type Name\fP \fBValue\fP \fBIndicates\fP +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 +.TE +.LP +Directories, FIFOs, symbolic links, and regular files shall be supported +on a system conforming to this volume of +IEEE\ Std\ 1003.1-2001; 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. +.TP 7 +\fIc_uid\fP +Contains the user ID of the owner. +.TP 7 +\fIc_gid\fP +Contains the group ID of the group. +.TP 7 +\fIc_nlink\fP +Contains the number of links referencing the file at the time the +archive was created. +.TP 7 +\fIc_rdev\fP +Contains implementation-defined information for character or block +special files. +.TP 7 +\fIc_mtime\fP +Contains the latest time of modification of the file at the time the +archive was created. +.TP 7 +\fIc_namesize\fP +Contains the length of the pathname, including the terminating NUL +character. +.TP 7 +\fIc_filesize\fP +Contains the length of the file in octets. This shall be the length +of the data section following the header structure. +.sp +.SS cpio Filename +.LP +The \fIc_name\fP field shall contain the pathname of the file. The +length of this field in octets is the value of +\fIc_namesize\fP. +.LP +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. +.LP +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 \fIpax\fP utility shall never create filenames on the local system +that cannot be accessed via the procedures described +previously in this volume of IEEE\ Std\ 1003.1-2001. 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 \fIpax\fP utility may choose to ignore these files as +long as it produces an error indicating that the file is being +ignored. +.SS cpio File Data +.LP +Following \fIc_name\fP, there shall be \fIc_filesize\fP octets of +data. Interpretation of such data occurs in a manner +dependent on the file. If \fIc_filesize\fP is zero, no data shall +be contained in \fIc_filedata\fP. +.LP +When restoring from an archive: +.IP " *" 3 +If the user does not have the appropriate privilege to create a file +of the specified type, \fIpax\fP shall ignore the entry +and write an error message to standard error. +.LP +.IP " *" 3 +Only regular files 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. +.LP +.IP " *" 3 +If a user does not have appropriate privilege 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 +IEEE\ Std\ 1003.1-2001. If the implementation does not +support those flags, they may be ignored. +.LP +.SS cpio Special Entries +.LP +FIFO special files, directories, and the trailer shall be recorded +with \fIc_filesize\fP equal to zero. For other special +files, \fIc_filesize\fP is unspecified by this volume of IEEE\ Std\ 1003.1-2001. +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 +\fBTRAILER!!!\fP shall indicate the end of the archive; the contents +of octets in the last block of the archive following such a +header are undefined. +.SH EXIT STATUS +.LP +The following exit values shall be returned: +.TP 7 +\ 0 +All files were processed successfully. +.TP 7 +>0 +An error occurred. +.sp +.SH CONSEQUENCES OF ERRORS +.LP +If \fIpax\fP cannot create a file or a link when reading an archive +or cannot find a file when writing an archive, or cannot +preserve the user ID, group ID, or file mode when the \fB-p\fP option +is specified, a diagnostic message shall be written to +standard error and a non-zero exit status shall be returned, but processing +shall continue. In the case where \fIpax\fP cannot +create a link to a file, \fIpax\fP shall not, by default, create a +second copy of the file. +.LP +If the extraction of a file from an archive is prematurely terminated +by a signal or error, \fIpax\fP may have only partially +extracted the file or (if the \fB-n\fP option was not specified) may +have extracted a file of the same name as that specified by +the user, but which is not the file the user wanted. Additionally, +the file modes of extracted directories may have additional bits +from the S_IRWXU mask set as well as incorrect modification and access +times. +.LP +\fIThe following sections are informative.\fP +.SH APPLICATION USAGE +.LP +The \fB-p\fP (privileges) option was invented to reconcile differences +between historical \fItar\fP and \fIcpio\fP +implementations. In particular, the two utilities use \fB-m\fP in +diametrically opposed ways. The \fB-p\fP option also provides a +consistent means of extending the ways in which future file attributes +can be addressed, such as for enhanced security systems or +high-performance files. Although it may seem complex, there are really +two modes that are most commonly used: +.TP 7 +\fB-p\ e\fP +``Preserve everything". This would be used by the historical superuser, +someone with all the appropriate privileges, to +preserve all aspects of the files as they are recorded in the archive. +The \fBe\fP flag is the sum of \fBo\fP and \fBp\fP, and +other implementation-defined attributes. +.TP 7 +\fB-p\ p\fP +``Preserve" the file mode bits. This would be used by the user with +regular privileges who wished to preserve aspects of the +file other than the ownership. The file times are preserved by default, +but two other flags are offered to disable these and use +the time of extraction. +.sp +.LP +The one pathname per line format of standard input precludes pathnames +containing <newline>s. Although such pathnames +violate the portable filename guidelines, they may exist and their +presence may inhibit usage of \fIpax\fP within shell scripts. +This problem is inherited from historical archive programs. The problem +can be avoided by listing filename arguments on the command +line instead of on standard input. +.LP +It is almost certain that appropriate privileges are required for +\fIpax\fP to accomplish parts of this volume of +IEEE\ Std\ 1003.1-2001. Specifically, creating files of type block +special or character special, restoring file access +times unless the files are owned by the user (the \fB-t\fP option), +or preserving file owner, group, and mode (the \fB-p\fP +option) all probably require appropriate privileges. +.LP +In \fBread\fP mode, implementations are permitted to overwrite files +when the archive has multiple members with the same name. +This may fail if permissions on the first version of the file do not +permit it to be overwritten. +.LP +The \fBcpio\fP and \fBustar\fP formats can only support files up to +8589934592 bytes (8 * 2^30) in size. +.SH EXAMPLES +.LP +The following command: +.sp +.RS +.nf + +\fBpax -w -f /dev/rmt/1m . +\fP +.fi +.RE +.LP +copies the contents of the current directory to tape drive 1, medium +density (assuming historical System V device naming +procedures-the historical BSD device name would be \fB/dev/rmt9\fP). +.LP +The following commands: +.sp +.RS +.nf + +\fBmkdir\fP \fInewdir\fP\fBpax -rw\fP \fIolddir newdir\fP +.fi +.RE +.LP +copy the \fIolddir\fP directory hierarchy to \fInewdir\fP. +.sp +.RS +.nf + +\fBpax -r -s ',^//*usr//*,,' -f a.pax +\fP +.fi +.RE +.LP +reads the archive \fBa.pax\fP, with all files rooted in \fB/usr\fP +in the archive extracted relative to the current +directory. +.LP +Using the option: +.sp +.RS +.nf + +\fB-o listopt="%M %(atime)T %(size)D %(name)s" +\fP +.fi +.RE +.LP +overrides the default output description in Standard Output and instead +writes: +.sp +.RS +.nf + +\fB-rw-rw--- Jan 12 15:53 1492 /usr/foo/bar +\fP +.fi +.RE +.LP +Using the options: +.sp +.RS +.nf + +\fB-o listopt='%L\\t%(size)D\\n%.7' \\ +-o listopt='(name)s\\n%(ctime)T\\n%T' +\fP +.fi +.RE +.LP +overrides the default output description in Standard Output and instead +writes: +.sp +.RS +.nf + +\fB/usr/foo/bar -> /tmp 1492 +/usr/fo +Jan 12 1991 +Jan 31 15:53 +\fP +.fi +.RE +.SH RATIONALE +.LP +The \fIpax\fP utility was new for the ISO\ POSIX-2:1993 standard. +It represents a peaceful compromise between advocates of +the historical \fItar\fP and \fIcpio\fP utilities. +.LP +A fundamental difference between \fIcpio\fP and \fItar\fP was in the +way directories were treated. The \fIcpio\fP utility did +not treat directories differently from other files, and to select +a directory and its contents required that each file in the +hierarchy be explicitly specified. For \fItar\fP, a directory matched +every file in the file hierarchy it rooted. +.LP +The \fIpax\fP utility offers both interfaces; by default, directories +map into the file hierarchy they root. The \fB-d\fP +option causes \fIpax\fP to skip any file not explicitly referenced, +as \fIcpio\fP historically did. The \fItar\fP \fB-\fP +\fIstyle\fP behavior was chosen as the default because it was believed +that this was the more common usage and because \fItar\fP +is the more commonly available interface, as it was historically provided +on both System V and BSD implementations. +.LP +The data interchange format specification in this volume of IEEE\ Std\ 1003.1-2001 +requires that processes with +"appropriate privileges" shall always restore the ownership and permissions +of extracted files exactly as archived. If viewed +from the historic equivalence between superuser and "appropriate privileges", +there are two problems with this requirement. +First, users running as superusers may unknowingly set dangerous permissions +on extracted files. Second, it is needlessly limiting, +in that superusers cannot extract files and own them as superuser +unless the archive was created by the superuser. (It should be +noted that restoration of ownerships and permissions for the superuser, +by default, is historical practice in \fIcpio\fP, but not +in \fItar\fP.) In order to avoid these two problems, the \fIpax\fP +specification has an additional "privilege" mechanism, the +\fB-p\fP option. Only a \fIpax\fP invocation with the privileges needed, +and which has the \fB-p\fP option set using the +\fBe\fP specification character, has the "appropriate privilege" to +restore full ownership and permission information. +.LP +Note also that this volume of IEEE\ Std\ 1003.1-2001 requires that +the file ownership and access permissions shall be +set, on extraction, in the same fashion as the \fIcreat\fP() function +when provided with the +mode stored in the archive. This means that the file creation mask +of the user is applied to the file permissions. +.LP +Users should note that directories may be created by \fIpax\fP while +extracting files with permissions that are different from +those that existed at the time the archive was created. When extracting +sensitive information into a directory hierarchy that no +longer exists, users are encouraged to set their file creation mask +appropriately to protect these files during extraction. +.LP +The table of contents output is written to standard output to facilitate +pipeline processing. +.LP +An early proposal had hard links displaying for all pathnames. This +was removed because it complicates the output of the case +where \fB-v\fP is not specified and does not match historical \fIcpio\fP +usage. The hard-link information is available in the +\fB-v\fP display. +.LP +The description of the \fB-l\fP option allows implementations to make +hard links to symbolic links. +IEEE\ Std\ 1003.1-2001 does not specify any way to create a hard link +to a symbolic link, but many implementations provide +this capability as an extension. If there are hard links to symbolic +links when an archive is created, the implementation is +required to archive the hard link in the archive (unless \fB-H\fP +or \fB-L\fP is specified). When in \fBread\fP mode and in +\fBcopy\fP mode, implementations supporting hard links to symbolic +links should use them when appropriate. +.LP +The archive formats inherited from the POSIX.1-1990 standard have +certain restrictions that have been brought along from +historical usage. For example, there are restrictions on the length +of pathnames stored in the archive. When \fIpax\fP is used in +\fBcopy\fP( \fB-rw\fP) mode (copying directory hierarchies), the ability +to use extensions from the \fB-x\fP \fBpax\fP format +overcomes these restrictions. +.LP +The default \fIblocksize\fP value of 5120 bytes for \fIcpio\fP was +selected because it is one of the standard block-size +values for \fIcpio\fP, set when the \fB-B\fP option is specified. +(The other default block-size value for \fIcpio\fP is 512 +bytes, and this was considered to be too small.) The default block +value of 10240 bytes for \fItar\fP was selected because that is +the standard block-size value for BSD \fItar\fP. The maximum block +size of 32256 bytes (2**15-512 bytes) +is the largest multiple of 512 bytes that fits into a signed 16-bit +tape controller transfer register. There are known limitations +in some historical systems that would prevent larger blocks from being +accepted. Historical values were chosen to improve +compatibility with historical scripts using \fIdd\fP or similar utilities +to manipulate +archives. Also, default block sizes for any file type other than character +special file has been deleted from this volume of +IEEE\ Std\ 1003.1-2001 as unimportant and not likely to affect the +structure of the resulting archive. +.LP +Implementations are permitted to modify the block-size value based +on the archive format or the device to which the archive is +being written. This is to provide implementations with the opportunity +to take advantage of special types of devices, and it should +not be used without a great deal of consideration as it almost certainly +decreases archive portability. +.LP +The intended use of the \fB-n\fP option was to permit extraction of +one or more files from the archive without processing the +entire archive. This was viewed by the standard developers as offering +significant performance advantages over historical +implementations. The \fB-n\fP option in early proposals had three +effects; the first was to cause special characters in patterns +to not be treated specially. The second was to cause only the first +file that matched a pattern to be extracted. The third was to +cause \fIpax\fP to write a diagnostic message to standard error when +no file was found matching a specified pattern. Only the +second behavior is retained by this volume of IEEE\ Std\ 1003.1-2001, +for many reasons. First, it is in general not +acceptable for a single option to have multiple effects. Second, the +ability to make pattern matching characters act as normal +characters is useful for parts of \fIpax\fP other than file extraction. +Third, a finer degree of control over the special +characters is useful because users may wish to normalize only a single +special character in a single filename. Fourth, given a more +general escape mechanism, the previous behavior of the \fB-n\fP option +can be easily obtained using the \fB-s\fP option or a \fIsed\fP script. +Finally, writing a diagnostic message when a pattern specified by +the user is +unmatched by any file is useful behavior in all cases. +.LP +In this version, the \fB-n\fP was removed from the \fBcopy\fP mode +synopsis of \fIpax\fP; it is inapplicable because there +are no pattern operands specified in this mode. +.LP +There is another method than \fIpax\fP for copying subtrees in IEEE\ Std\ 1003.1-2001 +described as part of the \fIcp\fP utility. Both methods are historical +practice: \fIcp\fP +provides a simpler, more intuitive interface, while \fIpax\fP offers +a finer granularity of control. Each provides additional +functionality to the other; in particular, \fIpax\fP maintains the +hard-link structure of the hierarchy while \fIcp\fP does not. It is +the intention of the standard developers that the results be similar +(using +appropriate option combinations in both utilities). The results are +not required to be identical; there seemed insufficient gain to +applications to balance the difficulty of implementations having to +guarantee that the results would be exactly identical. +.LP +A single archive may span more than one file. It is suggested that +implementations provide informative messages to the user on +standard error whenever the archive file is changed. +.LP +The \fB-d\fP option (do not create intermediate directories not listed +in the archive) found in early proposals was originally +provided as a complement to the historic \fB-d\fP option of \fIcpio\fP. +It has been deleted. +.LP +The \fB-s\fP option in early proposals specified a subset of the substitution +command from the \fIed\fP utility. As there was no reason for only +a subset to be supported, the \fB-s\fP option is now +compatible with the current \fIed\fP specification. Since the delimiter +can be any non-null +character, the following usage with single spaces is valid: +.sp +.RS +.nf + +\fBpax -s " foo bar " ... +\fP +.fi +.RE +.LP +The \fB-t\fP description is worded so as to note that this may cause +the access time update caused by some other activity +(which occurs while the file is being read) to be overwritten. +.LP +The default behavior of \fIpax\fP with regard to file modification +times is the same as historical implementations of +\fItar\fP. It is not the historical behavior of \fIcpio\fP. +.LP +Because the \fB-i\fP option uses \fB/dev/tty\fP, utilities without +a controlling terminal are not able to use this option. +.LP +The \fB-y\fP option, found in early proposals, has been deleted because +a line containing a single period for the \fB-i\fP +option has equivalent functionality. The special lines for the \fB-i\fP +option (a single period and the empty line) are historical +practice in \fIcpio\fP. +.LP +In early drafts, a \fB-e\fP \fIcharmap\fP option was included to increase +portability of files between systems using different +coded character sets. This option was omitted because it was apparent +that consensus could not be formed for it. In this version, +the use of UTF-8 should be an adequate substitute. +.LP +The \fB-k\fP option was added to address international concerns about +the dangers involved in the character set transformations +of \fB-e\fP (if the target character set were different from the source, +the filenames might be transformed into names matching +existing files) and also was made more general to protect files transferred +between file systems with different {NAME_MAX} values +(truncating a filename on a smaller system might also inadvertently +overwrite existing files). As stated, it prevents any +overwriting, even if the target file is older than the source. This +version adds more granularity of options to solve this problem +by introducing the \fB-o\fP \fBinvalid=\fP option-specifically the +UTF-8 action. (Note that an existing file that is named with a +UTF-8 encoding is still subject to overwriting in this case. The \fB-k\fP +option closes that loophole.) +.LP +Some of the file characteristics referenced in this volume of IEEE\ Std\ 1003.1-2001 +might not be supported by some +archive formats. For example, neither the \fBtar\fP nor \fBcpio\fP +formats contain the file access time. For this reason, the +\fBe\fP specification character has been provided, intended to cause +all file characteristics specified in the archive to be +retained. +.LP +It is required that extracted directories, by default, have their +access and modification times and permissions set to the +values specified in the archive. This has obvious problems in that +the directories are almost certainly modified after being +extracted and that directory permissions may not permit file creation. +One possible solution is to create directories with the mode +specified in the archive, as modified by the \fIumask\fP of the user, +with sufficient +permissions to allow file creation. After all files have been extracted, +\fIpax\fP would then reset the access and modification +times and permissions as necessary. +.LP +The list-mode formatting description borrows heavily from the one +defined by the \fIprintf\fP utility. However, since there is no separate +operand list to get conversion arguments, +the format was extended to allow specifying the name of the conversion +argument as part of the conversion specification. +.LP +The \fBT\fP conversion specifier allows time fields to be displayed +in any of the date formats. Unlike the \fIls\fP utility, \fIpax\fP +does not adjust the format when the date is less than six months in +the +past. This makes parsing the output more predictable. +.LP +The \fBD\fP conversion specifier handles the ability to display the +major/minor or file size, as with \fIls\fP, by using \fB%-8(\fP\fIsize\fP\fB)D\fP. +.LP +The \fBL\fP conversion specifier handles the \fIls\fP display for +symbolic links. +.LP +Conversion specifiers were added to generate existing known types +used for \fIls\fP. +.SS pax Interchange Format +.LP +The new POSIX data interchange format was developed primarily to satisfy +international concerns that the \fBustar\fP and +\fBcpio\fP formats did not provide for file, user, and group names +encoded in characters outside a subset of the +ISO/IEC\ 646:1991 standard. The standard developers realized that +this new POSIX data interchange format should be very +extensible because there were other requirements they foresaw in the +near future: +.IP " *" 3 +Support international character encodings and locale information +.LP +.IP " *" 3 +Support security information (ACLs, and so on) +.LP +.IP " *" 3 +Support future file types, such as realtime or contiguous files +.LP +.IP " *" 3 +Include data areas for implementation use +.LP +.IP " *" 3 +Support systems with words larger than 32 bits and timers with subsecond +granularity +.LP +.LP +The following were not goals for this format because these are better +handled by separate utilities or are inappropriate for a +portable format: +.IP " *" 3 +Encryption +.LP +.IP " *" 3 +Compression +.LP +.IP " *" 3 +Data translation between locales and codesets +.LP +.IP " *" 3 +\fIinode\fP storage +.LP +.LP +The format chosen to support the goals is an extension of the \fBustar\fP +format. Of the two formats previously available, only +the \fBustar\fP format was selected for extensions because: +.IP " *" 3 +It was easier to extend in an upwards-compatible way. It offered version +flags and header block type fields with room for future +standardization. The \fBcpio\fP format, while possessing a more flexible +file naming methodology, could not be extended without +breaking some theoretical implementation or using a dummy filename +that could be a legitimate filename. +.LP +.IP " *" 3 +Industry experience since the original " \fItar\fP wars" fought in +developing the ISO\ POSIX-1 standard has clearly been +in favor of the \fBustar\fP format, which is generally the default +output format selected for \fIpax\fP implementations on new +systems. +.LP +.LP +The new format was designed with one additional goal in mind: reasonable +behavior when an older \fItar\fP or \fIpax\fP utility +happened to read an archive. Since the POSIX.1-1990 standard mandated +that a "format-reading utility" had to treat unrecognized +\fItypeflag\fP values as regular files, this allowed the format to +include all the extended information in a pseudo-regular file +that preceded each real file. An option is given that allows the archive +creator to set up reasonable names for these files on the +older systems. Also, the normative text suggests that reasonable file +access values be used for this \fBustar\fP header block. +Making these header files inaccessible for convenient reading and +deleting would not be reasonable. File permissions of 600 or 700 +are suggested. +.LP +The \fBustar\fP \fItypeflag\fP field was used to accommodate the additional +functionality of the new format rather than magic +or version because the POSIX.1-1990 standard (and, by reference, the +previous version of \fIpax\fP), mandated the behavior of the +format-reading utility when it encountered an unknown \fItypeflag\fP, +but was silent about the other two fields. +.LP +Early proposals of the first revision to IEEE\ Std\ 1003.1-2001 contained +a proposed archive format that was based on +compatibility with the standard for tape files (ISO\ 1001, similar +to the format used historically on many mainframes and +minicomputers). This format was overly complex and required considerable +overhead in volume and header records. Furthermore, the +standard developers felt that it would not be acceptable to the community +of POSIX developers, so it was later changed to be a +format more closely related to historical practice on POSIX systems. +.LP +The prefix and name split of pathnames in \fBustar\fP was replaced +by the single path extended header record for +simplicity. +.LP +The concept of a global extended header ( \fItypeflag\fP \fBg\fP) +was controversial. If this were applied to an archive being +recorded on magnetic tape, a few unreadable blocks at the beginning +of the tape could be a serious problem; a utility attempting to +extract as many files as possible from a damaged archive could lose +a large percentage of file header information in this case. +However, if the archive were on a reliable medium, such as a CD-ROM, +the global extended header offers considerable potential size +reductions by eliminating redundant information. Thus, the text warns +against using the global method for unreliable media and +provides a method for implanting global information in the extended +header for each file, rather than in the \fItypeflag\fP +\fBg\fP records. +.LP +No facility for data translation or filtering on a per-file basis +is included because the standard developers could not invent +an interface that would allow this in an efficient manner. If a filter, +such as encryption or compression, is to be applied to all +the files, it is more efficient to apply the filter to the entire +archive as a single file. The standard developers considered +interfaces that would invoke a shell script for each file going into +or out of the archive, but the system overhead in this +approach was considered to be too high. +.LP +One such approach would be to have \fBfilter=\fP records that give +a pathname for an executable. When the program is invoked, +the file and archive would be open for standard input/output and all +the header fields would be available as environment variables +or command-line arguments. The standard developers did discuss such +schemes, but they were omitted from +IEEE\ Std\ 1003.1-2001 due to concerns about excessive overhead. Also, +the program itself would need to be in the archive +if it were to be used portably. +.LP +There is currently no portable means of identifying the character +set(s) used for a file in the file system. Therefore, +\fIpax\fP has not been given a mechanism to generate charset records +automatically. The only portable means of doing this is for +the user to write the archive using the \fB-o\fP \fBcharset=\fP \fIstring\fP +command line option. This assumes that all of the +files in the archive use the same encoding. The "implementation-defined" +text is included to allow for a system that can identify +the encodings used for each of its files. +.LP +The table of standards that accompanies the charset record description +is acknowledged to be very limited. Only a limited number +of character set standards is reasonable for maximal interchange. +Any character set is, of course, possible by prior agreement. It +was suggested that EBCDIC be listed, but it was omitted because it +is not defined by a formal standard. Formal standards, and then +only those with reasonably large followings, can be included here, +simply as a matter of practicality. The <\fIvalue\fP>s +represent names of officially registered character sets in the format +required by the ISO\ 2375:1985 standard. +.LP +The normal comma or <blank>-separated list rules are not followed +in the case of keyword options to allow ease of argument +parsing for \fIgetopts\fP. +.LP +Further information on character encodings is in pax Archive Character +Set Encoding/Decoding +\&. +.LP +The standard developers have reserved keyword name space for vendor +extensions. It is suggested that the format to be used +is: +.sp +.RS +.nf + +\fIVENDOR.keyword\fP +.fi +.RE +.LP +where \fIVENDOR\fP is the name of the vendor or organization in all +uppercase letters. It is further suggested that the keyword +following the period be named differently than any of the standard +keywords so that it could be used for future standardization, if +appropriate, by omitting the \fIVENDOR\fP prefix. +.LP +The <\fIlength\fP> field in the extended header record was included +to make it simpler to step through the records, even +if a record contains an unknown format (to a particular \fIpax\fP) +with complex interactions of special characters. It also +provides a minor integrity checkpoint within the records to aid a +program attempting to recover files from a damaged archive. +.LP +There are no extended header versions of the \fIdevmajor\fP and \fIdevminor\fP +fields because the unspecified format +\fBustar\fP header field should be sufficient. If they are not, vendor-specific +extended keywords (such as \fIVENDOR.devmajor\fP) +should be used. +.LP +Device and \fIi\fP-number labeling of files was not adopted from \fIcpio\fP; +files are interchanged strictly on a symbolic +name basis, as in \fBustar\fP. +.LP +Just as with the \fBustar\fP format descriptions, the new format makes +no special arrangements for multi-volume archives. Each +of the \fIpax\fP archive types is assumed to be inside a single POSIX +file and splitting that file over multiple volumes +(diskettes, tape cartridges, and so on), processing their labels, +and mounting each in the proper sequence are considered to be +implementation details that cannot be described portably. +.LP +The \fBpax\fP format is intended for interchange, not only for backup +on a single (family of) systems. It is not as densely +packed as might be possible for backup: +.IP " *" 3 +It contains information as coded characters that could be coded in +binary. +.LP +.IP " *" 3 +It identifies extended records with name fields that could be omitted +in favor of a fixed-field layout. +.LP +.IP " *" 3 +It translates names into a portable character set and identifies locale-related +information, both of which are probably +unnecessary for backup. +.LP +.LP +The requirements on restoring from an archive are slightly different +from the historical wording, allowing for non-monolithic +privilege to bring forward as much as possible. In particular, attributes +such as "high performance file" might be broadly but +not universally granted while set-user-ID or \fIchown\fP() might be +much more restricted. +There is no implication in IEEE\ Std\ 1003.1-2001 that the security +information be honored after it is restored to the file +hierarchy, in spite of what might be improperly inferred by the silence +on that topic. That is a topic for another standard. +.LP +Links are recorded in the fashion described here because a link can +be to any file type. It is desirable in general to be able +to restore part of an archive selectively and restore all of those +files completely. If the data is not associated with each link, +it is not possible to do this. However, the data associated with a +file can be large, and when selective restoration is not needed, +this can be a significant burden. The archive is structured so that +files that have no associated data can always be restored by +the name of any link name of any link, and the user may choose whether +data is recorded with each instance of a file that contains +data. The format permits mixing of both types of links in a single +archive; this can be done for special needs, and \fIpax\fP is +expected to interpret such archives on input properly, despite the +fact that there is no \fIpax\fP option that would force this +mixed case on output. (When \fB-o\fP \fBlinkdata\fP is used, the output +must contain the duplicate data, but the implementation +is free to include it or omit it when \fB-o\fP \fBlinkdata\fP is not +used.) +.LP +The time values are included as extended header records for those +implementations needing more than the eleven octal digits +allowed by the \fBustar\fP format. Portable file timestamps cannot +be negative. If \fIpax\fP encounters a file with a negative +timestamp in \fBcopy\fP or \fBwrite\fP mode, it can reject the file, +substitute a non-negative timestamp, or generate a +non-portable timestamp with a leading \fB'-'\fP . Even though some +implementations can support finer file-time granularities +than seconds, the normative text requires support only for seconds +since the Epoch because the ISO\ POSIX-1 standard states +them that way. The \fBustar\fP format includes only \fImtime\fP; the +new format adds \fIatime\fP and \fIctime\fP for symmetry. +The \fIatime\fP access time restored to the file system will be affected +by the \fB-p\fP \fBa\fP and \fB-p\fP \fBe\fP options. +The \fIctime\fP creation time (actually \fIinode\fP modification time) +is described with "appropriate privilege" so that it can +be ignored when writing to the file system. POSIX does not provide +a portable means to change file creation time. Nothing is +intended to prevent a non-portable implementation of \fIpax\fP from +restoring the value. +.LP +The \fIgid\fP, \fIsize\fP, and \fIuid\fP extended header records were +included to allow expansion beyond the sizes specified +in the regular \fItar\fP header. New file system architectures are +emerging that will exhaust the 12-digit size field. There are +probably not many systems requiring more than 8 digits for user and +group IDs, but the extended header values were included for +completeness, allowing overrides for all of the decimal values in +the \fItar\fP header. +.LP +The standard developers intended to describe the effective results +of \fIpax\fP with regard to file ownerships and permissions; +implementations are not restricted in timing or sequencing the restoration +of such, provided the results are as specified. +.LP +Much of the text describing the extended headers refers to use in +" \fBwrite\fP or \fBcopy\fP modes". The \fBcopy\fP mode +references are due to the normative text: "The effect of the copy +shall be as if the copied files were written to an archive file +and then subsequently extracted ...". There is certainly no way to +test whether \fIpax\fP is actually generating the extended +headers in \fBcopy\fP mode, but the effects must be as if it had. +.SS pax Archive Character Set Encoding/Decoding +.LP +There is a need to exchange archives of files between systems of different +native codesets. Filenames, group names, and user +names must be preserved to the fullest extent possible when an archive +is read on the receiving platform. Translation of the +contents of files is not within the scope of the \fIpax\fP utility. +.LP +There will also be the need to represent characters that are not available +on the receiving platform. These unsupported +characters cannot be automatically folded to the local set of characters +due to the chance of collisions. This could result in +overwriting previous extracted files from the archive or pre-existing +files on the system. +.LP +For these reasons, the codeset used to represent characters within +the extended header records of the \fIpax\fP archive must be +sufficiently rich to handle all commonly used character sets. The +fields requiring translation include, at a minimum, filenames, +user names, group names, and link pathnames. Implementations may wish +to have localized extended keywords that use non-portable +characters. +.LP +The standard developers considered the following options: +.IP " *" 3 +The archive creator specifies the well-defined name of the source +codeset. The receiver must then recognize the codeset name and +perform the appropriate translations to the destination codeset. +.LP +.IP " *" 3 +The archive creator includes within the archive the character mapping +table for the source codeset used to encode extended +header records. The receiver must then read the character mapping +table and perform the appropriate translations to the destination +codeset. +.LP +.IP " *" 3 +The archive creator translates the extended header records in the +source codeset into a canonical form. The receiver must then +perform the appropriate translations to the destination codeset. +.LP +.LP +The approach that incorporates the name of the source codeset poses +the problem of codeset name registration, and makes the +archive useless to \fIpax\fP archive decoders that do not recognize +that codeset. +.LP +Because parts of an archive may be corrupted, the standard developers +felt that including the character map of the source +codeset was too fragile. The loss of this one key component could +result in making the entire archive useless. (The difference +between this and the global extended header decision was that the +latter has a workaround-duplicating extended header records on +unreliable media-but this would be too burdensome for large character +set maps.) +.LP +Both of the above approaches also put an undue burden on the \fIpax\fP +archive receiver to handle the cross-product of all +source and destination codesets. +.LP +To simplify the translation from the source codeset to the canonical +form and from the canonical form to the destination +codeset, the standard developers decided that the internal representation +should be a stateless encoding. A stateless encoding is +one where each codepoint has the same meaning, without regard to the +decoder being in a specific state. An example of a stateful +encoding would be the Japanese Shift-JIS; an example of a stateless +encoding would be the ISO/IEC\ 646:1991 standard +(equivalent to 7-bit ASCII). +.LP +For these reasons, the standard developers decided to adopt a canonical +format for the representation of file information +strings. The obvious, well-endorsed candidate is the ISO/IEC\ 10646-1:2000 +standard (based in part on Unicode), which can be +used to represent the characters of virtually all standardized character +sets. The standard developers initially agreed upon using +UCS2 (16-bit Unicode) as the internal representation. This repertoire +of characters provides a sufficiently rich set to represent +all commonly-used codesets. +.LP +However, the standard developers found that the 16-bit Unicode representation +had some problems. It forced the issue of +standardizing byte ordering. The 2-byte length of each character made +the extended header records twice as long for the case of +strings coded entirely from historical 7-bit ASCII. For these reasons, +the standard developers chose the UTF-8 defined in the +ISO/IEC\ 10646-1:2000 standard. This multi-byte representation encodes +UCS2 or UCS4 characters reliably and deterministically, +eliminating the need for a canonical byte ordering. In addition, NUL +octets and other characters possibly confusing to POSIX file +systems do not appear, except to represent themselves. It was realized +that certain national codesets take up more space after the +encoding, due to their placement within the UCS range; it was felt +that the usefulness of the encoding of the names outweighs the +disadvantage of size increase for file, user, and group names. +.LP +The encoding of UTF-8 is as follows: +.sp +.RS +.nf + +\fBUCS4 Hex Encoding UTF-8 Binary Encoding +.sp + +00000000-0000007F 0xxxxxxx +00000080-000007FF 110xxxxx 10xxxxxx +00000800-0000FFFF 1110xxxx 10xxxxxx 10xxxxxx +00010000-001FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx +00200000-03FFFFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx +04000000-7FFFFFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx +\fP +.fi +.RE +.LP +where each \fB'x'\fP represents a bit value from the character being +translated. +.SS ustar Interchange Format +.LP +The description of the \fBustar\fP format reflects numerous enhancements +over pre-1988 versions of the historical \fItar\fP +utility. The goal of these changes was not only to provide the functional +enhancements desired, but also to retain compatibility +between new and old versions. This compatibility has been retained. +Archives written using the old archive format are compatible +with the new format. +.LP +Implementors should be aware that the previous file format did not +include a mechanism to archive directory type files. For this +reason, the convention of using a filename ending with slash was adopted +to specify a directory on the archive. +.LP +The total size of the \fIname\fP and \fIprefix\fP fields have been +set to meet the minimum requirements for {PATH_MAX}. If a +pathname will fit within the \fIname\fP field, it is recommended that +the pathname be stored there without the use of the +\fIprefix\fP field. Although the name field is known to be too small +to contain {PATH_MAX} characters, the value was not changed +in this version of the archive file format to retain backwards-compatibility, +and instead the prefix was introduced. Also, because +of the earlier version of the format, there is no way to remove the +restriction on the \fIlinkname\fP field being limited in size +to just that of the \fIname\fP field. +.LP +The \fIsize\fP field is required to be meaningful in all implementation +extensions, although it could be zero. This is required +so that the data blocks can always be properly counted. +.LP +It is suggested that if device special files need to be represented +that cannot be represented in the standard format, that one +of the extension types ( \fBA\fP- \fBZ\fP) be used, and that the additional +information for the special file be represented as +data and be reflected in the \fIsize\fP field. +.LP +Attempting to restore a special file type, where it is converted to +ordinary data and conflicts with an existing filename, need +not be specially detected by the utility. If run as an ordinary user, +\fIpax\fP should not be able to overwrite the entries in, +for example, \fB/dev\fP in any case (whether the file is converted +to another type or not). If run as a privileged user, it should +be able to do so, and it would be considered a bug if it did not. +The same is true of ordinary data files and similarly named +special files; it is impossible to anticipate the needs of the user +(who could really intend to overwrite the file), so the +behavior should be predictable (and thus regular) and rely on the +protection system as required. +.LP +The value 7 in the \fItypeflag\fP field is intended to define how +contiguous files can be stored in a \fBustar\fP archive. +IEEE\ Std\ 1003.1-2001 does not require the contiguous file extension, +but does define a standard way of archiving such +files so that all conforming systems can interpret these file types +in a meaningful and consistent manner. On a system that does +not support extended file types, the \fIpax\fP utility should do the +best it can with the file and go on to the next. +.LP +The file protection modes are those conventionally used by the \fIls\fP +utility. This is +extended beyond the usage in the ISO\ POSIX-2 standard to support +the "shared text" or "sticky" bit. It is intended that +the conformance document should not document anything beyond the existence +of and support of such a mode. Further extensions are +expected to these bits, particularly with overloading the set-user-ID +and set-group-ID flags. +.SS cpio Interchange Format +.LP +The reference to appropriate privilege in the \fBcpio\fP format refers +to an error on standard output; the \fBustar\fP format +does not make comparable statements. +.LP +The model for this format was the historical System V \fIcpio\fP \fB-c\fP +data interchange format. This model documents the +portable version of the \fBcpio\fP format and not the binary version. +It has the flexibility to transfer data of any type +described within IEEE\ Std\ 1003.1-2001, yet is extensible to transfer +data types specific to extensions beyond +IEEE\ Std\ 1003.1-2001 (for example, contiguous files). Because it +describes existing practice, there is no question of +maintaining upwards-compatibility. +.SS cpio Header +.LP +There has been some concern that the size of the \fIc_ino\fP field +of the header is too small to handle those systems that have +very large \fIinode\fP numbers. However, the \fIc_ino\fP field in +the header is used strictly as a hard-link resolution mechanism +for archives. It is not necessarily the same value as the \fIinode\fP +number of the file in the location from which that file is +extracted. +.LP +The name \fIc_magic\fP is based on historical usage. +.SS cpio Filename +.LP +For most historical implementations of the \fIcpio\fP utility, {PATH_MAX} +octets can be used to describe the pathname without +the addition of any other header fields (the NUL character would be +included in this count). {PATH_MAX} is the minimum value for +pathname size, documented as 256 bytes. However, an implementation +may use \fIc_namesize\fP to determine the exact length of the +pathname. With the current description of the \fI<cpio.h>\fP header, +this pathname +size can be as large as a number that is described in six octal digits. +.LP +Two values are documented under the \fIc_mode\fP field values to provide +for extensibility for known file types: +.TP 7 +\fB0110\ 000\fP +Reserved for contiguous files. The implementation may treat the rest +of the information for this archive like a regular file. +If this file type is undefined, the implementation may create the +file as a regular file. +.sp +.LP +This provides for extensibility of the \fBcpio\fP format while allowing +for the ability to read old archives. Files of an +unknown type may be read as "regular files" on some implementations. +On a system that does not support extended file types, the +\fIpax\fP utility should do the best it can with the file and go on +to the next. +.SH FUTURE DIRECTIONS +.LP +None. +.SH SEE ALSO +.LP +\fIShell Command Language\fP, \fIcp\fP, \fIed\fP, \fIgetopts\fP, +\fIls\fP, \fIprintf\fP(), the Base Definitions volume of IEEE\ Std\ 1003.1-2001, +\fI<cpio.h>\fP, the System Interfaces volume of IEEE\ Std\ 1003.1-2001, +\fIchown\fP(), \fIcreat\fP(), \fImkdir\fP(), \fImkfifo\fP(), \fIstat\fP(), +\fIutime\fP(), \fIwrite\fP() +.SH COPYRIGHT +Portions of this text are reprinted and reproduced in electronic form +from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology +-- Portable Operating System Interface (POSIX), The Open Group Base +Specifications Issue 6, Copyright (C) 2001-2003 by the Institute of +Electrical and Electronics Engineers, Inc and The Open Group. In the +event of any discrepancy between this version and the original IEEE and +The Open Group Standard, the original IEEE and The Open Group Standard +is the referee document. The original Standard can be obtained online at +http://www.opengroup.org/unix/online.html . |