有没有办法查看每个包装的确切“处理触发器”是什么?


15

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

Answers:


16

有,但是它需要为要触发的程序包挖掘一些bash脚本。

  • 假设dpkg输出如下所示:

    准备替换zim 0.52-1(使用... / archives / zim_0.52-1_all.deb)...
    开箱替换zim ...
    处理shared-mime-info的触发器...
    处理菜单的触发器...
  • 在内部,对于每个带有命令行选项以及零个或多个触发器选项的软件包,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的触发器...”。
    run_mandb -pq
    出口0
科幻

因此,您可以看到Processing triggers for man-db ...仅导致该run_mandb功能(也可以在postinst脚本中找到)与该-pq选项一起运行。

有用的资源:

  1. 尝试使dpkg触发器更有用且痛苦更少
  2. dpkg触发器,丢失的操作方法文档

为什么这么慢?
Antonio Petricca
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.