rm(remove)是Linux/Unix系统中用于删除文件和目录的基础命令。与图形界面的“移动到回收站”不同,rm执行的是直接、彻底的删除操作,被删除的文件通常无法通过常规方式恢复。
rm命令功能强大但风险极高,尤其是配合-r(递归)和-f(强制)选项使用时,一个错误的操作可能导致系统崩溃或数据永久丢失。因此,掌握rm的安全使用模式是每个Linux用户的基本素养。理解rm的各种选项及其风险,培养谨慎的操作习惯,可以避免灾难性的数据丢失。
1. 基本语法
| 命令 | 说明 |
|---|
rm [options] file... | |
rm -r [options] directory... | |
rm -- filename | |
rm -i file.txt | |
rm -f file.txt | |
2. 删除文件
| 命令 | 说明 |
|---|
rm file.txt | |
rm file1.txt file2.txt file3.txt | |
rm *.log | |
rm -- -strange-filename | |
rm -v file.txt | |
rm -f *.tmp | |
3. 删除目录
| 命令 | 说明 |
|---|
rm -r directory/ | |
rm -rf directory/ | |
rm -r dir1 dir2 | |
rm -r -- */ | |
rm -rf /path/to/dir | |
rmdir empty-dir/ | |
4. 提示与安全选项
| 选项 | 说明 |
|---|
-i | |
-I | |
--interactive=always | |
--interactive=once | |
-f | |
-v | |
交互示例:
$ rm -I *.log
rm: remove 5 arguments? (y/N) y
5. 安全删除模式
| 命令/技巧 | 说明 |
|---|
rm -i file.txt | |
alias rm='rm -i' | |
ls file* && rm file* | |
find . -name "*.tmp" -delete | |
rm -rf -- /path/to/trash/* | |
mkdir -p ~/.trash; mv file.txt ~/.trash/ | |
防止误删除根目录:
# rm -rf / 是极度危险的命令
# 现代rm实现会阻止删除根目录,除非使用 --no-preserve-root
rm -rf --no-preserve-root / # 极其危险!切勿执行!
6. 实用组合模式
| 命令 | 说明 |
|---|
find . -type f -name '*.tmp' -delete | |
find . -type d -empty -delete | |
rm -rf -- build/ dist/ node_modules/ | |
rm -f -- *.bak *.old *.orig | |
rm -rf !(keep.txt) | 删除除keep.txt外的所有文件(需开启extglob) |
shopt -s extglob; rm -rf !(keep|save) | |
ls -1 | grep -v '^keep' | xargs rm -rf | |
7. 通配符使用技巧
| 模式 | 说明 |
|---|
* | |
? | |
[abc] | |
[a-z] | |
{foo,bar} | |
!pattern | |
示例:
rm file[0-9].txt # 删除file0.txt到file9.txt
rm file{a,b,c}.log# 删除filea.log, fileb.log, filec.log
rm *.?? # 删除扩展名为2个字符的文件
8. 替代方案(更安全)
| 替代命令 | 说明 |
|---|
trash-put file.txt | |
mv file.txt ~/.local/share/Trash/files/ | |
rmdir empty-dir/ | |
find . -delete | |
unlink file.txt | |
9. 常用选项速查
| 选项 | 完整名称 | 说明 |
|---|
-r | | |
-R | | |
-f | | |
-i | | |
-I | | |
-v | | |
-d | | |
--no-preserve-root | | |
--preserve-root | | |
10. 故障排查
| 问题 | 解决方法 |
|---|
| Permission denied | |
| Is a directory | |
| No such file or directory | |
文件名以-开头无法删除 | |
| 通配符删除过多文件 | |
| 删除后磁盘空间未释放 | |
| rm -rf / 误执行 | |
11. 防范误删除的最佳实践
# 设置别名:
alias rm='rm -i'# 默认交互模式
alias rm='rm -I'# 批量删除时提示一次
# 使用垃圾桶机制:
# 在~/.bashrc中添加
alias trash='mv -t ~/.trash'
mkdir -p ~/.trash
# 定期备份:
# 重要数据定期备份
rsync -av /important/data /backup/
# 避免使用root删除:
# 尽量使用普通用户,需要时才sudo
# 删除前确认:
# 删除前先用ls确认
ls file* && rm file*
温馨提示: rm是双刃剑,功能强大但风险极高。永远不要执行rm -rf /、rm -rf /*、rm -rf ./*等危险命令。删除前建议:1)使用ls或find预览匹配结果;2)使用-i或-I选项确认;3)养成定期备份习惯;4)考虑使用trash-cli等工具代替直接删除。在脚本中使用rm时,务必使用双引号包围变量路径,避免路径为空时删除根目录。删除是永久性的,谨慎永远不为过!