发生的事情概要

发生的事情概要

操作系统是Centos 6.5 64位

我下载了一个 tar 文件并想解压mv它。

我解压,然后意外地(以 root 身份)运行mv folder/* /*而不是mv folder/* .bash 说它无法覆盖某些文件,然后请求其他文件的许可。我按 ctrl-c 退出。

我已将终端会话保持打开状态,但已退出su

现在我失去了对大多数shell命令的访问权限,无法访问ls任何目录,也无法返回到su.

网络服务器和服务似乎仍在运行。我可以运行很少的命令,cd就是其中之一,当我尝试cd运行时,它/etc/bin出现错误no directory found

编辑刚刚注意到/( binetclib64root)中缺少的所有文件夹sbin都被移动到/var目录中,我尝试/var/bin/su并得到: -bash: /var/bin/su: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

答案1

如果您的系统已busybox安装,您可以使用它来恢复。

busybox是一个二进制文件,内置有许多标准实用程序。诸如mvshls等之类的东西。

从你对帕维尔答案的评论来看,听起来一切都结束了/var。你可以尝试做/var/bin/busybox mv /var/{bin,etc,lib32,lib64,root,sbin,usr} /.这应该会让你的大部分系统再次运行。有一些目录,例如/tmp也以 的形式存在/var/tmp,因此您不能只是移动它们。希望那些抱怨的人mv不会打扰他们。

 

获取 root shell

您还提到您丢失了根 shell,这su给您带来了ld-linux库错误。您也许可以使用以下内容:

LD_LIBRARY_PATH=/var/lib64 /var/lib64/ld-linux-x86-64.so.2 /var/bin/su

注意:尝试此操作后,它不起作用。这是因为需要( 、和其他)su中的多个文件。如果还完好的话,这次成功的机会很大。/etcpasswdpam.d/etc

 

不带busybox

如果您没有可用的 busybox,您可以使用与以下相同的 ld-linux 技巧su

LD_LIBRARY_PATH=/var/lib64 /var/lib64/ld-linux-x86-64.so.2 /var/bin/mv /var/{bin,etc,lib32,lib64,root,sbin,usr} /

 

来自现场 CD

正如评论中所讨论的,如果您丢失了 root shell,那么您就会陷入困境。基本上为了解决这个问题,你需要 root 权限。实现这一目标的唯一方法是使用诸如susudoescalate 你的权限之类的实用程序(此时两者都不起作用),或者劫持另一个已经以 root 身份运行的程序(取决于正在运行的程序,不太可能)。

这样一来,唯一的选择就是 Live CD。一旦启动到 live CD(或 live USB,或其他),只需安装根卷,并将受影响的目录移回/var其原始目录/


发生的事情概要

folder/*会扩展到诸如folder/foo和 之类的东西folder/bar
/*会扩展到类似的东西/bin /lib32 /lib64 /etc /home /root /var。请注意这/var是最后一项。
因此,当 shell 展开所有这些 glob 时,它会运行如下所示的代码:

mv folder/foo folder/bar /bin /lib32 /lib64 /etc /home /root /var

正如/var列表中的最后一项一样,所有内容都已移入其中。


为什么/var/bin/su会出现错误/lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

Linux 中的几乎所有二进制文件都是动态链接到ld-linux.ld-linux是负责加载二进制文件所需的其他库的库。在您的系统上,它位于/lib64/ld-linux-x86-64.so.2.由于此目录已移动,任何动态链接的可执行文件将不再工作。

busybox 工作的原因是 busybox 是静态链接的。它不使用ld-linux.

答案2

mv folder/* ./*也是错误的。您应该更加小心所运行命令的语义。具有两个以上参数的命令mv只接受除最后一个参数之外的所有参数,并将它们指向的路径移动到最后一个参数中指定的目录中。

移动所有目录(隐藏目录除外)文件夹到当前目录,您应该使用:

mv folder/* .

你已经破坏了你的运行系统。您的 shell 和内置命令将继续工作。您必须启动 Live CD 并将目录移回原处。我不知道 bash 内置命令可以移动/重命名文件,让您无需重新启动即可解决问题,请参阅帕特里克的答案以获取更多详细信息。

答案3

我不小心将 /usr 移至 /usr_old,一切都陷入困境。幸运的是,我留在提示符下并能够执行以下命令来恢复 usr 文件夹:

LD_LIBRARY_PATH=/usr_old/lib64 /usr_old/lib64/ld-linux-x86-64.so.2 /usr_old/bin/mv /usr_old /usr

答案4

重要的 如果您在这里,并且运行mv不正确,无法运行shell命令,并且根目录(/)中缺少文件夹,首先,如果您有SU,请不要退出,SU直到修复为止,因为您将无法恢复它。如果你是远程连接的,如果你断开连接,你将无法ssh离开服务器,不要reboot- 大多数正在运行的服务应该没问题。您可以尝试帕特里克建议的众多解决方案之一......但是,如果您像我一样搞砸了,您可能需要物理访问。

一旦到达机器前,我就重新启动了它。正如预期的那样,我确实收到了内核恐慌。

我认为这将是一个非常简单的修复,插入 livecd,进入救援模式到目前为止,这很容易 - 然后我必须尝试挂载我的根目录。然而,我需要的不仅仅是一个简单的安装命令。

这是因为我和许多人一样,有一个 lvm 文件系统,这是我第一次不得不处理这样的救援。我必须在网上搜索以了解我需要做什么。我已将这些信息合并到这篇文章中。这是我解决问题的过程。

1)插入Centos_6.4_min cd

2)GUI界面问我想做什么,选择Rescue

3)Rescue尝试挂载当前系统,但表明我没有Linux分区

shell4)出现选项时选择进入

此时,我尝试了很多方法来安装系统,但没有运气,我很确定这些都是我必须采取的步骤(因为 lvm):

5)扫描我的书,

lvmdiskscan

6)运行lvscan,显示所有列为“非活动”

lvscan

7)加载设备模块

modprobe dm-mod

8)将存在的卷更改为活动卷

vgchange -ay

9)lvscan再次运行,现在所有项目都列为“活动”

10)创建挂载点并挂载逻辑分区

mkdir /mnt/root

mount /dev/VolGroup00/LogVol00 /mnt/root

11)将文件夹移回(您可能需要其他文件夹):

mv /var/{bin,etc,lib64,mnt,root,sbin} /

12)reboot

13)成功!

相关内容