Linux

如何找出安裝程序(rpm、deb)創建的文件?

  • September 14, 2016

我需要找出安裝程序所做的所有文件系統修改。安裝的軟體包很可能是 rpm 或 deb,但應用程序當然可以通過 configure;make;make 安裝方式簡單地複製或編譯和安裝。即使 rpm 和 deb 有文件列表,它們的安裝後腳本也可以進行額外的文件系統修改。

我首先去尋找一個可以監視另一個應用程序的應用程序,以查找其他應用程序所做的所有文件系統修改。我還沒有找到。

接下來我研究了分層文件系統,在開始應用程序安裝之前我想我會放入一個分層文件系統,然後在分層文件系統上安裝應用程序,然後找出層中發生的所有修改。我能找到的最好的是mini_fo,但它似乎自 2006 年以來就沒有得到維護。它似乎也不能僅僅覆蓋在 / 上(這隱藏了層中的一些東西)。

然後我研究了基於 inotify 的解決方案,但似乎監視從 / 開始的所有內容似乎是不切實際的。例如,inotifywatch (linux.die.net/man/1/inotifywatch) 提到預設手錶的限制是 8k。安裝觀察者也需要一些時間。似乎也存在錯誤,新創建的目錄不會立即被監視,因此可能會錯過其中的更改。

除了在安裝和比較之前和之後從文件系統中獲取快照之外,還有其他方法可以實現我想要做的嗎?

我很想嘗試通過strace執行您的安裝。它會有點吵,但是在它記錄的所有其他內容中,您應該能夠看到應該看到寫入的所有內容。

這是一個在安裝過程中似乎接近顯示所有文件訪問的命令,沒有太多噪音。

sudo strace -o /tmp/install.log -f -e trace=file apt-get install package

這個問題已經回答了,但無論如何我都會折騰我所做的。如果您只想查看文件是否被創建、刪除或更改,您可以這樣做:

find / -xdev -printf '%p\t%c\n' |sort >/tmp/before
rpm/dpkg/apt-get/yum/whatever
find / -xdev -printf '%p\t%c\n' |sort >/tmp/after
diff -u /tmp/before /tmp/after |less

而已。它顯然不會告訴您文件是如何更改的,但至少您會知道它確實以某種方式發生了更改。

引用自:https://serverfault.com/questions/86111