运行rpm -qa时,如何区分基本软件包和其他软件包?

我编写了一个脚本,连同其他任务一起连接到一个远程服务器,并提取所有已安装软件包的列表并安装它们,如下所示:

echo -e "\e[36m#===# Getting list of packages to install #===#\e[0m" $ssh root@$srv 'rpm -qa --queryformat "%{NAME}\n" >/tmp/sw.lst' $scp root@$srv:/tmp/sw.lst /tmp/ np=`cat /tmp/sw.lst |wc -l` echo -e "\e[36m#===# $np Packages are going to be installed! #===#\e[0m" /usr/bin/xargs yum -y install < /tmp/sw.lst 

我的问题是,当它通过列表运行时,它跳过了默认安装来的很多包,我试图保存那个时间,这是可能的吗?

我只是做一个

 ssh root@$srv 'rpm -qa' | xargs yum -y install 

去喝杯咖啡什么的,因为要find解决办法

  1. 更快
  2. 工程考虑每台机器的个别包装

你仍然需要做一些比较两台机器rpm -qa和sorting它,运行像SvWbuild议的comm技巧,最后使用该列表进行yum安装…

为什么不把这个数字呢?

或者更好的是,为什么不把所有箱子连接起来的冻结回购,然后启动新的装置(使用鞋匠/工头/太空行走/你有什么)? 然后你会知道从一开始就安装的每个软件包,每个系统看起来都是一样的(或者相似的)? 为了保持系统的同步,我会使用木偶,并指定应该在那里安装的软件包列表… – 然后,这种情况不会出现在第一位; 既然你想用这个节省时间,我想你做了很多…

我无法知道在操作系统设置期间是否检测到此软件包已安装,并且此列表可能因安装时select的选项而异。

解决方法:

  • 为基本安装创build一个类似的列表。
  • 确保两个列表都是sorting的( man sort
  • 使用comm只显示不在这两个文件中的行

     comm prodinstall.txt baseinstall.txt -2 -3 > install.txt 
  • 现在install.txt将只包含不在基本安装中的软件包。