grep -v grepが以下で何をするのかを理解しようとしています:

ssh $server -p $port -o "ConnectTimeout 5" | grep -v "Connection refused" | grep "Connected to" | grep -v grep | wc -l 

またはTCP接続テストを見つけるためのより良い方法はありますか?

コメント

  • 次回は最初にマニュアルページを参照してください。この場合、man grep

回答

文字シーケンスgrepを含むすべての行を前のパイプ出力から除外します。

回答

5秒以内にssh接続を確立してコマンドを実行できることを確認する場合は、次のようにします。

if ssh -o BatchMode=yes -o ConnectTimeout=5 -p "$port" "$server" true; then printf "%s\n" "$server is up" fi 

コマンド自体はほとんど意味がありません。リモートサーバーで実行するコマンドを指定しないため、sshrloginモード。疑似端末が要求され、リモートユーザーのログインシェルが開始されます(または、 ForcedCommand)。

次に、出力にいくつかのフィルターを適用します。

  • grep -v "Connection refused":から任意の行をフィルターで除外します。 Connection refusedを含む出力。エラーメッセージが表示された場合、grepがフィルタリングしている標準出力ではなく、stderrに書き込まれるため、これはほとんど意味がありません。また、次の理由もあります。
  • grep "Connected to"Connected toを含む行のみを選択します。また、Connection refusedを含む行は除外されます。これは、行に両方が含まれる可能性が低いためです。
  • grep -v grepgrepを含む行も削除します(これにより、Connected togrepではなくConnection refused!)
  • wc -l:結果の行の数を数えます(つまり、行grepまたは
    も含むものを除き、Connected toを含むsshの標準出力内id = “9fdcd41b43″>

    )。 wcは、ユーザーがexitと入力したときなど、シェルセッションが終了したときに、接続が閉じられたときにのみその番号を出力することに注意してください。 。しかし、繰り返しになりますが、ユーザーには出力が表示されないため(最終的には、すべてwcに送られるため)、ユーザーはそのセッションを終了します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です