我需要找出在 Centos 7.4 上运行的 Linux 程序所做的更改,以便我可以自动执行这些更改。该程序要求用户输入,而我无法在自动化系统中轻松复制这些输入。
有什么方法可以让我找出程序对文件/目录执行的修改吗?
答案1
您可以使用 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
答案2
我过去的做法是使用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