web-dev-qa-db-ja.com

aptitudeで特定のリポジトリからインストールされたパッケージを検索する

私はこの質問に類似した何かを探しています: Zypper:特定のリポジトリからすべてのパッケージを表示するにはどうすればよいですか?

私はUbuntuを使用しているため、aptitudeベースのソリューションが必要です。特定のリポジトリからinstalledパッケージのリストを取得するにはどうすればよいですか?

39
Boldewyn

Aptitudeを使用して、安定版ブランチの外にあるインストール済みパッケージを探すには、以下を使用できます。

aptitude search "?narrow(?installed,?not(?archive(stable)))"

バージョンとパッケージ名(および説明の代わり)を表示するには、次のように、フォーマットオプション(略して-F)を指定してコマンドを使用できます。

aptitude search -F "%p %V %v" "?narrow(?installed,?not(?archive(stable)))"

その他のフォーマットについては、 manpage をご覧ください(ここに avail。options を含むドキュメント)。

たとえば、DebianでSqueezeの外部にパッケージをインストールした場合(たとえば、apt-get install -t sid package-nameを実行して)機能します。

インストールされたパッケージがapt-cache policyからどこから来ているかを確認できます。使用方法は次のとおりです。

apt-cache policy <package-name>

たとえば、私のpython-numpyパッケージは次の出力をレンダリングします。

$ LANG=C apt-cache policy python-numpy
python-numpy:
  Installed: 1:1.6.2-1
  Candidate: 1:1.6.2-1.2
  Version table:
     1:1.7.0-1 0
          1 http://ftp.es.debian.org/debian/ experimental/main AMD64 Packages
     1:1.6.2-1.2 0
        500 http://ftp.es.debian.org/debian/ sid/main AMD64 Packages
 *** 1:1.6.2-1 0
        100 /var/lib/dpkg/status
     1:1.4.1-5 0
        990 http://ftp.es.debian.org/debian/ squeeze/main AMD64 Packages
        990 http://ftp.de.debian.org/debian/ squeeze/main AMD64 Packages

つまり、私は現在のsid/mainのブランチの1つ後ろのバージョンであるため、古いsidバージョンがインストールされています。まだ1.4.1-5で安定しているので、_1.6.2-1にいます。

提出時にこのパッケージはすでに更新されています:)

17
ssice

Aptitudeの情報ページと数十回の試行を読んだ後、ようやくこれを取得しました:

_aptitude search '?narrow(?installed,?not(?archive(testing)) ?archive(unstable))'
_

または(同等):

_aptitude search '~S ~i (!~Atesting ~Aunstable)'
_

anyリポジトリの不安定なアーカイブからインストールされたパッケージを検索します。デフォルトのアーカイブからパッケージを除外する必要があります(上記の例でテストしています)。

Www.debian-multimedia.org/unstableからインストールされたパッケージをフィルタリングしたい場合:

_aptitude search '~S ~i (!~Atesting ~Aunstable ?origin("Unofficial Multimedia Packages"))
_

Edit:「Archive」、「Origin」などは、リポジトリのReleaseファイルから差し引かれます。残念ながら、すべてのツールがこれらのすべての行を見ることができるわけではなく、それらには異なる構文を使用しています。これらのファイルは_/var/lib/apt/lists/*Release_として見つけることができます。または、単に_apt-cache policy_と入力して概要を表示します。 apt-cacheは出力形式を変更しました。それ以降のバージョンではapt_preferencesスタイルを使用します。

  • _Suite:_または_Archive:_(旧名!)
    • aptitude search:?archive(___)または_~A____
    • aptitude形式:_%t_
    • apt_preferences:_release a=____
    • Ubuntuの例:_natty-backports_、_trusty-security_、stable
  • _Origin:_
    • aptitude search:?origin(___)または_~O____
    • aptitudeフォーマット:n/a
    • apt_preferences:_release o=____
    • Ubuntuの例:Canonical、_Google, Inc._、_LP-PPA-dockbar-main_、Ubuntu
  • 他のすべての行
    • 適性:なし
18
Christophe

Originタグ( o = Debian)現在のリポジトリごとに:

apt-cache policy | sed -n 's/.*o=\([^,]\+\).*/\1/p' | uniq

次に、特定のOriginから(またはからではなく)パッケージを検索します。

aptitude search "?installed?origin(Debian)"
aptitude search "?installed?not(?origin(Debian))"

これは ない 各リポジトリに依存して独自のOrigin情報を提供するため、セキュリティ監査に適していますが、複数のリポジトリに存在するパッケージのOriginのトラブルシューティングに役立つ場合があります。

15
Anonymous

完全を期すために:Ubuntuシステムでは、このタスクにもSynapticを使用できます。左側の列では、パッケージをその起源でフィルタリングできます。

6
Boldewyn

私はこれを見つけました:

aptitude search "?origin (<repository>) ?installed"

「aptitude search」 here でサポートされている検索語句のリストを見つけることもできます。

2
max

まず、/ var/lib/apt/listsで目的のリポジトリに適切なファイルを見つけます。プログラムでこれを行うことは可能であるはずですが、私はそうする必要はありませんでした。

例としてgoogle chromeを使用して、これを試してください:

SEARCH_PATTERN=dl.google.com_linux_chrome  # adjust to suit your needs

for PKG in $( grep-dctrl -sPackage . /var/lib/apt/lists/${SEARCH_PATTERN}_*_Packages | sed 's/^Package: //' )
do
    if dpkg -s "${PKG}" 2> /dev/null 1> /dev/null
    then
        echo ${PKG}
    fi
done

そして私は出力を取得します:

google-chrome-stable

dpkg -sは、パッケージがインストールされている場合は0を返し、それ以外の場合はゼロ以外を返します。将来の参考のために、の出力

grep-dctrl -sPackage . /var/lib/apt/lists/${SEARCH_PATTERN}_*_Packages

だった

Package: google-chrome-beta
Package: google-chrome-stable
Package: google-chrome-unstable
2
coreyh

?archive()のパラメーターは正規表現であるため、他の回答は実際には正しくありません。したがって、?archive(stable)stableunstableの両方に一致します。 stableだけを除外するには、正規表現パターンをアンカーする必要があります。

_aptitude search -F "%p %V %v %t" '?any-version(?installed ?not(?archive("^stable$")))'
_

複数のリポジトリを除外するには:

_aptitude search -F "%p %V %v %t" '?any-version(?installed ?not(?archive("^(xenial|xenial-updates)$")))'
_

また、一部のパッケージは複数のリポジトリに属していることに注意してください。 _xenial-security,xenial-updates_。 ?archive()は、各リポジトリに対してregexパターンを個別に評価するため、?archive("^xenial-updates$")は、他のリポジトリにも属している場合でも、_xenial-updates_に属するパッケージに一致します。

0
Animism