文件和目录管理命令 rm
rm 命令是 Linux 中用来删除文件或目录的工具,全称是 remove。它简单但功能强大,用得好能帮你快速清理不需要的文件。
1. 基本用法
rm
的基本语法是:
rm [选项] 文件或目录...
- 选项:控制
rm
行为的一些参数,比如强制删除或删除目录。 - 文件或目录:你要删除的目标,可以是一个文件、多个文件,甚至是目录。
最简单的用法,删除一个文件:
rm file.txt
这会直接把 file.txt
删除。如果文件不存在,rm
会报错:
rm: cannot remove 'file.txt': No such file or directory
2. 删除多个文件
你可以一次删除多个文件,只需在命令后面列出所有文件名,用空格分开:
rm file1.txt file2.txt file3.txt
这会把 file1.txt
、file2.txt
和 file3.txt
都删掉。注意,文件名之间用空格隔开,别用逗号或其他符号。
3. 使用通配符
Linux 允许用通配符(*
或 ?
)来匹配文件,比如:
- 删除当前目录下所有
.txt
文件:
rm *.txt
- 删除以
log
开头的文件:
rm log*
- 删除 5 个字符长度的文件(
?
匹配单个字符):
rm ?????
小心:通配符很强大,但也容易误删。运行前可以用 ls
配合相同通配符检查一下,比如:
ls *.txt
这能帮你确认哪些文件会被删。
4. 删除目录
默认情况下,rm
不能直接删除目录,会提示:
rm: cannot remove 'mydir': Is a directory
想删目录,得加上 -r
(或 --recursive
)选项,意思是递归删除目录及其内容:
rm -r mydir
这会把 mydir
以及里面的所有文件和子目录都删掉。
注意:-r
是个危险选项,因为它会把目录里所有东西都删,删之前一定要确认目录里没重要文件!
5. 强制删除
有时候,删除文件时系统会提示你确认,比如文件是只读的。为了跳过这些提示,可以用 -f
(或 --force
)选项:
rm -f file.txt
-f
会强制删除,不提示,直接干掉文件。结合 -r
,可以强制删除目录:
rm -rf mydir
警告:rm -rf
是 Linux 中最危险的命令之一,尤其是用在像 /
这样的路径时,可能毁掉整个系统。永远不要随便运行 rm -rf /
或类似命令!
6. 交互式删除
如果你怕误删,可以用 -i
(或 --interactive
)选项,让 rm
在删每个文件前都问你:
rm -i file.txt
系统会提示:
rm: remove regular file 'file.txt'?
输入 y
确认删除,n
取消。删除多个文件或目录时,-i
会逐个询问,适合小心操作时使用。
还有个更严格的选项 -I
(大写),它只在删除超过 3 个文件或递归删除时提示一次,适合批量操作但不想逐个确认:
rm -I *.txt
7. 防止误删的小技巧
rm
删东西是永久删除,不会进回收站,所以要格外小心。以下是一些实用技巧:
- 用
echo
检查:在用通配符时,先用echo
看看会删哪些文件:
echo rm *.txt
这不会真的删除,只是显示会被删的文件。
- 用
mv
代替删除:把文件移到临时目录,确认没问题再删:
mv file.txt /tmp
- 创建别名:在
~/.bashrc
里加个别名,让rm
默认带-i
:
alias rm='rm -i'
加了之后,每次用 rm
都会提示,防止误删。
8. 其他选项
rm
还有一些不常用的选项,了解一下有备无患:
-v
(或--verbose
):显示删除过程的详细信息:
rm -v file.txt
输出:
removed 'file.txt'
--one-file-system
:递归删除时,只删同一文件系统上的内容,跨文件系统的不删。适合备份或挂载点多的场景:
rm -r --one-file-system mydir
- 清理日志文件:比如删掉超过 7 天的日志:
find . -name "*.log" -mtime +7 -exec rm -v {} \;
这里用 find
配合 rm
,可以按条件删除。
9. 注意事项
- 没有回收站:Linux 的
rm
删了就是真删了,恢复非常困难。重要文件建议先备份。 - 权限问题:删除需要相应权限,没权限会报错:
rm: cannot remove 'file.txt': Permission denied
可以用 sudo rm
提升权限,但要确认你在干啥。
- 小心通配符:像
rm -rf *
这样的命令会删当前目录所有内容,运行前三思。 - 日志记录:如果要记录删了啥,结合
-v
和重定向:
rm -v *.txt > delete_log.txt