首页 > 编程知识 正文

cmd怎么清理垃圾文件(windows怎么清理垃圾)

时间:2023-05-06 13:50:19 阅读:85090 作者:1712

作为真正的系统管理员,而不是脚本小子,应该认真考虑每个命令和细节。

最近在网上看到的图(原图来源不详,问题图根据原图重新制作和修改。 )

嗯,感觉很有道理啊。 你看,rm正在删除。 这个单词简单容易记; 解释到rf,表示“垃圾文件”/*目录中的所有文件,没有问题; 因为也有sudo,所以确保权限也没关系。

哈哈,你一定要说。 又编段子笑。 谁也不相信。

有人执行这样的命令清理垃圾文件吗? 请不要说。 这真不好说。

我们经常发送关于Bash别名的文章,但有同学对alias ls=rm -rf、alias cd=rm -rf等独特的别名做出了“贡献”。 我想几乎没有人对这些命令恶语相向,但是大家也常常很享受。

我把这张照片发到朋友圈了。 朋友“龙十三”说,这不仅要清除垃圾文件,还要清除垃圾系统管理员。

是啊,为什么会多次出现这样的段子呢? 因为我们中有人不太寻求解决,遇到了问题。 我习惯于从网上随便找命令例瞎看,不探索其原理,也不验证其可靠性。 所以,这样的段子真的是用来清除“系统管理员的垃圾”的。

那么,让我们来调查一下上面的命令。 看看这里有多少知识点。

rm 的那些事

首先,此命令用于清除Linux系统根目录(/)下的所有文件。 使用了以下两个命令选项。

-r :“递归”是递归操作目录及其下的内容的-f :强制) force )。 不需要确认操作。 这两个选项可以分别写-r和-f,也可以根据POSIX惯例将两个选项合并为-rf。 这里的-r和-f选项绝不是上图中恶搞的“Rubbish”和“Files”。

后续的参数/*是指根/下的所有文件。

-r选项

-r选项表示递归。 这意味着递归删除参数中的目录及其下的文件或子目录。

该选项除了短选项样式外,还包括GNU样式长的选项--recursive; 出于兼容性考虑,它还支持同义的大写-R参数。

如果没有此选项,则不会删除目录及其下的内容。

-f选项

在介绍-f选项之前,让我们先看看这里没有出现的-i选项。

删除文件或目录时,本机rm命令在执行删除操作之前和之后是静默的,并且根据UNIX规则不显示任何提示。 除非发生了要删除的文件不存在等错误,否则决不抱怨。

之后,可能是许多人不小心删除了文件,大多数Linux分发版的rm命令都是添加了-i选项的别名。

alias rm=rm -i这里的-i选项用于在每个删除操作之前提示用户,必须由用户明确确认才能删除。

但是,有时这样的提示真的很烦,所以很多人在操作时使用-f选项来覆盖-i选项的行为,从而使这个别名的定义变得毫无意义。

因此,还有-I选项。 当删除三个以上的文件或递归删除文件时,此选项会提示您进行确认。 这样不仅不会像-i选项那样麻烦,还可以防止大部分的误操作。 因此,请对上述别名使用-I选项,不要使用-f选项。

* *配合了什么

我发现命令中目录下的所有文件都用*指向。 但严格来说,通配符*表示所有不以“.”开头的文件。 默认情况下,以“.”开头的文件属于Linux下的隐藏文件。

因此,此命令不会删除/目录下以.开头的隐藏文件,以及.和.两个目录。 但是,在递归操作的情况下,子目录下的.和.目录以外的文件和子目录——将被递归删除,因此无论是否以.开始,——都将由Bash等shell批量展开递归操作

为什么不删除目录下面的内容的情况下,也要将.和.同等看待呢? 因为自1979年rm命令开始具有删除目录的能力以来,就避开了这两个特殊的目录。

根目录保护

有经验的系统管理员此时可能会想起,rm命令有根目录专用的选项--preserve-root和--no-preserve-root。 这意味着以下内容:

--preserve-root :保护根目录是缺省行为。 ---无保留根目录:不保护根目录。 这是稍后添加到rm命令中的选项。 大多数系统管理员可能都犯过操作错误,但其中有很多人删除过根目录。 出现这种情况有几个原因。

输入错误:例如,我想输入rm /tmp/test.txt,但不小心键盘弹飞了,多出了一个空格,变成了rm /tmp/test.txt。 看到根目录(/)后面的空间了吗? ——这就是我现在自己犯的错误,在生产服务器上。 修改未正确初始化或名称错误的shell脚本

量:比如在脚本中,rm -rf /${tmp_dir},如果无论是 tmp_dir 变量没有正确赋值还是输入错误(原本或许是 tmpdir ?),那会导致什么?当然是删除根目录咯~

鉴于这种情况层出不穷,在 Linux 圈子几乎和“初学者如何退出 vi” 一样成为经典笑话了。所以,在 POSIX 第七版规范中,rm 命令 添加 了 --preserve-root 选项,并将其作为默认行为,以降低出现这种错误的可能。

但是,这个选项不能防范本文中所述的清除根目录下所有文件(/*)的操作。

有的同学可能要问,那为什么还会专门出现 --no-preserve-root 选项呢?这可能主要是出于 UNIX 哲学的考虑,给予你想要的一切权力,犯傻是你的事情,而不是操作系统的事情。万一,你真的想删除根目录下的所有文件呢?

你还别说,真有这种需求:比如你要清除一个 chroot 环境下的所有文件。 chroot 我们这里不多讲,它就是以一个目录作为“监狱”,该目录在逻辑上形成了新的“根目录”,在该监狱内的文件操作不能跨出该目录范畴。近些年流行的 Docker、LXC/LXD 之类的容器技术,都是一种 chroot 技术。

UEFI 系统

好吧,你可能更特立独行一些,就是要清除物理环境中的根目录下所有文件!但是在你按下回车键之前,请再考虑一下,你是否在一个 UEFI 系统上?

因为 UEFI 系统会将其固件、变量和设置映射到根目录下的 /sys 分区里面,所以,如果在 UEFI 环境中清除根目录下的所有内容,也会同样清除 /sys ,这将可能会导致你丢失 UEFI 的估计设置,从而使设备变砖。

sudo 提权

为了可以删除属于 root 等系统和其它用户的文件,这个命令还需要在前面加上 sudo 来提权。

输入该命令后,会要求输入密码。谁的密码?不是 root 密码,而是输入该命令的当前用户的密码。

而对于谁能执行 sudo 命令,以及他可以通过 sudo 命令执行什么命令等知识点,这里就不再赘述,请参阅我们的 其它 文章 。顺便说一句,要记得区分 sudo 和 su 命令的 联系与区别 。

垃圾文件

研究到这里,我们不能忘记这条命令原本的意图,删除“垃圾文件”。

Linux 下有垃圾文件么?有。这些垃圾文件一般来源于:

没有被包管理器管理的孤儿文件,在软件包被删除后,遗留在系统中无用的依赖包,在需要这些依赖包的软件被删除后,没有相应删除没有清理的临时文件遗留的诊断文件

那么这些垃圾文件需要清除么?一般而言,Linux 系统上的这些文件大多不会对系统的健康运行造成任何影响,除非太多了,占据了很多存储空间和 inode。

所以,如果你感觉你的 Linux 系统慢了,那几乎可以肯定不是由于垃圾文件导致的,至少在这一点上,来自 Windows 系统的经验并不值得复制。


好了,关于这个简单的命令,我们已经挖掘了这么多知识点,你都知道了吗?

事实上,关于这些知识,还有更多的内涵、外延和历史信息,作为一个真正的系统管理员,而不是一个脚本小子,需要认真地研究每个命令和细节。

点击“了解更多”可访问文内链接

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。