aptitudeを使用して特定のリポジトリからインストールされたパッケージを検索します


39

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

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

回答:


17

aptitudeを使用して、安定版ブランチの外部にインストールされたパッケージを探すには、次を使用できます。

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

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

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

その他の形式については、マンページをご覧ください(こちらは利用可能なオプション付きのドキュメントです)。

たとえば、Dequeeで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ます。

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


と同じであり、愚かに見えることなくサポートする?any-version()ため~narrow(pat1, pat2)?any-version(pat1 pat2)?any-version(pat1 pat2 pat3)
ロバートシーマー14年

18

適性の情報ページと数十回の試行を読んだ後、私はついにこれを得ました:

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

または(同等):

aptitude search '~S ~i (!~Atesting ~Aunstable)'

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

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

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

編集:「アーカイブ」、「オリジン」などはRelease、リポジトリのファイルから差し引かれます。残念ながら、すべてのツールがこれらすべての行を見ることができるわけではなく、それらは異なる構文を使用します。これらのファイルはとして見つけることができます/var/lib/apt/lists/*Release。または、入力apt-cache policyして概要を取得します。apt-cacheの出力形式が変更されました。後のバージョンではapt_preferencesスタイルが使用されます。

  • Suite:またはArchive:(古い名前!)
    • 適性検索:?archive(___)または~A___
    • 適性フォーマット: %t
    • apt_preferences: release a=___
    • Ubuntuの例:natty-backportstrusty-securitystable
  • Origin:
    • 適性検索:?origin(___)または~O___
    • 適性フォーマット:該当なし
    • apt_preferences: release o=___
    • Ubuntuの例:CanonicalGoogle, Inc.LP-PPA-dockbar-mainUbuntu
  • 他のすべての行
    • 適性:該当なし

15

現在の各リポジトリのオリジンタグ(o = Debianなど)を調べます。

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

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

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

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


2
あなたのaptitude searchパターンは良くありません。–彼らはこのように「1つのバージョンがインストールされ、他のバージョンがDebianに存在するパッケージをリストする」または「インストールされたバージョン、およびそのパッケージの少なくとも1つのバージョンが非Debianで利用可能」を選択します。–私たちが探しているのは、「インストールされているバージョンがDebianからのもの(またはそうでないもの)」です。これは?narrow()またはで行う必要があり?any-version()ます。
ロバートシーマー14年

確認済み。nemo-filerollerからインストールしましlinuxmintたが、Debianにも存在します。したがって、インストールされ Debianのどこかに存在するため、リストに表示されます。
ボルデウィン14年

6

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


私はこれをやろうとしていて、Google経由でこのSU投稿を見つけました。Synapticを見落としているとは信じられません、ありがとう!
デビッドクラリッジ

@RobertSiemerそれは私が十分な答えO / W二日後にそれを受け入れ、そしてことを、あなたの注意を滑っている場合があります前に、他の回答のいずれかで落とした。それが解決したので、私は、それを受け入れた私の問題を。後の回答もすべて支持しましたが、ご容赦ください。また、このサイトのFAQで、この動きから評判が得られていないことに注意してください。実際、私は他の誰か答えを受け入れなかったために2人の担当者を失いました。だから、誰かの決定を公の場で判断し、考えられる原因を再考する前に、一歩後退してください。
ボルデウィン14年

2

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

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

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


なぜこれを実行する必要があるのsudoですか?これはrootで実行しなくても機能するようです。
アンドレホルツナー

sudoで実行する必要はありません
カーティスヌスバウム

@Anonymousの回答でコメントしたように、これは望ましい効果をもたらしません。
ロバートシーマー14年

2

最初に、/ 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

...これはaptitudeを使用していますか?
ロバートシーマー14年

2
@RobertSiemerどのように関連していますか?問題は、合理的な英語のコマンドを想定して、aptitudeでインストールされたパッケージのソースを見つける方法です。ソリューションがaptitudeを使用する必要はありません。
-Auspex

@Auspex、そうでないと思う。–心配しないで、数年前に私の英語力が「合理的」を超えました。
ロバートシーマー

2
どうやら
...-Auspex

2
@Auspex:あなたは私を刺激しようとしていますか?反対は真実です。質問は、aptitudeでインストールされたパッケージではなく、aptitudeに基づいたソリューションを求めているということです。
ロバートシーマー

0

パラメータ?archive()が正規表現であるため、他の答えは実際には正しくありません。だから、?archive(stable)両方に一致stableしてunstable。除外するに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()各リポジトリに対して正規表現パターンを個別に評価するため、他のリポジトリに属している場合でも、に属する?archive("^xenial-updates$")すべてのパッケージと一致しますxenial-updates

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.