プログラムがマシンのポート8000
でリッスンしていると思われます。
次のコマンドを実行すると、このエラーが発生します。
> python -m SimpleHTTPServer
# Lots of python error
socket.error: [Errno 98] Address already in use
別のポートを使用する場合(8000
がデフォルト)、Webサーバーは正常に動作します。
コマンドラインからwget localhost:8000
を実行すると、404 Not Found
が返されます。
ポート8000
でリッスンしているプログラムを見つけ、そこからそのプログラムが構成されている場所を見つけるために、私は何ができますか(または使用可能なツール)?
ターミナルを開き、次のように入力します
lsof -i :8000
そのコマンドは、そのポートで使用されているアプリケーションをPIDでリストします。 (特定のプロセスに対する許可がない可能性があるため、Sudo
を介して結果が実行されない場合。)
たとえば、ポート8000(python3 -m http.server
)の場合:
$ lsof -i :8000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
python3 3269 user 3u IPv4 1783216 0t0 TCP *:8000 (LISTEN)
ポート22(SSH):
$ Sudo lsof -i :22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 998 root 3u IPv4 1442116 0t0 TCP *:ssh (LISTEN)
sshd 998 root 4u IPv6 1442118 0t0 TCP *:ssh (LISTEN)
お役に立てば幸いです。
Netstatを使用して、どのプロセスがどのポートでリッスンしているかを確認できます。
このコマンドを使用して、詳細を確認できます。
Sudo netstat -peanut
ポート8000でリッスンしているものを正確に知る必要がある場合は、これを使用できます。
Sudo netstat -peanut | grep ":8000 "
Netstatから隠れるプロセスはありません。
@ 33833で答えを詳しく説明するには、次のような非常に詳細な情報を入手できます。
$ lsof -i :8000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
squid3 1289 proxy 15u IPv6 14810490 0t0 TCP *:8000 (LISTEN)
$ ps -fp 1289
UID PID PPID C STIME TTY TIME CMD
proxy 1289 1 0 09:48 ? 00:00:00 /usr/sbin/squid3 -N -f /etc/squid-deb-proxy/squid-deb-proxy.conf
Squidがプロセスであることがすぐにわかりますが、実際にsquid-deb-proxy
がポートを占有しています。
Javaアプリの別の良い例:
$ lsof -i :4242
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Java 3075 root 86u IPv4 12019 0t0 TCP *:4242 (LISTEN)
$ ps -fp 3075
UID PID PPID C STIME TTY TIME CMD
root 3075 1 15 May24 ? 3-16:07:25 /usr/local/crashplan/jre/bin/Java -Dfile.encoding=UTF-8 -Dapp=CrashPlanService -DappBaseName=CrashPl
lsof
(LiSt Open Files)で、それがJavaであることがわかります。 PIDを使用してps
コマンドを実行すると、CrashPlanであることがすぐにわかります。
socklist
パッケージのprocinfo
を使用する別の方法:
記述
socklist
は、開いているすべてのソケット、列挙型、ポート、inode、uid、pid、fd、およびそれが属するプログラムのリストを提供するPerlスクリプトです。
Sudo socklist
type port inode uid pid fd name
tcp 53 28749 0 1721 5 dnsmasq
tcp 631 29190 0 2433 11 cupsd
tcp 42376 82230 1000 1345 84 firefox
tcp 49048 71686 1000 1345 67 firefox
tcp 41248 81672 1000 1345 119 firefox
tcp 54676 84558 1000 1345 73 firefox
udp 56107 66258 0 3268 20 dhclient
udp 40804 17857 107 679 14 avahi-daemon
udp 53 28748 0 1721 4 dnsmasq
udp 68 67427 0 3268 6 dhclient
udp 631 19692 0 765 8 cups-browsed
udp 5353 17855 107 679 12 avahi-daemon
Nmapを使用できます。
PCでどのポートが開いているかを知ることは非常に重要です。これはLinuxだけでなく、他のオペレーティングシステムにも役立ちます。Linuxには、開いているポートをチェックするツールがたくさんあります。最も一般的なのはnmapです。コマンドラインツールだけでなく、グラフィカルなフロントエンドも存在します。1
それをインストールするには、単に押す Ctrl+Alt+T キーボードでターミナルを開きます。開いたら、次のコマンドを実行します。
Sudo apt-get install nmap
Nmapおよびその他のユーティリティの詳細については、 Here にアクセスしてください。
1ソース: garron.me