如何发现程序在 Centos 7.4 上所做的文件/目录更改

如何发现程序在 Centos 7.4 上所做的文件/目录更改

我需要找出在 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

相关内容