Linux rm | Linux 删除文件

17 Mar 2025 | 4 分钟阅读

“rm”的意思是“remove”(移除)。此命令用于删除文件。与许多其他图形界面(GUI)不同,命令行没有回收站或废纸篓来恢复文件。因此,在使用此命令时要格外小心。一旦删除了一个文件,它将被永久删除。

rm 简介

rm 是 Unix 和其他类 Unix 系统中的一个通用命令。它用于从文件系统中删除符号链接、目录和计算机文件等对象。此外,它还可以删除套接字、管道和设备节点等特殊文件,这与 Microsoft Windows、OS/2 和 MS-DOS 中的 del 命令类似。该命令在 EFI shell 中也可用。

rm 概述

rm 命令使用 unlink 系统调用从文件系统中删除对象引用。对象可能拥有两个或多个引用(例如,一个文件使用两个名称),只有当所有引用都已被删除并且程序尚未打开对象的句柄时,对象本身才会被删除。

  • 这允许在某些场景下,程序可以启动一个文件,立即从文件系统中删除它,并利用其空间,即使程序在崩溃时退出,其占用的空间也会被回收。
  • 通常,该命令不会破坏文件数据,因为它的目标是很难取消链接引用。此外,释放的文件系统空间可能仍然包含已删除文件的残留数据。在某些情况下,这可能是一个安全隐患,并且经过加固的发行版有时允许在最后一个链接被切断时擦除数据,并且像 srmshred 这样的程序可以用来提供数据擦除功能。
  • rm 命令仅在 Unix 派生的操作系统上可用,这些操作系统通常不允许通过回收站等方法恢复已删除的文件,因此用户的习惯是将 rm 命令进行包装以限制意外的文件删除。
  • 此外,还有一些 undelete 工具会尝试重建索引,如果这些部分没有被重用,就可以找回文件。

rm 的简要历史

在一些旧版本的 Unix 中,rm 命令会删除空目录。但是,通过使用 -d 选项,可以在某些版本的 rm 命令中实现此行为,例如,源自 4.4BSD-Lite2 的 BSD 系统(如 macOS、OpenBSD、NetBSD 和 FreeBSD)。

此外,与 GNU coreutils 一起打包的 rm 版本提供了 -d 标志以方便兼容性。标准 rmdir 命令也提供了类似的功能。在 Version 7 中,-i 标志被“delete from switches”或 dsw 取代,后者出现在 Version 1 中。

语法

rm 命令会删除后面带有选项的文件名。用户可以使用相对路径或文件的完整路径来命名要删除的文件。默认情况下,rm 命令不删除目录。`rm foo` 命令会删除用户当前目录中的 `foo` 文件。

rm 命令可以通过 shell 别名函数 `rm -i` 来覆盖,以忽略意外的文件删除。但是,如果用户想在未经确认的情况下删除大量文件,他们可以通过手动包含 -f 标志来设置 -i 标志。不幸的是,这种方法在使用通配符时会产生危险的习惯,导致其意外删除版本。

rm -rf 命令经常出现在关于 Unix 灾难的轶事和笑话中,包括在电影 《玩具总动员 2》 制作过程中丢失的许多文件。如果由超级用户执行,该命令的 rm -rf / 版本将导致当前文件系统可访问的所有文件被删除。

在父目录上,删除文件在大多数文件系统上需要写入权限。要删除目录,必须递归地删除其所有内容。这需要对该目录及其非空子目录具有递归的执行和写入权限。需要读取权限才能指定目录内容以删除它们。有时,这会导致一种奇怪的情况,即非空目录无法删除,因为没有写入权限,因此无法删除其内容;尽管如果一个类似的目录是空的,就可以删除它。

示例


rm file

在上方的快照中,我们已经使用“rm”命令永久删除了文件 myfile1。

rm 选项

选项描述
rm *extension用于删除具有相同扩展名的文件。
rm -r 或 R递归删除目录。
rm -i交互式删除文件。
rm -rf强制删除目录。
-f-f 代表 force(强制)。它会忽略不存在的文件并覆盖确认提示。但是,它不会删除目录中具有写保护的文件。
-v-v 代表 verbose(详细)。它会在终端打印 rm 命令正在做什么。
-d-d 代表 directory(目录)。它会删除一个空目录,并且仅当命名的目录为空时才起作用。
--one-file-system它仅删除与参数相同文件系统上的文件,并会避开挂载的文件系统。

下一个主题Linux cp 命令