如何知道配置文件屬於哪個包?
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.conf
Debian 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
.