如何列出已删除软件包的残留配置文件?

如何列出已删除软件包的残留配置文件?

我注意到大量的包的residual-config状态为,apt list在删除它们之前,我想确保它不会删除任何重要信息,我怎样才能显示将要删除的文件列表?

答案1

要查看将删除的内容,您必须检查相应的 postrm 脚本,例如/var/lib/dpkg/info/packagename.postrm

来自man dpkg(缩写):

注意:某些配置文件可能不为 dpkg 所知,因为它们是通过配置脚本单独创建和处理的。在这种情况下,软件包的脚本必须负责删除它们。这仅适用于系统目录中的文件。

清除包包括:

  1. 移除包裹。

  2. 运行 postrm 脚本。

答案2

以下一行代码向您显示所有带有残留配置文件的软件包以及每个软件包的上述文件列表:

apt-cache show '?config-files' | grep -oP '^Package: \K(.*)$' | uniq | xargs -I '0' dpkg-query -W --showformat "\${binary:Package}:\n\${db-fsys:Files}" '0'

示例输出:

postgresql-13:
postgresql-common:
 /etc
 /etc/init.d
 /etc/init.d/postgresql
 /etc/logrotate.d
 /etc/logrotate.d/postgresql-common
 /etc/postgresql
 /etc/sysctl.d
 /etc/sysctl.d/30-postgresql-shm.conf
 /var
 /var/lib
 /var/lib/postgresql
 /var/log
 /var/log/postgresql

解释:

  • apt-cache show '?config-files':显示过时的配置文件适当的搜索模式
  • grep -oP '^Package: \K(.*)$' | uniq:过滤包名称并删除上一步中重复的输出。
  • xargs -I '0' dpkg-query -W --showformat "\${binary:Package}:\n\${db-fsys:Files}" '0':将包名称转发到dpkg-query并打印字段Package(包名称)和一个特殊db-fsys:Files字段,该字段列出了当前系统上该包​​中安装的所有文件。

注意:您还可以使用以下命令清除系统中的所有残留配置文件:

sudo apt purge '?config-files'

这不会影响已安装的软件包,但我建议谨慎使用。

警告apt purge '?config-files' 可以删除您意想不到的任意内容。使用时请小心,并先备份重要数据(数据库、凭证等)。--dry-run如果不确定,请先尝试使用。

答案3

结合以下答案@voodooattack@int_ua

#!/bin/bash

set -eo pipefail

apt-cache show '?config-files' | grep -oP '^Package: \K(.*)$' | uniq | while read -r pkg; do
    dpkg-query -W --showformat "\${binary:Package}:\n\${db-fsys:Files}" "${pkg}"
    if [[ -e /var/lib/dpkg/info/${pkg}.postrm ]]; then
        echo " postrm:"
        sed 's/^/  /' /var/lib/dpkg/info/${pkg}.postrm
    fi
done

我的系统上的示例输出:

$ apt-list-residual-files.sh 
libatk-adaptor:amd64:
 /etc
 /etc/X11
 /etc/X11/Xsession.d
 /etc/X11/Xsession.d/90atk-adaptor
 /etc/environment.d
 /etc/environment.d/90atk-adaptor.conf
xbrlapi:
 /etc
 /etc/X11
 /etc/X11/Xsession.d
 /etc/X11/Xsession.d/90xbrlapi
 postrm:
  #!/bin/sh
  set -e
  # Automatically added by dh_installdeb/13.11.6ubuntu1
  dpkg-maintscript-helper rm_conffile /etc/X11/Xsession.d/60xbrlapi 6.1\+dfsg-2\~ xbrlapi -- "$@"
  # End automatically added section

相关内容