19.Laptop Bed

Linux deletes directories and files using the rm Linux command. You need to know what will happen when you press "Enter" to use this tool in a safe manner. Here's what you need to understand to use the rm Linux command securely and effectively.

What Is the rm Command?

Linux SecurityThe rmcommand is used to delete files. Most people will encounter this command shortly after starting to use Linux. You're more likely to make errors using this command if you are a Linux novice. You may create or copy files accidentally, with the incorrect name, or in the wrong location. It is all part of learning the command line. delete is used to clean up such errors.

rm can be used to delete entire directories or files. It's important to use it with caution. This command is not difficult to use, but the penalties for failing can be severe.

When a file has been deleted using rm, it is immediately obliterated. To use rmcorrectly, you must be aware of its capabilities.

Some tools are far more dangerous and forgiving than others. It's for this reason that there has never been a film called The Texas Wrench Massacre. rm definitely isn't a wrench.

As long as people use these tools responsibly, they are fine. You should slow down when you take out rm from your toolbag and double-check your command line.

rm is not part of a shell but an executable. It's not Bash.

How Can I Delete Files with rm?

The easiest way to use delete would be to enter the name of the file that you wish to delete.

rm config.gc

You are silently returned to the command line. rm will search for the file if you provide a filename.

On the command line, you can specify multiple file names. If the file you wish to delete is not in your current directory, you can provide a path.

rm memlog.sh /home/dave/dev-archive/config.gc

If rm is able to delete the files specified, then nothing will be reported.

Wildcards in rm

Wildcards let you specify groups of files or collections without having to list each file individually on the command line.

The asterisk " *" can represent any sequence of letters, including none. The question mark " ??" represents any character.

Use ls to check that the wildcards you are using will match exactly what you want them to.

Use "*.png" to delete all PNG files from the current directory. The ".png". will match any character sequence. ls can be used to confirm that the files are gone.

ls *.png
rm *.png
ls *.png 

Two files named "config" are located in our current directory on our test computer.

The asterisk is a wildcard that can be used to delete these files. It matches both files because delete looks for filenames beginning with "config", and then any sequence of characters. The sequence of characters in one file is ".sl3", which is the filename extension. The second filename does not have any characters after "config"; however, because the asterisk matches all characters and no characters, it also matches this filename.

ls config*
rm config*
ls config* 

Use the question mark in pairs. The question mark will remove files with file extensions that are exactly two characters.

ls *.??
rm *.??

Using rm Interactively

rm can be used safely if you force it to ask for confirmation before deleting each file. –i allows you to do this. Add this option to the command line and rm prompts you for each deletion. This gives you a chance not to delete anything you didn't intend.

In this command, we'll use –i. This command tries to remove all files that have a single-character file extension.

rm -i *.?

The matching files are presented one by one. The file will be deleted if you answer "y" (or "Y". If you choose "n", then the file will be retained. If you choose anything other than "y", or "y", then the file will be retained. The file will be retained if you simply hit "Enter".

You can easily work your way through the list of files and delete or skip over those you don't want. You can combine the interactive option with other delete options.

Using the rm Force Option

rm will ask you to confirm before deleting a read-only file. This is a great safety net, but it can be tedious to use if you need to delete many files.

-f instructs that it should never prompt. It will then be told, "Yes, delete any files you normally ask me to remove." rm is also prevented from complaining about files that do not exist.

rm -f geonames.sl3 

When you delete a set of nested files or directories, the -f option (force) is commonly used.

How Can I Delete Directories with rm?

The rm can also remove directories and the files that they contain. It is similar to rmdir, but can't delete, directories that contain files. This command only deletes the empty directory. rm can delete directories that include files and other directories.

It is the same as deleting a single file. On the command line, we need to specify the directory name. You must include the -d option. We can specify the names of multiple directories, just as we did for deleting files. You can specify a directory path that isn't in the current directory.

Old-projects can be removed with rm -d.

This will not work if the directory contains any files.

Use the -r flag to delete a directory, its files, and any nested directories it contains. This will delete the directory and all its files and any subdirectories.

rm -r <directory>

You can use -r to switch rm from recursive mode into chainsaw mode by combining -f. This will tell rm that it can recursively remove all files and folders in a directory, even those which are read-only, and without any request for confirmation before removing.

We have a directory named "migrate-code" on our test computer. This directory contains files, and another directory called "Windows." Also, there are files in this directory. Some files are read-only.

We will also add the verbose (-v) command so that can tell us what is doing.
rm -rfv migrate-code

The output shows that when the files are empty, they are deleted, and the directories too. 

Avoiding Mistakes when Using rm

Filenames with weird characters and spaces can cause problems. Filenames with a hyphen, such as " -"can be misinterpreted as command line options. If you have a file named "-contributors.txt", and rm may try to interpret the name as a command line option.

The command line parsing is not successful because rm does not have the option " -c". Therefore, the file will not be deleted. You need to use "./" before the file name to give it a path.

rm -contributors.txt
rm ./-contributors.txt

Also, spaces in filenames can be problematic. Use tab completion to automatically insert the filename into the command line while escaping any spaces. If you do not use one of these options, and rm treat each part of the filename separately.

We have two files here, one named "backup", and the other "backup to remove." ls can be used to show the issue with these file names. The command will fail if we use ls to the "backup file to delete" and do not escape or quote the name.

ls -hl backup to delete
rm backup to delete 

rm believes it's working with three files: "backup", to", and delete. It complains about not being able to find "to" or "delete", yet it finds "backup" and silently deletes it.

rm can delete the correct file by quoting the filename.

rm 'backup to delete'

The spaces can also be removed by using backslashes:

rm backup\ to\ delete 

When you enter filenames using tab completion, the names will be automatically escaped if necessary.

Use rm -rf to Delete All

Use the following command if you need to delete everything.

rm -rf

This combines the '-f' flag (which forces deletion) with the '-r" flag, which deletes folders recursively. We used to include the -v option (to make it verbose). However, it's no longer necessary. Remember that this is the "nuclear option" and should only be used if you are absolutely certain you want to remove something forever.

Final Thoughts & Safety Considerations

rm does not come with any personal protective equipment.

You can use it to check the syntax and ls. Then, you can try delete.

Practice until you are comfortable. It's best to practice with a few sacrificial documents (or even an entire system designed for testing).
Have additional questions about how to use rm securely? Connect with us on X @lnxsec. We're here to help!