Finding large files and listing file/directory size on Linux

When you log onto (SSH) onto a machine, you may be greeted with something like this

Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-34-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

  System information as of Mon Aug 14 23:14:42 UTC 2017

  System load:  0.0                Processes:           117
  Usage of /:   60.3% of 19.55GB   Users logged in:     1
  Memory usage: 34%                IP address for eth0: 172.32.40.45
  Swap usage:   4%

Notice the Usage of /: 60.3% of 19.55GB

There's one way to tell how much disk space you have left. What are some others?

Find all the disks and their file sizes

There's the classic df -h as shown below

ubuntu@ip-172-32-40-45:~$ df -h  
Filesystem      Size  Used Avail Use% Mounted on  
udev            492M   12K  492M   1% /dev  
tmpfs           100M  364K   99M   1% /run  
/dev/xvda1       20G   12G  6.9G  64% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup  
none            5.0M     0  5.0M   0% /run/lock  
none            497M     0  497M   0% /run/shm  
none            100M     0  100M   0% /run/user  

Okay, so above it shows I have 20G on the root directory / and I am using 12G with 6.9G left.

What if I want to track down the large files?

You could use find / -xdev -type f -size +100M to start finding all of the files that are bigger than 100 MB.

Note that you'll probably get a lot of permission denied errors if you don't run it with sudo privileges.

ubuntu@ip-172-32-40-45:~$ sudo find / -xdev -type f -size +100M  
/home/ubuntu/.forever/6n8K.log
/home/ubuntu/.forever/9T0G.log
/home/ubuntu/.forever/UP6l.log
/home/ubuntu/.forever/pcheck1.log
/home/ubuntu/.forever/pcheck3.log
/home/ubuntu/.forever/dYDy.log
/home/ubuntu/.forever/pcheck4.log
/home/ubuntu/.forever/wDxW.log
/home/ubuntu/.forever/f9UA.log
/home/ubuntu/.forever/iioL.log
/home/ubuntu/.forever/kJQF.log
/home/ubuntu/.forever/xX0D.log
/home/ubuntu/.forever/xeiq.log
/home/ubuntu/.forever/3wFd.log
/swapfile
ubuntu@ip-172-32-40-45:~$  

Above it shows a bunch of log files and a /swapfile, so those are my large files.

List how big each directory (and its contents) is

Here's a common issue, say I'm in a directory and I want to know how big everything is within it. I can do ls -lahS to get everything sorted by file size, but you'll see there's a problem with that in the example below:

ubuntu@ip-172-32-40-45:~/apps$ ls -lahS  
total 6.8G  
-rw-rw-r--  1 ubuntu ubuntu 2.2G Apr 20  2016 9T0G.log
-rw-rw-r--  1 ubuntu ubuntu 1.8G May 20  2016 xX0D.log
-rw-rw-r--  1 ubuntu ubuntu 877M Feb 26  2016 pcheck1.log
-rw-rw-r--  1 ubuntu ubuntu 719M Jan 31  2016 f9UA.log
-rw-rw-r--  1 ubuntu ubuntu 564M Feb 26  2016 pcheck3.log
-rw-rw-r--  1 ubuntu ubuntu 404M Mar  5  2015 UP6l.log
-rw-rw-r--  1 ubuntu ubuntu 347M Jan 31  2016 kJQF.log
-rw-rw-r--  1 ubuntu ubuntu 324M Mar  3  2016 dYDy.log
-rw-rw-r--  1 ubuntu ubuntu 295M Feb 26  2016 wDxW.log
drwxrwxr-x  6 ubuntu ubuntu 4.0K Mar  7  2015 cutecrawler  
drwxrwxr-x  2 ubuntu ubuntu 4.0K Apr  9  2015 grafana  
drwxrwxr-x  2 ubuntu ubuntu 4.0K Apr  9  2015 influxdb  
drwxrwxr-x  4 ubuntu ubuntu 4.0K Jun 18  2015 catwine  
drwxrwxr-x  9 ubuntu ubuntu 4.0K Oct  1  2014 priceweb  
drwxrwxr-x  5 ubuntu ubuntu 4.0K May 20  2016 supertracker  
drwxrwxr-x  3 ubuntu ubuntu 4.0K Mar  5  2015 friends  

The lines at the bottom are directories, and it says they're 4.0K. ls doesn't actually tell you how big the files are in those directories.

Instead, you'll want to use du -sch * to determine how big all those directories are.

ubuntu@ip-172-32-40-45:~/apps$ du -sch *  
38M     cutecrawler  
20M     grafana  
16M     influxdb  
47M     catwine  
48M     priceweb  
20M     supertracker  
224K    friends  
187M    total  

If you want to look at a different directory, just replace the * with whichever directory you want to investigate, as in the example below:

ubuntu@ip-172-32-40-45:~/apps$ sudo du -sch /var/*  
1.8M    /var/backups  
118M    /var/cache  
20K     /var/crash  
154M    /var/lib  
4.0K    /var/local  
0       /var/lock  
11M     /var/log  
4.0K    /var/mail  
4.0K    /var/opt  
0       /var/run  
32K     /var/spool  
4.0K    /var/tmp  
16K     /var/www  
283M    total  

Hopefully these three Linux tools will help you track down large files and help monitor your disk space usage.

Stephen

Read more posts by this author.


View or post Comments