Provided by: manpages-posix_2013a-2_all bug

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.

NAME

       dd — convert and copy a file

SYNOPSIS

       dd [operand...]

DESCRIPTION

       The dd utility shall copy the specified input file to the specified output file with possible conversions
       using  specific  input  and  output  block  sizes. It shall read the input one block at a time, using the
       specified input block size; it shall then process the block of data actually  returned,  which  could  be
       smaller  than the requested block size. It shall apply any conversions that have been specified and write
       the resulting data to the output in blocks of the specified output block size. If the bs=expr operand  is
       specified  and  no conversions other than sync, noerror, or notrunc are requested, the data returned from
       each input block shall be written as a separate output block; if the read returns less than a full  block
       and  the sync conversion is not specified, the resulting output block shall be the same size as the input
       block. If the bs=expr operand is not specified, or a conversion other than sync, noerror, or  notrunc  is
       requested,  the input shall be processed and collected into full-sized output blocks until the end of the
       input is reached.

       The processing order shall be as follows:

        1. An input block is read.

        2. If the input block is shorter than the  specified  input  block  size  and  the  sync  conversion  is
           specified,  null bytes shall be appended to the input data up to the specified size. (If either block
           or unblock is also specified, <space> characters shall  be  appended  instead  of  null  bytes.)  The
           remaining  conversions  and output shall include the pad characters as if they had been read from the
           input.

        3. If the bs=expr operand is specified and no conversion other than sync or noerror  is  requested,  the
           resulting data shall be written to the output as a single block, and the remaining steps are omitted.

        4. If  the  swab conversion is specified, each pair of input data bytes shall be swapped. If there is an
           odd number of bytes in the input block, the last byte in the input record shall not be swapped.

        5. Any remaining conversions (block, unblock, lcase, and ucase) shall be  performed.  These  conversions
           shall  operate on the input data independently of the input blocking; an input or output fixed-length
           record may span block boundaries.

        6. The data resulting from input or conversion or both shall be aggregated into  output  blocks  of  the
           specified  size.  After the end of input is reached, any remaining output shall be written as a block
           without padding if conv=sync is not specified; thus, the final output block may be shorter  than  the
           output block size.

OPTIONS

       None.

