Blame doc/html/cpio.5.html

Packit Service 1d0348
Packit Service 1d0348
Packit Service 1d0348
Packit Service 1d0348
"http://www.w3.org/TR/html4/loose.dtd">
Packit Service 1d0348
<html>
Packit Service 1d0348
<head>
Packit Service 1d0348
<meta name="generator" content="groff -Thtml, see www.gnu.org">
Packit Service 1d0348
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
Packit Service 1d0348
<meta name="Content-Style" content="text/css">
Packit Service 1d0348
<style type="text/css">
Packit Service 1d0348
       p       { margin-top: 0; margin-bottom: 0; vertical-align: top }
Packit Service 1d0348
       pre     { margin-top: 0; margin-bottom: 0; vertical-align: top }
Packit Service 1d0348
       table   { margin-top: 0; margin-bottom: 0; vertical-align: top }
Packit Service 1d0348
       h1      { text-align: center }
Packit Service 1d0348
</style>
Packit Service 1d0348
<title></title>
Packit Service 1d0348
</head>
Packit Service 1d0348
<body>
Packit Service 1d0348
Packit Service 1d0348

Packit Service 1d0348
Packit Service 1d0348
Packit Service 1d0348

CPIO(5) BSD File Formats Manual CPIO(5)

Packit Service 1d0348
Packit Service 1d0348

NAME

Packit Service 1d0348
Packit Service 1d0348

cpio — format of

Packit Service 1d0348
cpio archive files

Packit Service 1d0348
Packit Service 1d0348

DESCRIPTION

Packit Service 1d0348
Packit Service 1d0348

The cpio archive format

Packit Service 1d0348
collects any number of files, directories, and other file
Packit Service 1d0348
system objects (symbolic links, device nodes, etc.) into a
Packit Service 1d0348
single stream of bytes.

Packit Service 1d0348
Packit Service 1d0348

General

Packit Service 1d0348
Format 
Packit Service 1d0348
Each file system object in a cpio archive comprises a
Packit Service 1d0348
header record with basic numeric metadata followed by the
Packit Service 1d0348
full pathname of the entry and the file data. The header
Packit Service 1d0348
record stores a series of integer values that generally
Packit Service 1d0348
follow the fields in struct stat. (See stat(2) for
Packit Service 1d0348
details.) The variants differ primarily in how they store
Packit Service 1d0348
those integers (binary, octal, or hexadecimal). The header
Packit Service 1d0348
is followed by the pathname of the entry (the length of the
Packit Service 1d0348
pathname is stored in the header) and any file data. The end
Packit Service 1d0348
of the archive is indicated by a special record with the
Packit Service 1d0348
pathname ’’TRAILER!!!’’.

Packit Service 1d0348
Packit Service 1d0348

PWB

Packit Service 1d0348
format 
Packit Service 1d0348
XXX Any documentation of the original PWB/UNIX 1.0 format?
Packit Service 1d0348
XXX

Packit Service 1d0348
Packit Service 1d0348

Old Binary

Packit Service 1d0348
Format 
Packit Service 1d0348
The old binary cpio format stores numbers as 2-byte
Packit Service 1d0348
and 4-byte binary values. Each entry begins with a header in
Packit Service 1d0348
the following format:

Packit Service 1d0348
Packit Service 1d0348

struct

Packit Service 1d0348
header_old_cpio { 
Packit Service 1d0348
unsigned short c_magic; 
Packit Service 1d0348
unsigned short c_dev; 
Packit Service 1d0348
unsigned short c_ino; 
Packit Service 1d0348
unsigned short c_mode; 
Packit Service 1d0348
unsigned short c_uid; 
Packit Service 1d0348
unsigned short c_gid; 
Packit Service 1d0348
unsigned short c_nlink; 
Packit Service 1d0348
unsigned short c_rdev;

Packit Service 1d0348
Packit Service 1d0348
Packit Service 1d0348
       cellspacing="0" cellpadding="0">
Packit Service 1d0348
Packit Service 1d0348
Packit Service 1d0348
Packit Service 1d0348
Packit Service 1d0348
Packit Service 1d0348

unsigned short c_mtime[2];

Packit Service 1d0348
Packit Service 1d0348
Packit Service 1d0348
Packit Service 1d0348
Packit Service 1d0348

unsigned short c_namesize;

Packit Service 1d0348
Packit Service 1d0348
Packit Service 1d0348
       cellspacing="0" cellpadding="0">
Packit Service 1d0348
Packit Service 1d0348
Packit Service 1d0348
Packit Service 1d0348
Packit Service 1d0348
Packit Service 1d0348

unsigned short c_filesize[2];

Packit Service 1d0348
Packit Service 1d0348
Packit Service 1d0348

};

