普通人也能看懂的 Linux 命令 · 04
删除文件为什么要格外小心?rm、rmdir 和通配符入门
在 Windows 电脑上,我们删除文件时,大部分情况下会先进入回收站。发现删错了,打开回收站,还有机会找回来。
但在 Linux 命令行中,情况通常完全不同。
当你输入一条删除命令,系统往往会直接执行。没有弹窗提醒,也不会自动帮你放进回收站。
一条命令,可能删除一个文件,也可能删除整个目录里的所有内容。
所以,学习 Linux 删除命令,重点不是记住怎么删,而是知道:自己到底要删除什么,以及怎样避免删错。
今天,我们从最基础的 rm 和 rmdir 开始,再认识能够批量匹配文件的通配符。
rm 是 Linux 中常见的删除命令,名称来自英文单词 remove。
它的基本写法很简单:
rm 文件名
假设当前目录里有一个不再需要的文件:
notes.txt
可以这样删除:
rm notes.txt
如果执行成功,终端通常不会显示“删除成功”之类的提示,而是直接回到等待输入命令的状态。
此时可以使用 ls 查看当前目录:
ls
如果列表中已经没有 notes.txt,说明它已经被删除。
Linux 命令行中,很多命令执行成功后并不会主动输出结果。没有提示,不一定代表没有生效。
因为对于普通的命令行使用场景来说,rm 通常不会把文件送进桌面系统的回收站。
它也没有一个通用的“撤销删除”命令。
虽然某些情况下可以依靠备份、文件系统快照,或者专业恢复工具尝试找回,但这些方法并不保证成功,往往也需要额外条件。
对初学者来说,最好建立一个简单的意识:
命令行删除文件时,应当默认它无法轻松恢复。
另外,Linux 文件名通常区分大小写。例如:
report.txt Report.txt REPORT.txt
在通常区分大小写的 Linux 文件系统中,这可能是三个不同的文件。
删除之前,最好确认自己输入的文件名与实际文件完全一致。
如果你担心误删,可以在 rm 后面加上 -i 参数:
rm -i notes.txt
执行之后,系统通常会出现类似这样的提示:
rm: remove regular file 'notes.txt'?
这句话的意思是:是否删除这个普通文件?
对刚开始接触 Linux 的人来说,使用 rm -i 是一个不错的习惯。
它不能保证万无一失,但至少会在真正删除之前,再给你一次检查机会。
如果你要删除的是一个目录,可以先认识另一个命令:
rmdir 目录名
例如,删除一个名为 empty_folder 的空目录:
rmdir empty_folder
这个命令有一个很重要的特点:
如果目录中还有文件或者子目录,系统通常会提示:
rmdir: failed to remove 'empty_folder': Directory not empty
意思是:删除失败,因为目录不是空的。
这个限制看起来有些麻烦,但对于初学者来说,它反而是一层保护:至少不会因为手滑,把目录里的资料一起删除。
如果一个目录里面还有文件,而你已经确认整个目录都不再需要,可以使用:
rm -r 目录名
例如:
rm -r old_files
这里的 -r 表示递归删除。
简单来说,就是把指定目录,以及里面的文件、子目录和更深层的内容一起删除。
目录里的东西越多,rm -r 的影响范围就越大。执行前,最好先用 ls 查看目录内容,再决定是否删除。
如果希望删除时增加确认提示,可以组合使用:
rm -ri old_files
其中:
-r:递归处理目录及其内容。
-i:在删除过程中进行交互确认。
当目录中文件较多时,确认提示也会很多。但对于还不熟悉操作的新手来说,慢一点通常比删错更好。
假设一个目录里有这些文件:
notes.txt todo.txt report.txt photo.jpg music.mp3
如果想找到所有以 .txt 结尾的文件,不需要把每个名字都写出来。
可以使用星号:
*.txt
这里的 * 就是一种常见的通配符,通常表示匹配任意数量的字符。
因此:
ls *.txt
通常会显示:
notes.txt report.txt todo.txt
常见的写法还有:
*.txt:匹配以 .txt 结尾的名称。
report*:匹配以 report 开头的名称。
*2026*:匹配名称中包含 2026 的文件或目录。
默认情况下,普通的 * 通常不会匹配以点开头的隐藏文件。这一点也需要提前知道。
通配符非常方便,但和删除命令放在一起时,也意味着一次操作可能影响多个文件。
例如:
rm *.txt
这条命令会删除当前目录中匹配 *.txt 的普通文件。
如果当前目录里恰好有重要的文本资料,它们也可能一起被删除。
更安全的做法:先查看,再删除。
先确认通配符会匹配哪些文件,再决定是否继续。
第一步,先查看匹配到的文件:
ls -d -- *.txt
第二步,确认这些文件确实都不再需要之后,再使用带确认提示的删除命令:
rm -i -- *.txt
这里的 -- 用来明确告诉命令:后面的内容按文件名处理,避免某些以短横线开头的文件名被误认为命令参数。
对初学者而言,最需要记住的还是一句话:
看不清通配符会匹配什么,就不要直接把它交给 rm。
删除命令中的一个空格,有时会彻底改变它的含义。
比如,你原本想删除当前目录中以 .txt 结尾的文件:
rm *.txt
如果不小心在星号后面加了一个空格:
rm * .txt
命令的含义就变了。
其中的 * 通常会展开为当前目录下的非隐藏名称,后面的 .txt 则会被当作另一个单独的文件名。
结果可能导致当前目录中的多个普通文件被删除,而不仅仅是文本文件。
使用通配符时,输入完成后先检查一遍空格,再按回车。
在很多 Linux 教程或技术讨论中,你可能见过这样一组参数:
rm -rf
其中:
-r:递归删除目录及其内容。
-f:不进行交互确认,并忽略不存在的文件。
需要注意的是,-f 并不代表可以突破系统权限。没有权限删除的内容,仍然不能随意删除。
真正的风险在于:它会减少确认机会,而递归删除又会扩大操作范围。
对初学者的建议
不要复制执行来源不明的删除命令,不要在没有确认目录和路径的情况下使用 rm -rf,更不要用管理员权限运行自己不理解的命令。
遇到需要清理目录的情况,先查看位置和内容:
pwd ls -la
确认自己确实位于预期目录,再决定下一步操作。
如果想练习删除命令,建议先准备一个专门的练习目录,不要直接拿自己的工作文件测试。
第一步:创建练习目录并进入。
mkdir delete_practice cd delete_practice
第二步:创建几个测试文件。
touch notes.txt todo.txt report.txt photo.jpg
第三步:查看当前目录内容。
ls
第四步:查看哪些文件会被 *.txt 匹配。
ls -d -- *.txt
第五步:带确认提示地删除文本文件。
rm -i -- *.txt
根据提示输入 y 或 n。
第六步:创建并删除一个空目录。
mkdir empty_folder rmdir empty_folder
第七步:检查练习目录里还剩什么。
ls
如果你删除了全部文本文件,通常只会剩下:
photo.jpg
rm 文件名:删除普通文件。
rm -i 文件名:删除前进行确认。
rmdir 目录名:删除空目录。
rm -r 目录名:递归删除目录及其内容。
rm -ri 目录名:递归删除,并进行交互确认。
*.txt:匹配以 .txt 结尾的名称。
ls -d -- *.txt:查看通配符匹配到的名称。
pwd:查看当前所在目录。
ls -la:查看当前目录中的详细内容,包括隐藏文件。
写在最后
创建文件时输错名字,通常可以重新创建;复制错位置,也往往可以重新调整。
但删除操作不同。一旦执行,原本的数据可能很难恢复。
因此,学习 Linux 删除命令,最重要的不是记住多少参数,而是养成三个习惯:
第一,先确认自己在哪个目录。
第二,先看清楚要删除哪些文件。
第三,不理解的删除命令,不要直接执行。
命令行本身并不可怕,可怕的是还没看清楚,就已经按下了回车。
下一篇预告
文件里面写了什么?cat、less、head 和 tail 入门