OPERANDS

       All  of  the  operands  shall  be  processed  before  any input is read.  The following operands shall be
       supported:

       if=file   Specify the input pathname; the default is standard input.

       of=file   Specify the output pathname; the default is standard output. If the seek=expr conversion is not
                 also specified, the output file shall be truncated  before  the  copy  begins  if  an  explicit
                 of=file  operand is specified, unless conv=notrunc is specified. If seek=expr is specified, but
                 conv=notrunc is not, the effect of the copy shall be to preserve the blocks in the output  file
                 over  which  dd seeks, but no other portion of the output file shall be preserved. (If the size
                 of the seek plus the size of the input file is less than the previous size of the output  file,
                 the  output file shall be shortened by the copy. If the input file is empty and either the size
                 of the seek is greater than the previous size of the output file or the  output  file  did  not
                 previously exist, the size of the output file shall be set to the file offset after the seek.)

       ibs=expr  Specify the input block size, in bytes, by expr (default is 512).

       obs=expr  Specify the output block size, in bytes, by expr (default is 512).

       bs=expr   Set  both  input  and  output  block  sizes  to  expr  bytes, superseding ibs= and obs=.  If no
                 conversion other than sync, noerror, and notrunc is specified, each input block shall be copied
                 to the output as a single block without aggregating short blocks.

       cbs=expr  Specify the conversion block size for block and unblock in bytes by expr (default is zero).  If
                 cbs= is omitted or given a value of zero, using block or unblock produces unspecified results.

                 The  application  shall  ensure  that  this  operand  is also specified if the conv= operand is
                 specified with a value of ascii, ebcdic, or ibm.  For a conv= operand with an ascii value,  the
                 input  is  handled  as described for the unblock value, except that characters are converted to
                 ASCII before any trailing <space> characters are deleted. For conv= operands with ebcdic or ibm
                 values, the input is handled as described for the block value except that  the  characters  are
                 converted  to  EBCDIC  or  IBM  EBCDIC, respectively, after any trailing <space> characters are
                 added.

       skip=n    Skip n input blocks (using the specified input block size) before starting to copy. On seekable
                 files, the implementation shall read the blocks or seek past them; on non-seekable  files,  the
                 blocks shall be read and the data shall be discarded.

       seek=n    Skip  n  blocks  (using  the specified output block size) from the beginning of the output file
                 before copying. On non-seekable files, existing blocks shall be read and space from the current
                 end-of-file to the specified offset, if any, filled with null bytes;  on  seekable  files,  the
                 implementation  shall  seek  to  the  specified offset or read the blocks as described for non-
                 seekable files.

       count=n   Copy only n input blocks.

       conv=value[,value ...]
                 Where values are <comma>-separated symbols from the following list:

                 ascii    Convert EBCDIC to ASCII; see Table 4-7, ASCII to EBCDIC Conversion.

                 ebcdic   Convert ASCII to EBCDIC; see Table 4-7, ASCII to EBCDIC Conversion.

                 ibm      Convert ASCII to  a  different  EBCDIC  set;  see  Table  4-8,  ASCII  to  IBM  EBCDIC
                          Conversion.

                 The ascii, ebcdic, and ibm values are mutually-exclusive.

                 block    Treat  the  input  as  a  sequence  of  <newline>-terminated or end-of-file-terminated
                          variable-length records independent of the input block boundaries. Each  record  shall
                          be  converted  to a record with a fixed length specified by the conversion block size.
                          Any <newline> shall be removed from  the  input  line;  <space>  characters  shall  be
                          appended to lines that are shorter than their conversion block size to fill the block.
                          Lines that are longer than the conversion block size shall be truncated to the largest
                          number  of  characters that fit into that size; the number of truncated lines shall be
                          reported (see the STDERR section).

                          The block and unblock values are mutually-exclusive.

                 unblock  Convert fixed-length records to variable length. Read a number of bytes equal  to  the
                          conversion block size (or the number of bytes remaining in the input, if less than the
                          conversion  block  size),  delete  all  trailing  <space>  characters,  and  append  a
                          <newline>.

                 lcase    Map  uppercase  characters  specified  by  the  LC_CTYPE  keyword   tolower   to   the
                          corresponding  lowercase character. Characters for which no mapping is specified shall
                          not be modified by this conversion.

                          The lcase and ucase symbols are mutually-exclusive.

                 ucase    Map  lowercase  characters  specified  by  the  LC_CTYPE  keyword   toupper   to   the
                          corresponding  uppercase character. Characters for which no mapping is specified shall
                          not be modified by this conversion.

                 swab     Swap every pair of input bytes.

                 noerror  Do not stop processing on an input error. When an input  error  occurs,  a  diagnostic
                          message  shall  be written on standard error, followed by the current input and output
                          block counts in the same format as used at completion (see the STDERR section). If the
                          sync conversion is specified, the missing input shall be replaced with null bytes  and
                          processed normally; otherwise, the input block shall be omitted from the output.

                 notrunc  Do  not  truncate  the  output file. Preserve blocks in the output file not explicitly
                          written by this invocation  of  the  dd  utility.  (See  also  the  preceding  of=file
                          operand.)

                 sync     Pad every input block to the size of the ibs= buffer, appending null bytes. (If either
                          block  or  unblock  is  also  specified,  append  <space> characters, rather than null
                          bytes.)

       The behavior is unspecified if operands other than conv= are specified more than once.

       For the bs=, cbs=, ibs=, and obs= operands, the application shall supply an expression specifying a  size
       in bytes. The expression, expr, can be:

        1. A positive decimal number

        2. A positive decimal number followed by k, specifying multiplication by 1024

        3. A positive decimal number followed by b, specifying multiplication by 512

        4. Two  or more positive decimal numbers (with or without k or b) separated by x, specifying the product
           of the indicated values

       All of the operands are processed before any input is read.

       The following two tables display the octal  number  character  values  used  for  the  ascii  and  ebcdic
       conversions (first table) and for the ibm conversion (second table). In both tables, the ASCII values are
       the  row  and  column  headers and the EBCDIC values are found at their intersections. For example, ASCII
       0012 (LF) is the second row, third column, yielding 0045 in EBCDIC. The inverted tables  (for  EBCDIC  to
       ASCII  conversion) are not shown, but are in one-to-one correspondence with these tables. The differences
       between the two tables are highlighted by small boxes drawn around five entries.

                                         Table 4-7: ASCII to EBCDIC Conversion
                                       Table 4-8: ASCII to IBM EBCDIC Conversion

STDIN

       If no if= operand is specified, the standard input shall be used. See the INPUT FILES section.

INPUT FILES

       The input file can be any file type.