Packit Service 1d0348
Packit Service 1d0348

The unsigned

Packit Service 1d0348
short fields here are 16-bit integer values; the
Packit Service 1d0348
unsigned int fields are 32-bit integer values. The
Packit Service 1d0348
fields are as follows

Packit Service 1d0348
Packit Service 1d0348

magic

Packit Service 1d0348
Packit Service 1d0348

The integer

Packit Service 1d0348
value octal 070707. This value can be used to determine
Packit Service 1d0348
whether this archive is written with little-endian or
Packit Service 1d0348
big-endian integers.

Packit Service 1d0348
Packit Service 1d0348

dev, ino

Packit Service 1d0348
Packit Service 1d0348

The device and inode numbers

Packit Service 1d0348
from the disk. These are used by programs that read
Packit Service 1d0348
cpio archives to determine when two entries refer to
Packit Service 1d0348
the same file. Programs that synthesize cpio archives
Packit Service 1d0348
should be careful to set these to distinct values for each
Packit Service 1d0348
entry.

Packit Service 1d0348
Packit Service 1d0348

mode

Packit Service 1d0348
Packit Service 1d0348

The mode

Packit Service 1d0348
specifies both the regular permissions and the file type. It
Packit Service 1d0348
consists of several bit fields as follows:

Packit Service 1d0348
Packit Service 1d0348

0170000

Packit Service 1d0348
Packit Service 1d0348

This masks the

Packit Service 1d0348
file type bits.

Packit Service 1d0348
Packit Service 1d0348

0140000

Packit Service 1d0348
Packit Service 1d0348

File type value

Packit Service 1d0348
for sockets.

Packit Service 1d0348
Packit Service 1d0348

0120000

Packit Service 1d0348
Packit Service 1d0348

File type value

Packit Service 1d0348
for symbolic links. For symbolic links, the link body is
Packit Service 1d0348
stored as file data.

Packit Service 1d0348
Packit Service 1d0348

0100000

Packit Service 1d0348
Packit Service 1d0348

File type value

Packit Service 1d0348
for regular files.

Packit Service 1d0348
Packit Service 1d0348

0060000

Packit Service 1d0348
Packit Service 1d0348

File type value

Packit Service 1d0348
for block special devices.

Packit Service 1d0348
Packit Service 1d0348

0040000

Packit Service 1d0348
Packit Service 1d0348

File type value

Packit Service 1d0348
for directories.

Packit Service 1d0348
Packit Service 1d0348

0020000

Packit Service 1d0348
Packit Service 1d0348

File type value

Packit Service 1d0348
for character special devices.

Packit Service 1d0348
Packit Service 1d0348

0010000

Packit Service 1d0348
Packit Service 1d0348

File type value

Packit Service 1d0348
for named pipes or FIFOs.

Packit Service 1d0348
Packit Service 1d0348

0004000

Packit Service 1d0348
Packit Service 1d0348

SUID bit.

Packit Service 1d0348
Packit Service 1d0348

0002000

Packit Service 1d0348
Packit Service 1d0348

SGID bit.

Packit Service 1d0348
Packit Service 1d0348

0001000

Packit Service 1d0348
Packit Service 1d0348

Sticky bit. On

Packit Service 1d0348
some systems, this modifies the behavior of executables
Packit Service 1d0348
and/or directories.

Packit Service 1d0348
Packit Service 1d0348

0000777

