Last updated

Linux and Unix rm command tutorial with examples

Tutorial on using rm, a UNIX and Linux command for removing files or directories. Examples of removing a file, removing multiple files, prompting for confirmation, removing recursively and forcing removal.

Estimated reading time: 4 minutes

Table of contents

Terminal showing rm man page

What is the rm command?

The rm command is a command line utility for removing files or directories.

How to remove a file

To remove a file pass the name of a file or files to the rm command. Note that files will be removed immediately.

ls 
foo.txt bar.txt
rm foo.txt
ls
bar.txt

How to remove multiple files

The rm command can remove multiple files at once either by passing it more than one file or by using a pattern.

ls 
foo.txt bar.txt
rm foo.txt bar.txt
ls

In the following example a pattern is used to remove all filenames ending in ‘.txt’.

ls 
foo.txt bar.txt baz.zip
rm *.zip
ls
baz.zip

Be careful that no unwanted files are removed using this method.

How to prompt for confirmation

To prompt for conformation when removing a file use the -i option. This will cause rm to ask for confirmation. If confirmation is given the file is removed. If it is not given the file removal is skipped.

ls 
foo.txt bar.txt
rm -i foo.txt
# type 'y' at the prompt
rm: remove regular file 'foo.txt'? y
ls 
bar.txt

In the following example confirmation is not given and the removal is skipped.

ls 
foo.txt bar.txt
rm -i foo.txt
# type 'n' at the prompt
rm: remove regular file 'foo.txt'? n
ls 
foo.txt bar.txt

Many users like to add an alias to make this the default behaviour so that each time the rm command is run they are prompted for confirmation.

alias rm="rm -i"

How to show more information

To show more output in the rm command pass the -v option. This will cause more information to be written to standard output.

ls 
foo.txt bar.txt
rm -v foo.txt
removed 'foo.txt'
ls 
bar.txt

How to remove directories

By default the rm command does not remove directories. To remove directories use the -R option to make removal recursive.

ls -F
foo.txt bar/
rm: cannot remove 'bar': Is a directory
rm -R bar/
ls -F 
foo.txt

The -i option may also be combined with the -R option to prompt for confirmation.

tree foo
foo
├── bar
│   └── baz.txt
└── foo.txt

1 directory, 2 files
rm -iR foo
rm: descend into directory 'foo'? y
rm: remove regular empty file 'foo/foo.txt'? n
rm: descend into directory 'foo/bar'? y
rm: remove regular empty file 'foo/bar/baz.txt'? y
rm: remove directory 'foo/bar'? y
rm: remove directory 'foo'? n
tree foo                                                                (master)
foo
└── foo.txt

0 directories, 1 file

How to handle permission denied errors

Sometimes when running the rm a permissions error will be thrown indicating that you do not have enough permissions to remove a file.

rm /etc/shadow
rm: remove write-protected regular file 'shadow'? y
rm: cannot remove 'shadow': Permission denied

In this case you will either need to ask a systems administrator to give you permissions on the file or use sudo to delete the file.

sudo rm /etc/shadow

How to remove multiple files based on a pattern

The rm command can be combined with find to find and remove files based on things like modification time, file name or permissions. The following command will find all files in the folder foo that have been modified in the last day and remove them interactively.

find ./foo -type f -mtime -1 -exec rm -i {} \;

How to force a file or folder to be removed

If a user tries to remove a write-protected file with rm by default they will be prompted for confirmation.

rm foo
rm: remove write-protected regular empty file 'foo'? y

To force removal and not receive a prompt pass the -f option.

rm -f foo

rm -Rf /

One of the worst commands you can run in Linux is rm -Rf / especially if you are root. This will remove everything on your machine rendering it useless. The zsh shell now has some protection against this and even prompts if you use an asterisk character to delete all files in a directory.

rm *
zsh: sure you want to delete all the files in /home/george/foo [yn]? y

Does rm delete a file?

The rm command does not delete a file. Instead it unlinks it meaning the data is still on disk but the link to it is removed. Depending on the filesystem you are using it is more or less difficult to recover files removed with rm. If you really want to delete something you can use shred to overwrite a file to hide its contents.

echo 'hello' > foo.txt
cat foo.txt
hello
shred foo.txt
cat foo.txt
    x~XZ"MG     0KA.2Fxţ,b4s3#jOL       ?`xݕ杶hhȜsf.;3 a+M9?n
...
rm foo.txt

The safest option if you really want to delete a file is to take the hard drive out and smash it to smithereens. Wooo destruction!

Smashed up hard drive

Further reading

Have an update or suggestion for this article? You can edit it here and send me a pull request.

Tags

Recent Posts