如何发现程序正在更改的文件/目录

分享于 

5分钟阅读

电脑

  繁體 雙語

问题:

我需要找出运行在 Centos 7.4上的Linux程序所做的更改,这样我就可以自动化更改。 这个程序要求用户输入,我无法在自动系统中轻松复制。

是否可以找到程序执行的文件/目录修改的方法?


回答 1:

我过去所做的是使用 find/somedir -ls 并保存输出。 之后,运行程序后,发出相同的命令并进行比较。


# find/tmp/home -ls


 393227 4 drwxrwxr-x 3 root root 4096 Mar 15 13:21/tmp/home


 393236 4 -rw------- 1 nobody nogroup 3323 Mar 15 13:14/tmp/home/tmp.xRG2C4xlY8


 393235 4 -rw------- 1 nobody nogroup 2682 Mar 15 13:14/tmp/home/tmp.TISDeEMGWH


 393230 8 -rw------- 1 nobody nogroup 6548 Mar 15 13:14/tmp/home/tmp.8LsD1tXBcr


 393237 8 -rw------- 1 nobody nogroup 4799 Mar 15 13:14/tmp/home/tmp.ZBbC7t3cOq


 393228 0 -rw------- 1 nobody nogroup 0 Mar 15 13:14/tmp/home/tmp.1h4XseOLN6


 393238 4 drwxrwxr-x 2 www-data www-data 4096 Mar 15 13:21/tmp/home/bin


 393247 4 -rw------- 1 www-data www-data 3323 Mar 15 13:14/tmp/home/bin/tmp.xRG2C4xlY8


 393244 4 -rw------- 1 www-data www-data 4062 Mar 15 13:14/tmp/home/bin/tmp.r6NOlfBC82


 393242 8 -rw------- 1 www-data www-data 7000 Mar 15 13:14/tmp/home/bin/tmp.LvCMFtnpCy


 393241 8 -rw------- 1 www-data www-data 6548 Mar 15 13:14/tmp/home/bin/tmp.8LsD1tXBcr


 393243 0 -rw------- 1 www-data www-data 0 Mar 15 13:14/tmp/home/bin/tmp.mhBkDbIVvR


 393234 4 -rw------- 1 nobody nogroup 933 Mar 15 13:14/tmp/home/tmp.rFQNEwUlR2


 393232 0 -rw------- 1 nobody nogroup 0 Mar 15 13:14/tmp/home/tmp.mhBkDbIVvR



如果要跟踪已经更改的文件内容,请查看 sha1sum 。 可以将生成的输出保存为源,以便以后比较内容。 一个缺点是它不会检测新文件。 它只会告诉你什么被修改或者删除。


# find/tmp/home -type f -exec sha1sum '{}' ; 


d8133c17ae746cc60deaefd4030a7bf96b2f1370/tmp/home/tmp.xRG2C4xlY8


0c71d55833cd2367f05004b02ca66b96381c7917/tmp/home/tmp.TISDeEMGWH


611131bb6b5e5089b04cb4a8e6b00f34c8065da4/tmp/home/tmp.8LsD1tXBcr


27ad4649e2eec4ca60588eed88f3ca411907fb2f/tmp/home/tmp.ZBbC7t3cOq


da39a3ee5e6b4b0d3255bfef95601890afd80709/tmp/home/tmp.1h4XseOLN6


d8133c17ae746cc60deaefd4030a7bf96b2f1370/tmp/home/bin/tmp.xRG2C4xlY8


9b1c0004dbd92c6c87fe6eec90f3b7926326855b/tmp/home/bin/tmp.r6NOlfBC82


a69ee2ae248b234ee218606140bd025b9581934f/tmp/home/bin/tmp.LvCMFtnpCy


611131bb6b5e5089b04cb4a8e6b00f34c8065da4/tmp/home/bin/tmp.8LsD1tXBcr


da39a3ee5e6b4b0d3255bfef95601890afd80709/tmp/home/bin/tmp.mhBkDbIVvR


4054b99cb44526cb04c913e29513975688f11714/tmp/home/tmp.rFQNEwUlR2


da39a3ee5e6b4b0d3255bfef95601890afd80709/tmp/home/tmp.mhBkDbIVvR



如果你保存该输出:


# find/tmp/home -type f -exec sha1sum '{}' ;>/tmp/my_sums



并希望以后检查这些文件( 在 tmp.1h4XseOLN6 被修改之后):


# sha1sum -c/tmp/my_sums 


/tmp/home/tmp.xRG2C4xlY8: OK


/tmp/home/tmp.TISDeEMGWH: OK


/tmp/home/tmp.8LsD1tXBcr: OK


/tmp/home/tmp.ZBbC7t3cOq: OK


/tmp/home/tmp.1h4XseOLN6: FAILED


/tmp/home/bin/tmp.xRG2C4xlY8: OK


/tmp/home/bin/tmp.r6NOlfBC82: OK


/tmp/home/bin/tmp.LvCMFtnpCy: OK


/tmp/home/bin/tmp.8LsD1tXBcr: OK


/tmp/home/bin/tmp.mhBkDbIVvR: OK


/tmp/home/tmp.rFQNEwUlR2: OK


/tmp/home/tmp.mhBkDbIVvR: OK


sha1sum: WARNING: 1 computed checksum did NOT match




回答 2:

你可以通过使用strace来查找程序访问或者写入操作所访问的文件:


strace -e open ${PROGRAM}



例如:


$ strace -e open touch thing


open("/etc/ld.so.cache", O_RDONLY) = 3


open("/lib/x86_64-linux-gnu/librt.so.1", O_RDONLY) = 3


open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY) = 3


open("/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY) = 3


open("/usr/lib/locale/locale-archive", O_RDONLY) = 3


open("thing", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3





文件  DIR  disco  discover  Centos