Packit Service 1d0348
Packit Service 1d0348

The lower 9

Packit Service 1d0348
bits specify read/write/execute permissions for world,
Packit Service 1d0348
group, and user following standard POSIX conventions.

Packit Service 1d0348
Packit Service 1d0348

uid, gid

Packit Service 1d0348
Packit Service 1d0348

The numeric user id and group

Packit Service 1d0348
id of the owner.

Packit Service 1d0348
Packit Service 1d0348

nlink

Packit Service 1d0348
Packit Service 1d0348

The number of

Packit Service 1d0348
links to this file. Directories always have a value of at
Packit Service 1d0348
least two here. Note that hardlinked files include file data
Packit Service 1d0348
with every copy in the archive.

Packit Service 1d0348
Packit Service 1d0348

rdev

Packit Service 1d0348
Packit Service 1d0348

For block

Packit Service 1d0348
special and character special entries, this field contains
Packit Service 1d0348
the associated device number. For all other entry types, it
Packit Service 1d0348
should be set to zero by writers and ignored by readers.

Packit Service 1d0348
Packit Service 1d0348

mtime

Packit Service 1d0348
Packit Service 1d0348

Modification

Packit Service 1d0348
time of the file, indicated as the number of seconds since
Packit Service 1d0348
the start of the epoch, 00:00:00 UTC January 1, 1970. The
Packit Service 1d0348
four-byte integer is stored with the most-significant 16
Packit Service 1d0348
bits first followed by the least-significant 16 bits. Each
Packit Service 1d0348
of the two 16 bit values are stored in machine-native byte
Packit Service 1d0348
order.

Packit Service 1d0348
Packit Service 1d0348

namesize

Packit Service 1d0348
Packit Service 1d0348

The number of bytes in the

Packit Service 1d0348
pathname that follows the header. This count includes the
Packit Service 1d0348
trailing NUL byte.

Packit Service 1d0348
Packit Service 1d0348

filesize

Packit Service 1d0348
Packit Service 1d0348

The size of the file. Note that

Packit Service 1d0348
this archive format is limited to four gigabyte file sizes.
Packit Service 1d0348
See mtime above for a description of the storage of
Packit Service 1d0348
four-byte integers.

Packit Service 1d0348
Packit Service 1d0348

The pathname

Packit Service 1d0348
immediately follows the fixed header. If the namesize
Packit Service 1d0348
is odd, an additional NUL byte is added after the pathname.
Packit Service 1d0348
The file data is then appended, padded with NUL bytes to an
Packit Service 1d0348
even length.

Packit Service 1d0348
Packit Service 1d0348

Hardlinked files

Packit Service 1d0348
are not given special treatment; the full file contents are
Packit Service 1d0348
included with each copy of the file.

Packit Service 1d0348
Packit Service 1d0348

Portable

Packit Service 1d0348
ASCII Format 
Packit Service 1d0348
Version 2 of the Single UNIX Specification
Packit Service 1d0348
(’’SUSv2’’) standardized an ASCII
Packit Service 1d0348
variant that is portable across all platforms. It is
Packit Service 1d0348
commonly known as the ’’old
Packit Service 1d0348
character’’ format or as the
Packit Service 1d0348
’’odc’’ format. It stores the same
Packit Service 1d0348
numeric fields as the old binary format, but represents them
Packit Service 1d0348
as 6-character or 11-character octal values.

Packit Service 1d0348
Packit Service 1d0348

struct

Packit Service 1d0348
cpio_odc_header { 
Packit Service 1d0348
char c_magic[6]; 
Packit Service 1d0348
char c_dev[6]; 
Packit Service 1d0348
char c_ino[6]; 
Packit Service 1d0348
char c_mode[6]; 
Packit Service 1d0348
char c_uid[6]; 
Packit Service 1d0348
char c_gid[6]; 
Packit Service 1d0348
char c_nlink[6]; 
Packit Service 1d0348
char c_rdev[6]; 
Packit Service 1d0348
char c_mtime[11]; 
Packit Service 1d0348
char c_namesize[6]; 
Packit Service 1d0348
char c_filesize[11]; 
Packit Service 1d0348
};

