我想确定某个应用程序的位置(例如,冲浪)写入文件系统以确保不留下任何痕迹。如果没有专用的沙箱系统,这可能并不容易,但我想知道是否有比简单使用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
(或者更好的正则表达式?),使其更加健壮?我是否会面临丢失写入文件系统的文件的风险?
答案1
您还可以用来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