递归还原移动根目录


14

我有一个Ubuntu桌面用作服务器。今天早上,我不小心将所有的根移到了../

 root@server:/tmp/UPS/up/upsilon# mv /* ../
 mv: impossibile spostare "/dev" in "../dev": Dispositivo o risorsa occupata
 mv: impossibile spostare "/proc" in "../proc": Dispositivo o risorsa occupata
 mv: impossibile spostare "/run" in "../run": Dispositivo o risorsa occupata
 mv: impossibile spostare "/sys" in "../sys": Dispositivo o risorsa occupata
 mv: impossibile spostare "/tmp" in una sottodirectory di sé stessa, "../tmp"
 root@server:/tmp/UPS/up/upsilon# ls
 -bash: /bin/ls: No such file or directory

我在ssh中远程连接。现在,我无法访问了。我也无法查看Webmin。

所以,现在我无法正确重启系统吗?而且我必须实际访问系统控制台并键入以下命令:

../bin/mv ../{bin,boot,etc,home,media,mnt,opt,root,sbin,selinux,usr,var,vmlinuz*}

对?

我的根目录到哪里去了,我该如何找回它?上面的命令可以工作吗?


10
哇!这是一个令人印象深刻的错误!:(
Sparhawk

3
我是否正确理解当时的工作目录是/?如果是这样,当我尝试时mv tempdir/ ../,我mv: ‘tempdir/’ and ‘../tempdir’ are the same file什么都没有动。
Sparhawk

下次,不要以root用户身份登录。并且如果您要mv添加-i开关。
Braiam

1
我不同意。有时候,您确实希望以root用户身份登录,而不是学习无意识地将sudo放在每个命令的前面。但是,以root用户身份登录时要小心。特别是使用delete和move命令。---仍然会发生错误,我们会从中吸取教训。@MaxDL:可以从备份中还原/分区吗?你有备份吗?您可以在不启动操作系统的情况下使用Dell DRAC,HP ILO或其他远程访问工具来访问服务器控制台吗?
Hennes

Answers:


12

您尚未移动根目录(您无法移动),您几乎已将根目录中的所有内容移动到了所处路径的父目录中。

为了使事情复杂化,您还进行了移动mv,使其无法按预期工作。如果您仍然位于与上次触发mv时相同的目录中,则以下命令应该可以正常工作(只要自问这个问题以来没有重启过!)。

../bin/mv ../{bin,boot,etc,home,media,mnt,opt,root,sbin,selinux,usr,var,vmlinuz*} /

如果您没有这些,只需从命令中忽略它们即可。

而且,如果您无权访问(在这种状态下您将无法进行全新的登录),则必须从外部安装文件系统(通过LiveCD之类的方法并安装文件系统,然后移动文件)正确的位置Braiam的回答应该对这一部分有所帮助。


令我感到困惑的是该行root@server:/# ls,它提示我当前目录为/。(因此,我在上面发表了第二点评论。)
Sparhawk

抱歉,这是完整的命令:root @ server:/ tmp / UPS / up / upsilon#mv / * ../我在ssh中远程连接。现在,我无法访问了。
MaxDL 2013年

然后要修复的命令是/tmp/UPS/up/bin/mv /tmp/UPS/up/{bin,boot,etc,home,media,mnt,opt,root,sbin,selinux,usr,var,vmlinuz*} /
Sparhawk

10

如果您已经重新启动或注销,则可以在liveCD / USB中启动以修复系统。我将省略您知道如何创建Live系统并使用Ubuntu引导的部分(另一种cd也适用,只需放入root shell):

首先,您应该将系统安装到某处,因此:

mkdir /mnt/system
mount /dev/sda1 /mnt/system

我想/dev/sda1是你的根。如果您已经分开/bin或者/usr也应该安装它们:

mount /dev/sda2 /mnt/system/usr

现在,您应该到达灾难发生前的目录:

cd /mnt/system/tmp/UPS/up/upsilon

现在使用Oli给出的命令,我会公然复制该命令:

mv ../{bin,boot,etc,home,media,mnt,opt,root,sbin,selinux,usr,var,vmlinuz*} /mnt/system/

现在验证一切是否正常:

# ls /mnt/system/
bin boot etc home media mnt opt root sbin selinux usr var etc...

重新启动系统,以后再谨慎。


1

我遇到了这个问题,我发现我需要这样调用mv命令:

/tmp/UPS/up/lib/ld-linux-x86-64.so.2 --library-path /tmp/UPS/up/lib/ /tmp/UPS/up/test/bin/mv /tmp/UPS/up/{bin,boot,etc,home,media,mnt,opt,root,sbin,selinux,usr,var} /

希望这对其他人有帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.