已移动垃圾箱和其他文件夹!如何找回他们?


13

我不小心将所有文件夹从根目录移到了子文件夹。(/bin/etc/home/lib/usr...所有移动)尚未移走的唯一的,因为它们是在使用中 /bak/boot/dev/proc/sys

现在,我尝试执行的任何命令将根本不会发生。我不断得到“没有这样的文件或目录”。

我通过ssh和ftp连接,但是我无法通过ftp移动文件,因为直接SU登录已禁用。如果我需要直接从那里进行操作,我也可以访问实际的服务器。

我假设我需要编辑一个配置文件,以便告诉它在哪里可以找到该/bin文件夹,这将帮助我再次获得访问权限,但是我不知道它将是哪个文件或如何进行操作(因为我甚至无法运行chmod以更改权限)。

除了重新安装之外,还有其他方法吗?

我正在使用旧版本的CentOS。

我对Linux领域非常陌生,因此此操作和问题...


虽然不能解决您的问题,但我建议您阅读以下内容:lug.wsu.edu/node/414类似的情况,但他实际上删除了/ bin。
2011年

Answers:


33

如果仍然有root shell,则可能有机会修复系统。比方说,你感动了所有常见的目录(/bin/etc/lib/sbin/usr-这是那些可能使回收困难的)下/oops

mv即使您指定完整路径,也将无法直接发出命令/oops/bin/mv。那是因为它mv动态链接的;因为您已经移动了/lib目录,mv所以无法运行,因为它找不到构成其代码一部分的库。实际上,这甚至比这更糟:mv找不到动态加载器 /lib/ld-linux.so.2(名称可能会因您的体系结构和Unix变体而有所不同,并且目录可能是不同的名称,例如/lib32/lib64)。因此,在将/lib目录移回之前,您需要显式调用链接器,并且需要指定移至库的路径。这是在Debian squeeze i386上测试的命令。

