TCPポートを開くプロセスの名前はどのようにわかりますか?

TCPポートを開くプロセスの名前はどのようにわかりますか?

2台のLinuxサーバーがあります。彼らがであると仮定しCますS
CはいS

私はSコンピュータでタイピングをしています。

$ netstat -an | grep tcp 設定
0 0 192.168.1.220:3306 番号: 57010 確立された

Cこれで、接続されていると言えます。機械
の中で私も知りたいCプロセス名オープンポート57010そしてSサーバーに接続してください。どうすればいいですか?もちろん、ルートアクセス権がありますC

ベストアンサー1

一つの方法はと言うことですlsof -i:57010 -sTCP:ESTABLISHED。これはカーネルの開かれたファイルハンドルテーブルに移動し、そのポートを使用してTCP接続を確立したプロセスを見つけます。 (ネットワークソケットは* ixタイプシステムのファイルハンドルです。)-sTCP:LISTENサーバー側でこれを使用して、リスナーソケットのみをフィルタリングできます。

これが機能するため、lsofrootとして実行しない限り、ユーザーが所有しているプロセスのみを表示できます。また、一般的な*ixシステムではたくさん特定の時間に開いているファイルハンドルの数。他の回答で提供される方法netstatはより速く、通常アクセス要件が低くなります。

しかし、このlsofアプローチには大きな利点があります。すべてのタイプ*ixオペレーティング・システムが出力netstatにプロセス名を含めるためのフラグを持っているわけではありません。lsof利用可能なすべての* ixタイプのオペレーティングシステムに移植netstatたとえば、OS Xの場合はそうです。オプションがありますが、Linuxと同じようには-p機能しません。netstat -p

lsofあなたの質問のような一般的なポート番号の場合、通常はフラグを追加しなくても問題を解決できます。-sこれは、特定のコンピュータにそのポートに接続してリッスンするプログラムがある可能性がほとんどないためです。ポート番号(HTTPの場合は80など)を追加すると、そのポートを同時に使用する複数のプログラムがある可能性があるため、役に立ちます。

幸い、このフラグは4.81-s以降でのみ使用できるため、ほとんどの場合オプションです。lsof以前のバージョンでは、これは-sまったく異なる意味でした!これは2008年に比べて後退した変化ですが、まだ予想外の結果をもたらします。lsofたとえば、RHEL 5 は 4.78 で提供されます。

おすすめ記事