Linux rm 命令:你需要知道的一切

已发表: 2023-01-22
显示 bash 提示符的 Linux 笔记本电脑
fatmawati achmad zaenuri/Shutterstock.com
rm 命令允许您删除传递其名称的文件或目录:“rm 文件名”或“rm -d 目录”。 您也可以包含目录路径。 如果目录中有文件,则使用-r选项“rm -r directory”递归删除文件和文件夹。

Linux rm命令删除文件和目录。 要安全地使用此工具,您需要确定按下“Enter”键时会发生什么。 这是您需要知道的。

目录

Linux 中的 rm 命令是什么?
如何使用 rm 删除文件
在 rm 中使用通配符
交互使用 rm
使用 rm 强制选项
使用 rm 删除目录
使用 rm 时避免错误
什么个人防护装备?

Linux 中的 rm 命令是什么?

Linux rm命令主要用于删除文件。 这是大多数人在开始使用 Linux 后不久就会遇到的问题。 由于是 Linux 的新手,您很可能会犯错误。 您可能会不小心创建或复制文件,或者使用错误的名称,或者复制到错误的位置。 这是命令行学习曲线的一部分。 此类错误的清理操作涉及rm

在 Linux 上你真正需要避免的 8 个错别字
在 Linux 上你真正需要避免的 8 个相关错别字

rm命令可以删除文件、文件组、目录或完整的目录树。 这就是为什么必须谨慎使用它的原因。 使用rm并不困难,但失败的代价很高。

使用rm删除文件时,它就消失了。 它不会被移到垃圾箱。 它立即被抹去。 这并不意味着您应该避免使用rm 。 但要安全地使用它,您需要了解它的功能,并确保正确使用它。

有些工具比其他工具更危险,而且对错误的容忍度要低得多。 这就是为什么从来没有一部叫做德州扳手大屠杀的电影。 rm不是扳手,绝对是电锯。

人们每天整天都在使用电锯,只要他们负责任地、用心地使用电锯,他们就没事。 这与rm的处理相同。 当您从工具包中取出rm时,您应该放慢速度并检查,然后再次检查您的命令行。

rm命令是一个可执行文件,它不是 shell 的一部分。 因此,虽然我们在这里使用 Bash,但它是标准的 Linux rm ,而不是特殊的 Bash rm

相关:命令行:为什么人们仍然为之烦恼?

如何使用 rm 删除文件

使用rm的最简单方法是提供要删除的文件的名称。

 rm 配置.gc 

通过将文件名传递给 rm 来删除单个文件

您将静默返回命令行。 rm采用了经典的、守口如瓶的 Linux 立场,即如果它不抱怨任何事情,您就可以假设它按照您的要求做了。 提供这样的文件名会导致rm在当前工作目录中查找文件。

您可以在命令行上提供多个文件名。 如果要删除的文件不在当前目录中,您还可以提供目录路径。

 rm memlog.sh /home/dave/dev-archive/config.gc 

通过将文件名和目录路径传递给 rm 来删除两个文件

同样,如果rm设法删除了指定的文件,则不会报告任何内容。

相关:你应该知道的 37 个重要的 Linux 命令

在 rm 中使用通配符

通配符允许您指定文件组或集合,而不必在命令行上列出单个文件。

星号“ * ”代表任何字符序列,包括无字符。 问号“ ? ” 代表任何单个字符。

要检查您的通配符是否与您期望的匹配,仅此而已,您可以在将它们与 rm 一起使用之前将它们与 ls 一起使用。

要删除当前目录中的所有 PNG 文件,请使用“*.png”。 这意味着将匹配后跟“.png”的任何字符序列。 删除文件后,我们可以使用ls来验证它们是否已删除。

 ls *.png
 rm *.png
 ls *.png 

使用星号通配符删除所有文件扩展名为 PNG 的文件

在我们的测试计算机上,当前目录中有两个文件,名称以“config”开头。

我们可以使用星号通配符来删除这两个。 它匹配这两个文件,因为rm正在寻找以“config”开头,后跟任意字符序列的文件名。 在一个文件中,该字符序列是“.sl3”,即文件扩展名。 另一个文件名在“config”之后没有字符,但是因为星号匹配任何字符或没有字符,所以它也匹配那个文件名。

 ls配置*
 房间配置*
 ls配置* 

使用星号通配符删除两个文件,一个带一个不带,一个文件扩展名

您可以成对使用问号。 这将删除文件扩展名正好是两个字符的文件。

 ls *.??
 R M *。??
 ls *.?? 

使用两个问号通配符删除文件扩展名正好是两个字符的文件

相关: Bash 需要知道的 15 个特殊字符

交互使用 rm

使用rm的一种安全方法是强制它在删除每个文件之前要求确认。 -i (交互式)选项可让您执行此操作。 当您将此选项添加到命令行时, rm将在每次删除之前提示您,让您有机会跳过您不希望的操作。

我们将在此命令中使用-i (交互式)选项。 它会尝试删除具有单个字符文件扩展名的所有文件。

 rm -i *.? 

以交互方式使用 rm 以便在每次删除之前提示

每个匹配的文件依次呈现。 如果您回答“y”或“Y”,文件将被删除。 如果您回答“n”,该文件将被保留。 事实上,如果您回答的不是“y”或“y”,该文件将被保留。 您只需点击“Enter”即可保留文件。

