我从 9 版开始使用和升级 Ubuntu。当然,我现在有 13.04,在将干净的 13.04 安装到另一台计算机后,我注意到了相当多的差异(plymouth、lightdm、某些软件的行为不同等)。在此期间我做了相当多的自定义,所以可能是因为这个。
所以我想知道是否有办法查看我的版本和干净版本之间的区别。不是完整的文件列表差异,而是软件包差异(突触?)或其他更容易阅读和比较的东西。有办法吗?
答案1
您可以将已安装软件包列表与发行版的“.manifest”文件进行比较,
例如,13.04/i386 的清单可以在这里找到:
http://mirrors.mit.edu/ubuntu-releases/13.04/ubuntu-13.04-desktop-i386.manifest
要获取已安装的软件包:
#aptitude search ~i \!~M
关于您可以进行的定制,有一个工具可以帮助您将修改后的配置文件与包校验和信息进行比较:德布苏姆斯
#debsums -ce
(-e 仅检查配置文件,-c 仅检查已更改的文件)
编辑 :
一年内安装的软件包都记录在日志中/var/log/apt
。较旧的历史记录日志会被 logrotate 删除。我编写了该脚本来获取已安装的软件包(复制时注意不要修改 awk 模式)。
# cd /var/opt/log
#(zcat $(ls -rt history*gz); cat history.log ) | awk '
/^Commandline: (apt-get install|synaptic|aptitude)/{
cmdl=$0
getline
if(/^Install|^Remove/) {
print cmdl
print
}
}' | less
答案2
以下脚本可用于将已安装软件包列表与发行版的“.manifest”文件进行比较。我使用“ubuntu-16.04.1-desktop-amd64.manifest”针对 Ubuntu 16.04.1 LTS 实例开发了该脚本,其中添加和删除了许多软件包。
#!/bin/bash
# The first parameter to this script is the manifest file name.
# Take the first column of the manifest. This is the name of the
# package without version information.
cut --fields=1 $1 | \
sort > \
manifestpkglist.tmp
# Get the list of packages installed on this sysem. Packages with
# deinstalled status are ignored. Only the first column of the output
# having the package names is considered.
dpkg --get-selections | \
grep --invert-match deinstall | \
cut --fields=1 | \
sort > \
installedpkglist.tmp
# Report the differences.
diff --side-by-side \
--suppress-common-lines \
manifestpkglist.tmp \
installedpkglist.tmp
# Remove the intermediate files.
rm --force \
manifestpkglist.tmp \
installedpkglist.tmp
该脚本将清单文件作为输入。要运行它,请使脚本可执行$ chmod u+x manifest-diff.sh
并通过传入清单文件名作为第一个参数来执行:$ ./manifest-diff.sh ubuntu-16.04.1-desktop-amd64.manifest
此脚本的一个限制是它不区分明确安装的软件包和为满足依赖关系而添加的软件包。据推测,此类信息在系统上可用,因为它一定是软件包管理器的自动删除功能所需要的。更好的脚本会包含这些信息。
答案3
由于某种原因,“!~M”模式撤销了“~i”模式,所以我得到了所有的包(包括从未安装的包)。
如果你做了
# 能力搜索 ~i
一切正常。