如何使用Perl获取Linux上安装的所有rpm包的列表。任何帮助表示赞赏。
答案 0 :(得分:7)
我猜你总是可以使用rpm
命令:
$ rpm --query --all --qf "%-30{NAME} - %{VERSION}\n"
然后您可以通过多种方式使用它:
use autodie;
open my $RPM_FH, "-|", qq(rpm --query --all --qf "%-30{NAME} - %{VERSION}\n");
my @rpmLines = <$RPM_FH>;
close $RPM_FH;
或者:
my @rpmLines = qx(rpm --query --all --qf "%-30{NAME} - %{VERSION}\n");
我还发现RPM::Database这将是一种更为Perlish的做事方式。此包将RPM数据库绑定到哈希:
use RPM::Database;
tie %RPM, "RPM::Database" or die "$RPM::err";
for (sort keys %RPM)
{
...
}
我从未使用它,所以我不确定它究竟是如何工作的。例如,我假设每个哈希条目的值是某种数据库对象。例如,我认为知道RPM包中的版本号和文件是很重要的,必须有一些信息可以提取,但我在RPM::Database
或者Data::Dumper
中没有看到任何内容。 RPM::HEader。玩弄它。您可以使用Data::Dumper来帮助探索返回的对象。
警告:使用{{1}}帮助探索对象和类中的信息。不要用它来弄清楚如何直接从对象中提取信息。使用正确的方法和类。
答案 1 :(得分:4)
最简单的方法可能就是rpm
计划。
chomp(my @rpms = `rpm -qa`);
答案 2 :(得分:1)
根据如何解释您的问题,正确答案可以是:
rpm -qR perl