私はこの質問に類似した何かを探しています:Zypper:特定のリポジトリからすべてのパッケージを表示するにはどうすればよいですか?
Ubuntuを使用しているため、aptitudeベースのソリューションが必要です。特定のリポジトリからインストール済みパッケージのリストを取得するにはどうすればよいですか?
私はこの質問に類似した何かを探しています:Zypper:特定のリポジトリからすべてのパッケージを表示するにはどうすればよいですか?
Ubuntuを使用しているため、aptitudeベースのソリューションが必要です。特定のリポジトリからインストール済みパッケージのリストを取得するにはどうすればよいですか?
回答:
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
ます。
提出時点で、このパッケージはすでに更新されています:)
適性の情報ページと数十回の試行を読んだ後、私はついにこれを得ました:
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
release a=___
natty-backports
、trusty-security
、stable
Origin:
?origin(___)
または~O___
release o=___
Canonical
、Google, Inc.
、LP-PPA-dockbar-main
、Ubuntu
現在の各リポジトリのオリジンタグ(o = Debianなど)を調べます。
apt-cache policy | sed -n 's/.*o=\([^,]\+\).*/\1/p' | uniq
次に、特定のオリジンからの(または特定のオリジンからではない)パッケージを検索します。
aptitude search "?installed?origin(Debian)"
aptitude search "?installed?not(?origin(Debian))"
これは、各リポジトリに依存して独自の発信元情報を提供するため、セキュリティ監査には適していませんが、複数のリポジトリに存在するパッケージの発信元のトラブルシューティングに役立つ場合があります。
aptitude search
パターンは良くありません。–彼らはこのように「1つのバージョンがインストールされ、他のバージョンがDebianに存在するパッケージをリストする」または「インストールされたバージョン、およびそのパッケージの少なくとも1つのバージョンが非Debianで利用可能」を選択します。–私たちが探しているのは、「インストールされているバージョンがDebianからのもの(またはそうでないもの)」です。これは?narrow()
またはで行う必要があり?any-version()
ます。
nemo-fileroller
からインストールしましlinuxmint
たが、Debian
にも存在します。したがって、インストールされ、 Debianのどこかに存在するため、リストに表示されます。
完全を期すため:Ubuntuシステムでは、このタスクにもSynapticを使用できます。左側の列で、パッケージを発生元でフィルタリングできます。
私はこれを見つけました:
aptitude search "?origin (<repository>) ?installed"
sudo
ですか?これはrootで実行しなくても機能するようです。
最初に、/ 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
パラメータ?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
。
?any-version()
ため~narrow(pat1, pat2)
、?any-version(pat1 pat2)
?any-version(pat1 pat2 pat3)