Linux rm -rf * 删除命令?

Linux rm -rf * delete orders?

我以为 rm 会按字母顺序删除文件,但显然不是在我执行之后。

那么,rm命令的执行顺序是怎样的?

提供排序性质的不是 rm 本身,而是 shell 扩展。如果您输入 rm *shell 会将其扩展为:

rm aaa bbb ccc

rm 永远不会 看到 一个 * 论点。顺便说一句,虽然我不确定 all shells 的排序行为是否得到保证,但根据文档,它肯定适用于 bash

... replaced with an alphabetically sorted list of filenames matching the pattern.

命令 rm -rf * 是一个有点奇怪的混合案例,因为即使 shell 对 * 条目进行排序,它仍然只针对第一级条目。

因此 rm -rf * 可能扩展为:

rm -rf aa_dir bb_dir cc_dir

但这完全取决于 rm 在内部如何处理条目 这些目录下的顺序,但显然,这是一个安全的赌注目录中的条目将在目录本身之前被删除。

它很可能只是使用 readdir() 或类似的东西,它会根据它们在目录 "files" 中的存储方式而不是某些字母顺序来排序。

无论如何,它们的删除顺序可能无关紧要 - 如果权限允许,它们最终都会被删除。