What is the difference between rm, rmdir, and rm -r?
rm deletes files, rmdir deletes only empty directories, and rm -r deletes a directory together with everything inside it. They differ by what they'll touch and how much they'll take with them.
The interesting one is why rmdir exists at all when rm -r can delete any directory. The answer is safety through refusal: rmdir deliberately fails if the directory still has anything in it.
| Command | Deletes | Refuses when… |
|---|---|---|
rm file |
One or more files | — |
rmdir dir |
An empty directory | the directory isn't empty |
rm -r dir |
A directory and all contents | (it doesn't refuse — that's the danger) |
rm doc.txt # one file
rm a.txt b.txt c.txt # several files
rmdir empty_folder # only works if it's truly empty
rm -r project_folder # folder + everything under it
So rmdir acts as a guardrail. When you think a folder is empty and want to clean it up, rmdir confirms your assumption — if it errors out, you've just learned there was data you'd have destroyed with rm -r. It forces you to consciously decide to delete non-empty directories.
Warning: rm -r has no such brake. rm -rf / would try to erase the entire system; modern rm blocks that exact path with --preserve-root by default, but it will not save you from rm -rf ~/important_project. The habit that protects you is reading the path before you hit Enter, not relying on safeguards.