名称

rm - 删除文件或目录

简介

rm [选项]... [文件]...

描述

rm 命令用于删除指定的文件或目录。默认情况下,它不会删除目录,需要使用 -r-R 选项递归删除目录及其内容。一旦文件被删除,通常无法恢复,除非使用专门的数据恢复工具。

该命令主要用于:

  • 删除不再需要的文件。

  • 清空目录内容或删除整个目录树。

  • 结合通配符批量删除文件。

选项

短选项

长选项

描述

-f

--force

强制删除,忽略不存在的文件和任何提示,不会询问确认。

-i

--interactive

交互模式:每次删除前提示用户确认。

-I

在删除超过三个文件或递归删除时提示一次确认(比 -i 打扰更少)。

-r

-R--recursive

递归删除目录及其内容。删除目录时必须使用此选项。

-d

--dir

使用 unlink 删除空目录(即使目录非空也可尝试删除,但通常不建议)。

-v

--verbose

显示详细的操作信息,列出每个被删除的文件。

--preserve-root

保护根目录 /,防止意外递归删除根目录(默认行为)。

--no-preserve-root

取消对根目录的保护,允许删除根目录(危险操作)。

--one-file-system

递归删除时,不跨越不同文件系统(例如,不会删除挂载点内的文件)。

--help

显示帮助信息并退出。

--version

显示版本信息并退出。

退出状态

  • 0 – 所有指定文件成功删除。

  • >0 – 发生错误(例如文件不存在但未使用 -f、权限不足、尝试删除目录但未使用 -r 等)。

常用示例

1. 删除单个文件

rm file.txt

2. 强制删除文件(不提示)

rm -f file.txt

3. 交互式删除(每次询问)

rm -i file.txt

4. 删除多个文件

rm file1.txt file2.jpg file3.log

5. 递归删除目录及其内容

rm -r old_directory/

6. 强制递归删除目录(常用清理操作)

rm -rf temp/

注意: rm -rf 是非常危险的命令,请务必确认路径正确。

7. 删除前提示,并显示详细信息

rm -iv *.tmp

8. 删除空目录(相当于 rmdir

rm -d empty_dir/

9. 保护根目录的示例(即使使用 -rf 也无法删除 /,除非加上 --no-preserve-root

rm -rf /   # 默认会提示错误,不会真正删除根目录

10. 使用通配符删除所有 .log 文件(谨慎)

rm *.log

11. 删除文件名包含特殊字符的文件

rm -- -filename.txt   # 文件名以破折号开头,需用 -- 表示选项结束
# 或者使用相对路径 ./--filename.txt

12. 限制在同一文件系统内递归删除

rm -rf --one-file-system /mnt/data

这会在删除 /mnt/data 时,不会跨越到其他挂载点(如 /mnt/data/other_disk)。

注意事项

  • rm 删除的文件通常无法恢复,请务必谨慎操作。考虑使用 -i 选项或别名 alias rm='rm -i' 来增加安全性。

  • 使用 -rf 组合时,尤其是以 root 身份执行,极易造成系统损坏。建议在执行前先用 ls 确认要删除的内容。

  • 对于重要文件,可以考虑使用 trash-cli(如 trash-put)将文件移动到回收站,而不是直接删除。

  • 如果要删除文件名以 - 开头的文件,需要使用 -- 选项结束符,例如 rm -- -filename,或使用路径 rm ./-filename

  • 默认情况下,rm 会保护根目录 /,即使执行 rm -rf / 也会报错(除非使用 --no-preserve-root)。但依然要小心路径拼写错误,例如 rm -rf /home/user / 中的空格可能导致灾难。

  • 在脚本中使用 rm 时,应确保变量展开后不会意外删除根目录或重要文件。可以使用 -- 来防止以 - 开头的文件名被解释为选项。

  • 递归删除目录时,如果目录内有大量文件,可能会花费较长时间。可以考虑使用 rsync --delete 等工具清空目录。

相关命令

  • rmdir – 删除空目录。

  • unlink – 删除单个文件(底层调用)。

  • shred – 安全删除文件(覆盖内容以防恢复)。

  • trash – 将文件移至回收站(需安装 trash-cli)。

  • ls – 列出目录内容,用于确认要删除的文件。

  • find – 结合 -delete-exec rm {} \; 可以更灵活地删除文件。