一不小心就跑apt install '*'
了虽然由于冲突(例如多个版本的vim
编辑器),它没有安装任何东西,但所有安装的软件包都失去了它们的“自动”属性,这意味着我无法再享受 APT 的自动依赖性检查。也就是说,如果我删除vim
, apt 不再提示我删除vim-runtime
。我使用的是高级打包工具的精简版本,因此apt-mark
不可用。如何automatic
为他人抚养的人恢复财产?
注意:我有apt
、apt-get
、apt-cache
、apt-config
和apt-key
可用。
答案1
在 Debian 及其衍生版本上,有关手动安装与自动安装的信息存储在/var/lib/apt/extended_states
.没有自动备份,也没有日志。如果您有该文件的备份,请将其恢复。
如果您没有备份,请先制作一个备份,以防万一。然后,对于每个包,将行更改Auto-Installed: 0
为Auto-Installed: 1
将包标记为手动安装。
APT 本身并不跟踪已安装软件包的依赖关系,这是由 dpkg 完成的。该信息位于/var/lib/dpkg/status
Debian 上。 Aptitude 具有高级搜索功能,可以对依赖项进行操作,但 apt 不行。您可以对 进行一些临时解析/var/lib/dpkg/status
。以下脚本(经过最低限度的测试)生成一些已安装的软件包所依赖的软件包列表:
</var/lib/dpkg/status awk '
/^Package:/ {package=$2}
/^Status:/ && $4 != "installed" {package=""}
/^(Depends|Pre-Depends|Recommends|Suggests):/ && package != "" {
sub(/^[^:]*: */, "");
gsub(/ (\([^()]*\))/, "");
split($0, dependencies, /[|, ]+/);
for (d in dependencies) print dependencies[d]}
' | sort -u >dependencies.txt
查看该列表,也许删除一些恰好是依赖项的包行,但您知道无论如何您都想保留它们。然后用它来调整/var/lib/apt/extended_states
:
</var/lib/apt/extended_states awk '
BEGIN {
while (getline <"dependencies.txt") auto[$0]=1;
RS="";
}
$2 in auto {sub(/\nAuto-Installed: 0/, "\nAuto-Installed: 1")}
{print $0 "\n"}
' >extended_states.new
检查输出文件,如果您满意,请将其移至适当位置。