ENVIRONMENT VARIABLES

       The following environment variables shall affect the execution of dd:

       LANG      Provide a default value for the internationalization variables that are unset or null. (See the
                 Base Definitions volume of POSIX.1‐2008, Section 8.2, Internationalization  Variables  for  the
                 precedence   of   internationalization  variables  used  to  determine  the  values  of  locale
                 categories.)

       LC_ALL    If set to a non-empty string value, override the values of all the  other  internationalization
                 variables.

       LC_CTYPE  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  classification of characters as uppercase or lowercase, and the mapping of characters from
                 one case to the other.

       LC_MESSAGES
                 Determine the locale that should be used to  affect  the  format  and  contents  of  diagnostic
                 messages written to standard error and informative messages written to standard output.

       NLSPATH   Determine the location of message catalogs for the processing of LC_MESSAGES.

ASYNCHRONOUS EVENTS

       For  SIGINT,  the dd utility shall interrupt its current processing, write status information to standard
       error, and exit as though terminated by SIGINT. It shall take the standard action for all other  signals;
       see the ASYNCHRONOUS EVENTS section in Section 1.4, Utility Description Defaults.

STDOUT

       If  no  of=  operand is specified, the standard output shall be used. The nature of the output depends on
       the operands selected.

STDERR

       On completion, dd shall write the number of input and output blocks  to  standard  error.  In  the  POSIX
       locale the following formats shall be used:

           "%u+%u records in\n", <number of whole input blocks>,
               <number of partial input blocks>

           "%u+%u records out\n", <number of whole output blocks>,
               <number of partial output blocks>

       A  partial  input block is one for which read() returned less than the input block size. A partial output
       block is one that was written with fewer bytes than specified by the output block size.

       In addition, when there is at least one truncated block, the number of truncated blocks shall be  written
       to standard error. In the POSIX locale, the format shall be:

           "%u truncated %s\n", <number of truncated blocks>, "record" (if
               <number of truncated blocks> is one) "records" (otherwise)

       Diagnostic messages may also be written to standard error.

OUTPUT FILES

       If the of= operand is used, the output shall be the same as described in the STDOUT section.

EXTENDED DESCRIPTION

       None.

EXIT STATUS

       The following exit values shall be returned:

        0    The input file was copied successfully.

       >0    An error occurred.

CONSEQUENCES OF ERRORS

       If an input error is detected and the noerror conversion has not been specified, any partial output block
       shall  be written to the output file, a diagnostic message shall be written, and the copy operation shall
       be discontinued. If some other error is detected, a diagnostic message shall  be  written  and  the  copy
       operation shall be discontinued.

       The following sections are informative.

APPLICATION USAGE

       The input and output block size can be specified to take advantage of raw physical I/O.

       There  are many different versions of the EBCDIC codesets. The ASCII and EBCDIC conversions specified for
       the dd utility perform conversions for the version specified by the tables.

EXAMPLES

       The following command:

           dd if=/dev/rmt0h  of=/dev/rmt1h

       copies from tape drive 0 to tape drive 1, using a common historical device naming convention.

       The following command:

           dd ibs=10  skip=1

       strips the first 10 bytes from standard input.

       This example reads an EBCDIC tape blocked ten 80-byte EBCDIC card images per block into the ASCII file x:

           dd if=/dev/tape of=x ibs=800 cbs=80 conv=ascii,lcase

