0

我需要从目录中删除相当数量的大文件。我使用“rm *”删除文件并转到另一个屏幕处理其他内容。过了一会儿,我在同一个目录上使用了'rm *',忘记了我已经这样做了。

我收到一条错误消息,提示“rm: cannot remove `filename': No such file or directory。” 然后我去了第一个窗口,出现了类似的错误。

屏幕是否在竞相看哪个先完成 rm?或者服务器是否以某种方式线程化进程?当服务器在同一目录上执行相同的命令时,它们的屏幕如何相互协作?

4

2 回答 2

2

在每种情况下,rming 只是取消链接每个文件的目录条目。这两个进程相互竞争,但很可能只有通过从一个进程到另一个进程的上下文切换才能“线程化”在一起。如果一个人准备取消链接一个文件,然后切换上下文,它的竞争对手很可能有机会取消链接同一个文件。然后当第一个返回时,文件不再存在,所以他移动到那里的下一个条目。

正如heximal所说,在这种情况下(rm *),星号已经扩展为文件列表,这意味着您应该在两个进程之间获得一个完整列表,说明您要删除的每个文件都已经消失了。

于 2012-05-04T17:54:21.367 回答
1

问题不是它执行相同的命令。实际上,没有发生任何犯罪行为。rm如果未找到指定的文件,则命令以错误结束。当您指定文件掩码 (*) 时,rm 开始删除与该掩码匹配的目录中的所有文件。首先,该进程获取目录中的文件列表,然后获取此列表并单独执行每个文件的删除。您启动的第二个 rm 进程完全相同。它检索文件列表并开始一一删除它们。并且可能存在第一个进程删除第二个进程列表中的文件的情况。当第二个进程 fetch 尝试删除该文件(已被删除)“没有这样的文件或目录”错误发生并且 rm 完成。

于 2012-05-04T17:53:44.187 回答