port やプロセスの状況を確認するコマンドレシピ集
イントロ
毎回忘れてググるやつをまとめました。
巷では Advent Calendar などが流行っている時期ですが、そんなことはいざ知れず、空気を読まずに普通に投稿します。
ただの netstat
, lsof
コマンドの使い方をまとめたもの。
- イントロ
- 指定した port 番号から、それを使用している process を特定する
- 指定の process から、どの port を使用しているかを確認する
- 指定の process が、どのファイルを開いているかを確認する
- 開いているファイルから、プロセスを確認する
- ローカルで待ち受けている port 一覧
- 指定の port で process が待ち受けてるかどうか
- 参考
指定した port 番号から、それを使用している process を特定する
port -> process
の確認
lsof
は環境によってはデフォルトで入ってなかったりするので、その場合は netstat
を使う。
(こういうケースがあるから覚えにくい)
lsof -i:{port}
$ lsof -i:80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ruby 41533 argerich 23u IPv6 0xabbad0913f4fe95 0t0 TCP localhost:hbci (LISTEN) ruby 41533 argerich 24u IPv4 0xabbad09116bd095 0t0 TCP localhost:hbci (LISTEN)
netstat -anp | grep LISTEN
(linux only)
(gentoo
の man netstat
で確認)
-a
は--all
の略で、全ての socket を表示-n
は--numeric
の略で、host や port を数字で表示-p
は--program
で、PID や実行プログラム名を表示する- (
-t
は--tcp
の略で、tcp で絞り込む) - (
-u
は--udp
の略で、udp で絞り込む)
2614a2595864 app # netstat -anpt | grep LISTEN tcp 0 0 127.0.0.11:43731 0.0.0.0:* LISTEN -
指定の process から、どの port を使用しているかを確認する
process -> port
の確認
lsof -n -P -p {pid} | grep LISTEN
-n
は network や host の名前解決を行わない-P
は port 名の変換を行わず、数字で表示する-p
は pid で絞り込む
% lsof -P -n -p 206 | grep LISTEN ruby 206 argerich 22u IPv6 0xabbad0913f49e75 0t0 TCP [::1]:3000 (LISTEN) ruby 206 argerich 23u IPv4 0xabbad09148b2cb5 0t0 TCP 127.0.0.1:3000
指定の process が、どのファイルを開いているかを確認する
process -> fd
の確認
lsof -p {port}
$ lsof -p 41533 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ruby 41533 argerich cwd DIR 1,4 952 15380291 /Users/argerich/dev/rails-showcase ruby 41533 argerich txt REG 1,4 3245556 24795779 /Users/argerich/.rbenv/versions/2.4.1/bin/ruby ruby 41533 argerich txt REG 1,4 279856 27355077 /System/Library/CoreServices/Encodings/libJapaneseConverter.dylib ruby 41533 argerich txt REG 1,4 13280 24796569 ... ruby 41533 argerich 4 PIPE 0xabbad090c986855 16384 ->0xabbad0907820f15 ruby 41533 argerich 5 PIPE 0xabbad090c986615 16384 ->0xabbad090c985f55 ruby 41533 argerich 6 PIPE 0xabbad090c985f55 16384 ->0xabbad090c986615 ruby 41533 argerich 7w REG 1,4 80408171 15423000 /Users/argerich/dev/rails-showcase/log/development.log ruby 41533 argerich 8 PIPE 0xabbad0907820e55 16384 ->0xabbad090c985e95 ruby 41533 argerich 9u IPv4 0xabbad0906b17285 0t0 TCP 192.168.0.3:60774->54.239.96.26:https (CLOSED) ruby 41533 argerich 10u unix 0xabbad09122853dd 0t0 ->0xabbad090712d18d ruby 41533 argerich 11 PIPE 0xabbad09078206d5 16384 ->0xabbad090c9863d5 ruby 41533 argerich 12u systm 0t0
開いているファイルから、プロセスを確認する
fd -> process
の確認
lsof
lsof log/development.log COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ruby 206 argerich 7w REG 1,4 2037258433 26785609 log/development.log
fuser -u
-u
は--user
の略で、user 名を付与する-v
は--verbose
の略で、詳細を表示する(linux 限定)
% fuser -u log/development.log log/development.log: 71941(argerich)
4b43c8ebf178 app # fuser -vu /bin/bash USER PID ACCESS COMMAND /bin/bash: root 1 ....m (root)bash
ローカルで待ち受けている port 一覧
nmap -v
-v
は verbose level を上げる。詳細を表示する、と思って良いのかも-vv
もある
- host 部分の指定は
localhost
以外にも当然可能- 悪用厳禁
% nmap -v localhost Starting Nmap 7.12 ( https://nmap.org ) at 2017-12-13 21:44 JST Initiating Ping Scan at 21:44 Scanning localhost (127.0.0.1) [2 ports] Completed Ping Scan at 21:44, 0.00s elapsed (1 total hosts) Initiating Connect Scan at 21:44 Scanning localhost (127.0.0.1) [1000 ports] Discovered open port 8080/tcp on 127.0.0.1 Discovered open port 143/tcp on 127.0.0.1 Discovered open port 80/tcp on 127.0.0.1 Discovered open port 110/tcp on 127.0.0.1 Discovered open port 3000/tcp on 127.0.0.1 Discovered open port 3001/tcp on 127.0.0.1 Discovered open port 3128/tcp on 127.0.0.1 Discovered open port 5432/tcp on 127.0.0.1 LOG: could not receive data from client: Connection reset by peer LOG: incomplete startup packet Completed Connect Scan at 21:44, 5.59s elapsed (1000 total ports) Nmap scan report for localhost (127.0.0.1) Host is up (0.00038s latency). Other addresses for localhost (not scanned): ::1 Not shown: 963 closed ports, 29 filtered ports PORT STATE SERVICE 80/tcp open http 110/tcp open pop3 143/tcp open imap 3000/tcp open ppp 3001/tcp open nessus 3128/tcp open squid-http 5432/tcp open postgresql 8080/tcp open http-proxy Read data files from: /Users/argerich/.homebrew/bin/../share/nmap Nmap done: 1 IP address (1 host up) scanned in 5.63 seconds
netstat -ant | grep LISTEN | grep "127.0.0.1"
一覧を出して grep してるだけ。
(nmap
と結果が違っている理由がよくわからないけど)
% netstat -ant | grep LISTEN | grep "127.0.0.1" tcp4 0 0 127.0.0.1.3000 *.* LISTEN tcp4 0 0 127.0.0.1.5432 *.* LISTEN tcp4 0 0 127.0.0.1.17603 *.* LISTEN tcp4 0 0 127.0.0.1.17600 *.* LISTEN tcp4 0 0 127.0.0.1.6263 *.* LISTEN tcp4 0 0 127.0.0.1.6258 *.* LISTEN tcp4 0 0 127.0.0.1.6379 *.* LISTEN
指定の port で process が待ち受けてるかどうか
nc -vz {host} {port}
localhost
の部分は、別の host にも置き換えられるので、外部から叩いて確認する事もできる
% nc -vz localhost 3306 found 0 associations found 1 connections: 1: flags=82<CONNECTED,PREFERRED> outif lo0 src ::1 port 61086 dst ::1 port 3306 rank info not available TCP aux info available Connection to localhost port 3306 [tcp/mysql] succeeded!
% nc -vz localhost 1119 nc: connectx to localhost port 1119 (tcp) failed: Connection refused nc: connectx to localhost port 1119 (tcp) failed: Connection refused