RATIONALE

       The OPTIONS section is listed as ``None'' because there  are  no  options  recognized  by  historical  dd
       utilities. Certainly, many of the operands could have been designed to use the Utility Syntax Guidelines,
       which  would  have  resulted  in the classic hyphenated option letters. In this version of this volume of
       POSIX.1‐2008, dd retains its curious JCL-like syntax due to the large number of applications that  depend
       on the historical implementation.

       A  suggested  implementation  technique for conv=noerror,sync is to zero (or <space>-fill, if blocking or
       unblocking) the input buffer before each read and to write the contents of the input buffer to the output
       even after an error. In this manner, any data transferred to  the  input  buffer  before  the  error  was
       detected is preserved. Another point is that a failed read on a regular file or a disk generally does not
       increment  the  file offset, and dd must then seek past the block on which the error occurred; otherwise,
       the input error occurs repetitively. When the input is a magnetic tape, however, the  tape  normally  has
       passed the block containing the error when the error is reported, and thus no seek is necessary.

       The  default  ibs=  and  obs=  sizes  are  specified  as  512 bytes because there are historical (largely
       portable) scripts that assume these values. If they were left unspecified, unusual results could occur if
       an implementation chose an odd block size.

       Historical implementations of dd used creat() when processing of=file.   This  makes  the  seek=  operand
       unusable  except  on  special  files.  The  conv=notrunc  feature was added because more recent BSD-based
       implementations use open() (without O_TRUNC) instead of creat(), but they  fail  to  delete  output  file
       contents after the data copied.

       The  w  multiplier  (historically  meaning word), is used in System V to mean 2 and in 4.2 BSD to mean 4.
       Since word is inherently non-portable, its use is not supported by this volume of POSIX.1‐2008.

       Standard EBCDIC does not have the characters '[' and ']'.  The values used in the table are taken from  a
       common  print  train  that does contain them. Other than those characters, the print train values are not
       filled in, but appear to provide some of  the  motivation  for  the  historical  choice  of  translations
       reflected here.

       The Standard EBCDIC table provides a 1:1 translation for all 256 bytes.

       The IBM EBCDIC table does not provide such a translation. The marked cells in the tables differ in such a
       way that:

        1. EBCDIC 0112 ('¢') and 0152 (broken pipe) do not appear in the table.

        2. EBCDIC  0137  ('¬')  translates  to/from  ASCII  0236  ('^').  In the standard table, EBCDIC 0232 (no
           graphic) is used.

        3. EBCDIC 0241 ('~') translates to/from ASCII 0176 ('~').  In the standard table, EBCDIC 0137  ('¬')  is
           used.

        4. 0255  ('[') and 0275 (']') appear twice, once in the same place as for the standard table and once in
           place of 0112 ('¢') and 0241 ('~').

       In net result:

              EBCDIC 0275 (']') displaced EBCDIC 0241 ('~') in cell 0345.

                  That displaced EBCDIC 0137 ('¬') in cell 0176.

                  That displaced EBCDIC 0232 (no graphic) in cell 0136.

                  That replaced EBCDIC 0152 (broken pipe) in cell 0313.

              EBCDIC 0255 ('[') replaced EBCDIC 0112 ('¢').

       This translation, however, reflects historical practice that (ASCII) '~' and '¬'  were  often  mapped  to
       each other, as were '[' and '¢'; and ']' and (EBCDIC) '~'.

       The  cbs  operand  is  required if any of the ascii, ebcdic, or ibm operands are specified. For the ascii
       operand, the input is handled as described for the unblock operand except that characters  are  converted
       to  ASCII  before the trailing <space> characters are deleted. For the ebcdic and ibm operands, the input
       is handled as described for the block operand except that the characters are converted to EBCDIC  or  IBM
       EBCDIC after the trailing <space> characters are added.

       The block and unblock keywords are from historical BSD practice.

       The  consistent  use  of  the word record in standard error messages matches most historical practice. An
       earlier version of System V used block, but this has been updated in more recent releases.

       Early proposals only allowed two numbers separated by x to be used in  a  product  when  specifying  bs=,
       cbs=,  ibs=,  and  obs=  sizes.  This was changed to reflect the historical practice of allowing multiple
       numbers in the product as provided by Version 7 and all releases of System V and BSD.

       A change to the swab conversion is required to match historical practice and is the result of  IEEE  PASC
       Interpretations 1003.2 #03 and #04, submitted for the ISO POSIX‐2:1993 standard.

       A  change  to  the  handling of SIGINT is required to match historical practice and is the result of IEEE
       PASC Interpretation 1003.2 #06 submitted for the ISO POSIX‐2:1993 standard.

FUTURE DIRECTIONS

       None.

SEE ALSO

       Section 1.4, Utility Description Defaults, sed, tr

       The Base Definitions volume of POSIX.1‐2008, Chapter 8, Environment Variables

COPYRIGHT

       Portions of this text are reprinted and reproduced in electronic form from IEEE Std 1003.1, 2013 Edition,
       Standard for Information Technology -- Portable Operating System Interface (POSIX), The Open  Group  Base
       Specifications  Issue 7, Copyright (C) 2013 by the Institute of Electrical and Electronics Engineers, Inc
       and The Open Group.  (This is POSIX.1-2008 with the 2013 Technical Corrigendum 1 applied.) 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.unix.org/online.html .

       Any typographical or formatting errors that appear in this page are most likely to have  been  introduced
       during   the   conversion  of  the  source  files  to  man  page  format.  To  report  such  errors,  see
       https://www.kernel.org/doc/man-pages/reporting_bugs.html .

IEEE/The Open Group                                   2013                                            DD(1POSIX)