Skip to main content

du command

du - estimate file space usage

The du command in Linux is a utility used to estimate disk usage of files and directories. It’s perfect for finding out how much space a folder or file takes up, helping you manage storage.

Usage: du [OPTION]... [FILE]...

  • FILE: The file or directory to analyze (defaults to the current directory if omitted).
  • OPTION: Flags to modify output or behavior.

Common Options

OptionDescription
-hHuman-readable sizes (e.g., MB, GB)
-aInclude all files, not just directories
-sSummarize total size only
--max-depthLimit subdirectory depth
--excludeExclude files matching a pattern
-cShow a grand total

Examples

  • Basic Usage

    Run du on a directory to see its total size in kilobytes (KB).

    du /home/user/docs
    • Output (example):
      4096    /home/user/docs
    • Shows the size of docs (4096 KB = 4 MB).

    Current Directory:

    du
    • Lists sizes for all subdirectories and a total for ..
  • Human-Readable Output

    Use -h to display sizes in a readable format (e.g., KB, MB, GB).

    du -h /home/user/docs
    • Output:
      4.0M    /home/user/docs
  • Including Subdirectories

    By default, du shows sizes for subdirectories too. Use -a to include files.

    du -ah /home/user/docs
    • Output:
      1.5M    /home/user/docs/file1.txt
      2.0M /home/user/docs/file2.pdf
      512K /home/user/docs/subdir/file3.txt
      4.0M /home/user/docs
    • -a: Shows all files and directories.
  • Total Size Only

    Use -s to summarize the total size of a directory.

    du -sh /home/user/docs
    • Output:
      4.0M    /home/user/docs
    • -s: Summarize total size only.
  • Depth Control

    Use --max-depth=N to limit how many subdirectory levels are shown.

    du -h --max-depth=1 /home/user
    • Output:
      4.0M    /home/user/docs
      2.0G /home/user/videos
      2.1G /home/user
    • Shows only one level deep.
  • Excluding Files

    Use --exclude=PATTERN to skip certain files or directories.

    du -sh --exclude="*.txt" /home/user/docs
    • Excludes .txt files from the total.
  • Sorting Output

    Pipe du with sort for ordered results.

    du -ah /home/user/docs | sort -hr
    • Output:
      4.0M    /home/user/docs
      2.0M /home/user/docs/file2.pdf
      1.5M /home/user/docs/file1.txt
      512K /home/user/docs/subdir/file3.txt
    • -hr: Sorts by size (human-readable), descending.
$ du --help
Usage: du [OPTION]... [FILE]...
or: du [OPTION]... --files0-from=F
Summarize disk usage of the set of FILEs, recursively for directories.

Mandatory arguments to long options are mandatory for short options too.
-0, --null end each output line with NUL, not newline
-a, --all write counts for all files, not just directories
--apparent-size print apparent sizes, rather than disk usage; although
the apparent size is usually smaller, it may be
larger due to holes in ('sparse') files, internal
fragmentation, indirect blocks, and the like
-B, --block-size=SIZE scale sizes by SIZE before printing them; e.g.,
'-BM' prints sizes in units of 1,048,576 bytes;
see SIZE format below
-b, --bytes equivalent to '--apparent-size --block-size=1'
-c, --total produce a grand total
-D, --dereference-args dereference only symlinks that are listed on the
command line
-d, --max-depth=N print the total for a directory (or file, with --all)
only if it is N or fewer levels below the command
line argument; --max-depth=0 is the same as
--summarize
--files0-from=F summarize disk usage of the
NUL-terminated file names specified in file F;
if F is -, then read names from standard input
-H equivalent to --dereference-args (-D)
-h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G)
--inodes list inode usage information instead of block usage
-k like --block-size=1K
-L, --dereference dereference all symbolic links
-l, --count-links count sizes many times if hard linked
-m like --block-size=1M
-P, --no-dereference don't follow any symbolic links (this is the default)
-S, --separate-dirs for directories do not include size of subdirectories
--si like -h, but use powers of 1000 not 1024
-s, --summarize display only a total for each argument
-t, --threshold=SIZE exclude entries smaller than SIZE if positive,
or entries greater than SIZE if negative
--time show time of the last modification of any file in the
directory, or any of its subdirectories
--time=WORD show time as WORD instead of modification time:
atime, access, use, ctime or status
--time-style=STYLE show times using STYLE, which can be:
full-iso, long-iso, iso, or +FORMAT;
FORMAT is interpreted like in 'date'
-X, --exclude-from=FILE exclude files that match any pattern in FILE
--exclude=PATTERN exclude files that match PATTERN
-x, --one-file-system skip directories on different file systems
--help display this help and exit
--version output version information and exit

Display values are in units of the first available SIZE from --block-size,
and the DU_BLOCK_SIZE, BLOCK_SIZE and BLOCKSIZE environment variables.
Otherwise, units default to 1024 bytes (or 512 if POSIXLY_CORRECT is set).

The SIZE argument is an integer and optional unit (example: 10K is 10*1024).
Units are K,M,G,T,P,E,Z,Y (powers of 1024) or KB,MB,... (powers of 1000).
Binary prefixes can be used, too: KiB=K, MiB=M, and so on.

For more details, check the manual with man du