Linux rm 命令:你需要知道的一切
已发表: 2023-01-22
Linux rm
命令删除文件和目录。 要安全地使用此工具,您需要确定按下“Enter”键时会发生什么。 这是您需要知道的。
Linux 中的 rm 命令是什么?
如何使用 rm 删除文件
在 rm 中使用通配符
交互使用 rm
使用 rm 强制选项
使用 rm 删除目录
使用 rm 时避免错误
什么个人防护装备?
Linux 中的 rm 命令是什么?
Linux rm
命令主要用于删除文件。 这是大多数人在开始使用 Linux 后不久就会遇到的问题。 由于是 Linux 的新手,您很可能会犯错误。 您可能会不小心创建或复制文件,或者使用错误的名称,或者复制到错误的位置。 这是命令行学习曲线的一部分。 此类错误的清理操作涉及rm
。
rm
命令可以删除文件、文件组、目录或完整的目录树。 这就是为什么必须谨慎使用它的原因。 使用rm
并不困难,但失败的代价很高。
使用rm
删除文件时,它就消失了。 它不会被移到垃圾箱。 它立即被抹去。 这并不意味着您应该避免使用rm
。 但要安全地使用它,您需要了解它的功能,并确保正确使用它。
有些工具比其他工具更危险,而且对错误的容忍度要低得多。 这就是为什么从来没有一部叫做德州扳手大屠杀的电影。 rm
不是扳手,绝对是电锯。
人们每天整天都在使用电锯,只要他们负责任地、用心地使用电锯,他们就没事。 这与rm
的处理相同。 当您从工具包中取出rm
时,您应该放慢速度并检查,然后再次检查您的命令行。
rm
命令是一个可执行文件,它不是 shell 的一部分。 因此,虽然我们在这里使用 Bash,但它是标准的 Linux rm
,而不是特殊的 Bash rm
。
相关:命令行:为什么人们仍然为之烦恼?
如何使用 rm 删除文件
使用rm
的最简单方法是提供要删除的文件的名称。
rm 配置.gc
您将静默返回命令行。 rm
采用了经典的、守口如瓶的 Linux 立场,即如果它不抱怨任何事情,您就可以假设它按照您的要求做了。 提供这样的文件名会导致rm
在当前工作目录中查找文件。
您可以在命令行上提供多个文件名。 如果要删除的文件不在当前目录中,您还可以提供目录路径。
rm memlog.sh /home/dave/dev-archive/config.gc
同样,如果rm
设法删除了指定的文件,则不会报告任何内容。
相关:你应该知道的 37 个重要的 Linux 命令
在 rm 中使用通配符
通配符允许您指定文件组或集合,而不必在命令行上列出单个文件。
星号“ *
”代表任何字符序列,包括无字符。 问号“ ?
” 代表任何单个字符。
要检查您的通配符是否与您期望的匹配,仅此而已,您可以在将它们与 rm 一起使用之前将它们与 ls 一起使用。
要删除当前目录中的所有 PNG 文件,请使用“*.png”。 这意味着将匹配后跟“.png”的任何字符序列。 删除文件后,我们可以使用ls
来验证它们是否已删除。
ls *.png
rm *.png
ls *.png
在我们的测试计算机上,当前目录中有两个文件,名称以“config”开头。
我们可以使用星号通配符来删除这两个。 它匹配这两个文件,因为rm
正在寻找以“config”开头,后跟任意字符序列的文件名。 在一个文件中,该字符序列是“.sl3”,即文件扩展名。 另一个文件名在“config”之后没有字符,但是因为星号匹配任何字符或没有字符,所以它也匹配那个文件名。
ls配置*
房间配置*
ls配置*
您可以成对使用问号。 这将删除文件扩展名正好是两个字符的文件。
ls *.??
R M *。??
ls *.??
相关: Bash 需要知道的 15 个特殊字符
交互使用 rm
使用rm
的一种安全方法是强制它在删除每个文件之前要求确认。 -i
(交互式)选项可让您执行此操作。 当您将此选项添加到命令行时, rm
将在每次删除之前提示您,让您有机会跳过您不希望的操作。
我们将在此命令中使用-i
(交互式)选项。 它会尝试删除具有单个字符文件扩展名的所有文件。
rm -i *.?
每个匹配的文件依次呈现。 如果您回答“y”或“Y”,文件将被删除。 如果您回答“n”,该文件将被保留。 事实上,如果您回答的不是“y”或“y”,该文件将被保留。 您只需点击“Enter”即可保留文件。
您可以快速浏览文件列表,删除或跳过文件以挑选要删除的文件。 正如我们将看到的,您可以将i-
(交互式)选项与其他rm
选项一起使用。
Linux 命令 | ||
文件 | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc | |
进程 | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap | |
联网 | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld |
相关:面向开发人员和爱好者的最佳 Linux 笔记本电脑

