GNU/Linux >> Linux の 問題 >  >> Debian

Debian –依存関係のないトップレベルの手動インストールパッケージを一覧表示しますか?

aptを使用して手動でインストールされたパッケージを表示する方法はたくさんあります 、例:

apt-mark showmanual

しかし、時にはその出力が多すぎます。たとえば、ユーザーがパッケージfooを手動でインストールした場合 :

apt-get install foo

…そしてfoo barに依存 およびbaz 、次にapt-mark showmanual 出力されます:

bar
baz
foo

手動でインストールされた最上位のパッケージ(つまり)のみを一覧表示するにはどうすればよいですか。 foo )依存関係なし(つまり bazではありません 、またはbar )?

次のコードは機能しているようですが、 GNU parallel apt-rdependsを呼び出す 数百回は遅すぎます(4コアCPUで3時間):

apt-mark showmanual | 
tee /tmp/foo | 
parallel "apt-rdepends -f Depends,PreDepends,Suggests,Recommends {} |
          tail +2" 2> /dev/null | 
tr -s ' ' 'n' | 
grep -v '[():]' | 
sort -Vu | 
grep -wv -f - /tmp/foo

承認された回答:

これは、PythonaptAPIを使用して実行できます。 apt-mark showmanualに表示されるパッケージ まさにapt.cache.Cache()にあるものです is_installedの対象 trueであり、is_auto_installed は偽です。ただし、依存関係を処理する方が簡単です:

#! /usr/bin/env python3

from apt import cache

manual = set(pkg for pkg in cache.Cache() if pkg.is_installed and not pkg.is_auto_installed)
depends = set(dep_pkg.name for pkg in manual for dep in pkg.installed.get_dependencies('PreDepends', 'Depends', 'Recommends') for dep_pkg in dep)

print('n'.join(pkg.name for pkg in manual if pkg.name not in depends))

これでさえ、私がそこに見るとは思わないいくつかのパッケージをリストしています(initgrep ?!)。


Debian
  1. Debian /UbuntuLinuxシステムにインストールされているすべてまたは特定のパッケージを一覧表示する方法

  2. Ubuntu20.04にインストールされているパッケージを一覧表示する方法

  3. Ubuntuにインストールされているパッケージを一覧表示する方法

  1. UbuntuとDebianにインストールされているリポジトリを一覧表示する方法

  2. Linuxにインストールされているすべてのパッケージを一覧表示する方法

  3. Debian –インストール日ごとにAptベースのシステムのパッケージを一覧表示しますか?

  1. Ubuntuにインストールされているパッケージを一覧表示する方法

  2. Ubuntu、Debian、または Linux Mint でリポジトリ内のすべてのパッケージを一覧表示する方法 [APT]

  3. Fedora にインストールされている最上位パッケージを一覧表示する