设置2台机器上安装的软件包的差异
鉴于两台机器:
- 服务器A
- 服务器B
哪个工具最好输出一个“set”, diff
类似安装视图:
- 仅限ServerA
- 仅在ServerB上
- 在两台机器上
-
获取每台计算机的所有包列表作为文本文件:
$ ssh server-a dpkg --get-selections | grep '\binstall$' | cut -f 1 > server-a.txt $ ssh server-b dpkg --get-selections | grep '\binstall$' | cut -f 1 > server-b.txt
-
使用shell“set operations”生成所需的结果:
$ comm -12 <(sort server-a.txt) <(sort server-b.txt) > both.txt $ comm -23 <(sort server-a.txt) <(sort server-b.txt) > only-server-a.txt $ comm -13 <(sort server-a.txt) <(sort server-b.txt) > only-server-b.txt
-
查看每组中包的数量:
$ wc -l *.txt 2238 both.txt 948 only-server-a.txt 89 only-server-b.txt 3186 server-a.txt 2327 server-b.txt 8788 total
我只编写了这个脚本,它也比较了包版本(如果你不需要版本,那么ændrük发布的更好):
https://github.com/lepe/scripts/blob/master/compare_ubuntu_apt.pl
用法:
1)在两台计算机中生成包列表,例如:
apt --installed list | tail -n+2 > that_server.lst
2)执行perl脚本:
./compare_ubuntu_apt.pl this_server.lst that_server.lst
结果:(示例)
---------------------------------- DIFFERENCES ---------------------------------- @ apparmor : 2.8.95~2430-0ubuntu5.2 -> 2.8.95~2430-0ubuntu5.3 @ apt : 1.0.1ubuntu2.8 -> 1.0.1ubuntu2.10 @ apt-transport-https : 1.0.1ubuntu2.8 -> 1.0.1ubuntu2.10 @ apt-utils : 1.0.1ubuntu2.8 -> 1.0.1ubuntu2.10 @ base-files : 7.2ubuntu5.2 -> 7.2ubuntu5.3 @ bash-completion : 1:2.1-4 -> 1:2.1-4ubuntu0.1 ---------------------------------- MISSING IN this_server.lst ---------------------------------- + acl : 2.2.52-1 + acpid : 1:2.0.21-1ubuntu2 + apport : 2.14.1-0ubuntu3.11 + apport-symptoms : 0.20 + at : 3.1.14-1ubuntu1 + at-spi2-core : 2.10.2.is.2.10.1-0ubuntu1 + attr : 1:2.4.47-1ubuntu1 + autotools-dev : 20130810.1 ---------------------------------- MISSING IN that_server.lst ---------------------------------- - apcupsd : 3.14.10-2build1 - apcupsd-doc : 3.14.10-2build1 - beep : 1.3-3 - btrfs-tools : 3.12-1 - discover : 2.1.2-5.2ubuntu1