Introduction
When using the ls
command to list the contents of a directory, you may have noted that the directories are usually always 4096 bytes in size (4 KB). That is the amount of disc space utilized to store the directory's meta-information, not the amount of data it contains.
du
, which stands for "disc use," is the command to use to determine the true size of a directory.
In this tutorial, you will get the size of a directory on Linux. We will also address a few FAQs on how to get the size of a directory on Linux.
Getting the Size of a Directory
The du
command shows how much file space the supplied files or directories are taking up. du
summarizes the disc usage of each subdirectory in the supplied path if it is a directory. du
gives the disc use of the current working directory if no path is given.
du
displays the disc use of the specified directory and each of its subdirectories in bytes when run without any parameters.
In most cases, you'll want to present the directory's space in a human-readable way. For example, to determine the entire size of the /var
directory, use the command:
sudo du -sh /var
You will get an output like below:
Output
85G /var
Let's go over the command and its arguments in more detail:
- Because most of the files and folders in the
/var
directory are owned by the root user and inaccessible to regular users, the command begins withsudo
. Thedu
command will print "du: cannot read directory" if you don't use sudo. s
- Only show the entire size of the chosen directory; file size totals for subdirectories are not shown.h
- Print sizes in a legible format for humans (h
)./var
- The path to the directory whose size you want to know.
What if you want to see the first-level subdirectories' disc usage? There are two options available for you. The first is to use the asterisk symbol (*
), which means "match everything that does not begin with a period (.
)" as shown below. du
will print a grand total of all sizes if you provide the -c
option:
sudo du -shc /var/*
Output
24K /var/db
4.0K /var/empty
4.0K /var/games
77G /var/lib
4.0K /var/local
0 /var/lock
3.3G /var/log
0 /var/mail
4.0K /var/opt
0 /var/run
196K /var/spool
28K /var/tmp
85G total
The --max-depth
option can also be used to generate a report on the disc use of first-level subdirectories:
sudo du -h --max-depth=1 /var
Output
77G /var/lib
24K /var/db
4.0K /var/empty
4.0K /var/local
4.0K /var/opt
196K /var/spool
4.0K /var/games
3.3G /var/log
5.0G /var/cache
28K /var/tmp
85G /var
85G total
The du
command, by default, displays the amount of disc space consumed by the directory or file. Use the --apparent-size
option to determine the apparent size of a directory. The "apparent size" of a file refers to the amount of data contained within it.
sudo du -sh --apparent-size /var
The quantity of data transported over the network while transferring a directory through SCP, Rsync, or SFTP is the apparent size of the files. This explains why the size of the disc space consumed on the source when displayed with du
(without --apparent-size
) differs from the size on the target.
The du
command can also be piped together with other commands.
To display the top 5 directories in the /var
directory, pipe the output of du to the sort command, which will sort
the directories by size, and then pipe the output to the head
command, which will only print the top 5 directories:
sudo du -h /var/ | sort -rh | head -5
Output
85G /var/
77G /var/lib
75G /var/lib/libvirt/images
75G /var/lib/libvirt
5.0G /var/cache/pacman/pkg
FAQs to Get the Size of a Directory on Linux
Can I get the size of nested directories within a directory?
Yes, the du -sh
command recursively calculates the size of all directories and files within the specified directory.
How can I sort the output to display the largest directories first?
You can use the du -sh directory_path | sort -h
command to sort the directories based on their size in a human-readable format.
What if I want to display the size in different units, like in kilobytes?
You can use the -k
option with du
command. For example, du -sk directory_path
will display the size in kilobytes.
Is it possible to get the sizes of individual files within a directory?
Yes, using the -a
option with du
command will display the sizes of both directories and individual files.
Is there a way to exclude certain subdirectories or files from the size calculation?
Yes, you can use the --exclude
option followed by the names or patterns of directories or files you want to exclude.
How can I get the total size of all directories in the current directory?
You can use the du -sh *
command to get the size of all directories in the current directory and display the total size at the end.
Can du
display the sizes in a machine-readable, tabular format?
Yes, you can use the --bytes
or -b
option with du
, which will display the sizes in bytes without any unit.
Conclusion
The du
command on Linux can be used to determine the size of a directory.
If you have any queries, please leave a comment below and we’ll be happy to respond to them.