Sed

strace 是找出程序寫入文件系統位置的合適工具嗎?

  • July 22, 2018

我想確定某個應用程序(例如,surf)寫入文件系統的位置,以確保它不留下任何痕跡。如果沒有專用的沙盒系統,這可能並不容易,但我想知道是否有比簡單地使用strace.

例如,這是一個簡單的腳本,名為run

#!/bin/bash

mkdir history
echo foo bar > history/hist.db
echo hello > test

strace這樣跑:

strace ./run 2>&1 | sed -n '/^open.*WRONLY/p' | sed 's/.*"\(.*\)"[^"]*$/\1/'

查看所有已寫入的文件(但不是目錄)(我認為這不會擷取已創建但未寫入的文件,例如由 創建的文件touch)。輸出:

history/hist.db
test

有沒有更好的方法來做到這一點,因為除了瑣碎的應用程序之外,這對於任何東西都變得笨拙,或者我可以傳遞給strace(或者更好的正則表達式?)這使得它更健壯一點?我是否有失去寫入文件系統的文件的風險?

您還可以lsof在將文件寫入磁碟時“監視”程序。這更像是一種輪詢解決方案,因此如果文件很小且快速寫入磁碟,您可能會錯過一些文件,但如果將文件寫入磁碟的應用程序是伺服器/服務,您可以使用它lsof來觀看這些類型的處理相當容易。

$ lsof -p PID

例子

$ lsof -p `pidof gnome-terminal` | head -5
COMMAND    PID USER   FD   TYPE             DEVICE SIZE/OFF      NODE NAME
gnome-ter 7423 saml  cwd    DIR              253,2    32768  10354689 /home/saml
gnome-ter 7423 saml  rtd    DIR              253,0     4096         2 /
gnome-ter 7423 saml  txt    REG              253,0   338632   1220790 /usr/bin/gnome-terminal
gnome-ter 7423 saml  mem    REG              253,0   614032   1192949 /usr/lib64/libfreetype.so.6.6.0

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