netstat -pntl | grep $PORT
Linux では、 orを使用fuser -n tcp $PORT
して、指定された TCP ポートでリッスンしているプロセス (PID) を見つけることができます。Mac OS X で同じ情報を取得するにはどうすればよいですか?
18 に答える
macOSBig Sur
以降では、次のコマンドを使用します。
sudo lsof -i -P | grep LISTEN | grep :$PORT
または、IPv4 だけを表示するには:
sudo lsof -nP -i4TCP:$PORT | grep LISTEN
古いバージョンでは、次のいずれかの形式を使用します。
sudo lsof -nP -iTCP:$PORT | grep LISTEN
sudo lsof -nP -i:$PORT | grep LISTEN
ポート番号またはコンマ区切り$PORT
のポート番号のリストで置き換えます。
sudo
#1024 より下のポートに関する情報が必要な場合は、先頭に (スペースが続きます)追加します。
-n
フラグは、ホスト名の代わりに IP アドレスを表示するためのものです。これにより、ホスト名を取得するための DNS ルックアップが遅くなる可能性があるため (多くのホストでは数秒または 1 分)、コマンドの実行が大幅に高速化されます。
このフラグは、 のような解決済みの名前や、のような難解なサービス名-P
の代わりに生のポート番号を表示するためのものです。http
ftp
dpserve
socalia
その他のオプションについては、コメントを参照してください。
完全を期すために、頻繁に一緒に使用されるため:
PID を強制終了するには:
sudo kill -9 <PID>
# kill -9 60401
macOS 12 Montereyまで、 macOSのすべてのバージョンがこれをサポートしています。
sudo lsof -iTCP -sTCP:LISTEN -n -P
個人的には、次の単純な関数で終わりました~/.bash_profile
:
listening() {
if [ $# -eq 0 ]; then
sudo lsof -iTCP -sTCP:LISTEN -n -P
elif [ $# -eq 1 ]; then
sudo lsof -iTCP -sTCP:LISTEN -n -P | grep -i --color $1
else
echo "Usage: listening [pattern]"
fi
}
次に、listening
コマンドは、あるポートでリッスンしているプロセスのリストを表示し、listening smth
これをあるパターンに対して grep します。
これがあれば、特定のプロセス (例: listening dropbox
) またはポート (例: ) について尋ねるのは非常に簡単listening 22
です。
lsof
コマンドには、ポート、プロトコル、プロセスなどについて質問するための特殊なオプションがいくつかありますが、個人的には、これらの低レベルのオプションをすべて覚える必要がないため、上記の関数の方がはるかに便利であることがわかりました。lsof
は非常に強力なツールですが、残念ながら使い心地は良くありません。
これは Mavericks (OSX 10.9.2) で機能します。
sudo lsof -nP -iTCP:$PORT -sTCP:LISTEN
LISTEN、ESTABLISHED、および CLOSED ポートの場合
sudo lsof -n -i -P | grep TCP
LISTEN ポートのみ
sudo lsof -n -i -P | grep LISTEN
特定の LISTEN ポートの場合、例: ポート 80
sudo lsof -n -i -P | grep ':80 (LISTEN)'
または、簡潔な要約 [サービス/アプリの説明なし] が必要な場合は、NETSTAT を参照してください。ここでの良い面は、sudoが必要ないことです
netstat -a -n | grep 'LISTEN '
使用アイテムの説明:
-nホスト名を抑制
-i IPv4 および IPv6 プロトコルの場合
-ポート名を省略
-a [netstat 経由] すべてのソケット
-n [netstat 経由] 名前を解決せず、ネットワーク アドレスを数字で表示します
High Sierra 10.13.3 およびMojave 10.14.3でテスト済み
- 最後の構文netstatは Linux でも機能します
最新の macOS バージョンでは、次のコマンドを使用できます。
lsof -nP -i4TCP:$PORT | grep LISTEN
覚えにくい場合は、bash
関数を作成して、次のようなわかりやすい名前でエクスポートする必要があります。
vi ~/.bash_profile
次に、そのファイルに次の行を追加して保存します。
function listening_on() {
lsof -nP -i4TCP:"$1" | grep LISTEN
}
これで、ターミナルに入力listening_on 80
して、ポートでリッスンしているプロセスを確認できます80
。
Snow Leopard (OS X 10.6.8) で「man lsof」を実行すると、次の結果が得られます。
lsof -i 4 -a
(実際の手動入力は「lsof -i 4 -a -p 1234」です)
以前の回答は Snow Leopard では機能しませんでしたが、pts による回答で「lsof」の使用が見られるまで、「netstat -nlp」を使用しようとしていました。
lsof -n -i | awk '{ print $1,$9; }' | sort -u
これにより、誰が何をしているかが表示されます。-n を削除すると、ホスト名が表示されます (少し遅くなります)。