如何在远程机器上运行复杂的 awk 命令

时间:2021-02-01 13:12:08

标签: linux bash shell awk ssh

我正在尝试以百分比形式捕获远程机器上的总使用内存,如下所示

 sshpass -p pasa123 ssh root@server01 "  /usr/bin/free | awk '/Mem/{printf("RAM Usage: %.2f%\n"), $3/$2*100}' "
awk: cmd. line:1: /Mem/{printf(RAM Usage: %.2f%n), /*100}
awk: cmd. line:1:                       ^ syntax error
awk: cmd. line:1: /Mem/{printf(RAM Usage: %.2f%n), /*100}
awk: cmd. line:1:                                ^ syntax error
awk: cmd. line:1: /Mem/{printf(RAM Usage: %.2f%n), /*100}
awk: cmd. line:1:                                   ^ unterminated regexp
awk: cmd. line:1: /Mem/{printf(RAM Usage: %.2f%n), /*100}
awk: cmd. line:1:                                        ^ unexpected newline or end of string

所以我们在“$”之前添加反斜杠

 sshpass -p pasa123 ssh root@server01 "  /usr/bin/free | awk '/Mem/{printf("RAM Usage: %.2f%\n"), \$3/\$2*100}' "
 

但仍然出现相同的错误

有什么建议可以解决这个语法问题吗?

2 个答案:

答案 0 :(得分:3)

您还必须转义双引号 "

sshpass -p pasa123 ssh root@server01 "/usr/bin/free | awk '/Mem/{printf(\"RAM Usage: %.2f%\n\"), \$3/\$2*100}' "

答案 1 :(得分:0)

最简单的方法是在本地机器上处理它。要求 ssh 为您提供 /usr/bin/free 的输出并在本地使用 awk

sshpass -p pasa123 ssh root@server01 /usr/bin/free | awk '/Mem/{printf("RAM Usage: %.2f%\n"), $3/$2*100}'

这里有三个评论:

  1. 不要以 root 身份 ssh!
  2. 不要使用 sshpass -p
  3. 不要以 root 身份与 sshpass -p 结合使用 ssh,真的不要!

通过在适当的时间发出简单的 df,任何用户都可以即时读取您的 root 密码。

我强烈建议您开始使用公钥身份验证并放弃使用 sshpass -p

相关问题