When managing files and directories on a Unix-like operating system, understanding how much disk space each directory uses can be crucial for maintaining efficient storage usage. While the ls
command is commonly used to list contents of directories, it does not provide information about their size. Instead, the du
(disk usage) command offers a way to assess the sizes of directories and their contents.
Introduction to du
The du
command stands for "Disk Usage" and is used in Unix-based systems to estimate file space usage—space used under a particular directory or files on a file system. The following options are crucial when using du
:
-
-s
: This option tellsdu
to provide a summary for the specified directory, rather than listing sizes of each subdirectory and file. -
-h
: "Human-readable" output. When this flag is used, sizes are shown in units like Kilobytes (K), Megabytes (M), Gigabytes (G), etc., making them easier to read.
To list the total size of a directory along with all its contents, you can execute:
du -sh *
This command will show the disk usage for each file and subdirectory in the current directory in a summarized form.
Sorting Directory Sizes
Sorting directory sizes helps identify large directories that may need attention. Here’s how to sort them using du
combined with other Unix utilities:
-
Sort by size numerically:
du -sk * | sort -n
This command will list the files and subdirectories sorted from smallest to largest in kilobytes.
-
Human-readable sorting:
du -sh * | sort -h
Using
sort -h
sorts directories by size in a human-readable format, which is more intuitive when dealing with varying units like K, M, G, etc.
Listing Largest Directories
To find the largest directories within your current directory and display them neatly:
du -sh * | sort -hr | head -n10
Here:
sort -hr
sorts in human-readable format in reverse order (largest first).head -n10
limits output to the top 10 entries, allowing you to quickly identify and manage large directories.
Creating a Custom Alias
For ease of use, consider creating an alias:
alias ducks="du -ckhs ./* | sort -h"
This alias allows you to type ducks
in your terminal to execute the command sequence that displays directory sizes sorted by size.
Preserving ls -lh
Format
Integrating the output of du
with the familiar ls -lh
format can be achieved using awk
, which allows for custom formatting and merging data:
(du -sh ./*; ls -lh --color=no) | awk '{
if($1 == "total") { X = 1 }
else if (!X) { SIZES[$2] = $1 }
else {
sub($5 "[ ]*", sprintf("%-7s ", SIZES["./" $9]), $0);
print $0
}
}'
In this script:
awk
is used to replace the size inls -lh
output with sizes calculated bydu
.- This integration preserves the detailed listing format of
ls
, appending disk usage information.
By mastering these commands, you can efficiently manage and monitor your storage usage on Unix-based systems, ensuring optimal performance and organization of files and directories.