export LD_LIBRARY_PATH=/oops/lib:/oops/lib/i386-linux-gnu
/oops/lib/ld-linux.so.2 /oops/bin/mv /oops/* /

您可能需要针对其他发行版或体系结构进行一些调整。例如,对于x86_64上的CentOS:

export LD_LIBRARY_PATH=/oops/lib:/oops/lib64
/oops/lib64/ld-linux-x86-64.so.2 /oops/bin/mv /oops/* /

弄乱某些东西后/lib,可以使用一个静态链接的工具箱。一些发行版(我不了解CentOS)提供了Busybox的静态链接副本。还有sash,它是一个内置许多命令的独立外壳。如果您有其中之一,则可以从那里进行恢复。如果您尚未安装它们,那就太迟了。

# mkdir /oops
# mv /lib /bin /oops
# sash
Stand-alone shell (version 3.7)
> -mv /oops/* /
> exit

如果您不再具有root shell,但仍具有SSH守护进程监听功能,并且可以通过ssh以root身份直接登录,并且拥有这些静态链接的工具箱之一,则可以ssh进入。如果你可以移动的工作/lib/bin,但不会/etc

ssh root@broken.example.com /oops/bin/sash
root@broken.example.com's password:
Stand-alone shell (version 3.7)
> -mv /oops/* /

出于这种麻烦,一些管理员使用静态链接的shell设置了备用帐户,或者使根帐户使用静态链接的shell。

如果您没有根外壳并且没有采取预防措施,则需要从Linux live CD / USB引导(只要最新,只要能访问磁盘和文件系统,任何人都可以做)和将文件移回。


1
谢谢吉尔。您提供了一些非常有用的信息,以说明我将来应该注意的事项。
Menelaos

谢谢吉尔!这救了我。我为64位linux env添加了编辑。就我而言,是64位CentOS 7
CompEng88 '19

@ ComputerEngineer88谢谢,但是,当您进行编辑时,请不要添加“ EDIT”标记,也不要在帖子不属于他们的末尾添加它们。保持文本的流动。如果人们想知道帖子之前包含的内容,则帖子具有编辑历史记录。当人们正常阅读帖子时,他们不在乎以后是否添加了一些内容。
吉尔斯(Gillles)“所以-别再邪恶了”,

真?我一直专注于编辑。意味着学到了一些新东西,对我而言,这是最重要的。一样-只要人们受益!
CompEng88

@ ComputerEngineer88当我开始使用Stack Overflow时,我有相同的反射。但是实际上,Stack Exchange的帖子在许多方面都比维基百科的文章更接近讨论论坛上的帖子。您希望人们在发布后能很快阅读论坛中的帖子,因此,如果有人对其进行了编辑,则应该有明显的指示。但是,让我们说有人看到这个线程在2027年:他们不会在乎一个段落是否已自2011年以来一直存在或已在2019年加入
吉尔“SO-停止作恶”

11

您可能无需重启就可以恢复,因此在尝试了其他操作之前不要重启,因为它不会启动。如果仍然打开SSH会话,请尝试以下操作:

  • 使用$ PATH变量设置从何处运行程序。您可以通过运行将新的bin位置添加到path中export PATH="$PATH:/newpath/to/bin:/newpath/to/usr/bin"。您可能还需要添加相应的sbin目录。您也可以通过它们的完整路径手动运行程序/path/to/mv [from] [to],例如即使mv位于不同的位置也可以运行。棘手的部分是,大多数命令将要访问公用库,并且您说/lib已经移动了,因此您还需要为该位置设置变量。export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/newpath/to/lib/:/newpath/to/usr/lib

  • 一旦您可以执行一些基本命令,就将内容移回原位!mv /path/to/subfolder/* /会好好的!一旦一切恢复原状,系统应正常运行。

如果失败,启动任何LiveCD并安装驱动器将使您可以将文件夹移回它们所属的位置。您不需要重新安装甚至不需要使用发行版livecd,只需安装驱动器并将文件夹移回磁盘上的正确位置即可。许多基于linux的应急磁盘专门提供给您一些基本的控制台工具来进行这种修复。


通过SSH进行的工作失败,因此我下载了liveCD,并且试图使事情正常进行。我正在使用grub并尝试安装驱动器,但由于内核未加载,它不会让我失望。而无法看到现有路径的确切路径显然使这变得困难……
Menelaos

1
引导运行,安装磁盘,将事物移回正确的位置,重新引导至系统...祝您好运。
卡莱布

2
设置LD_LIBRARY_PATH还不够,还需要显式调用动态加载程序,例如LD_LIBRARY_PATH=/newpath/to/lib /newpath/to/lib/ld-linux.so.2 /newpath/to/bin/mv
吉尔斯(Gilles)“所以,别再邪恶了”,

4

您应该能够使用单用户模式的安装CD重新引导计算机,安装根文件系统,然后将文件移回Linux。我不太了解centos,但是就像RHEL一样,因此应该可以使用。


谢谢。我在下载时正在下载。如果是实时CD或整个安装DVD,会有所不同吗?
Menelaos

@Menelaos:您不想安装,想要可以为该解决方案实时运行的东西。有些安装磁盘具有实时版本,但有些只想立即安装。有些确实具有您真正想要的“救援”模式,但是也有专用的Linux救援盘。它不一定是您的发行版,而必须是可以挂载linux文件系统并将文件夹移回的东西。看我的答案。
卡莱布

在长相sysresccd.org看到救援一张CD,如果你喜欢它有大量的文档,以了解如何使用它。在本论坛中并且超出我的空闲时间,可能很难用它来解决该问题。否则,centos CD应该会有所帮助。最新的实时CD可能会或可能不会起作用...因此请记住这些问题,您应始终保留所安装版本的安装介质/ iso。还创建整个文件系统的备份。
詹姆士

2

非常感谢5年后的Gilles,您的帖子仍然挽救了我的生命,即使不是一周。

我本打算将子文件夹的内容移动到当前文件夹,但mv sub/* .我没有mv sub /* .这样做,所以我将所有内容都移动到了当前文件夹。幸运的是,我找到了这个答案,并且能够相对轻松地修复我的机器。但是,由于我正在运行Ubuntu 16.04的x86_64机器上工作,因此我不得不略微调整命令。如果有人在挣扎,我想在这里留下说明:

export LD_LIBRARY_PATH=/oops/lib:/oops/lib/x86_64-linux-gnu
/oops/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 /oops/bin/mv /oops/* /

0

在将Ktipr的答案应用于现代系统(运行Unix的x86_64机器)后,我想添加一些其他命令来执行 ,由于显示错误,我无法通过mv移动目录“ etc”

Error : Directory not empty

所以我不得不用

rsync -a source_file target_location

以确保我能够使一切恢复正常。如果尚未安装,则需要先安装。

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.