启动应用总是失败,被告知端口被占用怎么办,首先我们得找到是哪一个进程占用了该端口,通常我们使用lsof命令或netstat命令查看端口占用进程。
1.首先介绍一下lsof命令如何使用
终端中执行下面的命令可以查看lsof帮助信息:
lsof -h
如果提示下面的错误,说明当前设备未安装lsof软件包,需要先安装lsof软件包:
-bash: lsof: command not found
Debian/Ubuntu系统通过下面的命令安装lsof:
sudo apt-get install lsof
Centos系统通过下面的命令安装lsof:
sudo yum install lsof
确认当前设备已经安装好lsof软件包后我们执行下面的命令查看当前设备所有端口使用情况:
lsof -i //如果无任何信息输出请使用sudo lsof -i命令
程序输出如下图:
lsof输出信息说明:
- COMMAND:进程的名称
- PID:进程标识符
- USER:进程所有者
- FD:文件描述符,应用程序通过文件描述符识别该文件
- TYPE:文件类型,如DIR、REG等
- DEVICE:指定磁盘的名称
- SIZE:文件的大小
- NODE:索引节点
- NAME:打开文件的确切名称
上面的lsof -i命令是输出当前设备所有的进程信息,当后台进程比较多时,输出的信息也非常的多,但在实际使用过程中大多数时候我们只想查看某一个端口的占用进程,可以通过下面的命令实现:
sudo lsof -i:22 //将22替换为你想查看的端口号
结果如下图所示:
2.介绍完了lsof命令我们接着简单说下可以实现同样查看进程占用功能的netstat命令
通过执行netstat -h 可以查看一下该命令的帮助信息
通过查看其帮助信息我们可以看到该命令可以下面这些参数:
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。
在终端中执行netstat同样可以像lsof命令一样输出当前设备所有的端口占用进程
下面重点说一下通过netstat命令查找指定商品号进程的办法
命令格式:netstat -anp | grep 端口号
使用netstat命令时我们通常会带上anp这几个参数,当然你也可以根据实际需要带上其他参数,每一个参数的说明可以看下上面的内容或者在终端输入netstat -h 命令查阅。
我们来实际操作一下,在终端中执行下面的命令:
sudo netstat -anp | grep 22
运行结果如下图所示: