你刚执行完 rm -rf / —— 当然,你可能只是在网上看到这个梗。但现实中,误删文件、手滑删掉重要数据的事故每天都在发生。在 Linux 里,删除操作没有回收站,一旦执行,文件就真的消失了。新手怕 rm,老手敬畏 rm。本文带你彻底搞懂 rm 的用法,同时掌握一套「安全删除」的护身符,让你不再恐惧删除。
一、rm 命令的作用与基础语法
rm 是 remove 的缩写,用于删除文件或目录。
rm [选项] 目标
核心警告:rm 删除的文件不会进入回收站,除非使用特定恢复工具(且不一定能成功)。请三思而后行。
二、基础用法:删除文件
删除单个文件
rm file.txt
删除多个文件
rm file1.txt file2.txt file3.log
使用通配符批量删除
rm *.tmp # 删除所有 .tmp 结尾的文件rm log_2024* # 删除所有以 log_2024 开头的文件
⚠️ 通配符陷阱:rm * 会删除当前目录下所有文件(但不含隐藏文件和子目录)。务必先用 ls * 预览匹配的文件列表,确认无误再执行 rm。
三、删除目录
默认情况下,rm不能直接删除目录,需要加上 -r(递归)或 -d(删除空目录)选项。
删除空目录(-d)
rm -d empty_dir/
等价于 rmdir empty_dir/。
递归删除目录及其内容(-r 或 -R)
rm -r myfolder/ # 删除 myfolder 目录及其所有子文件和子目录
常用组合:rm -rf(强制递归删除,无确认)
rm -rf myfolder/
四、选项详解
| | |
|---|
-i | | rm -i file.txt |
-f | | rm -f file.txt |
-r | | rm -r dir/ |
-v | | rm -v file.txt |
-d | | rm -d empty_dir/ |
💡 组合推荐:新手最安全的做法是 rm -i,每次删除都确认。熟练后可结合 -v 查看操作记录。
五、rm -rf 的致命风险与典型事故
风险 1:路径变量为空
DIR=""# 变量意外为空rm -rf $DIR/* # 实际执行了 rm -rf /*
后果:删除根目录下所有文件,系统崩溃。
风险 2:手滑多打了空格
rm -rf /home /user/project # 本意是删除 /home/user/project# 但 /home 后面有空格,实际删除了 /home 和 /user/project
风险 3:通配符展开错误
rm -rf * .log# 本意是删除所有文件加 .log,但多了一个空格# 实际先删除了 *(所有文件),再尝试删除 .log(不存在)
风险 4:在当前目录执行 rm -rf *
cd /var/www/html/rm -rf * # 如果路径不对,可能删错整个项目
六、安全删除技巧(护身符)
1️⃣ 先预览,后删除
使用 ls 或 find 先查看要删除的列表:
ls -la *.tmp # 确认文件rm *.tmp # 确认无误后删除
2️⃣ 使用 -i 交互确认(安全模式)
rm -i important.txt# 会提示:remove important.txt? 输入 y 确认,n 取消
3️⃣ 使用 --preserve-root(默认保护根目录)
大多数现代 rm 默认启用 --preserve-root,防止误删 /:
rm -rf / # 会报错:rm: it is dangerous to operate recursively on '/'
但如果你指定 --no-preserve-root,保护会关闭,切勿使用。
4️⃣ 创建“回收站”机制(alias + 移动)
将删除命令替换为移动到临时目录,定期清理:
在 ~/.bashrc 中添加:
alias rm='mv -t ~/.trash'# 或使用 trash-cli
但这会干扰 rm 的正常使用,更推荐安装专业工具。
5️⃣ 使用 trash-cli(推荐)
sudo apt install trash-cli # Ubuntu/Debiansudo dnf install trash-cli # CentOS
用法:
trash-put file.txt # 移到回收站trash-list # 查看回收站内容trash-restore # 恢复文件trash-empty # 清空回收站
这样删除就有后悔药了。
6️⃣ 重要操作前备份
cp -r important/ important_backup/
七、实战示例
删除 7 天前的日志文件(谨慎操作)
find /var/log/ -name "*.log" -mtime +7 -exec rm -f {} \;
⚠️ 先不加 -exec,用 -print 预览:
find /var/log/ -name "*.log" -mtime +7 -print
删除当前目录下所有 .tmp 文件,且逐一确认
rm -i *.tmp
删除一个非空目录,但显示删除过程
rm -rv myproject/
八、常见坑与避坑指南
| | |
|---|
| | |
| DIR="" | 使用前检查变量:[ -n "$DIR" ] && rm -rf "$DIR"/* |
| rm -rf | |
| | |
| rm * 没问题,但若当前目录有 -f 开头的文件会解析为选项 | |
九、恢复误删文件(最后的救命稻草)
如果文件刚删除且磁盘未被大量写入,可以尝试 extundelete(适用于 ext3/ext4):
sudo apt install extundeletesudo extundelete /dev/sda1 --restore-file /path/to/file
但恢复成功率不保证,且需要卸载分区或只读挂载。最好的恢复是预防。
十、总结
rm- 基础用法:
rm file 删文件;rm -r dir 删目录。 - 致命组合:
rm -rf / 或 rm -rf * 要极度小心。 - 预览
- 确认
- 备份
记住:在 Linux 里,rm 是单程票。用之前,多看一眼路径,多按一次回车确认。这习惯能救你无数次。
如果你觉得本文对你有帮助,欢迎点赞、推荐、转发,关注我,后续会分享更多Linux入门干货!
文 / 零距技术仓记录每一次真实的折腾 (#^.^#)🚀 想看到更多实用折腾技巧?👉 先关注💬 评论区说说你的经历或想看的内容👍 点赞表示支持🔁 顺手分享给也在折腾的人,让大家都少踩坑 😎