Ubuntu 16.04 上的 /etc/php/7.0/apache2/php.ini 文件来自哪里?
dpkg -S /etc/php/7.0/apache2/php.ini
不返回任何内容。
dpkg -S /etc/php/7.0/apache2/
显示该目录是由 libapache2-mod-php7.0 包安装的,但是
dpkg-query -L libapache2-mod-php7.0
没有提到“php.ini”。我猜想这个文件是在安装后过程中复制的。有没有办法确定哪个软件包安装正在创建这个文件?
答案1
当你经常搜索系统中某些东西是怎么回事时,你可能只想尝试这样的命令grep 'php.ini' /var/lib/dpkg/info/*
。/var/lib/dpkg/info/
包含与软件包相关的文件,其中包括packagename.list
dpkg -S 使用的 ,packagename.conffiles
conffiles 的列表,以及各种安装/删除前/后脚本的文件,例如packagename.actionname
。
# grep 'php.ini' /var/lib/dpkg/info/*
/var/lib/dpkg/info/libapache2-mod-php7.0.postinst: phpini="/etc/php/7.0/apache2/php.ini"
/var/lib/dpkg/info/libapache2-mod-php7.0.postinst: ucf /usr/lib/php/7.0/php.ini-production.apache2 $phpini
/var/lib/dpkg/info/libapache2-mod-php7.0.postinst: ucf /usr/lib/php/7.0/php.ini-production $phpini
/var/lib/dpkg/info/libapache2-mod-php7.0.postrm: phpini=/etc/php/7.0/apache2/php.ini
/var/lib/dpkg/info/php7.0-cli.postinst: phpini="/etc/php/7.0/cli/php.ini"
...
# cat /var/lib/dpkg/info/libapache2-mod-php7.0.postinst
...
if [ "$1" = "configure" ]; then
phpini="/etc/php/7.0/apache2/php.ini"
if [ "apache2" = "cli" ]; then
ucf /usr/lib/php/7.0/php.ini-production.apache2 $phpini
else
ucf /usr/lib/php/7.0/php.ini-production $phpini
fi
ucfr libapache2-mod-php7.0 $phpini
...
无论如何,对于这个特定的查询,我们看到 php.ini 是通过以下方式添加的中佛罗里达大学来自/usr/lib/php/7.0/php.ini-production
。UCF 是 Debian 软件包用来维护配置文件的少数工具之一。UCF 可以接受来自用户的一些要合并的值,它可以在某些情况下检测并自动更新或合并配置等等。