我想知道嵌入式linux中哪些进程使用哪些端口。由于它是简单的嵌入式linux,因此没有netstat、lsof等网络命令行。 (仅存在基本命令行,如 cat、cp、echo 等)。
部分解决方案似乎是使用“cat /proc/net/tcp”和“cat /proc/net/udp”命令行。然而,我不确定这些命令行的打印列表是否显示所有正在使用的端口, 和该列表不显示哪个进程绑定到某个端口。
任何意见将不胜感激。
答案1
您应该能够找到/proc/net/tcp
和中的所有开放端口/proc/net/udp
。每个文件都有一个inode
列,可用于查找拥有该套接字的进程。
获得索引节点号后,您可以运行 ls 命令,例如ls -l /proc/*/fd/* | grep socket:.$INODE
查找使用该套接字的进程。如果一个进程为不同的线程设置了不同的文件描述符,您可能需要扩展该命令ls -l /proc/*/task/*/fd/* | grep socket:.$INODE
才能找到所有文件描述符。
答案2
要查找任何端口的 INODES,请执行以下命令
PORT=8080;cat /proc/net/* | awk -F " " '{print $2 ":" $10 }' | grep -i `printf "%x:" $PORT` | awk -F ":" '{print "PORT=" $2 ", INODE=" $3 }'
使用上述命令输出中的任何 INODE 查找关联的 PID,如下所示
find /proc -lname "socket:\[$INODE\]" 2> /dev/null | head -n 1 | awk -F "/" '{print "PID="$3}'
这里$INODE是任何INODE的值
在单行命令中,我们可以检查是否有任何端口打开并与任何 PID 关联,如下所示
PORT=8080;find /proc -lname "socket:\[$(cat /proc/net/* | awk -F " " '{print $2 ":" $10 }' | grep -i `printf "%x:" $PORT` | head -n 1 | awk -F ":" '{print $3}')\]" 2> /dev/null | head -n 1 | awk -F "/" '{print "PID="$3}'