Ralph J. Smit Laravel Software Engineer
Sometimes you need to deal with issues like debugging why the disk space of a server is suddenly filling up. To figure that out, it is very useful to check what size certain files or folders are. In this tutorial I'll show you two quick ways for letting Linux list the size of certain directories and files.
How to find the size of directories in Linux
First, we want to find directories that are very big. To do so, it makes sense to navigate to your home directory (
cd ~). Then, we can run the following command to list the file size of all the folders in it, so that we can spot big folders:
du -h . --max-depth=120K ./.ssh343M ./.npm8.0K ./.aws303M ./.cache542M ./staging.example.com3.0G ./app.example.com20K ./.local32K ./.config641M ./staging.example.com-deploy4.2G ./example.com8.9G .
First of all, what does this command do?
duis the base command
-hflag tells the command to show file sizes in human readable formats (like KB, MB and GB)
.tells the command that we want to start from the current directory
--max-depth=1tells the command that it should only list files and folders in the current directory. If omitted, it will list recursively check every directory and list every file it finds, which obviously isn't useful for us now.
Next, what does the result tell us?
First, the total folder size is 8.9GB. That is big, but not insane.
Next, there are several bigger directories, that each take up a few hundred MB, like the
staging.example.com and the
Finally, there are two big directories, the
example.com directories. These directories we will need to investigate. You can
cd into these directories, run the same command again to find big folders and so forth.
How to find file sizes in Linux
We can use the above command to find file sizes in Linux. However, there is a second way as well which only works for files. That way is by using the
ls -lsah .4.0K drwxr-xr-x 15 user user 4.0K Feb 9 16:34 .4.0K drwxr-xr-x 13 user user 4.0K Jan 5 10:01 ..48K -rw-rw-r-- 1 user user 48K Feb 26 2022 .editorconfig4.0K -rw-rw-r-- 1 user user 1.6K Jan 5 20:07 .env4.0K -rw-rw-r-- 1 user user 1.2K Apr 11 2022 .env.example4.0K drwxrwxr-x 8 user user 4.0K Feb 9 16:33 .git4.0K -rw-rw-r-- 1 user user 111 Feb 24 2022 .gitattributes4.0K -rw-rw-r-- 1 user user 437 Jan 23 19:17 .gitignore4.0K -rw-rw-r-- 1 user user 194 Feb 24 2022 .styleci.yml4.0K -rwxrwxr-x 1 user user 1.7K Feb 24 2022 artisan4.0K drwxrwxr-x 3 user user 4.0K Feb 24 2022 bootstrap4.0K -rw-rw-r-- 1 user user 151 Feb 25 2022 clear-compiled4.0K -rw-rw-r-- 1 user user 3.6K Jan 25 17:56 composer.json476K -rw-rw-r-- 1 user user 474K Feb 9 16:33 composer.lock4.0K drwxrwxr-x 2 user user 4.0K Feb 9 16:33 config4.0K drwxrwxr-x 4 user user 4.0K Nov 3 12:24 database4.0K drwxrwxr-x 4 user user 4.0K Feb 24 2022 lang...
I truncated the results a bit, but this is obviously a directory with a Laravel app in it. What does the
ls -lsah command do?
lscommand lists all files and folders in the current directory
-lsahconsists of 4 separate flags:
-lflag says to list the files in a neat ordered vertical list, so that more information can be shown
-sflag tells the command to show the file sizes in human readable formats like KB, MB and GB
-aflag tells the command to also list hidden files that start with a
-hflag is additional for the human readable sizes
As you might notice, this command works great for simple files. However, for folders it will always show 4.0KB. Not all folders are the same size, so why is that? The reason is that the 4.0KB represents the size it takes on the disk to store the meta-information about the folder itself, like the name of the folder and the position. That's why the 4.0KB is more or less the same for every folder, but it doesn't say anything about the contents.
I hope this was useful and that it will help you finding and debugging large files and folders on your server. 👌