In Linux, managing disk space effectively involves understanding the size of both files and directories. Tools like ls and stat give basic details, but du is designed specifically for checking directory size and folder size. It shows not just the size of individual files, but also recursively provides the size of all contents in a directory.

The du command can display the size of files and directories in various formats, making it a versatile tool for keeping track of disk usage. This command can be used to find large folders or files that might need to be cleaned up to free up space. It also supports various options that allow users to customize the output, such as showing sizes in human-readable formats or specifying how deep to go when inspecting nested directories.

For administrators or users managing Linux systems, knowing how to check directory sizes is a crucial part of system maintenance. With du, you can identify which directories or files are taking up the most space. This makes it easier to clean up unnecessary files and better manage available storage, especially in environments with limited disk space.

Steps to check directory and file sizes in Linux:

  1. Check the size of a specific file.
    $ du Documents/random.txt 
    16	Documents/random.txt

    Shows the file size in 1K blocks by default.

  2. Display the size in a human-readable format.
    $ du -h Documents/random.txt 
    16K	Documents/random.txt

    Displays the size in kilobytes (K), megabytes (M), or gigabytes (G), depending on the file size.

  3. Show the size of all folders within a directory recursively.
    $ du -h Documents/
    21M	Documents/Finance
    4.0K	Documents/Secret/Empty
    40K	Documents/Secret
    21M	Documents/

    This command will display the size of each folder and subfolder within the directory.

  4. Limit the depth of recursive folder size display.
    $ du -h --max-depth=1 Documents/
    21M	Documents/Finance
    40K	Documents/Secret
    21M	Documents/

    Setting max-depth allows you to control how deep to explore subdirectories.

  5. Show folder sizes, including the total size.
    $ du -hc Documents/
    21M	Documents/Finance
    4.0K	Documents/Secret/Empty
    40K	Documents/Secret
    21M	Documents/
    21M	total
  6. Display the total size of a folder.
    $ du -hs Documents/
    21M	Documents/

    The -s flag summarizes the size of the directory without listing individual files or subfolders.

  7. Check system folder sizes with elevated permissions.
    $ sudo du -hs /var/cache/
    [sudo] password for user: 
    117M	/var/cache/

    Useful for checking sizes in system directories that require root access.

  8. Show non-recursive folder sizes using a wildcard.
    $ sudo du -hs /var/cache/*
    6.2M	/var/cache/apparmor
    16M	/var/cache/app-info
    75M	/var/cache/apt
    6.1M	/var/cache/cracklib
    32K	/var/cache/cups
    5.2M	/var/cache/debconf
    40K	/var/cache/dictionaries-common
    2.7M	/var/cache/fontconfig
    2.1M	/var/cache/fwupd
    0	/var/cache/fwupdmgr
    60K	/var/cache/ldconfig
    2.1M	/var/cache/man
    8.0K	/var/cache/PackageKit
    8.0K	/var/cache/private
    4.0K	/var/cache/realmd
    2.2M	/var/cache/snapd

    This will display the size of each folder inside var/cache without diving into subdirectories.

  9. Use the du command with more options.
    $ 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.
    
    GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
    Full documentation <https://www.gnu.org/software/coreutils/du>
    or available locally via: info '(coreutils) du invocation'

    Related: du man page

Discuss the article:

Comment anonymously. Login not required.