grep -v grep 做什么

1 shell shell-script

我试图了解grep -v grep下面的内容:

ssh  $server -p $port -o "ConnectTimeout 5" |   grep -v "Connection refused" | grep "Connected to" | grep -v grep | wc -l
Run Code Online (Sandbox Code Playgroud)

或者有没有更好的方法找到TCP连接测试?

Sté*_*las 5

如果要检查是否可以在 5 秒内建立 ssh 连接并运行命令,只需执行以下操作:

if ssh -o BatchMode=yes -o ConnectTimeout=5 -p "$port" "$server" true; then
  printf '%s\n' "$server is up"
fi
Run Code Online (Sandbox Code Playgroud)

你的命令没有意义。由于您没有提供在远程服务器上运行的命令,因此ssh将在rlogin请求伪终端并启动远程用户的登录 shell(或可能是 ForcedCommand)的模式下运行。

然后,您将几个过滤器应用于输出:

  • grep -v "Connection refused": 从输出中过滤掉包含Connection refused. 这没什么意义,因为如果出现该错误消息将写入 stderr,而不是在grep过滤的标准输出上,还因为:
  • grep "Connected to": 只选择包含Connected to. 这也将排除包含的行,Connection refused因为一行不太可能同时包含两者。
  • grep -v grep, 还删除包含的行grep(这样将是包含Connected toandgrep和 not 的行Connection refused!)
  • wc -l: 计​​算结果行的数量(因此ssh's stdout 中包含的行Connected to除了那些还包含grep或 的行Connection refused)。请注意,wc只有在连接关闭、shell 会话终止时才会输出该数字,例如用户输入exit. 但话又说回来,由于用户不会看到任何输出(因为它wc最终都会发生),用户几乎不知道他需要输入exit以终止该会话。