/bin /etc /lib64 /root /sbin 被 mv 文件夹删除或移动/* /* while su

web*_*lik 12 shell centos

操作系统是 Centos 6.5 64 位

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

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

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

现在我无法访问大多数shell命令,无法访问ls任何目录,也无法返回su.

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

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

phe*_*mer 24

如果您的系统已busybox安装,您可以使用它来放回原处。

busybox是一个二进制文件,其中内置了许多标准实用程序。诸如mv, sh,之类的东西ls

从您对 Pavel 回答的评论来看,听起来一切都以/var. 你可以试试做/var/bin/busybox mv /var/{bin,etc,lib32,lib64,root,sbin,usr} /。这应该可以使您的大部分系统再次运行。有一些目录,例如/tmp它们也作为 存在/var/tmp,因此您不能只是移动它们。希望这些是那些mv抱怨的人,他们被单独留下。

 

获取root shell

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

LD_LIBRARY_PATH=/var/lib64 /var/lib64/ld-linux-x86-64.so.2 /var/bin/su
Run Code Online (Sandbox Code Playgroud)

注意:尝试此操作后,它不起作用。这是因为su需要/etc( passwdpam.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} /
Run Code Online (Sandbox Code Playgroud)

 

从现场 CD

正如评论中所讨论的,如果您丢失了 root shell,那么您将陷入困境。基本上为了解决这个问题,您需要root权限。到达那里的唯一方法是拥有一个实用程序,例如susudo升级您的权限(此时两者都不起作用),或者劫持另一个已经以 root 身份运行的程序(取决于正在运行的程序,不太可能)。

这使得唯一的选择是现场 CD。一旦启动到现场CD(或现场USB,或其他),只需安装根卷,并移动受影响的目录出来/var回到自己原来的家中/


事情经过的概述图

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

mv folder/foo folder/bar /bin /lib32 /lib64 /etc /home /root /var
Run Code Online (Sandbox Code Playgroud)

就像/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.

  • @user1296209 启动 livecd 后,只需挂载根卷并将这些目录移回即可。这应该是您再次运行所需的全部内容。 (2认同)

Pav*_*rda 10

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

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

mv folder/* .
Run Code Online (Sandbox Code Playgroud)

你破坏了你的运行系统。您的 shell 和内置命令继续工作。您将必须启动 Live CD 并将目录移回。我不知道 bash 内置移动/重命名文件可以让您在不重新启动的情况下修复这种情况,有关更多详细信息,请参阅 Patrick 的回答。


web*_*lik 1

重要 如果您在这里运行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)成功!