您可以快速浏览文件列表,删除或跳过文件以挑选要删除的文件。 正如我们将看到的,您可以将i- (交互式)选项与其他rm选项一起使用。

相关:面向开发人员和爱好者的最佳 Linux 笔记本电脑

使用 rm 强制选项

如果您尝试删除只读文件, rm会在删除该文件之前提示您进行确认。 这是一个很好的安全网,但如果您有很多文件要删除,它可能会变得乏味。

 rm geonames.sl3 

rm 提示用户确认他们要删除只读文件

-f (强制)选项指示rm从不提示。 你告诉它“是的,删除你通常会提示我的所有文件。” 它还可以防止rm抱怨不存在的文件。

 rm -f geonames.sl3 

使用 -f(强制)选项防止 rm 提示删除

当您删除一组嵌套的文件和目录时,通常会使用-f (强制)选项。

使用 rm 删除目录

rm命令也可以选择性地删除目录及其包含的文件。 这类似于rmdir命令,但是rmdir不能删除目录中有文件的目录。 它只删除空目录。 rm命令可以轻松删除包含文件和其他目录的目录。

如何在 Linux 终端中删除文件和目录
相关如何在 Linux 终端中删除文件和目录

删除目录类似于删除文件。 我们在命令行上提供目录的名称。 我们需要包括-d (目录)选项。 就像我们删除文件时所做的那样,我们可以提供几个目录的名称。 我们可以提供不在当前工作目录中的目录路径。

 rm -d 旧项目

使用 -d(目录)选项删除目录

如果目录包含文件,这将失败。

要删除目录及其内容,请使用-r (递归)标志。 这将删除目录、它的文件以及它包含的任何嵌套目录。

 rm -d 存档
rm -r 存档

使用 -r(递归)选项删除目录及其文件

第二个命令成功。

要将rm切换到全电锯模式,我们可以结合使用-r (递归)和-f (强制)选项。 这告诉rm递归地删除目录树中的所有文件和目录,即使它们是只读的,也不会提示我们。

在我们的测试计算机上,我们有一个名为“迁移代码”的目录。 它包含文件和另一个名为“6502”的目录。 “6502”目录还包含文件和另一个名为“ASM”的目录。 该目录中也有文件。 有些文件是只读的。

我们还将包含-v (详细)命令,以便rm告诉我们它在做什么。

 rm -rfv 迁移代码

使用 -rfv 标志使 rm 删除文件和目录,甚至是只读文件,而不提示

在输出中我们可以看到文件已被删除,当它们为空时,目录也被删除。

-rfv 标志的输出显示已删除的文件和空目录后删除的目录

使用 rm 时避免错误

文件名中的空格和其他奇怪的字符可能会出现问题。 例如,以连字符“ - ”开头的文件名可能会被误认为是命令行选项。 如果我们有一个名为“-contributors.txt”的文件, rm将尝试将该名称作为一系列命令行选项进行处理。

因为rm没有名为“ -c ”的选项,所以命令行解析失败并且文件没有被删除。 要删除该文件,您需要在它前面加上“./”以提供它的路径。

 rm -贡献者.txt
 rm ./-贡献者.txt 

使用“./”解决删除第一个字符为连字符的文件的问题

文件名中的空格也有问题。 要么引用整个文件名,要么使用制表符完成将文件名插入到命令行中,同时转义空格。 如果您不使用这些选项中的任何一个, rm会将文件名的每个部分视为一个单独的文件。

如何在 Linux 上处理文件名中的空格
相关如何在 Linux 上处理文件名中的空格

在这里,我们有两个文件,一个称为“备份”,一个称为“要删除的备份”。 我们可以使用ls演示这些文件名的问题。 如果我们尝试在“要删除的备份”文件上使用ls并且我们没有转义或引用文件名,则该命令将失败。

 ls -hl 备份删除

尝试在名称中包含空格的文件上使用 ls,而不引用字符串或转义空格

ls抱怨它找不到名为“to”或“delete”的文件,但它确实找到了一个名为“backup”的文件。 rm也会这样做。 它会抱怨两个丢失的文件,然后它会删除名为“备份”的文件,这不是我们想要的。

 rm 备份删除

尝试在名称中包含空格的文件上使用 rm,而不引用字符串或转义空格

rm认为它正在处理三个文件,“backup”、“to”和“delete”。 它抱怨找不到“to”和“delete”,但它找到并默默地删除了“backup”。

引用文件名允许rm删除正确的文件。

 rm '要删除的备份' 

使用 rm 和带引号的文件名来克服文件名中的空格问题

您也可以使用反斜杠“ \ ”来转义空格,如下所示:

 rm 备份\到\删除

使用带有转义空格的文件名来克服文件名中的空格问题

如果您使用制表符完成输入您的文件名,它们将在需要时自动转义。

什么个人防护装备?

与现实世界中的电锯不同, rm没有可以使用的个人防护设备。

您可以做的是在尝试使用rm之前使用ls检查您的语法,并使用交互模式,以便您决定删除哪些内容。

除此之外,它一直在练习,直到您感到舒适和自信为止。 最安全的方法是将一堆牺牲文件复制到一个目录并在这些文件上进行练习。

相关:在 Linux 上删除早于 x 天的文件