我使用sudo apt-get remove python
命令并意外删除了一堆必需的软件包。我通过命令行登录并再次安装了 ubuntu-desktop,但缺少其他软件包,我正在寻找一种轻松重新安装这些已删除软件包的方法。由于软件中心有日志,我想问一下最简单的方法是回滚更改或从软件中心提取已删除的软件包列表...
注意:我sudo apt-get install .... .... ... ...
在该列表中输入了大约二十几个已删除的程序,但是当我按下回车键时,它没有安装任何一个,因为找不到某些软件包名称。
这些程序已于同日被删除。
答案1
首先,我要说的是,删除python
会导致许多基本命令不再起作用。所以我不知道接下来的操作是否会起作用。
其次,我假设package names couldn't be found
您遇到的错误是由于命令行上的名称拼写错误,或者是由于本地安装的包而在存储库中不可用。
然后,获取相对于最后一个可用日志的已删除软件包的日志dpkg
(我认为您不需要考虑较旧的日志):
awk '$3 == "remove" { print $1, $2, $4 }' /var/log/dpkg.log | tee list
然后编辑list
当前目录中创建的文件,并根据行的时间戳仅保留与要重新安装的软件包相关的行。假设您将修改后的文件保存到list-mod
。
要重新安装该软件包,请使用以下命令:
sudo apt-get --simulate install $(awk '{ print $3 }' list-mod)
我插入了--simulate
选项以查看命令会做什么。如果一切正常,则删除该选项后再次执行命令。
如果命令说找不到某些包,只需将其删除list-mod
并重试。
答案2
所以,我碰巧犯了一个类似的错误:
sudo apt-get purge python3.6*
而不是sudo apt-get purge python3.6.*
。
我能够通过以下步骤快速修复它:
- 打开了日志
vim /var/log/history.log
。 - 使用 vim 命令搜索我的错误命令
/python3.6\*
。 - 有一行
Purge: unity-control-center-signon:amd64 (0.1.7~+14.04.20140211.2-0ubuntu4), ...
包含一长串已清除软件包的列表(如果要删除,它将以 开头Remove:
),我将其复制到另一个文件中,但没有Purge:
使用它的部分。 - 在该文件中,我运行了 vim 命令:
%s/:[^,]*,//g
,它删除了版本部分并留下了一个软件包列表unity-control-center-signon lxc ...
。 - 最后,我从上一步复制了一行并运行:
sudo apt-get install unity-control-center-signon lxc ...
,问题就这样解决了。