Today let’s talk about df, the command line utility providing information on disk space used and remaining on your file systems.
Unsurprisingly, df stands for disk free.
Besides listing how much disk space is used and how much is free, df also displays how the file systems are mounted on your Linux desktop or server.
With df, you get disk use information on your local system as well as external drives attached to it.
The basic syntax of df is:
df [OPTION]… [FILE]..
One caveat I must add here is that df will not provide you with the size of directories or files. The command for that is du and we’ll cover that in a separate article.
Here are a bunch of df commands that you can grasp in less than 10 minutes.
Should you not provide any file name while running df, the space available on all mounted file systems will be displayed.
1. Basic df Command
When you run the df command without any options, the output provides disk utilization in 1K blocks.
larry@tammypc ~ $ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 1918766120 157599888 1663675496 9% / none 4 0 4 0% /sys/fs/cgroup udev 1925276 4 1925272 1% /dev tmpfs 388172 1392 386780 1% /run none 5120 0 5120 0% /run/lock none 1940848 788 1940060 1% /run/shm none 102400 20 102380 1% /run/user /dev/sdb1 244137920 205701856 38436064 93% /media/larry/HITACHI
In the above example, sda1 is the local drive and sdb1 is an external drive.
Apart from physical hard drives, df will list mounted file systems such as udev for /dev and tmpfs filesystem for /run and its subdirectories. Those with a grounding in Linux will quickly recognize that these file systems run in memory and are part of Linux.
2. Include All File Systems
The df -a command will include all file systems including those that have a size of 0 blocks, which are omitted by default (such file systems are usually special-purpose pseudo-file systems like automounter entries).
$ df -a Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 1918766120 157529716 1663745668 9% / proc 0 0 0 - /proc sysfs 0 0 0 - /sys none 4 0 4 0% /sys/fs/cgroup none 0 0 0 - /sys/fs/fuse/connections none 0 0 0 - /sys/kernel/debug none 0 0 0 - /sys/kernel/security udev 1925276 4 1925272 1% /dev devpts 0 0 0 - /dev/pts tmpfs 388172 1408 386764 1% /run none 5120 0 5120 0% /run/lock none 1940848 736 1940112 1% /run/shm none 102400 16 102384 1% /run/user none 0 0 0 - /sys/fs/pstore binfmt_misc 0 0 0 - /proc/sys/fs/binfmt_misc systemd 0 0 0 - /sys/fs/cgroup/systemd gvfsd-fuse 0 0 0 - /run/user/1000/gvfs
3. Display for Specific File System
We can narrow down space used for a file system with the below command.
$ df /dev/sda1 Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 1918766120 157541184 1663734200 9% /
4. Display in Human Readable Format
By default, df displays information in kilobytes.
Now in a world of gigabytes and terabytes hardly anybody uses kilobytes these days. So the df folks came up with the -h option.
Of all the df options, the most useful one is df -h because this gives the output in human readable format.
$ df -h Filesystem Size Used Avail Use% Mounted on Filesystem Size Used Avail Use% Mounted on /dev/sda1 1.8T 151G 1.6T 9% / none 4.0K 0 4.0K 0% /sys/fs/cgroup udev 1.9G 4.0K 1.9G 1% /dev tmpfs 380M 1.4M 378M 1% /run none 5.0M 0 5.0M 0% /run/lock none 1.9G 736K 1.9G 1% /run/shm none 100M 16K 100M 1% /run/user
I wouldn’t be surprised if df –h is the most used among the various df options.
5. Ignore Virtual File Systems
More often than not, we don’t need space use pertaining to virtual file systems.
What we are interested is are the partitions on the hard drives.
Here’s an example of how we can remove information pertaining to virtual file systems that exist only in memory:
df -h |grep ^/ /dev/sda1 1.8T 151G 1.6T 9% / /dev/sdb1 233G 216G 18G 93% /media/larry/HITACHI
6. Display inode Usage
The below command will display inode information instead of blocks in the second column.
df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda1 121847808 261110 121586698 1% / none 485212 2 485210 1% /sys/fs/cgroup udev 481319 549 480770 1% /dev tmpfs 485212 579 484633 1% /run none 485212 1 485211 1% /run/lock none 485212 5 485207 1% /run/shm none 485212 22 485190 1% /run/user
7. Display Grand Total
df --total Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 1918766120 157532132 1663743252 9% / none 4 0 4 0% /sys/fs/cgroup udev 1925276 4 1925272 1% /dev tmpfs 388172 1404 386768 1% /run none 5120 0 5120 0% /run/lock none 1940848 984 1939864 1% /run/shm none 102400 20 102380 1% /run/user total 1923127940 157534544 1668102660 9% -
You can get a more user-friendly output by running the following command:
$ df --total -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 1.8T 151G 1.6T 9% / none 4.0K 0 4.0K 0% /sys/fs/cgroup udev 1.9G 4.0K 1.9G 1% /dev tmpfs 380M 1.4M 378M 1% /run none 5.0M 0 5.0M 0% /run/lock none 1.9G 984K 1.9G 1% /run/shm none 100M 20K 100M 1% /run/user total 1.8T 151G 1.6T 9% -
8. Display File System Types
The difference between the plain df command and df -T is that the df -T will display the type of file system too in the output. You may find this useful in certain situations.
See example below:
$df -T Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/sda1 ext4 1918766120 157526952 1663748432 9% / none tmpfs 4 0 4 0% /sys/fs/cgroup udev devtmpfs 1925276 4 1925272 1% /dev tmpfs tmpfs 388172 1404 386768 1% /run none tmpfs 5120 0 5120 0% /run/lock none tmpfs 1940848 1172 1939676 1% /run/shm none tmpfs 102400 16 102384 1% /run/user
9. Display Disk Usage of a Specific Mount Point
df / Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 1918766120 157600360 1663675024 9% /
10. List Information for /home File System
Should you wish to see information only of the /home file system in human readable format run the below command:
$ df -hT /home Filesystem Type Size Used Avail Use% Mounted on /dev/sda1 ext4 1.8T 151G 1.6T 9% /
11. Include Certain File System Types
The df command lets you display file systems that belong only to a certain type.
In the following example, I have specified ext4 to be included:
$ df -t ext4 Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 1918766120 157529968 1663745416 9% /
12. Exclude Certain File System Types
You can also use df with the -x option to remove certain file systems.
In the following example, I wanted the tmpfs virtual file system to be excluded in the output.
df -x tmpfs Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 1918766120 157530172 1663745212 9% / udev 1925276 4 1925272 1% /dev
13. Stuck with df, Seek Help
With Linux commands, even the best of us can occasionally be stumped.
Should you encounter an issue with df, run the following command for help:
$ df --help Usage: df [OPTION]... [FILE]... Show information about the file system on which each FILE resides, or all file systems by default. Mandatory arguments to long options are mandatory for short options too. -a, --all include dummy file systems -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. --total produce a grand total -h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G) -H, --si likewise, but use powers of 1000 not 1024 -i, --inodes list inode information instead of block usage -k like --block-size=1K -l, --local limit listing to local file systems --no-sync do not invoke sync before getting usage info (default) --output[=FIELD_LIST] use the output format defined by FIELD_LIST, or print all fields if FIELD_LIST is omitted. -P, --portability use the POSIX output format --sync invoke sync before getting usage info -t, --type=TYPE limit listing to file systems of type TYPE -T, --print-type print file system type -x, --exclude-type=TYPE limit listing to file systems not of type TYPE -v (ignored) --help display this help and exit --version output version information and exit
Getting the hang of df is no sweat.
Fortunately, df is not like fail2ban or iptables, which are more complex command line tools.
Go ahead, take df for a spin on your terminal now.