Packit Service 1d0348
Packit Service 1d0348

The fields are

Packit Service 1d0348
identical to those in the old binary format. The name and
Packit Service 1d0348
file body follow the fixed header. Unlike the old binary
Packit Service 1d0348
format, there is no additional padding after the pathname or
Packit Service 1d0348
file contents. If the files being archived are themselves
Packit Service 1d0348
entirely ASCII, then the resulting archive will be entirely
Packit Service 1d0348
ASCII, except for the NUL byte that terminates the name
Packit Service 1d0348
field.

Packit Service 1d0348
Packit Service 1d0348

New ASCII

Packit Service 1d0348
Format 
Packit Service 1d0348
The "new" ASCII format uses 8-byte hexadecimal
Packit Service 1d0348
fields for all numbers and separates device numbers into
Packit Service 1d0348
separate fields for major and minor numbers.

Packit Service 1d0348
Packit Service 1d0348

struct

Packit Service 1d0348
cpio_newc_header { 
Packit Service 1d0348
char c_magic[6]; 
Packit Service 1d0348
char c_ino[8]; 
Packit Service 1d0348
char c_mode[8]; 
Packit Service 1d0348
char c_uid[8]; 
Packit Service 1d0348
char c_gid[8]; 
Packit Service 1d0348
char c_nlink[8]; 
Packit Service 1d0348
char c_mtime[8]; 
Packit Service 1d0348
char c_filesize[8]; 
Packit Service 1d0348
char c_devmajor[8]; 
Packit Service 1d0348
char c_devminor[8]; 
Packit Service 1d0348
char c_rdevmajor[8]; 
Packit Service 1d0348
char c_rdevminor[8]; 
Packit Service 1d0348
char c_namesize[8]; 
Packit Service 1d0348
char c_check[8]; 
Packit Service 1d0348
};

Packit Service 1d0348
Packit Service 1d0348

Except as

Packit Service 1d0348
specified below, the fields here match those specified for
Packit Service 1d0348
the old binary format above.

Packit Service 1d0348
Packit Service 1d0348

magic

Packit Service 1d0348
Packit Service 1d0348

The string

Packit Service 1d0348
’’070701’’.

Packit Service 1d0348
Packit Service 1d0348

check

Packit Service 1d0348
Packit Service 1d0348

This field is

Packit Service 1d0348
always set to zero by writers and ignored by readers. See
Packit Service 1d0348
the next section for more details.

Packit Service 1d0348
Packit Service 1d0348

The pathname is

Packit Service 1d0348
followed by NUL bytes so that the total size of the fixed
Packit Service 1d0348
header plus pathname is a multiple of four. Likewise, the
Packit Service 1d0348
file data is padded to a multiple of four bytes. Note that
Packit Service 1d0348
this format supports only 4 gigabyte files (unlike the older
Packit Service 1d0348
ASCII format, which supports 8 gigabyte files).

Packit Service 1d0348
Packit Service 1d0348

In this format,

Packit Service 1d0348
hardlinked files are handled by setting the filesize to zero
Packit Service 1d0348
for each entry except the last one that appears in the
Packit Service 1d0348
archive.

Packit Service 1d0348
Packit Service 1d0348

New CRC

Packit Service 1d0348
Format 
Packit Service 1d0348
The CRC format is identical to the new ASCII format
Packit Service 1d0348
described in the previous section except that the magic
Packit Service 1d0348
field is set to ’’070702’’ and the
Packit Service 1d0348
check field is set to the sum of all bytes in the
Packit Service 1d0348
file data. This sum is computed treating all bytes as
Packit Service 1d0348
unsigned values and using unsigned arithmetic. Only the
Packit Service 1d0348
least-significant 32 bits of the sum are stored.

Packit Service 1d0348
Packit Service 1d0348

HP

Packit Service 1d0348
variants 
Packit Service 1d0348
The cpio implementation distributed with HPUX used
Packit Service 1d0348
XXXX but stored device numbers differently XXX.

Packit Service 1d0348
Packit Service 1d0348

