如果您的系统已busybox
安装,则可以使用此工具将其放回原处。
busybox
是一个二进制文件,内置了许多标准实用程序。世事如mv
,sh
,ls
,等。
从您对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
需要在几个文件中/etc
(passwd
,pam.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特权。到达那里的唯一方法是拥有一个实用程序,例如su
或sudo
升级您的权限(此时两者均不起作用),或者劫持另一个已经以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-linux
。ld-linux
是负责加载二进制文件所需的其他库的库。在您的系统上,此地址为/lib64/ld-linux-x86-64.so.2
。由于此目录已移动,因此任何动态链接的可执行文件将不再起作用。
busybox工作的原因是busybox是静态链接的。它不使用ld-linux
。
/var/bin/su
直接跑吗?