使用 rm 强制选项
如果您尝试删除只读文件, rm
会在删除该文件之前提示您进行确认。 这是一个很好的安全网,但如果您有很多文件要删除,它可能会变得乏味。
rm geonames.sl3
-f
(强制)选项指示rm
从不提示。 你告诉它“是的,删除你通常会提示我的所有文件。” 它还可以防止rm
抱怨不存在的文件。
rm -f geonames.sl3
当您删除一组嵌套的文件和目录时,通常会使用-f
(强制)选项。
使用 rm 删除目录
rm
命令也可以选择性地删除目录及其包含的文件。 这类似于rmdir
命令,但是rmdir
不能删除目录中有文件的目录。 它只删除空目录。 rm
命令可以轻松删除包含文件和其他目录的目录。
删除目录类似于删除文件。 我们在命令行上提供目录的名称。 我们需要包括-d
(目录)选项。 就像我们删除文件时所做的那样,我们可以提供几个目录的名称。 我们可以提供不在当前工作目录中的目录路径。
rm -d 旧项目
如果目录包含文件,这将失败。
要删除目录及其内容,请使用-r
(递归)标志。 这将删除目录、它的文件以及它包含的任何嵌套目录。
rm -d 存档
rm -r 存档
第二个命令成功。
要将rm
切换到全电锯模式,我们可以结合使用-r
(递归)和-f
(强制)选项。 这告诉rm
递归地删除目录树中的所有文件和目录,即使它们是只读的,也不会提示我们。
在我们的测试计算机上,我们有一个名为“迁移代码”的目录。 它包含文件和另一个名为“6502”的目录。 “6502”目录还包含文件和另一个名为“ASM”的目录。 该目录中也有文件。 有些文件是只读的。
我们还将包含-v
(详细)命令,以便rm
告诉我们它在做什么。
rm -rfv 迁移代码
在输出中我们可以看到文件已被删除,当它们为空时,目录也被删除。
使用 rm 时避免错误
文件名中的空格和其他奇怪的字符可能会出现问题。 例如,以连字符“ -
”开头的文件名可能会被误认为是命令行选项。 如果我们有一个名为“-contributors.txt”的文件, rm
将尝试将该名称作为一系列命令行选项进行处理。
因为rm
没有名为“ -c
”的选项,所以命令行解析失败并且文件没有被删除。 要删除该文件,您需要在它前面加上“./”以提供它的路径。
rm -贡献者.txt
rm ./-贡献者.txt
文件名中的空格也有问题。 要么引用整个文件名,要么使用制表符完成将文件名插入到命令行中,同时转义空格。 如果您不使用这些选项中的任何一个, rm
会将文件名的每个部分视为一个单独的文件。
在这里,我们有两个文件,一个称为“备份”,一个称为“要删除的备份”。 我们可以使用ls
演示这些文件名的问题。 如果我们尝试在“要删除的备份”文件上使用ls
并且我们没有转义或引用文件名,则该命令将失败。
ls -hl 备份删除
ls
抱怨它找不到名为“to”或“delete”的文件,但它确实找到了一个名为“backup”的文件。 rm
也会这样做。 它会抱怨两个丢失的文件,然后它会删除名为“备份”的文件,这不是我们想要的。
rm 备份删除
rm
认为它正在处理三个文件,“backup”、“to”和“delete”。 它抱怨找不到“to”和“delete”,但它找到并默默地删除了“backup”。
引用文件名允许rm
删除正确的文件。
rm '要删除的备份'
您也可以使用反斜杠“ \
”来转义空格,如下所示:
rm 备份\到\删除
如果您使用制表符完成输入您的文件名,它们将在需要时自动转义。
什么个人防护装备?
与现实世界中的电锯不同, rm
没有可以使用的个人防护设备。
您可以做的是在尝试使用rm
之前使用ls
检查您的语法,并使用交互模式,以便您决定删除哪些内容。
除此之外,它一直在练习,直到您感到舒适和自信为止。 最安全的方法是将一堆牺牲文件复制到一个目录并在这些文件上进行练习。
相关:在 Linux 上删除早于 x 天的文件