Provided by: manpages-posix_2017a-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

       du — estimate file space usage

SYNOPSIS

       du [-a|-s] [-kx] [-H|-L] [file...]

DESCRIPTION

       By  default,  the  du  utility  shall  write to standard output the size of the file space
       allocated to, and the size of the file space allocated to each subdirectory of,  the  file
       hierarchy  rooted  in  each  of  the  specified files. By default, when a symbolic link is
       encountered on the command line or in the file hierarchy, du shall count the size  of  the
       symbolic link (rather than the file referenced by the link), and shall not follow the link
       to another portion of the file hierarchy. The size of the file space allocated to  a  file
       of type directory shall be defined as the sum total of space allocated to all files in the
       file hierarchy rooted in the directory plus the space allocated to the directory itself.

       When du cannot stat() files or stat() or  read  directories,  it  shall  report  an  error
       condition  and  the final exit status is affected. A file that occurs multiple times under
       one file operand and that has a link count greater than 1 shall be counted and written for
       only  one  entry.  It  is  implementation-defined  whether a file that has a link count no
       greater than 1 is counted and written just once,  or  is  counted  and  written  for  each
       occurrence. It is implementation-defined whether a file that occurs under one file operand
       is counted for other file operands. The directory entry that is selected in the report  is
       unspecified.  By default, file sizes shall be written in 512-byte units, rounded up to the
       next 512-byte unit.

OPTIONS

       The du utility shall conform to the Base Definitions volume of POSIX.1‐2017, Section 12.2,
       Utility Syntax Guidelines.

       The following options shall be supported:

       -a        In  addition  to  the  default  output, report the size of each file not of type
                 directory in the file hierarchy rooted in the specified  file.   The  -a  option
                 shall not affect whether non-directories given as file operands are listed.

       -H        If  a symbolic link is specified on the command line, du shall count the size of
                 the file or file hierarchy referenced by the link.

       -k        Write the files sizes in units of 1024 bytes, rather than the  default  512-byte
                 units.

       -L        If  a  symbolic  link is specified on the command line or encountered during the
                 traversal of a file hierarchy, du shall count the  size  of  the  file  or  file
                 hierarchy referenced by the link.

       -s        Instead  of  the  default  output,  report  only  the  total sum for each of the
                 specified files.

       -x        When evaluating file sizes, evaluate only those files that have the same  device
                 as the file specified by the file operand.

       Specifying  more  than  one  of  the  mutually-exclusive  options  -H  and -L shall not be
       considered an error. The last  option  specified  shall  determine  the  behavior  of  the
       utility.

OPERANDS

       The following operand shall be supported:

       file      The pathname of a file whose size is to be written. If no file is specified, the
                 current directory shall be used.

STDIN

       Not used.

INPUT FILES

       None.

ENVIRONMENT VARIABLES

       The following environment variables shall affect the execution of du:

       LANG      Provide a default value for the internationalization variables that are unset or
                 null.   (See   the   Base  Definitions  volume  of  POSIX.1‐2017,  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).

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

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

ASYNCHRONOUS EVENTS

       Default.

STDOUT

       The  output  from du shall consist of the amount of space allocated to a file and the name
       of the file, in the following format:

           "%d %s\n", <size>, <pathname>

STDERR

       The standard error shall be used only for diagnostic messages.

OUTPUT FILES

       None.

EXTENDED DESCRIPTION

       None.

EXIT STATUS

       The following exit values shall be returned:

        0    Successful completion.

       >0    An error occurred.

CONSEQUENCES OF ERRORS

       Default.

       The following sections are informative.

APPLICATION USAGE

       None.

EXAMPLES

       None.

RATIONALE

       The use of 512-byte units is historical practice and maintains compatibility with  ls  and
       other utilities in this volume of POSIX.1‐2017. This does not mandate that the file system
       itself be based on 512-byte blocks. The -k option was added as a  compromise  measure.  It
       was  agreed by the standard developers that 512 bytes was the best default unit because of
       its complete historical consistency on System V (versus the mixed 512/1024-byte  usage  on
       BSD  systems),  and  that  a -k option to switch to 1024-byte units was a good compromise.
       Users who prefer the 1024-byte quantity can easily alias du to du -k without breaking  the
       many historical scripts relying on the 512-byte units.

       The  -b  option  was  added  to an early proposal to provide a resolution to the situation
       where System V and BSD systems give  figures  for  file  sizes  in  blocks,  which  is  an
       implementation-defined concept. (In common usage, the block size is 512 bytes for System V
       and 1024 bytes for BSD systems.)  However, -b was later deleted,  since  the  default  was
       eventually decided as 512-byte units.

       Historical  file  systems provided no way to obtain exact figures for the space allocation
       given to files. There are two known areas of  inaccuracies  in  historical  file  systems:
       cases  of  indirect  blocks  being  used  by  the  file  system  or  sparse files yielding
       incorrectly high values. An indirect block is space used by the file system in the storage
       of  the  file,  but  that need not be counted in the space allocated to the file. A sparse
       file is one in which an lseek() call has been made to a position beyond  the  end  of  the
       file and data has subsequently been written at that point. A file system need not allocate
       all the intervening zero-filled blocks to such a file. It is up to the  implementation  to
       define exactly how accurate its methods are.

       The  -a  and  -s options were mutually-exclusive in the original version of du.  The POSIX
       Shell and Utilities description is implied by  the  language  in  the  SVID  where  -s  is
       described  as  causing  ``only  the grand total'' to be reported. Some systems may produce
       output for -sa, but a Strictly Conforming POSIX Shell and Utilities Application cannot use
       that combination.

       The  -a and -s options were adopted from the SVID except that the System V behavior of not
       listing non-directories explicitly given as operands, unless the -a option  is  specified,
       was  considered  a  bug; the BSD-based behavior (report for all operands) is mandated. The
       default behavior of du in the SVID with regard to reporting the failure to read files  (it
       produces no messages) was considered counter-intuitive, and thus it was specified that the
       POSIX Shell and Utilities default behavior  shall  be  to  produce  such  messages.  These
       messages can be turned off with shell redirection to achieve the System V behavior.

       The  -x  option  is historical practice on recent BSD systems. It has been adopted by this
       volume of POSIX.1‐2017 because there was no other historical method  of  limiting  the  du
       search  to  a single file hierarchy. This limitation of the search is necessary to make it
       possible to obtain file space usage information about a file system on  which  other  file
       systems are mounted, without having to resort to a lengthy find and awk script.

FUTURE DIRECTIONS

       A future version of this standard may require that a file that occurs multiple times shall
       be counted and written for only one entry, even if the  occurrences  are  under  different
       file operands.

SEE ALSO

       ls

       The  Base  Definitions  volume  of POSIX.1‐2017, Chapter 8, Environment Variables, Section
       12.2, Utility Syntax Guidelines

       The System Interfaces volume of POSIX.1‐2017, fstatat()

COPYRIGHT

       Portions of this text are reprinted and  reproduced  in  electronic  form  from  IEEE  Std
       1003.1-2017,  Standard  for  Information Technology -- Portable Operating System Interface
       (POSIX), The Open Group Base Specifications Issue 7, 2018 Edition, Copyright (C)  2018  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 .

       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 .