我想实时从 SNMP 记录器中获取相关行并将它们移动到我的应用程序服务器进行检查。下半场很好,scp
正在做戏。前半段让我有些悲伤。
我想要做的是检查三个最新的日志文件中的相关消息。所以我会这样做:
[user@SNMPServer]$ cd /var/opt/OV/log/nnm/; files=`ls -t | grep -m 3 trap.csv`; echo $files
trap.csv trap.csv.2019-05-31_07_00_01 trap.csv.2019-05-31_06_00_01
这很好,因为我随后计划:
[user@SNMPServer]$ grep $ipAddress $files
当我在 SNMP 服务器上运行它时,它再次运行良好。
当我从我的虚拟机执行此操作时,
admin@alarmux:~$sudo ssh [email protected] "cd /var/opt/OV/log/nnm/; files=`ls -t | grep -m 3 trap.csv`; echo $files"
我得到这个输出:
assets
bash: testerlog: command not found
bash: count.txt: command not found
这些是ls -t
我的虚拟机主目录的结果,而不是远程的。我在某处缺少转义字符吗?
反引号并
$( … )
在双引号内插入。使用单引号,它会工作。或者使用 xargs 完全避免子外壳:
使用
zsh
shell,具有最近修改时间戳的三个文件,文件名*trap.cvs
在/var/opt/OV/log/nnm
目录中匹配,将具有模式where
(...)
修改前面模式的行为。.
仅选择常规文件(不是目录名称等)并om
通过减少修改时间戳来排序。[1,3]
仅返回前三个匹配项(如果匹配项较少,则返回更少)。因此,如果您
zsh
在远程机器上安装了 shell,您就可以做到这将启动
grep
以查找保存在$ipAddress
远程系统上三个最近修改的文件中的 IP 地址。with 使用的标志
grep
使它使用字符串比较而不是正则表达式匹配(that's-F
),并且它要求匹配的字符串是一个完整的单词(that's-w
; 所以 that123.123.123.123
不匹配23.123.123.1
)。