如何從一個 Debian 源解除安裝所有軟體包?
我之前添加了一些外部資源,
/etc/apt/sources.list.d
但現在我想刪除其中一個。我也想:
- 僅從該來源中刪除所有軟體包
- 將所有包還原為我原始源中的版本
- 或者,列出來自該來源的所有包,以便我可以手動執行此過程
我怎樣才能做到這一點?
根據您希望刪除的儲存庫的配置,
apt list --installed
可能會提供足夠的資訊來辨識您需要解除安裝或降級的軟體包。如果儲存庫定義了唯一的“Origin”,則另一種選擇是使用aptitude search '~i ~Oorigin'
(酌情替換origin
)。(這是一個通用答案;如果您編輯問題以準確指定要刪除的來源,我可以添加特定答案。)
或者使用 dpkg:
dpkg -l | awk '/^.i/ {print $2}' | xargs apt-cache policy | awk '/^[a-z0-9.\-]+:/ {pkg=$1}; /\*\*\*/ {OFS="\t"; ver=$2; getline; print pkg,ver,$2,$3}'|grep -v /var/lib/dpkg/status| sed -e 's/://'|awk '{printf "%-40s %-36s %-36s %-16s \n",$1,$2,$3, $4}' | grep -i yourkeyword
例如
dpkg -l | awk '/^.i/ {print $2}' | xargs apt-cache policy | awk '/^[a-z0-9.\-]+:/ {pkg=$1}; /\*\*\*/ {OFS="\t"; ver=$2; getline; print pkg,ver,$2,$3}'|grep -v /var/lib/dpkg/status| sed -e 's/://'|awk '{printf "%-40s %-36s %-36s %-16s \n",$1,$2,$3, $4}' | grep -i multimedia
返回:
audacious 1:3.8.2-dmo1 http://www.deb-multimedia.org stretch/main audacious-plugins 1:3.8.2-dmo1 http://www.deb-multimedia.org stretch/main audacious-plugins-data 1:3.8.2-dmo1 http://www.deb-multimedia.org stretch/main snipp
這顯示了來自 deb-multimedia.org 的包。結果相同
dpkg-query -W -f='${Section}\t\t${Package}\n' | awk '/^.i/ {print $2}' | xargs apt-cache policy | awk '/^[a-z0-9.\-]+:/ {pkg=$1}; /\*\*\*/ {OFS="\t"; ver=$2; getline; print pkg,ver,$2,$3}'|grep -v /var/lib/dpkg/status| sed -e 's/://'|awk '{printf "%-40s %-36s %-36s %-16s \n",$1,$2,$3, $4}' | egrep -i multimedia