Sometimes it happens that you end up on your server with a multiple of empty files. The reason for that could be different for example it could be /tmp is overflown with some session store files on a busy website, or due to some programmers Web executed badly written PHP / Python / Perl / Ruby code bug or lets say Content Management System ( CMS ) based website based on WordPress / Joomla / Drupal / Magento / Shopify etc. due to a broken plugin some specific directory could get filled up with plenty of meaningless empty files, that never gets wiped out if you don't care. This could happen if you offer your users to share files online to a public sharing service as WebFTP and some of the local hacked UNIX user accounts decides to make you look like a fool and run an endless loop to create files in your Hard Drive until your small server HDD filesystem of few terabytes gets filled up with useless empty files and due to full inode count on the filesystem your machine running running services gets disfunctional …
Hence on servers with shared users or simply webservers it is always a good idea to keep an eye on filesystem used nodes count by system are and in case if notices a sudden increase of used FS inodes as part of the investigation process on what caused it to check the amount of empty files on the system attached SCSI / SSD / SAS whatever drive.
1. Show a list of free inodes on server
Getting inodes count after logged is done with df command
root@linux-server:~# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
udev 2041464 516 2040948 1% /dev
tmpfs 2046343 1000 2045343 1% /run
/dev/sdb2 14655488 1794109 12861379 13% /
tmpfs 2046343 4 2046339 1% /dev/shm
tmpfs 2046343 8 2046335 1% /run/lock
tmpfs 2046343 17 2046326 1% /sys/fs/cgroup
/dev/sdc6 6111232 6111232 0 100% /var/www
/dev/sda1 30162944 3734710 26428234 13% /mnt/sda1
/dev/sdd1 122093568 8011342 114082226 7% /backups
tmpfs 2046343 13 2046330 1% /run/user/1000
2. Show all empty files and directories count
### count empty directories ### root@linux-server:~# find /path/ -empty -type d | wc -l
### count empty files only ### root@linux-server:~# find /path/ -empty -type f | wc -l
3. List all empty files in directory or root dir
As you can see on the server in above example the amount of inodes of empty inodes is depleted.
The next step is to anylize what is happening in that web directory and if there is a multitude of empty files taking up all our disk space.
root@linux-server:~# find /var/www -type f -empty > /root/empty_files_list.txt
As you can see I'm redirecting output to a file as with the case of many empty files, I'll have to wait for ages and console will get filled up with a data I'll be unable to easily analyze …
If the problem is another directory in your case, lets say the root dir.
root@linux-server:~# DIR='/';
root@linux-server:~# find $DIR -type f -empty > /root/empty_files_list.txt
4. Getting empty directories list
Under some case it might be that the server is overflowed with empty directories. This is also a thing some malicious cracker guy could do to your server if he can't root the server with some exploit but wants to bug you and 'show off his script kiddie 3l337 magic tricks' :). This is easily done with a perl / python or bash shell endless loop inside which a random file named millions of empty directories instead of files is created.
To look up for empty directories hence use:
root@linux-server:~# DIR='/home';
root@linux-server:~# find $DIR . -type d -empty > /root/empty_directories_list.txt
5. Delete all empty files only to clean up inodes
Deletion of empty files will automatically free up the inodes occupied, to delete them.
root@linux-server:~# cd /path/containing/multiple/empty-dirs/
root@linux-server:~# find . -type f -empty -exec rm -fr {} ;
6. Delete all empty directories only to clean up inocommanddes
root@linux-server:~# find . -type d -empty -exec rm -fr {} ;
7. Delete all empty files and directories to clean up inodes
root@linux-server:~# cd /path/containing/multiple/empty-dirs/
root@linux-server:~# find . -empty -delete
8. Use find + xargs to delete if files count to delete is too high
root@linux-server:~# find . -empty | xargs rm -r
That's all folks ! Enjoy now your Filesystem to have retrieved back the lost inodes from the jump empty files or directories.
Happy cleaning 🙂
More helpful Articles

Tags: Delete, directories, empty, Happy, inodes, root, tmpfs, tree, udev, webservers