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


11

操作系统是Centos 6.5 64位

我下载了一个tar文件,并想将其解压缩mv

我解压了,然后意外地(以root身份)运行,mv folder/* /*而不是mv folder/* .bash表示它无法覆盖某些文件,然后要求其他人允许。我按Ctrl键退出。

我没有打开终端会话,但是退出了su

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

Web服务器和服务似乎仍在运行。我只能运行很少的命令,它cd是其中之一,当我尝试执行时cd/etc或者/bin它出现错误no directory found

编辑只注意到从丢失的所有文件夹/binetclib64rootsbin)得到搬到/var目录,我试过/var/bin/su和得到: -bash: /var/bin/su: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory


1
你不能/var/bin/su直接跑吗?
Darkhogg 2014年

请不要使用解决方案编辑问题。在堆栈交换网络上,您宁可添加答案,也可以在现有答案上留下评论以改善答案。
Bernhard'4

@Darkhogg /var/bin/su: user root does not exist我认为我们确定无法完成,因为/ etc位于/ var / etc
webaholik 2014年

@Bernhard试图纠正
webaholik

Answers:


22

如果您的系统已busybox安装,则可以使用此工具将其放回原处。

busybox是一个二进制文件,内置了许多标准实用程序。世事如mvshls,等。

从您对Pavel答案的评论看来,一切都以结尾/var。您可以尝试做/var/bin/busybox mv /var/{bin,etc,lib32,lib64,root,sbin,usr} /。这样应该可以使您的大多数系统重新运行。有一些目录(例如/tmp也存在)/var/tmp,因此您不能仅移动它们。希望那些是mv抱怨的人,他们独自一人。

 

获取根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特权。到达那里的唯一方法是拥有一个实用程序,例如susudo升级您的权限(此时两者均不起作用),或者劫持另一个已经以root用户身份运行的程序(取决于正在运行的程序,不太可能)。

剩下的唯一选择就是实时CD。一旦引导到实时CD(或实时USB或其他设备)中,只需挂载根卷,然后将受影响的目录移/var回其原始目录in /


发生了什么事

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-linuxld-linux是负责加载二进制文件所需的其他库的库。在您的系统上,此地址为/lib64/ld-linux-x86-64.so.2。由于此目录已移动,因此任何动态链接的可执行文件将不再起作用。

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


好主意。由于initramfs,CentOS通常安装了busybox ,因此可能效果很好。
PavelŠimerda'4

busybox听起来像是一个完美的解决方案,不幸的是没有安装,在此问题解决之后,...在此期间,是否有正确的路径/var/lib64/ld-linux-x86-64.so.2代替命令执行/lib64/ld-linux-x86-64.so.2?这似乎是杀死其中的命令的原因/var/bin
webaholik

@Patrick:您能补充一下OP打算使用的命令错误的信息吗?然后,我可以删除我的答案,因为现在(几乎)是多余的。顺便说一下,这是使用堆栈交换的正确方法吗?
PavelŠimerda'4

1
它找几件事情在/etc其中不存在(/etc/passwd/etc/nsswitch/etc/pam.d,,可能更多)。对于su工作,/etc必须回到它原来的位置。除非您周围有根壳,否则我认为您会被卡住:-(
Patrick

2
@ user1296209获得livecd后,只需挂载根卷并将这些目录移回。那应该是您再次运行所需的全部。
帕特里克

10

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

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

mv folder/* .

您已经破坏了正在运行的系统。您的shell和内置命令继续起作用。您将必须启动实时CD并将目录移回。我不知道内置了一个bash来移动/重命名文件,该文件可以使您无需重新启动即可解决此问题,请参阅Patrick的答案以获取更多详细信息。


我没有意识到:我可以将CD转到/ var / bin和/ var / etc,看起来文件夹已移至var,无论如何我都可以将它们移回?
webaholik 2014年

我试过/ var / bin / su并得到:-bash:/ var / bin / su:/lib64/ld-linux-x86-64.so.2:错误的ELF解释器:没有这样的文件或目录
webaholik

啊哈...我会解决的。
PavelŠimerda'4

mv将所有文件和文件夹从文件夹移动到当前目录应该是什么命令?
webaholik 2014年

1
@ user1296209:如果您启动一个实时系统,那么您肯定会对您的生命系统具有root访问权限。您的实际系统只是一个已安装的分区,对实时系统没有特殊意义。唯一的麻烦是您的//var目录可能位于不同的分区上,在这种情况下,您必须同时挂载这两个分区。
celtschk 2014年

2

我不小心将/ 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

欢迎来到U&L,这是您键入的唯一命令吗?请提供更详细的步骤。(特别是针对十个老问题,无需着急)
Archemar 2015年

1
是的,在我键入该命令后,所有内容均已恢复。也许我应该提到我在所有这一切中都扎根。
Mansehr 2015年

1

重要事项 如果您在这里,并且运行mv不正确,将无法运行shell命令,并且根目录(/)中缺少文件夹,首先,如果您拥有SU,请SU在修复后再退出,因为您将无法找回它。如果是远程连接,则如果断开连接,则将无法ssh使服务器独立reboot运行,不要-大多数正在运行的服务都可以。您可以尝试Patrick提出的众多解决方案中的一种...但是,如果像我一样搞砸了,您可能需要物理访问。

在机器前,我重新启动了它。不出所料,我确实收到了内核恐慌。

我认为这将是一个非常简单的修复程序,插入livecd,进入救援模式,直到这一点很容易-然后我不得不尝试安装我的根目录。但是,我不仅需要简单的安装命令。

这是因为我和许多人一样都拥有一个lvm文件系统,这是我第一次必须进行这样的救援。我必须在网上搜索以查看需要做什么。我已经将该信息整合到了这篇文章中。这是我解决问题的过程。

1)插入Centos_6.4_min cd

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

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

4)选择shell选项时输入

在这一点上,我尝试了很多事情来安装系统,但是没有运气,我很确定这些都是我必须采取的所有步骤(由于lvm):

5)扫描了我的书卷

lvmdiskscan

6)Ran 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)成功!

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.