如果我从命令行运行 bash 脚本(具有 root 权限),是否可以拦截脚本内的启动命令(当脚本仍在运行时)以记录它?
我试着说得更清楚。我从命令行启动一个带有以下语句的脚本: ./reconfig.sh -host localhost ... 和其他参数。在脚本内部,当它运行时,会写入一个日志文件,我还想在其中记录启动命令。
答案1
如果可以选择编辑脚本,您可以添加“logger”命令来将您想要的任何内容记录到系统日志中。
在我的 Fedora 系统上,
/usr/bin/logger $USER 刚刚运行了 $0
从 bash 提示符运行,添加带有当前时间戳的日志条目,我的登录 ID[记录器命令的 PID] 的来源刚刚运行 bash
您可以将所需的任何信息添加到该记录器命令的消息中。您甚至可以将标准从另一个命令传输到记录器命令。
$0 是一个特殊变量,它保存当前运行的命令的名称(当处于 bash 提示符时为 bash,但在脚本中,它将是脚本的文件名)
如果您有权访问将运行您要记录的进程的用户的 .bashrc 或其他启动文件,您还可以创建别名。
我刚刚尝试过:
alias logls='/usr/bin/logger 列出目录; ls'
然后登录
并获取当前目录的列表以及系统日志中带时间戳的日志条目。
如果别名设置为与原始脚本相同的名称,那么对于用户来说将是非常透明的。当然,您可能必须在别名的定义中指定原始脚本的完整路径。