適性検索?narrow
とオプションの違いは何ですか??and
たとえば、aptitude search "?and(?installed,?origin(backports))"
システムが結果を返しますが、aptitude search "?narrow(?installed,?origin(backports))"
何も返さないのはなぜですか?
apt-cache policy
バージョン別に返されたパッケージで実行すると、インストールされたバージョンが?and
バックポートから取得されなかったため、?narrow
結果が正しいことを示します。しかし、以前も同様の直感的ではなかった結果に遭遇したことがあり、?narrow
インターネット検索を使用して問題を解決しましたが、その理由を理解していませんでした。
答え1
短い答え
最初のコマンド
aptitude search '?and(?installed,?origin(backports))'
見つかったパッケージインストール済みそしてバックポートがあります。書くことができるただし、バックポートが必ずインストールされる必要はありません。 (バックポートがインストールされている場合とそうでない場合があります。)
一方、2番目のコマンドは
aptitude search '?narrow(?installed,?origin(backports))'
見つかったパッケージインストール済み、しかも現在インストールされているバージョンバックポート、つまり実際のインストールのバックポートから。これはより限定的な検索なので、インストール済みバックポーティングは次のサブセットです。書くことができるバックポート。次のように考えることができます。
すべてのパッケージ
インストール済みパッケージ
利用可能なバックポートを含むインストール済みパッケージ(最初のコマンド)
- インストールされたバックポート(2番目のコマンド)
システムでは、最初のコマンドは結果を返しますが、2番目のコマンドは何も返しません。これは、利用可能なバックポートを含むパッケージをインストールしましたが、そのバックポートが現在インストールされていないことを意味します。
長い答え
これは能力値の違いに関連しています。パックそしてマッチパッケージバージョン。 ~から 文書:
パッケージのパターンを一致させることと、そのパッケージのすべてのバージョンに対してパターンを一致させることには微妙ですが、重要な違いがあります。パターンがパッケージに一致する場合、各用語はパッケージに一致するため、各用語は次の場合に一致します。どのパッケージのバージョンが一致します。逆に、パターンがパッケージのすべてのバージョンと一致する場合、パターンのすべての用語がパッケージのバージョンと一致すると、パターンは正常に一致します。同じパッケージのバージョン。
例:
3.0-1
パッケージのバージョンが既にインストールされているが使用できると仮定します。その後、検索式はバージョンに一致する aardvark バージョンと一致するため、aardvark と一致します。一方、この表現は単一バージョンがインストールされておらず、バージョン番号があるため、すべてのバージョンと一致しません。aardvark
4.0-1
?version(4\.0-1)?installed
?version(4\.0-1)
4.0-1
?installed
3.0-1
aardvark
4.0-1
これ文書
読み取り用?and
:
?and(pattern1, pattern2), pattern1 pattern2
両方とも一致するパッケージと一致モード1そしてモード2。
一致することを確認してくださいバッグ、いいえシングルバージョン。したがって、このクエリは次のようになります。
aptitude search '?and(?installed, ?origin(backports))'
みんなのリストを入手パッケージバージョンインストールされている次のすべてのリストパッケージバージョン
正規表現に一致してbackports
返される原点バッグ両方のリストに表示されます。
一方、文書
読み取り用?narrow
:
?narrow(filter, pattern), ~S filter pattern
フィルタとパターンの両方に一致するパッケージの単一バージョンを選択します。
これが、このクエリが次のパッケージのみを表示する理由です。スタンドアロンインストールバージョン原産地が一致する場合backports
:
aptitude search '?narrow(?installed, ?origin(backports))'
関連しています議論する
機能の場合?any-version
:
?any-version(pattern)
パッケージのバージョンを含むパターンと一致すると、パッケージは一致します。
注:この用語はと密接に関連しています
?narrow
。実際、?any-version(pattern1 pattern2)
それはまったく同じです?narrow(pattern1, pattern2)
。注:他のパターンと同様に、一致はパッケージではなくパッケージバージョンです。その他の用途では
aptitude search
大きな違いはありませんaptitude versions
が、すべてのバージョンと一致するパッケージのすべてのバージョンではなく、一致するバージョンのみが表示されます。
aptitude versions
代わりにを実行すると、aptitude search
これらのクエリはすべて同じ結果を提供することがわかります。
aptitude versions '?and(?installed, ?origin(backports))'
aptitude versions '?installed?origin(backports)'
aptitude versions '?narrow(?installed, ?origin(backports))'
うわー! (私のように)クエリ言語が混乱している場合は、aptitude
Pythonバインドするlibapt
。バージョン文字列を一致させる代わりに、元の文字列を次のように直接確認できます。
import apt
apt_cache = apt.Cache()
for pkg in apt_cache:
if pkg.is_installed:
for pkg_origin in pkg.installed.origins:
if pkg_origin.origin == 'Debian Backports':
print(pkg.name)