AIX服务器目录中识别被调用可执行文件的自动化方法咨询
如何在AIX上自动化识别被执行的可执行文件(含子目录重名场景)
没问题!在AIX环境下要找出被第三方应用调用的可执行文件(包括shell脚本和二进制程序),还要处理子目录重名的麻烦,这几个自动化方案绝对实用,我按可靠性和覆盖范围给你梳理清楚:
方法1:用AIX审计系统(Audit)追踪执行事件
这是最靠谱的方案,因为它能完整记录所有执行操作,连文件的完整路径都不放过,完美解决重名问题。
操作步骤:
- 先搞定审计服务和规则:
- 先看看审计开了没:
audit query - 没开的话启动服务:
startsrc -s auditd - 添加追踪执行操作的规则,要是只想盯某个目标目录(比如
/your/target/dir),就这么配:auditconfig -setflags +exec auditconfig -setnaflags +exec # 只审计目标目录下的文件执行事件 auditconfig -create obj /your/target/dir -flags exec
- 先看看审计开了没:
- 提取并解析审计日志:
- 审计日志默认存在
/var/audit,用auditselect过滤出执行事件:auditselect -e 'event == EXEC' /var/audit/* > executed_files.log - 再用
praudit格式化日志,把完整路径抠出来去重:praudit -x executed_files.log | grep -o '"path": "[^"]*"' | cut -d '"' -f4 | sort -u > unique_executed_paths.txt
unique_executed_paths.txt里就是所有被执行过的文件的完整路径,谁是谁一目了然,再也不怕重名了。 - 审计日志默认存在
方法2:用lsof实时抓当前运行的可执行文件
如果只是想看看此刻正在运行的进程对应的可执行文件,这个方法快得很,适合做个快照。
直接跑这个命令:
lsof -c '.' | grep -E '(REG|DIR)' | grep -v 'txt' | awk '{print $9}' | grep '^/your/target/dir' | sort -u
- 简单解释下:
lsof -c '.'列出所有进程打开的文件,过滤出普通文件/目录,排除掉txt类型避免混淆,然后提取文件路径,只保留目标目录下的,最后去重输出。 - 缺点是只能抓当前正在跑的,那些执行完就退出的脚本或者程序就抓不到了。
方法3:用AIX记账系统(acct)记录所有执行命令
AIX自带的记账系统能记录所有用户和进程执行过的命令,适合长期统计,就是需要做点额外的匹配工作。
操作步骤:
- 先启动记账服务:
startsrc -s acctd - 提取记录并匹配路径:
- 记账日志在
/var/adm/pacct,用lastcomm解析出所有执行过的命令名:lastcomm | awk '{print $1}' | sort -u > executed_commands.txt - 因为这里只有命令名,没有路径,所以得遍历目标目录把命令和路径对应起来:
# 遍历目标目录下所有可执行文件,匹配命令名 find /your/target/dir -type f -executable | while read path; do cmd=$(basename "$path") if grep -qx "$cmd" executed_commands.txt; then echo "$path" >> matched_executed_paths.txt fi done
- 记账日志在
方法4:写个定时脚本监控进程列表
要是系统级工具用不了,那就自己整个简单的定时脚本,定期抓进程列表,提取可执行文件路径。
示例脚本(monitor_exec.sh):
#!/bin/ksh TARGET_DIR="/your/target/dir" LOG_FILE="/var/log/executed_files.log" # 抓取所有进程的可执行文件路径,只保留目标目录下的 ps -ef | awk '{print $8}' | grep "^$TARGET_DIR" | sort -u >> "$LOG_FILE" # 定期去重,避免日志重复 sort -u "$LOG_FILE" -o "$LOG_FILE"
- 然后用
crontab设置定时执行,比如每5分钟跑一次:*/5 * * * * /path/to/monitor_exec.sh - 这个方法简单,但容易漏掉那些运行时间极短的程序(比如几秒钟就执行完的脚本)。
处理重名文件的核心要点
不管用哪种方法,一定要记录并输出完整文件路径,别只记文件名!只有完整路径才能区分不同子目录下的重名文件,比如审计日志提取的路径、lsof输出的第9列都是完整路径,这才是解决重名问题的关键。
内容的提问来源于stack exchange,提问作者Balaji Ramesh




