有没有办法查看每个包的“处理触发器”具体做了什么?

有没有办法查看每个包的“处理触发器”具体做了什么?

据我了解,通常的“处理 < packagename > 的触发器“执行一些特定于软件包和系统的任务,例如向启动菜单添加项目或更新配置文件。有没有实际的方法可以查看在此步骤中究竟执行了什么或更改了什么?在哪里可以找到该步骤的确切行为?

答案1

有,但是需要挖掘一些被触发的包的 bash 脚本。

  • 假设dpkg输出如下:

    准备替换 zim 0.52-1(使用 .../archives/zim_0.52-1_all.deb)...
    正在拆包替换 zim ...
    处理共享 mime 信息的触发器...
    正在处理菜单触发器...
  • 在内部,使用命令行选项和零个或多个触发选项dpkg来调用postinst每个包的脚本。triggered

  • 因此,你只需打开/var/lib/dpkg/info/PACKAGE.postinst(这是一个 bash 脚本),然后查看$1triggered

示例:man-db触发器

最常见的“处理触发器”之一是man-db,每当安装的包有男人页。

如果你打开/var/lib/dpkg/info/man-db.postinst,你会发现以下部分:

如果 [ “$1” = 触发 ]; 那么
    # 我们不在这里打印状态消息,正如 dpkg 已经说过的
    #“正在处理 man-db 的触发器...”。
    运行_mandb-pq
    出口 0

因此您可以看到,这Processing triggers for man-db ...仅仅导致该run_mandb函数(也在postinst脚本中找到)使用该选项运行-pq

有用的资源:

  1. 尝试让 dpkg 触发器更加有用,减少麻烦
  2. dpkg 触发器,丢失的操作指南文档

相关内容