find + du + sort + head command example in Linux - Ho to search large files and directories in host to free some disk space
Hello guys, 100% full disk space is a common problem and as a programmer or Linux user, you often need to free disk space by deleting biggest files and directories. In order to do that, you need to know some Linux find command examples to list and delete some biggest files and directories and that's what you will learn in this tutorial. As a Java developer, you also need to also support your application, most of which mostly run on Linux machines. Though production is monitored by the dedicated support teams and they receive regular alerts on the status of file system space, they often come running to you or the developer responsible about what to do when disk space is almost full or reaching 100%.
This is even more common on UAT and QA/TEST environment where no one really monitors and then people start coming screaming to you that things are not working, Java processes are not up and systems are not able to connect to each other, only to find that there is no space left in the machine.
In order to fix those problems you need to free up some space and when you are running out of both disk space and time, you need to concentrate on the biggest files and folders on your disk or partition, so that you can get space quickly by deleting just a couple of files and directories.
The best way is to list the top 10 directories by size and then go inside some of them, and find files you can delete to free space some space e.g. old log files, cache files, and heap dumps.
My preferred approach is to go into the root directory of your application and then run the find or du command to find largest directories recursively. From there, I can go further and delete which are occupying most of the space.
Since you may come here while searching for a quick Linux command to free some disk space, I am first listing commands you can use, I'll explain it in the next paragraph.
Do hang on if you have some time to understand how this Linux find command works but if you are in hurry, here is what you need:
Linux command to find biggest top 10 directories in your disk
$ du -hs */ | sort -nr | head
This will give you the biggest directories in the disk, then you can go inside one of them, preferably the biggest ones and find files to delete using ls command.
Linux command to Find the biggest file inside a directory
$ ls -lS | head
That's it. You now have the biggest files in that folder. If it is something you can delete, just delete. If you need all files just remove the head command.
Btw, if you are not familiar with fundamental commands like head, less, find and ls, I suggest you to first go throughLinux Command Line Basics course on Udemy, instead of hopping through blog posts. That will give you all the information you need to better understand the article like this and solve your day to day Linux problems.
Find biggest files in any directory recursively
We’ll now use find command, to search only files, and then sort to find out top 10 or top 5 biggest files in all directories from the current directory. This will print the full path of the file which you can just copy and delete to free disk space.$ find -type f -ls | sort -k 7 -r -n | head -5
find command only list files and not directories, hence you can sort them using the column 7 (the column with the file size).
We are sorting using sort -n option for numeric order and -r reverse order (from biggest to smallest i.e. descending order), and finally only the first 5 files in the current directory and sub-directory.
If you want to find the top 5 biggest files in your machine from the root partition then you can use it like this:
$ find / -type f -ls | sort -k 7 -r -n | head -5
If you want to list the top 10 biggest files from the current directory then you can use it like this:
$ find . -type f -ls | sort -k 7 -r -n | head -10
Btw, If you have trouble understanding the above command even after my explanation like you don't understand pipe to combine two Linux commands or feeding the output of one command to other then I suggest you go throughLinux Command Line Interface (CLI) Fundamentals course on Pluarlsight to learn fundamentals first.
Though, you would need a Pluralsight membership to get access to this course, which cost around $29 per month or $299 annually. Fortunately, they are providing a 33% discount now and you can save almost $100 if you buy the membership on the current offer.
If you don't have Pluralsight membership, I encourage you to get one because it allows you to access their 5000+ online courses on all latest topics like front-end and back-end development, machine learning etc.
It's like Netflix for Software Developers and Since learning is an important part of our job, Plurlasight membership is a great way to stay ahead of your competition.
They also provide a 10-day free trial without any commitment, which is a great way to not just access this course for free but also to check the quality of courses before joining Pluralsight.
Commands Used and Explanation
There is not a single command in Linux to help us with this task, but we will use a combination of find, du, sort, and head command to recursively find and delete largest files and directories fast.If you don't know the du command stands for disk usage and print size of each file and recursively for directories. This is good if your file system has a lot of directories and sub-directories.
On the other hand, sort command is used to sort the output of du command and print into the console. If you are interested in the biggest file then you need to sort in descending order and you also need to do numeric sort instead of lexicographic sort. For that, you need to use the sort -nr command, where -n is for numeric sort and r is for reverse sort i.e. sorting in descending order.
As I have said before, if you are not familiar with these commands I suggest you to first go through Linux Command Line Basics course on Udemy, which you can get in just $10 on their several flash sales they run every month or so.
Now, we are not interested in all the files as there could be hundreds of files and that's why we are using the head command, which can print top 10 or top 5 files depending upon your choice. For example head 10 will print 10 lines. For example head -n 10 will print the first 10 lines.
If you have already sorted your output in decreasing order then you can use head -n 10 to print 10 largest directories or files.
Now, the find command which can help you to search file based upon size in all the directories recursively. Just issue the find command with -size parameter and start it from current directory if you are already at the start of your application directory or partition.
It will then go on and find all the files which are larger than the size you have specified.
Also, here is a nice picture to remember useful find command options from Julia Evans:
That's all about how to find the biggest files and directories on any partition and free up some disk space. These Linux find commands are very handy and I always write them up in my notes for quick reference, I know it's difficult to write Linux command by yourself sometimes and we often prefer a tried and tested command.
Though you should be careful while copy pasting commands on Linux because if you copy a new line which is very much possible the command will start running and you may accidentally block or delete something. In short, never run a Linux command by copy-pasting in a production machine.
Further Learning
Linux Command Line Interface (CLI) Fundamentals
Linux Administration Bootcamp: Go from Beginner to Advanced
How Linux Works: What Every Superuser Should Know
Related UNIX Command Tutorials
- 5 Free Courses to Learn Linux for Programmers (courses)
- 10 examples of date command in Linux (examples)
- How to get an IP address from the hostname and vice-versa in Linux (command)
- 10 examples of the XARGS command in Linux (examples)
- 10 examples of tar command in UNIX (examples)
- 10 examples of Vim in UNIX (examples)
- How to create, update and delete soft link in UNIX (command)
- 5 examples of sort command in Linux (examples)
- 5 examples of kill command in Linux (examples)
- 10 examples of chmod command in UNIX (examples)
- 10 examples of lsof command in Linux (examples)
- 10 examples of curl command in Linux (examples)
- 10 examples of cut command in Linux (examples)
- 10 Books every Linux Power user should read (books)
- 5 Courses to Learn Shell Scripting in Linux (courses)
Thanks for reading this article so far. If you like this article then please share with your friends and colleagues. If you have any questions or feedback then please drop a note.
Join the conversation