Other

Packit Service 1d0348
Extensions and Variants 
Packit Service 1d0348
Sun Solaris uses additional file types to store extended
Packit Service 1d0348
file data, including ACLs and extended attributes, as
Packit Service 1d0348
special entries in cpio archives.

Packit Service 1d0348
Packit Service 1d0348

XXX Others?

Packit Service 1d0348
XXX

Packit Service 1d0348
Packit Service 1d0348

SEE ALSO

Packit Service 1d0348
Packit Service 1d0348

cpio(1), tar(5)

Packit Service 1d0348
Packit Service 1d0348

STANDARDS

Packit Service 1d0348
Packit Service 1d0348

The cpio utility is no

Packit Service 1d0348
longer a part of POSIX or the Single Unix Standard. It last
Packit Service 1d0348
appeared in Version 2 of the Single UNIX Specification
Packit Service 1d0348
(’’SUSv2’’). It has been supplanted
Packit Service 1d0348
in subsequent standards by pax(1). The portable ASCII format
Packit Service 1d0348
is currently part of the specification for the pax(1)
Packit Service 1d0348
utility.

Packit Service 1d0348
Packit Service 1d0348

HISTORY

Packit Service 1d0348
Packit Service 1d0348

The original cpio utility was

Packit Service 1d0348
written by Dick Haight while working in AT&T’s
Packit Service 1d0348
Unix Support Group. It appeared in 1977 as part of PWB/UNIX
Packit Service 1d0348
1.0, the ’’Programmer’s Work
Packit Service 1d0348
Bench’’ derived from Version 6 AT&T
Packit Service 1d0348
UNIX that was used internally at AT&T. Both the old
Packit Service 1d0348
binary and old character formats were in use by 1980,
Packit Service 1d0348
according to the System III source released by SCO under
Packit Service 1d0348
their ’’Ancient Unix’’ license. The
Packit Service 1d0348
character format was adopted as part of IEEE Std 1003.1-1988
Packit Service 1d0348
(’’POSIX.1’’). XXX when did
Packit Service 1d0348
"newc" appear? Who invented it? When did HP come
Packit Service 1d0348
out with their variant? When did Sun introduce ACLs and
Packit Service 1d0348
extended attributes? XXX

Packit Service 1d0348
Packit Service 1d0348

BUGS

Packit Service 1d0348
Packit Service 1d0348

The

Packit Service 1d0348
’’CRC’’ format is mis-named, as it
Packit Service 1d0348
uses a simple checksum and not a cyclic redundancy
Packit Service 1d0348
check.

Packit Service 1d0348
Packit Service 1d0348

The old binary

Packit Service 1d0348
format is limited to 16 bits for user id, group id, device,
Packit Service 1d0348
and inode numbers. It is limited to 4 gigabyte file
Packit Service 1d0348
sizes.

Packit Service 1d0348
Packit Service 1d0348

The old ASCII

Packit Service 1d0348
format is limited to 18 bits for the user id, group id,
Packit Service 1d0348
device, and inode numbers. It is limited to 8 gigabyte file
Packit Service 1d0348
sizes.

Packit Service 1d0348
Packit Service 1d0348

The new ASCII

Packit Service 1d0348
format is limited to 4 gigabyte file sizes.

Packit Service 1d0348
Packit Service 1d0348

None of the cpio

Packit Service 1d0348
formats store user or group names, which are essential when
Packit Service 1d0348
moving files between systems with dissimilar user or group
Packit Service 1d0348
numbering.

Packit Service 1d0348
Packit Service 1d0348

Especially when

Packit Service 1d0348
writing older cpio variants, it may be necessary to map
Packit Service 1d0348
actual device/inode values to synthesized values that fit
Packit Service 1d0348
the available fields. With very large filesystems, this may
Packit Service 1d0348
be necessary even for the newer formats.

Packit Service 1d0348
Packit Service 1d0348

BSD

Packit Service 1d0348
December 23, 2011 BSD

Packit Service 1d0348

Packit Service 1d0348
</body>
Packit Service 1d0348
</html>