我需要从目录中删除相当数量的大文件。我使用了' rm *'删除文件,然后转到另一个屏幕来处理其他内容。过了一会儿,我用了' rm *'在同一个目录上,忘记我已经完成了。
我收到错误说" rm:无法删除`filename':没有这样的文件或目录。" 然后我去了第一个窗口,发生了类似的错误。
屏幕是否会竞争,看看哪个先完成了rm?或者服务器以某种方式线程化进程?服务器'当屏幕在同一目录上执行相同的命令时,它们彼此协同工作?
答案 0 :(得分:2)
在每种情况下,rm
只是取消链接每个文件的目录条目。这两个进程相互竞争,但很可能只是通过从一个进程到另一个进程的上下文切换而“线程化”在一起。如果准备取消链接文件,然后关闭上下文,其竞争对手可能会有机会取消链接同一文件。然后当第一个返回时,文件不再存在,所以他移动到那里的下一个条目。
正如heximal所说,在这种情况下(rm *
),星号已经扩展为文件列表,这意味着您应该在这两个进程之间获得一个完整的列表,表明您想要的每个文件删除已经不见了。
答案 1 :(得分:1)
事情不是它执行相同的命令。实际上,没有任何重要的事情发生。如果未找到指定的文件,rm
命令将完成,并显示错误。当您指定filemask(*)时,rm开始删除与该掩码匹配的目录中的所有文件。首先,该进程获取目录中的文件列表,然后获取此列表并执行每个文件的删除。第二个rm进程,你lauch做的绝对相同。它检索文件列表并开始逐个删除它们。并且可能存在第一个进程删除第二个进程列表中的文件的情况。当第二个进程提取尝试删除该文件时(已经删除)'没有这样的文件或目录'错误发生,rm完成。