我们在运维服务器的时候,经常会遇到安装某个软件的时候导致无法运行是因为和其他的软件占用同一个端口。于是我们处理的办法是找到这个冲突的端口软件,然后是选择更换端口还是禁止掉对方使用的软件。这里我们需要用到查看端口是否被占用的命令,我们如何解决和查看的呢?
1、netstat命令
netstat -tln | grep 8080
比如用这个命令可以用来检查8080端口是否被占用。
语法
netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]
参数
-a或--all:显示所有连线中的Socker。
-A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址。
-c或--continuous:持续列出网络状态。
-C或--cache:显示路由器配置的快取信息。
-e或--extend:显示网络其他相关信息。
-F或--fib:显示路由缓存。
-g或--groups:显示多重广播功能群组组员名单。
-h或--help:在线帮助。
-i或--interfaces:显示网络界面信息表单。
-l或--listening:显示监控中的服务器的Socket。
-M或--masquerade:显示伪装的网络连线。
-n或--numeric:直接使用IP地址,而不通过域名服务器。
-N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称。
2、lsof
lsof -i:8000
用lsof查看8080端口是否被占用。
实例:
lsof abc.txt 显示开启文件abc.txt的进程。
lsof -i :22 显示22端口现在运行什么程序。
lsof -c abc 显示abc进程现在打开的文件。
lsof -g gid 显示归属gid的进程情况。
lsof +d /usr/local/ 显示目录下被进程开启的文件。
lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长。
lsof -d 4 显示使用fd为4的进程。
lsof -i 用以显示符合条件的进程情况。
lsof -p 12 看进程号为12的进程打开了哪些文件。
lsof +|-r [t] 控制lsof不断重复执行,缺省是15s刷新。
lsof -r,lsof会永远不断的执行,直到收到中断信号。
lsof +r,lsof会一直执行,直到没有档案被显示。
lsof -s 列出打开文件的大小,如果没有大小,则留下空白。
lsof -u username 以UID,列出打开的文件。
3、ps
ps -ef|grep ssh
这里我们可以查看指定进程SSH的端口占用。
ps aux | egrep ‘(nginx|python)’
查看Nginx的占用和Python的占用。
参数:
a 显示所有进程。
-a 显示同一终端下的所有程序。
-A 显示所有进程。
c 显示进程的真实名称。
-N 反向选择。
-e 等于“-A”。
e 显示环境变量。
f 显示程序间的关系。
-H 显示树状结构。
r 显示当前终端的进程。
T 显示当前终端的所有程序。
u 指定用户的所有进程。
-au 显示较详细的资讯。
-aux 显示所有包含其他使用者的行程。
-C<命令> 列出指定命令的状况。
–lines<行数> 每页显示的行数。
–width<字符数> 每页显示的字符数。
–help 显示帮助信息。
–version 显示版本显示。
如果我们看到有进程需要关闭可以用kill命令。
kill -9 PID
kill参数:
-1 (HUP) 重新加载进程。
-9 (KILL) 杀死一个进程。
-15 (TERM) 正常停止一个进程。
-KILL 强制杀死进程。