gpt4 book ai didi

shell - 确定shell脚本的功能和文件依赖性?

转载 作者:行者123 更新时间:2023-12-04 08:16:32 25 4
gpt4 key购买 nike

我正在寻找一种处理 shell 脚本的方法来确定:

  • 在脚本中调用了哪些命令、脚本或函数。
  • 脚本(r 或 w)访问了哪些文件。

  • 它不需要通过依赖项向下递归,只需列出它直接运行的内容。我可能会自己写一些可以做到这一点的东西,但它一定是以前做过的……我只是没有找到。

    最佳答案

    您可以使用“strace”来运行脚本并查看脚本及其子进程所做的一切,包括查找和打开文件。例如:

    $ cat foo.sh
    #!/usr/bin/env bash

    touch /tmp/foon
    $ chmod +x foo.sh
    $ strace -f -e execve,access,open,stat -o foo.trace ./foo.sh
    $ cat foo.trace
    32176 execve("./foo.sh", ["./foo.sh"], [/* 42 vars */]) = 0
    32176 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
    32176 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
    32176 open("/usr/local/lib/tls/x86_64/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
    ...
    32176 execve("/bin/bash", ["bash", "./foo.sh"], [/* 42 vars */]) = 0
    ...
    32177 execve("/usr/bin/touch", ["touch", "/tmp/foon"], [/* 41 vars */]) = 0
    32177 open("/tmp/foon", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
    ...
    32176 --- SIGCHLD (Child exited) @ 0 (0) ---
    $

    我已经修剪了那里进行的许多其他事件(打开系统库;查找区域设置数据;等等)。查看“man strace”以了解选项含义的详细信息; -f、-o 和 -e 是我最常使用的。

    关于shell - 确定shell脚本的功能和文件依赖性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3926918/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com