我想找到一些在指定端口上运行的进程80
我跑了
fuser 80/tcp
却一无所获
进而
netstat -tulpn|grep "80\|PID"
并得到
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 :::80 :::* LISTEN -
PID 是-
那么这是什么-
意思呢?谢谢!
答案1
简短的回答是:您需要 才能root
查看所有绑定。
再长一点:
netstat 的手册页给出了一个并非在所有情况下都需要的提示:
PID/程序名称 斜杠分隔的拥有套接字的进程 ID (PID) 和进程名称对。
--program
导致包含此列。您还需要超级用户权限才能查看不属于您的套接字的此信息。
因此,作为普通用户,您只能看到哪个进程监听该端口(如果您拥有该端口):
$ netcat -l -p 1234 &
$ netstat -tulpn
[...]
tcp 0 0 0.0.0.0:1234 0.0.0.0:* LISTEN 8044/netcat
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
[...]
您可以看到“您的” netcat 进程,但看不到谁在监听端口 22。
我有一种感觉,原因在于您无法访问/proc/[PID]/fd
非所有者进程。在那里,您可以找到进程[PID]
当前已打开的文件描述符,而在 Un*x 中(几乎)所有东西都是文件……套接字也是如此。
在我的示例中sshd
,pid 3934 监听端口 22(令人惊讶的是):
$ whoami
user
$ ls -l /proc/3934/fd
/bin/ls: cannot open directory /proc/3934/fd: Permission denied
$ sudo ls -l /proc/3934/fd
total 0
lrwx------ 1 root root 64 Apr 24 16:33 0 -> /dev/null
lrwx------ 1 root root 64 Apr 24 16:33 1 -> /dev/null
lrwx------ 1 root root 64 Apr 24 16:33 2 -> /dev/null
lrwx------ 1 root root 64 Apr 24 16:33 3 -> socket:[10481]
lrwx------ 1 root root 64 Apr 24 16:33 4 -> socket:[10483]
(第二个套接字绑定到我在 netstat 输出中省略的 IPv6 地址。)