설치된 rpm 패키지를 토폴로지별로 정렬하는 방법은 무엇입니까?

설치된 rpm 패키지를 토폴로지별로 정렬하는 방법은 무엇입니까?

종속성에 따라 Fedora에 설치된 모든 rpm 패키지를 토폴로지별로 정렬하고 싶습니다. 가장 필요한 패키지는 맨 위에 있고(예: glibc) 가장 덜 필요한 패키지는 맨 아래에 있습니다. 를 사용하여 설치된 모든 패키지를 나열할 수 있지만 rpm -qa위상적으로 정렬되지 않은 것 같습니다.

내 목표는 설치된 패키지를 검토하고 더 이상 필요하지 않은 패키지를 찾아 제거하는 것입니다.

답변1

남자 rpm그래프:

rpmgraph(8) - Linux man page
Name
rpmgraph - Display RPM Package Dependency Graph
Synopsis

rpmgraph PACKAGE_FILE ...
Description

rpmgraph uses PACKAGE_FILE arguments to generate a package dependency graph. Each
PACKAGE_FILE argument is read and added to an rpm transaction set. The elements 
of the transaction set

are partially ordered using a topological sort.

The partially ordered elements are then printed to standard output.


Nodes in the dependency graph are package names, and edges in the directed graph 
point to the parent of each node. The parent node is defined as the last 
predecessor of a package when partially ordered using the package dependencies as
a relation. That means that the parent of a given package is the package's last
prerequisite.

The output is in dot(1) directed graph format, and can be displayed or printed
using the dotty graph editor from the graphviz package. There are no rpmgraph
specific options, only common rpm options. See the rpmgraph usage message for    
what is currently implemented. 

  [1]: https://linux.die.net/man/8/rpmgraph

설치:

rpm-devel fedora 19에는 이 패키지가 있습니다

다음은 fedora 30용 rpm-devel입니다.

패키지 관리자를 사용하세요.

dnf install rpm-devel

wget에 설치하려면 CentOS터미널 창에 다음을 입력하세요.

sudo yum install wget

wget에 설치하려면 Fedora다음을 입력합니다.

sudo dnf install wget

이제 wget 명령을 사용하여 원하는 .rpm 파일을 다운로드할 수 있습니다. 다음을 입력:

wget http://some_website/sample_file.rpm

시스템은 웹사이트에 접속하여 현재 작업 디렉터리에 파일을 다운로드해야 합니다.

RPM 명령을 사용하여 RPM 파일 설치

Fedora또는 Linux 에 .rpm 패키지를 설치하려면 CentOS다음을 입력하십시오.

sudo rpm –i sample_file.rpm

–i 스위치는 패키지 관리자에게 파일을 설치하려고 함을 알려줍니다.

RPM 설치 프로그램에 대한 자세한 내용은 다음에서 확인할 수 있습니다.RPM 문서.

Yum으로 RPM 파일 설치

또는 yum패키지 관리자를 사용하여 파일을 설치할 수 있습니다 .rpm.

다음을 입력:

sudo yum localinstall sample_file.rpm

localinstall설치 파일에 대한 현재 작업 디렉터리를 살펴보는 옵션 지침 yum입니다 .


https://superuser.com/questions/483307/how-do-i-know-dependent-rpms-of-aa-package

https://phoenixnap.com/kb/how-to-install-rpm-file-centos-linux

https://linux.die.net/man/8/rpm

편집하다:

작업을 할 수 없습니다 rpmgraph. 세 가지 다른 버전의 패키지 목록 구문을 시도했지만 PACKAGE_FILE오류만 발생합니다. 이 프로그램 사용 방법을 알고 있다면 답변을 제공하거나 내 내용을 편집하십시오. 테스트 대상Fedora 28 ..rpm 확장자를 사용하여 설치된 모든 패키지를 나열하는 방법. 페도라, 센토스, 레드햇

# rpmgraph INSTALLED_PACKAGES 
(null): read manifest failed:

답변2

조금 검색해보니 패키지 rpmdep의 도구가 rpmorphan내가 원하는 것과 가장 가까운 것 같습니다. 가장 필요한 설치된 패키지를 보려면 --depending다음 옵션을 사용하여 실행할 수 있습니다.

rpmdep -all --depending | tac | less -S

답변3

나는 한때 이것에 대한 스크립트를 직접 작성했지만 거의 사용하지 않았습니다.

조심스럽게 제거 작업을 처리하겠습니다. 한번은 "SimplyHTML"이라는 패키지가 "리프 노드"로 나타나서 삭제하려고 했고, 제거하려고 했더니 "freemind"(제가 많이 사용하는 마인드 매핑 도구)가 필요하다는 것을 발견하고 삭제도 되었습니다. 엄청 이상해!

어쨌든, 다음은 스크립트입니다(내 시스템에서는 "leaf-rpms"라고 함).

#!/usr/bin/perl
use strict;
use warnings;
use 5.10.0;
use Data::Dumper;

# a leaf RPM is one that has no deps and you can safely delete

# run it as is, delete any that you think are useless

my @installed = `rpm -qa --queryformat="%{NAME}\n"`;
chomp(@installed);
my %count;

@ARGV = ("dnf repograph |");

while (<>) {
    chomp;
    next if /^digraph packages/;
    next unless m({) .. m(});
    next if m({) or m(});

    s/"//g;
    $count{$_}++;
}
# print Dumper \@installed;
# print Dumper \@all;
# print Dumper \%count;
# print "----\n";

my %dup;
for my $k (sort @installed) {
    next if $dup{$k}++;
    print "$k\n" unless exists $count{$k};
}

관련 정보