可能吗?
好吧,大多数琐碎而重要的实用程序都安装在中/bin
,现在您无法访问所有这些实用程序。实际上,如果您重新启动,则系统将无法再启动。
无论如何,我们将解决此问题,并使/bin
的内容尽可能接近其所在位置。唯一的区别是一些符号链接也将修复。
怎么样?
首先,我们应该chroot
进入您已损坏的系统,但要稍有不同!之后,我们将获得系统上已安装软件包的列表,这些软件包的/bin
目录中有任何已安装的文件,然后我们将仅下载所需的软件包并将所需的文件提取到中/bin
。然后,我们将完成。
例如,在之后chroot
,我们可以获取/bin
使用以下命令安装了软件包的软件包列表:
dpkg --search /bin | cut -f1 -d: | tr ',' '\n'
我们还可以使用:
dpkg --listfiles PACKAGE-NAME | grep "^/bin/" # or awk '$0 ~ "^/bin/
列出这些软件包中已安装的文件/bin
。
然后,我们只需创建一个对我们必需的所有软件包的列表,然后下载它们并将它们解压缩到以下位置/bin
:
xargs apt download < list-packages
dpkg-deb -x PACKAGE .
mv ./bin/* /bin
但是,我们必须使用脚本来检查系统上所有已安装的软件包,因为手动执行只是疯狂。
因此,我编写了一个脚本,该脚本可以完成我们需要的所有操作。它会找到所有需要还原的软件包,并向我们/bin
显示每个软件包的名称及其所属的相关文件/bin
。这是屏幕截图:
最后,我们选择重新安装所有软件包,或仅下载所需的文件并将其解压缩到/bin
(建议的选项):
您可以获取此脚本的副本或直接下载它。
开始吧
chroot
使用具有与所安装的Ubuntu相同的体系结构的活动磁盘来引导系统,打开终端并获得root访问权限:
sudo -i
挂载root
文件系统(对我来说是/dev/sda1
):
mount /dev/sda1 /mnt
我们将需要与Internet的连接,因此请resolv.conf
从实时Ubuntu 复制到已安装的根分区:
cp /etc/resolv.conf /mnt/etc/resolv.conf
现在将脚本复制到已挂载分区上的某个位置,例如:
cp /media/ubuntu/usb/restore-bin.sh /mnt/restore-bin.sh
或者,您也可以使用进行下载wget
,例如:
wget https://git.io/v9fRm -O /mnt/restore-bin.sh
挂载其他必要的路径:
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount -t proc /proc /mnt/proc
这是次要的区别:chroot
当/bin
目录中没有目录时,如何处理损坏的系统?我们应该运行哪个外壳?
因此,创建一个临时bin目录。例如:bintmp
在损坏的系统根目录中命名:
mkdir /mnt/bintmp
然后将live绑定/bin
到其中:
mount --bind /bin /mnt/bintmp
将Chroot设置/bintmp/bash
为登录shell 时进入系统:
chroot /mnt /bintmp/bash
导出/bintmp
为您的PATH
环境变量:
export PATH=/bintmp:$PATH
给脚本可执行位:
chmod +x restore-bin.sh
运行脚本:
./restore-bin.sh
等待搜索完成,然后回答我们在屏幕截图中看到的问题。它将开始恢复/bin
,我们差不多完成了。
完成后,使用CTRL+ D退出chroot
环境并卸载已安装的路径:
umount -R /mnt
重新启动系统。
恢复其中的链接 /bin
现在,/bin
目录中的几乎所有文件都返回了,除了大约5个由所管理的符号链接update-alternatives
。
在运行的系统中,运行:
sudo update-alternatives --all
它问你一些问题;您只需按一下ENTER即可接受所有内容。
现在我们完成了。
/bin
在Ubuntu上/usr/bin
这些天的符号链接吗?因此,您所需要做的就是放回符号链接?