我不小心将所有文件夹从根目录移动到子文件夹。( /bin, /etc, /home, /lib, /usr... 全部移动了) 唯一没有移动的,因为它们在使用中,是 /bak, /boot, /dev, /proc, /sys。
现在,我尝试执行的任何命令都不会发生。我经常收到“没有这样的文件或目录”。
我通过 ssh 和 ftp 连接,但我无法通过 ftp 移动文件,因为直接 SU 登录被禁用。如果我需要直接从那里做一些事情,我也可以访问实际的服务器。
我假设我需要编辑一个配置文件以告诉它在哪里可以找到/bin文件夹,这将帮助我再次获得访问权限,但我不知道是哪个文件或如何做(因为我甚至无法运行chmod以更改权限)。
除了重装还有什么办法解决吗?
我正在开发旧版本的 CentOS。
我对 Linux 世界非常陌生,因此这个动作和问题......
Gil*_*il' 34
如果你还有一个 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 挤压 i386 上测试的命令。
export LD_LIBRARY_PATH=/oops/lib:/oops/lib/i386-linux-gnu
/oops/lib/ld-linux.so.2 /oops/bin/mv /oops/* /
Run Code Online (Sandbox Code Playgroud)
对于其他发行版或架构,您可能需要稍微调整一下。例如,对于 x86_64 上的 CentOS:
export LD_LIBRARY_PATH=/oops/lib:/oops/lib64
/oops/lib64/ld-linux-x86-64.so.2 /oops/bin/mv /oops/* /
Run Code Online (Sandbox Code Playgroud)
当您搞砸了某些事情时/lib,有一个静态链接的工具箱会有所帮助。一些发行版(我不了解 CentOS)提供了Busybox的静态链接副本。还有sash,一个内置了许多命令的独立外壳。如果您有其中之一,您可以从那里进行恢复。如果您之前没有安装它们,那就太晚了。
# mkdir /oops
# mv /lib /bin /oops
# sash
Stand-alone shell (version 3.7)
> -mv /oops/* /
> exit
Run Code Online (Sandbox Code Playgroud)
如果您不再有 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/* /
Run Code Online (Sandbox Code Playgroud)
有的管理员设置备用账户使用静态链接的shell,或者让root账户使用静态链接的shell,就是为了这种麻烦。
如果您没有 root shell 并且没有采取预防措施,您将需要从 Linux live CD/USB 启动(任何都可以,只要它足够新,能够访问您的磁盘和文件系统)和将文件移回。
Cal*_*leb 11
您可能无需重新启动即可恢复,因此在尝试其他一些操作之前不要重新启动,因为它无法启动。如果您的 SSH 会话仍然打开,请尝试以下操作:
程序从哪里运行是使用 $PATH 变量设置的。您可以通过运行将新的 bin 位置添加到路径中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 的救援磁盘专门为您提供一些基本的控制台工具来进行此类修复。
| 归档时间: |
|
| 查看次数: |
20990 次 |
| 最近记录: |