Portál AbcLinuxu, 12. května 2025 11:23
#!/bin/env python import os handler = os.popen('rpm -qa', 'r') packages = handler.readlines() packages.sort() handler.close() cmd = 'rpm -e %s --test 2> /dev/null' for package in packages: package=package.strip() if os.system(cmd%package) == 0: print package
#!/usr/bin/env python import rpm timeflag = rpm.RPMTAG_INSTALLTIME class packages: def __init__(self): print "Fetching packages from database" ts = rpm.TransactionSet() mi = ts.dbMatch() self.pckgs = list(mi) print "done. %d items found" %len(self.pckgs) def wholename(self, pkg_obj): return "%s-%s-%s.%s" % (pkg_obj['name'], pkg_obj['version'], pkg_obj['release'], pkg_obj['arch']) def orphans_only(self): print 'Searching orphans' orphans = [] req_lookup = {} for h in self.pckgs: for r in h[rpm.RPMTAG_REQUIRENAME]: req_lookup[r] = h for h in self.pckgs: is_orphan = True for prov in h[rpm.RPMTAG_PROVIDES] + h[rpm.RPMTAG_FILENAMES]: try: whowants = req_lookup[prov] if h is not whowants: #does not want itself is_orphan = False break except KeyError: pass if is_orphan: orphans.append(h) self.pckgs = orphans print "done. %d orphans found." %len(self.pckgs) def sort_key(self, keyname): def compare(a, b): return cmp(a[keyname], b[keyname]) self.pckgs.sort(cmp = compare) def show(self): print "Printing names of %d packages:" %len(self.pckgs) for h in self.pckgs: print self.wholename(h) if __name__ == '__main__': rpms = packages() rpms.orphans_only() rpms.sort_key(timeflag) rpms.show()Vyhledá to všechny balíčky, na kterých nic nezávisí (kromě sebe sama). Balíčky to setřídí podle data instalace, přičemž poslední vypsaný je nejnovější. Formát výpisu obsahuje i verzi a architekturu, takže i na 64bitu lze název vzít do myši a předat příkazu
rpm -eaniž by to psalo "specifies multiple packages".
def show(self): print "Printing names of %d packages:" %len(self.pckgs) for h in self.pckgs: print '%8d %s' %(h[rpm.RPMTAG_SIZE], self.wholename(h)) if __name__ == '__main__': rpms = packages() rpms.orphans_only() rpms.sort_key(rpm.RPMTAG_SIZE) rpms.show()Tak to vypíše odinstalovatelné balíčky setříděné podle velikosti. Hned je vidět, kterého žrouta lze rovnou odstranit.
/var/log/yum.log
.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.