Debian

如何知道配置文件屬於哪個包?

  • August 18, 2022

debian中有兩個主要的samba包:samba,samba-common。配置文件是/etc/samba/smb.conf,如何知道/etc/samba/smb.conf屬於哪個包–samba或samba-common?(我已經知道它包含在 samba-common 中)

通常,人們會使用兩個命令的變體之一來找出文件屬於哪個包,包括但不限於

無論軟體包是否安裝都有效:

apt-file search file_name

apt-file search --regexp *file_name*

僅適用於已安裝包中的文件:

dpkg -S /path/to/file

dpkg-query -S /path/to/file

如果一個執行apt install samba並且文件還沒有出現在系統上,那麼一個人會看到這一行

Creating config file /etc/samba/smb.conf with new version

/etc/samba/smb.confDebian 11 和 Ubuntu 22.04 中,軟體包實際提供的文件是/usr/share/samba/smb.conf然後繼續/etc/samba/smb.conf從該文件生成。如果在兩個文件上執行差異,那麼它們是相同的。我在提供的其他文件中找不到這種情況,samba-common以告訴安裝軟體包中的哪個或哪個操作實際生成了該文件,但這就是正在發生的事情。

/etc/samba/smb.conf在這種情況下恰好是一個異常值。上面的命令將給出大部分時間提供文件的包。

下的文件/etc/通常不直接以包的形式發布,而是由“維護腳本”管理。這些都儲存在/var/lib/dpkg/info; 在安裝期間執行的那些名稱以 . 結尾inst

首先要嘗試的仍然是包搜尋:

dpkg -S /etc/samba/smb.conf

在這種情況下,這將找不到任何東西。(當此命令返回匹配項時,還要檢查匹配的文件名,因為匹配項可能是部分的。)

我們需要查看維護者腳本:

$ grep smb.conf /var/lib/dpkg/info/*inst
/var/lib/dpkg/info/samba-common-bin.postinst:        echo "Checking smb.conf with samba-tool"
/var/lib/dpkg/info/samba-common-bin.postinst:        echo "Checking smb.conf with testparm"
/var/lib/dpkg/info/samba-common.postinst:NEWFILE=$TEMPDIR/smb.conf
/var/lib/dpkg/info/samba-common.postinst:CONFIG=/etc/samba/smb.conf
/var/lib/dpkg/info/samba-common.postinst:configure_smb_conf() {
/var/lib/dpkg/info/samba-common.postinst:       configure_smb_conf "$CONFIG"
/var/lib/dpkg/info/samba-common.postinst:cp /usr/share/samba/smb.conf "$NEWFILE"
/var/lib/dpkg/info/samba-common.postinst:configure_smb_conf "$NEWFILE"
/var/lib/dpkg/info/samba-common.postinst:       echo " sudo cp /usr/share/samba/smb.conf $CONFIG"

該文件是由 創建的samba-common.postinst,因此負責它的包是samba-common. 該軟體包附帶一個初始配置文件/usr/share/samba/smb.conf,並將其安裝為/etc/samba/smb.conf;如果合適,它用於ucf將使用者設置(例如工作組名稱)合併到其中,並處理升級時的更改。當包被清除時,刪除維護者腳本負責刪除/etc/samba/smb.conf以及由ucf.

引用自:https://unix.stackexchange.com/questions/713981