私は特にUbuntuサーバーでpingを実行して返される変数を見ていますが、私が探している変数はエラー状態、stdoutの出力、stderrの出力です。
ホストをpingすると、次の3つの状況が発生する可能性があります。
- ホストはすべてのパケットに応答します(エラーなし)。
- ホストがパケット0の応答(エラー)
- ホストは一部のパケットに応答します(未指定の動作)。
man ping
私はそれを何度も読んでいましたが、この状況で私が期待すべきものを見つけることができないようです。
これをテストできません。私がアクセスできる唯一のコンピュータは、Ubuntuを実行しているLinode仮想サーバーとSnow Leopardを実行しているMacbookです(おそらく私のサーバーで使用されているPINGプログラムと同じではありません)。
3番目のケースの戻り変数は何を期待すべきですか?
答え1
LinuxとUbuntuでも複数のpingユーティリティを使用できます。基本項目(Ubuntuメインの唯一の項目)は次のとおりです。アイチルス(iputils-ping
)。 iputils 20100418以降、可能な戻り状態(ping
IPv6ユーティリティまたは同伴IPv6ユーティリティの場合)は次のようになります。ping6
- そのオプションを渡すと0です
-V
。 - 255
ping
権限を放棄できない場合(これは起こらないでください)。 - トピック名の解析中にエラーが発生した場合は1です
ping6 -N
。 - 一般終了時 0 または 1:
- 応答が受信されなかった場合は 1 です。
-w
1またはオプションを使用して期限を設定し、-W
受信した応答数が送信された要求数より少ない場合。- 0そうでない場合、つまり期限があり、予想されるすべての回答を受け取った場合、または期限がなく、1つ以上の回答を受け取った場合。
- 2その他すべての場合。
より細かく区別する必要がある場合は、出力を解析する必要があります。ユーティリティはstderrを使用して致命的なエラーといくつかの警告を表示し、stdoutを使用してさまざまなステータスレポートと情報メッセージを表示します。これらのメッセージは人が消費するためのものなので、簡単に解析できるとは思わないでください。バージョンがリリースされるたびにパーサーを更新したり、他のプラットフォームで作業したい場合は、設定を覚えておく必要がありますLC_MESSAGES=C
。 pingが翻訳されている場合(まだではない)、出力を解析する必要があるユースケースはほとんどありません。一般的に知っておくべきことは、2 = DNSルックアップ失敗、1 =ホストレスポンスなし、0 =成功です。
答え2
どの言語でコーディングしているのかわからない場合は、具体的な情報を提供することは困難ですが、ここに出力に関するいくつかの入門書があります。
error、stdout、stderrは変数ではありませんが、Unixバイナリが返すことができる出力タイプです。
stdout - これは、プログラムが画面(ほとんどの場合)、ファイル(リダイレクトされている場合)、または他のプログラムに出力する標準テキストで、次のようにキャプチャできます。
program > file
stderr - これはエラーストリームのテキスト出力であり、stdoutストリームのリダイレクトとしてキャプチャされていない2番目の出力です。次のコマンドを使用してこれをキャプチャできます。
program 2> file
エラー - プログラムが完了した後に返されるコードです。成功は通常ゼロで表されます。次のコマンドを使用してこの情報をキャプチャできます。
#!/bin/bash
program
echo $?
ウィキペディアページで、ストリームに関する詳細情報を見つけることができます。標準_ストリーム。 Bashでストリームキャプチャに関する良いドキュメントがあります。バッシュマニュアル。