移动了 bin 和其他文件夹!如何让他们回来?

移动了 bin 和其他文件夹!如何让他们回来?

我不小心将所有文件夹从根文件夹移动到了子文件夹。(/bin、、、、...全部移动)由于正在使用中,唯一没有被移动的 文件/etc夹是、、、、。/home/lib/usr/bak/boot/dev/proc/sys

现在,我尝试执行的任何命令都不会发生。我经常收到“没有这样的文件或目录”。

我通过 ssh 和 ftp 连接,但无法通过 ftp 移动文件,因为直接 SU 登录被禁用。如果我需要直接从那里做一些事情,我也可以访问实际的服务器。

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

除了重新安装还有什么办法解决吗?

我正在使用旧版本的 CentOS。

我对 Linux 世界非常陌生,因此这个动作和问题......

答案1

如果您仍然有 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 scrape 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)提供了静态链接的副本忙碌盒。还有窗扇,一个内置许多命令的独立 shell。如果您有其中之一,您可以从那里进行恢复。如果您之前没有安装它们,那就太晚了。

# 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 [email protected] /oops/bin/sash
[email protected]'s password:
Stand-alone shell (version 3.7)
> -mv /oops/* /

有些管理员会设置一个带有静态链接 shell 的备用帐户,或者让 root 帐户使用静态链接 shell,就是为了解决这种麻烦。

如果您没有 root shell 并且没有采取预防措施,则需要从 Linux live CD/USB 启动(只要足够新,能够访问您的磁盘和文件系统,任何 CD/USB 都可以)并且将文件移回来。

答案2

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

  • 程序的运行位置是使用 $PATH 变量设置的。您可以通过运行将新的 bin 位置添加到路径中export PATH="$PATH:/newpath/to/bin:/newpath/to/usr/bin"。您可能需要添加相应的斯宾目录也是如此。您还可以通过程序的完整路径手动运行程序,/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 的救援盘专门为您提供一些基本的控制台工具来进行此类修复。

答案3

您应该能够在单用户模式下使用安装 CD 重新启动计算机、挂载根文件系统并将文件移回到 Linux 上。我不太了解centos,但它就像RHEL,所以这应该可以。

答案4

我想在您申请后添加更多命令 克蒂普的回答对于现代系统(运行 Unix 的 x86_64 机器),我无法使用 mv 移动目录“etc”,因为它显示错误

Error : Directory not empty

所以我不得不使用

rsync -a source_file target_location

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

相关内容