Linuxでは、netstat -pntl | grep $PORT
またはfuser -n tcp $PORT
を使用して、指定されたTCPポートでリッスンしているプロセス(PID)を見つけることができます。Mac OS Xで同じ情報を取得するにはどうすればよいですか?
netstat -anv
Mac OS X上のポートを表示します(ソース:@SeanHamilitonによる以下のソリューション)
Linuxでは、netstat -pntl | grep $PORT
またはfuser -n tcp $PORT
を使用して、指定されたTCPポートでリッスンしているプロセス(PID)を見つけることができます。Mac OS Xで同じ情報を取得するにはどうすればよいですか?
netstat -anv
Mac OS X上のポートを表示します(ソース:@SeanHamilitonによる以下のソリューション)
回答:
macOS High Sierra以降では、次のコマンドを使用します。
lsof -nP -iTCP:$PORT | grep LISTEN
またはIPv4のみを表示するには:
lsof -nP -i4TCP:$PORT | grep LISTEN
古いバージョンでは、次のいずれかの形式を使用します。
lsof -nP -iTCP:$PORT | grep LISTEN
lsof -nP -i:$PORT | grep LISTEN
代入$PORT
ポート番号またはポート番号のカンマ区切りのリストで。
sudo
#1024未満のポートに関する情報が必要な場合は、先頭にスペースを入れてください。
この-n
フラグは、ホスト名の代わりにIPアドレスを表示するためのものです。これにより、ホスト名を取得するためのDNSルックアップが遅くなる可能性があるため(多くのホストでは数秒または1分)、コマンドの実行がはるかに速くなります。
この-P
フラグは、のような解決された名前やhttp
、のようなftp
より難解なサービス名の代わりに、未加工のポート番号を表示するためのものdpserve
ですsocalia
。
その他のオプションについては、コメントを参照してください。
完全性のため、頻繁に一緒に使用されるため:
PIDを強制終了するには:
kill -9 <PID>
# kill -9 60401
sudo
所有していないプロセスを表示します。
sudo lsof -i TCP:$PORT | grep LISTEN
grep
:sudo lsof -iTCP:$PORT -sTCP:LISTEN
Snow Leopard(10.6)以降、Mojave(10.14)およびCatalina(10,15)まで、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
これをいくつかのパターンについて調べます。
これがあれば、特定のプロセス(例listening dropbox
)やポート(例)について簡単に尋ねることができlistening 22
ます。
lsof
コマンドには、ポート、プロトコル、プロセスなどについて尋ねるための特別なオプションがいくつかありますが、これらの低レベルのオプションをすべて覚える必要がないので、個人的には上記の機能がはるかに便利であることがわかりました。lsof
は非常に強力なツールですが、残念ながらそれほど快適に使用できません。
-pntl
、これは受け入れられるべき答えだと私は感じています。受け入れられた回答は、リモートで同じではない1つ以上のポート番号の指定を要求します。
次のものも使用できます。
sudo lsof -i -n -P | grep TCP
これはマーベリックスで動作します。
-i
オプションでは、それはかなり速くなります。0.02秒vs 2秒。私のアプリケーションでは、これがかなりの違いを生みました。
2016年1月の更新
本当に驚いた人は誰も提案していません:
lsof -i :PORT_NUMBER
必要な基本情報を取得します。たとえば、ポート1337を確認します。
lsof -i :1337
状況に応じたその他のバリエーション:
sudo lsof -i :1337
lsof -i tcp:1337
これを簡単に構築して、PID自体を抽出できます。例えば:
lsof -t -i :1337
これは、このコマンドと(結果的に)同等です。
lsof -i :1337 | awk '{ print $2; }' | head -n 2 | grep -v PID
簡単なイラスト:
完全性のため、頻繁に一緒に使用されるため:
PIDを強制終了するには:
kill -9 <PID>
# kill -9 60401
またはワンライナーとして:
kill -9 $(lsof -t -i :1337)
lsof -t -i :1338
。-t
プロセスIDを返すので、awk / headする必要はありません。
kill -9 $(lsof -t -i :5000)
el capitan 以外は何も機能しません
whatsonport() { ps -ef | grep `lsof -t -i :$1` }
、⇒ whatsonport 3000 --> 501 14866 14865 0 6:07AM ttys006 0:01.73 node .
lsof -i :PORT_NUMBER
私のために仕事をしました。
これは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プロトコルの場合)
-Pポート名を省略
-a [netstatを介して]すべてのソケット
-n [netstatを介して]名前を解決せず、ネットワークアドレスを数値として表示します
High Sierra 10.13.3およびMojave 10.14.3でテスト済み
- 最後の構文netstatはLinuxでも動作します
OS Xでは、netstatの-vオプションを使用して、関連するpidを指定できます。
タイプ:
netstat -anv | grep [.]PORT
出力は次のようになります。
tcp46 0 0 *.8080 *.* LISTEN 131072 131072 3105 0
PIDは最後の列の前の番号で、この場合は3105です。
grep LISTEN
リスナーのみを表示するように追加する必要もあります。
lsof
ポートが見つかりませんでした。しかしnetstat
、それはオープンであることを示しました。-v
私が欠けていた秘密のソースでした。
macOSでは、netstatを使用して特定のポートでリッスンしているプロセスIDを取得する簡単な方法を次に示します。この例では、ポート80でコンテンツを提供するプロセスを探します。
netstat -anv | egrep -w [.]80.*LISTEN
tcp4 0 0 *.80 *.* LISTEN 131072 131072 715 0
最後の列から2番目はPIDです。上記では、それは715です。
-a
-サーバーが使用するポートを含むすべてのポートを表示する
-n
-番号を表示し、名前を調べないでください。これにより、コマンドがはるかに速くなります
-v
-プロセスIDを取得するための詳細な出力
-w
-検索語。それ以外の場合、コマンドは「80」だけでなくポート8000および8001の情報を返します
LISTEN
-LISTENモードのポート、つまりサーバーのみに情報を提供する
最新のmacOSバージョンでは、次のコマンドを使用できます。
lsof -nP -i4TCP:$PORT | grep LISTEN
覚えにくい場合は、bash
関数を作成して、わかりやすい名前でエクスポートしてください。
vi ~/.bash_profile
次に、そのファイルに次の行を追加して保存します。
function listening_on() {
lsof -nP -i4TCP:"$1" | grep LISTEN
}
これlistening_on 80
で、ターミナルに入力して、どのプロセスがポートをリッスンしているかを確認できます80
。
lsof -n -i | awk '{ print $1,$9; }' | sort -u
誰が何をしているかを表示します。ホスト名を表示するには-nを削除します(少し遅い)。
If no address is specified, this option [-i] selects the listing of all Internet and x.25 (HP-UX) network files.
-sTCP:LISTEN
へlsof
誰がどこで聞いているかだけでなく、確立されたつながりや国を表示するために小さなスクリプトを作成しました。OSX Sieraで動作します
#!/bin/bash
printf "\nchecking established connections\n\n"
for i in $(sudo lsof -i -n -P | grep TCP | grep ESTABLISHED | grep -v IPv6 |
grep -v 127.0.0.1 | cut -d ">" -f2 | cut -d " " -f1 | cut -d ":" -f1); do
printf "$i : " & curl freegeoip.net/xml/$i -s -S | grep CountryName |
cut -d ">" -f2 | cut -d"<" -f1
done
printf "\ndisplaying listening ports\n\n"
sudo lsof -i -n -P | grep TCP | grep LISTEN | cut -d " " -f 1,32-35
#EOF
Sample output
checking established connections
107.178.244.155 : United States
17.188.136.186 : United States
17.252.76.19 : United States
17.252.76.19 : United States
17.188.136.186 : United States
5.45.62.118 : Netherlands
40.101.42.66 : Ireland
151.101.1.69 : United States
173.194.69.188 : United States
104.25.170.11 : United States
5.45.62.49 : Netherlands
198.252.206.25 : United States
151.101.1.69 : United States
34.198.53.220 : United States
198.252.206.25 : United States
151.101.129.69 : United States
91.225.248.133 : Ireland
216.58.212.234 : United States
displaying listening ports
mysqld TCP *:3306 (LISTEN)
com.avast TCP 127.0.0.1:12080 (LISTEN)
com.avast TCP [::1]:12080 (LISTEN)
com.avast TCP 127.0.0.1:12110 (LISTEN)
com.avast TCP [::1]:12110 (LISTEN)
com.avast TCP 127.0.0.1:12143 (LISTEN)
com.avast TCP [::1]:12143 (LISTEN)
com.avast TCP 127.0.0.1:12995 (LISTEN)
com.avast [::1]:12995 (LISTEN)
com.avast 127.0.0.1:12993 (LISTEN)
com.avast [::1]:12993 (LISTEN)
Google TCP 127.0.0.1:34013 (LISTEN)
これは、北朝鮮に接続しているかどうかを確認するのに役立ちます。;-)
netstat -p tcp | grep $PORT
Mac OS Xでのnetstatは、PIDを表示することができないため、PIDを表示しません。