How to use 'du' command in Linux?

I’m struggling with the ‘du’ command on my Linux system and need help. Trying to find out disk usage of directories but not getting the expected results. Can someone explain its usage and possible options to get accurate disk usage information?

Ah, the du command. It can be a bit tricky at first, but once you get the hang of it, you’ll find it indispensable for managing your disk usage in Linux. Here’s a breakdown to help you out.

Basic Usage

The most basic way to use du is by simply typing:

du

This will display the disk usage of all files and directories in the current directory. However, the sizes are shown in blocks by default, which can be a bit cryptic.

Human-Readable Format

To get the output in a human-readable format (e.g., KB, MB), use the -h option:

du -h

Summarizing at Directory Level

Sometimes, you may just want a summary of the total disk usage. The -s option will help you with that:

du -sh

Here, -s stands for “summary,” and combining it with -h makes it human-readable.

Showing Disk Usage of All Files and Subdirectories

To see the disk usage of each file and subdirectory within a directory, you can use:

du -a

If you also add the -h option:

du -ah

This will give you a detailed list, but in a more readable format.

Specifying a Directory

If you want to check the disk usage of a specific directory, include the directory name at the end:

du -sh /path/to/directory

Depth Control

You can control how deep du goes into directories with the --max-depth option. For example:

du -h --max-depth=1

This command will show the disk usage at one level deep. If you want to go two levels deep:

du -h --max-depth=2

Excluding Specific Files and Directories

If there are specific files or directories you want to exclude, use the --exclude option:

du -h --exclude="*.log"

This command will exclude all .log files from the output. You can also exclude directories, like:

du -h --exclude="/path/to/exclude"

Combining Options

You can combine several of these options for more detailed or specific output. For example, if you want a summary of all directories one level deep in a human-readable format, you could use:

du -h --max-depth=1 /path/to/directory

Or if you want to exclude certain files/directories at the same time:

du -h --max-depth=1 --exclude="*.log" /path/to/directory

Extra Tips

  1. Checking Specific Files: If you’re only interested in specific files, you can include them directly.

    du -h /path/to/file
    
  2. Sorting Results: If you want to sort the results, you’ll need to pipe the output to sort. For example, to sort by size:

    du -h /path/to/directory | sort -h
    
  3. Using ncdu: For a more interactive experience, you might want to check out ncdu, which is a curses-based version of du.

    sudo apt install ncdu  # or yum install ncdu, depending on your distro
    ncdu /path/to/directory
    

    This will give you a graphical display to browse through the directory sizes.

Potential Pitfalls

  • Disk Block Size: Remember that disk usage values can be affected by the block size of your filesystem. Smaller files might appear to take more space due to block size rounding.

  • File Permissions: Sometimes, you might not get the expected results due to insufficient permissions. Make sure you have read access to all files and directories you’re checking.

  • Symbolic Links: By default, du doesn’t follow symbolic links. If you want it to follow them, use the -L option.

    du -L -h /path/to/directory
    
  • Hidden Files: du includes hidden files by default. If you’re missing space, it might be due to these. Use the detailed options to dig into hidden files if necessary.

Recap

Here’s a quick summary of some useful command combos:

  • Simple summary of a directory:

    du -sh /path/to/directory
    
  • Detailed list with human-readable output:

    du -ah /path/to/directory
    
  • Summary with certain depth:

    du -h --max-depth=1 /path/to/directory
    

Experiment with these commands, and pretty soon, you’ll be a du pro!

I see you’re getting the hang of du! I remember the frustration when I first used it. Let me throw some additional nuances your way, especially addressing quirks that haven’t been covered yet.

Real-world Quirks

Sparse Files:
Sparse files are a major trap. If you’re dealing with databases or VM disk images, you’re probably losing your mind over du’s behavior. By default, du shows the apparent size. Use --apparent-size to see the logical size (i.e., excluding holes in sparse files):

du --apparent-size -h /path/to/file

Average File Sizes and Counting

Sometimes, you want to know not just disk usage, but also how many files are contributing to that mess:

du -a | wc -l

This combines du -a’s detailed listing with wc -l to count lines (files).

File Types Focus

Interested in tracking down specific types of files? Use find in conjunction with du:

find /path/to/directory -name '*.ext' -exec du -sh {} + 

This lists the disk usage of files in human-readable format by their extension.

Real Disk Usage

For efficiency nerds, --apparent-size on its own isn’t enough. Consider using du -b (to check byte counts):

du -b /path/to/check

Interactive Tools

Actually, ncdu is great, but have you tried baobab? If you’re okay with a GUI, it’s super slick for drilling down into disk usage.

Install:

sudo apt install baobab

Exclude Doesn’t Always Work as Expected

Sometimes --exclude fails silently due to syntax errors. Ensure your patterns are correct. Here’s an example excluding multiple patterns:

du -h --exclude="*.log" --exclude="*.tmp" /path/to/directory

Sorting with More Control

@byteguru mentioned sorting, but another useful trick is:

du -h /path/to/directory | sort -rh | head

This sorts in reverse and displays top entries only. Perfect for quickly identifying what’s hogging space.

Hidden Files Mystery

Heads up! Hidden files can be tricky with permissions. Even with -a, you may need sudo to see certain files:

sudo du -ah /path/to/directory

Disk Usage Over NFS

du over NFS or network-mounted file systems can be notoriously inaccurate. For real stats, consider running du on the server itself, not the client.

All in all…

Despite its quirks and hidden edges, du is an essential tool. Combining it with other utilities like find, sort, or even newer alternatives like dust helps tailor the output to your specific needs. Give these tweaks a shot, and your work will definitely become easier and more intuitive!

Seriously, another discussion about the du command? Here’s the real deal—du is fine for basic tasks, but it’s pretty outdated for any serious work.

Real-World Usage

Accuracy Problems

You often end up with weird numbers because du doesn’t account for block size accurately. It’s fine if you just want a ballpark figure but those suggesting -h --max-depth=1—well, that’s just a crude shortcut.

Symbolic Links and Permissions

And let’s not even start with symbolic links and permissions issues! People act like adding -L or using sudo fixes everything, but oftentimes it just creates more confusion and can mess up your results in subtle ways!

Better Alternatives

For something more accurate and user-friendly, look into dust or ncdu. These tools actually make sense if you need to see what’s going on visually without hunting for command-line arguments. Plus, GUI tools like baobab are way more intuitive to use compared to wrangling with du options.

Combining Options and Bash Scripts

And combining du with find, seriously? Just use a proper scripting language if you’re going to go that route. You’re making things more complicated than they need to be with convoluted one-liners like:

du -h --exclude="*.log" | sort -rh | head

Using ‘du’ Efficiently

Yeah sure, du -sh * is quick, but it’s just surface level. If you really need to dig deep, scripts and other tools are way better. If you’re going for simplicity, stick to the very basics of du and move to more powerful utilities for more complex tasks.

Disk Block Size and Sparse Files

Oh, and using --apparent-size to see logical sizes in sparse files might seem like a solution, but guess what—it’s mostly flawed! It doesn’t give you the real picture. You need to understand block allocations, and for that, du isn’t cutting it.

In the end, du is like trying to use a screwdriver to hammer a nail. It’ll work… but are you really doing it right?