#!/bin/bash
#general security monitoring
PATH=/var/log
echo "The IP addresses of users with more than 2 failed login attempts are:"
IPFAILEDLOGINS=$(grep "Failed password" /var/log/secure | cut -d: -f4 | awk '{print $6}' | uniq -c | awk '{if ($1>=2) print $2}')
echo "$IPFAILEDLOGINS"
RSYSLOGCLIENTS=$(find /var/log -type d -regextype posix-egrep -regex ".*/([0-9]+\.){3}[0-9]+")
echo "The current rsyslog clients are: $RSYSLOGCLIENTS"
错误:./securityanalysis.sh: line 7: find: command not found
find位于/ bin下,它包含在我的PATH中。我还将这个脚本正在执行的目录放入PATH,但它没有什么区别。
用echo..
替换eval $RSYSLOGCLIENTS
行也给了我同样的错误。
有人可以解释一下发生了什么吗?
注意:我认为这是非常糟糕的做法,但此脚本位于root的主目录中。这可能与它有关吗?
答案 0 :(得分:0)
find位于/ bin下,它包含在我的PATH
中
不,不是。您的PATH在脚本的第3行中重新定义为:
PATH=/var/log
在重新分配 PATH之后,观察find
命令在之前的,而不是
$ RSYSLOGCLIENTS=$(find /var/log -type d -regextype posix-egrep -regex ".*/([0-9]+\.){3}[0-9]+")
$ PATH=/var/log
$ RSYSLOGCLIENTS=$(find /var/log -type d -regextype posix-egrep -regex ".*/([0-9]+\.){3}[0-9]+")
bash: find: command not found
这里的一般教训是,在为脚本定义shell变量时,从不使用所有大写。 shell使用所有大写字母作为其重要变量,如PATH。你不想覆盖它们。对内部脚本变量使用较低或至少混合的大小写。
例如,为path
变量分配了一个值,它不会影响shell查找find
的能力:
$ RSYSLOGCLIENTS=$(find /var/log -type d -regextype posix-egrep -regex ".*/([0-9]+\.){3}[0-9]+")
$ path=/var/log
$ RSYSLOGCLIENTS=$(find /var/log -type d -regextype posix-egrep -regex ".*/([0-9]+\.){3}[0-9]+")
$
在shell中,变量名称区分大小写,因此PATH
和path
是独立且独立的变量。