错误地删除了libnl-3-200

我试图在Ubuntu 16.04中修复一个破损的软件包(libnl-route-3-200)。 我做错了:

sudo apt-get remove libnl-3-200 

并没有意识到网络图书馆的重要性。
现在,我的Ubuntu系统无法连接到网络。
我收到的消息是:

系统网络服务与此版本的Ubuntu不兼容。

我该如何修复系统?

您似乎仍然可以从其他设备访问互联网。

在这种情况下,我的建议是访问https://packages.ubuntu.com并搜索所需的ubuntu版本的软件包。 在您的情况下(假设amd64),这将导致此下载链接 。

下载文件,(可选但建议:validation指纹)并通过某种方式将其复制到您的计算机(例如闪存驱动器),最后安装包运行

 sudo dpkg -i libnl-3-200_3.2.27-1ubuntu0.16.04.1_amd64.deb 

该软件包现在已手动安装,但我认为只要有更新,它就会被存储库中的更新版本替换。

如果apt删除了该包,它也会删除所有依赖它的包,这是一个更大的问题。

首先,我检查/var/log/apt/history.log实际删除了什么。 该文件末尾附近应该有一个部分,包括调用apt,命令行以及删除了哪些包的日期和时间:

 $ cat /var/log/apt/history.log 

这种格式有点烦人,所以使用:

 $ sed -e 's/ ([^)]*)//g' -e 's/, / /g' /var/log/apt/history.log 

这将从日志文件中删除版本号和逗号,以便于复制和粘贴。

对于Remove:Purge:下该块中列出的每个软件包,将它们添加到①的命令行中

 # apt --print-uris install libnl-3-200 

这将为您提供要下载的URL列表。 通过附加处理此列表

 | sed -ne "/http/s/'\([^']*\)'.*/\1/p" 

删除URL周围的引号以及文件名和校验和,并将其重定向到文件中。 完整的命令行应该类似于

 # apt --print-uris install libnl-3-200 | sed -ne "/http/s/'\([^']*\)'.*/\1/p" >urls.txt 

但是有更多的包。

将该文件复制到USB记忆棒上,转到另一台计算机并下载这些文件,例如使用wget

 $ wget -i urls.txt 

将USB记忆棒取回原始计算机,将.deb文件复制到/var/cache/apt/archives/

 # cp *.deb /var/cache/apt/archives/ 

然后,通过在①下运行apt来安装,但没有--print-uris选项。 它应该从缓存目录中获取文件并安装它们。