
Mac OS Xのコマンドラインでインターネット接続を使用しているアプリとプロセスを表示する
コマンドラインからMac OS Xのファイルシステムの使用状況を監視できるのと同じように、Macのインターネット接続を現在使用しているアプリやプロセスを特定することもできます。これは、帯域幅が何かに使用されていることが分かっている場合や、どのアプリケーションやバックグラウンドプロセスが外部に接続しているかを追跡したい場合に非常に便利な方法です。
Macアプリ、デーモン、プロセス、その他インターネットを使用しているものを特定するには、Mac OS Xのコマンドラインから、優れたlsofコマンドのより高度なバージョンを使用します。これはMacOSまたはMac OS Xのどのバージョンでも、またWi-Fiやワイヤレスネットワーク、イーサネットなど、あらゆるインターネット接続サービスでも動作します。また、lsofは標準的なネットワークツールバイナリなので、Linuxマシンでも動作します。
これを実現する2つの方法を紹介します。1つ目は読みやすい出力を提供し、外部に接続しているアプリケーションとプロセスの名前を表示します。2つ目は、どのPIDがどのホストに接続し、どのプロトコルを使用しているかに関する非常に詳細な情報を提供します。ニーズに応じて、どちらか、または両方を使用できます。
Mac OS Xでインターネットを使用してアプリケーションとプロセスの名前を表示する方法
まだ開いていない場合はターミナル アプリを開き、次のコマンドを正確に入力します。
lsof -nPi | cut -f 1 -d " "| uniq | tail -n +2
コマンドラインに慣れていない場合は、その文字列をコピー/貼り付けすることもできますが、文字列全体が 1 行の構文で実行されることを確認してください。
この長いコマンドを実行すると、次のような出力が得られます。
SystemUIS
Dropbox
iChatAgen
Finder
iTunes
Google
ssh
これらは、インターネットをアクティブに使用しているアプリケーションとプロセスの名前だけです。もちろん、ここにはそれほど多くのデータはありませんが、帯域幅を大量に消費する不正なアプリを追跡したいだけであれば、十分な場合もあります。
もちろん、どのプロセスやアプリがネットワーク接続をどのように、どのリモート アドレスに対して使用しているかという拡張情報が必要になる状況は多くあります。これについては次に説明します。
Mac OS Xからインターネットに接続するプロセスIDの詳細情報を表示する方法
上記のコマンド文字列に表示されている情報よりも詳細な情報が必要な場合は、上記のコマンドを修正して、他のコマンドラインユーティリティへのパイプを削除し、lsofから直接得られる未加工の詳細情報のみを取得することができます。また、今回はホスト名を表示したいため、-nフラグを削除していることにもお気づきでしょう。
lsof -Pi
これにより、アプリ名、PID、プロトコル、IPアドレス、ホスト名、現在の接続ステータスなど、より詳細なデータが提供されます。どれも非常に役立つデータです。
情報過多の場合は、コマンドを 'more' にパイプしてチャンク単位で読み取りやすくするか、次のように grep を使用して特定のアプリまたはプロセスのデータを並べ替えます。
$ lsof -Pi |grep iChatAgen
iChatAgen 228 David 10u IPv4 0x0bfe44ec 0t0 UDP 127.0.0.1:5191->bos-d25v-r2d2.blue.aol.com:5191
iChatAgen 228 David 13u IPv4 0x1e148b1e 0t0 TCP 192.168.1.29:50051->206.198.4.49:5190 (ESTABLISHED)
lsof は、多種多様な用途を持つ強力なユーティリティです。以前、帯域幅の問題を追跡するために lsof を使用する方法について解説しましたが、その時は -i フラグのみを使用しており、はるかに簡素化されていました。ここで解説したバリエーションはどれでも使用でき、それぞれに独自のユースケースがあり、役立つでしょう。
コマンドラインツールは上級ユーザー向けですが、Mac OS X を初めて使う人や、ターミナルが気に入らない人は、Private Eye などのアプリを使用して、同様の方法で Mac のインターネット接続を使用しているものを確認することができます。ただし、Private Eye ははるかにユーザーフレンドリーで、完全に従来の Mac アプリケーションです。