grep -v grepは何をしますか

grep -v grepは何をしますか

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

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

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

答え1

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

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

そのままのコマンドはあまり意味がありません。リモート サーバーで実行するコマンドを指定していないため、擬似端末が要求され、リモート ユーザーのログイン シェル (または ForcedCommand) が起動されるモードsshで実行されますrlogin

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

  • grep -v "Connection refused": から任意の行をフィルタリングします出力が含まれていますConnection refused。このエラー メッセージは、フィルタリングされている標準出力ではなく stderr に書き込まれるため、あまり意味がありません。grepまた、次の理由もあります。
  • grep "Connected to": を含む行のみを選択します。行に両方が含まれる可能性は低いため、Connected toを含む行も除外されます。Connection refused
  • grep -v grep、 を含む行も削除しますgrep(つまり、Connected togrepの両方を含み、 を含まない行になりますConnection refused)。
  • wc -l: 結果の行数をカウントします (つまり、sshの stdout内の またはもConnected to含む行を除く を含む行)。は、ユーザーが を入力したときのように、接続が閉じられ、シェル セッションが終了したときにのみその数を出力することに注意してください。しかし、ユーザーには出力がまったく表示されないため (最終的にはすべて に行くため)、そのセッションを終了するために を入力する必要があることをユーザーにはほとんどわかりません。grepConnection refusedwcexitwcexit

答え2

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

関連情報