mv /tmp/folder/* /* 对我的文件系统到底做了什么?

mv /tmp/folder/* /* 对我的文件系统到底做了什么?

在谷歌上搜索特殊字符很困难,这就是我在这里发布这个的原因。

我最近(以 root 身份)运行 a,mv /tmp/folder/* /*当我打算运行时,mv /tmp/folder/* ./大错特错了!

事情坏了!很多文件被混淆并放置在奇怪的地方,正常的 UNIX 命令都不起作用(ls、dir、cat 等),一旦你注销,你就无法通过 ssh 重新登录——它会给你一个提示,但不接受旧密码。

运行ls /*表明它在/.如果我尝试绘制一个平行线,那么mv应该简单地将文件移动(或复制?)到/.相反,非常奇怪的事情发生了,我只是好奇到底发生了什么。

更多信息: /tmp/folder 中的文件是从 Windows 计算机传输的,并被命名为 file (#).txt,其中 (#) 是最多两位数的数字,文件和括号之间有一个空格。这些文本文件大约有 40 个。

答案1

mv命令采用参数列表,这些参数可以是文件或目录。如果最后一个参数是目录,则所有其他参数都将移至该目录中。

在您的情况下,mv /tmp/folder/* /*扩展为mv <the list of files in /tmp/folder> <the list of files in />.因此,正如您可能猜到的,中的所有文件以及 除最后一个之外的/tmp/folders/所有文件都被移动到 列出的最后一个文件夹中(可能是)。//*/var

答案2

你想象mv的论点是错误的。从手册页:

SYNOPSIS  
      mv [OPTION]... SOURCE... DIRECTORY

mv需要很多SOURCE参数,但只有一个目的地DIRECTORYmv无法将文件移动到多个目的地,否则需要复制它。由于(正如您所说)/*解析了 中的所有目录/,所有这些目录(最后一个除外)都将被添加到列表中SOURCE,因此您将所有这些目录移动到命令行上最后列出的目录中。

如果您从 LiveCD 启动并安装驱动器,则可能可以消除损坏;根目录中将只剩下一个目录(可能/var),并且您可以将根目录中应包含的所有目录移出该目录

答案3

要检查命令到底做了什么,您可以通过在命令之前mv添加来检查它,这样 shell 将展开所有通配符并打印结果命令,例如:echo

$ echo mv /tmp/folder/* /*

$ echo mv /tmp/* /*
mv /tmp/launch-4TgsLB /tmp/skl /bin /dev /etc /home /lost+found /mnt /net /opt /private /sbin /tmp /usr /var

所以基本上它会将您的文件移动到根系统中的最后一个文件夹,可能是/var.

阅读更多:mv * 做什么?

相关内容